X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FUpdateKey.py;h=a21f591bd447b85ded9d70f81f9b3874f0374c49;hb=8c952d8a400d444d40b8613f0db25f997162f214;hp=58dfccb450c7b2e38cefe25cef88271bc9825a2a;hpb=ed7fa1ebf97ec2f88f18f8fa538e46c6ae9525c4;p=plcapi.git diff --git a/PLC/Methods/UpdateKey.py b/PLC/Methods/UpdateKey.py index 58dfccb..a21f591 100644 --- a/PLC/Methods/UpdateKey.py +++ b/PLC/Methods/UpdateKey.py @@ -1,8 +1,10 @@ +# $Id$ +# $URL$ 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 +22,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,11 +35,14 @@ 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" @@ -47,4 +50,8 @@ class UpdateKey(Method): key.update(key_fields) key.sync() + # Logging variables + self.event_objects = {'Key': [key['key_id']]} + self.message = 'key %d updated: %s' % \ + (key['key_id'], ", ".join(key_fields.keys())) return 1