X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FGetKeys.py;h=0451f454dd227471cba9cb87f05f83114b808c0d;hb=05cc869ac1b972416a371d02ded9f47bcaab8067;hp=910707b86340cc77590a50751f0fe6151800ea2e;hpb=1f8c38dd1357c93e4be8d94456b7274a591d2db4;p=plcapi.git diff --git a/PLC/Methods/GetKeys.py b/PLC/Methods/GetKeys.py index 910707b..0451f45 100644 --- a/PLC/Methods/GetKeys.py +++ b/PLC/Methods/GetKeys.py @@ -1,32 +1,43 @@ +# $Id$ +# $URL$ from PLC.Faults import * from PLC.Method import Method from PLC.Parameter import Parameter, Mixed +from PLC.Filter import Filter +from PLC.Persons import Person, Persons from PLC.Keys import Key, Keys from PLC.Auth import Auth class GetKeys(Method): """ - Return an array of structs containing details about keys. If - key_id_list is specified, only the specified keys will be queried. + Returns an array of structs containing details about keys. If + key_filter is specified and is an array of key identifiers, or a + struct of key attributes, only keys matching the filter will be + returned. If return_fields is specified, only the specified + details will be returned. Admin may query all keys. Non-admins may only query their own keys. """ - roles = ['admin', 'pi', 'user', 'tech'] + roles = ['admin', 'pi', 'user', 'tech', 'node'] accepts = [ Auth(), - [Key.fields['key_id']] + Mixed([Mixed(Key.fields['key_id'])], + Filter(Key.fields)), + Parameter([str], "List of fields to return", nullok = True) ] returns = [Key.fields] - def call(self, auth, key_ids = None): - # If we are not admin, make sure to only return our own keys - if 'admin' not in self.caller['roles']: - key_ids = set(key_ids).intersection(self.caller['key_ids']) - if not key_ids: - return [] - return Keys(self.api, key_ids).values() + def call(self, auth, key_filter = None, return_fields = None): + keys = Keys(self.api, key_filter, return_fields) + + # If we are not admin, make sure to only return our own keys + if isinstance(self.caller, Person) and \ + 'admin' not in self.caller['roles']: + keys = filter(lambda key: key['key_id'] in self.caller['key_ids'], keys) + + return keys