X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FUpdateKey.py;h=a1754ff752d754e4efcec229327da05c1d0b3b37;hb=d1a8f97dc9e36fc576e0bf135c6a336384a2adcc;hp=3527908437eb2fe2f781917b368ebbd53df8c4af;hpb=35e3fb10fe3bc63ec38c81e6ac0790b07efb91ea;p=plcapi.git diff --git a/PLC/Methods/UpdateKey.py b/PLC/Methods/UpdateKey.py index 3527908..a1754ff 100644 --- a/PLC/Methods/UpdateKey.py +++ b/PLC/Methods/UpdateKey.py @@ -2,7 +2,7 @@ from PLC.Faults import * from PLC.Method import Method from PLC.Parameter import Parameter, Mixed from PLC.Keys import Key, Keys -from PLC.Auth import PasswordAuth +from PLC.Auth import Auth can_update = lambda (field, value): field in \ ['key_type', 'key'] @@ -19,12 +19,12 @@ class UpdateKey(Method): roles = ['admin', 'pi', 'tech', 'user'] - update_fields = dict(filter(can_update, Key.fields.items())) + key_fields = dict(filter(can_update, Key.fields.items())) accepts = [ - PasswordAuth(), + Auth(), Key.fields['key_id'], - update_fields + key_fields ] returns = Parameter(int, '1 if successful') @@ -33,16 +33,23 @@ class UpdateKey(Method): key_fields = dict(filter(can_update, key_fields.items())) # Get key information - keys = Keys(self.api, [key_id]).values() + keys = Keys(self.api, [key_id]) if not keys: raise PLCInvalidArgument, "No such key" key = keys[0] + if key['peer_id'] is not None: + raise PLCInvalidArgument, "Not a local key" + if 'admin' not in self.caller['roles']: if key['key_id'] not in self.caller['key_ids']: raise PLCPermissionDenied, "Key must be associated with one of your accounts" key.update(key_fields) key.sync() - + + # Logging variables + self.object_ids = [key['key_id']] + self.message = 'key %d updated: %s' % \ + (key['key_id'], ", ".join(key_fields.keys())) return 1