X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FUpdateKey.py;h=a1754ff752d754e4efcec229327da05c1d0b3b37;hb=fa0ae3939a782624e7289aadd3e192c01f1c3842;hp=58dfccb450c7b2e38cefe25cef88271bc9825a2a;hpb=ed7fa1ebf97ec2f88f18f8fa538e46c6ae9525c4;p=plcapi.git diff --git a/PLC/Methods/UpdateKey.py b/PLC/Methods/UpdateKey.py index 58dfccb..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'] @@ -20,11 +20,9 @@ class UpdateKey(Method): roles = ['admin', 'pi', 'tech', 'user'] key_fields = dict(filter(can_update, Key.fields.items())) - for field in key_fields.values(): - field.optional = True accepts = [ - PasswordAuth(), + Auth(), Key.fields['key_id'], key_fields ] @@ -35,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