X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FUpdateKey.py;h=a1754ff752d754e4efcec229327da05c1d0b3b37;hb=12d17e7f285289f67146404be7bfe8862daf731c;hp=7aa21cc77adcf07910e250c0de40863ed58d4290;hpb=c35e0c77f5db984597a3d6558aaf78ef6ed6846a;p=plcapi.git diff --git a/PLC/Methods/UpdateKey.py b/PLC/Methods/UpdateKey.py index 7aa21cc..a1754ff 100644 --- a/PLC/Methods/UpdateKey.py +++ b/PLC/Methods/UpdateKey.py @@ -2,7 +2,10 @@ 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'] class UpdateKey(Method): """ @@ -16,35 +19,37 @@ class UpdateKey(Method): roles = ['admin', 'pi', 'tech', 'user'] - can_update = lambda (field, value): field in \ - ['key_type', 'key'] - 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') def call(self, auth, key_id, key_fields): - # Make sure only valid fields are specified - if filter(lambda field: field not in self.update_fields, key_fields): - raise PLCInvalidArgument, "Invalid field specified" + 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" - assert key['person_id'] == self.caller['person_id'] 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