- fixed call() params. now includes self
[plcapi.git] / PLC / Methods / AddPersonKey.py
index 3749ecd..3c7fc97 100644 (file)
@@ -3,9 +3,9 @@ from PLC.Method import Method
 from PLC.Parameter import Parameter, Mixed
 from PLC.Keys import Key, Keys
 from PLC.Persons import Person, Persons
 from PLC.Parameter import Parameter, Mixed
 from PLC.Keys import Key, Keys
 from PLC.Persons import Person, Persons
-from PLC.Auth import PasswordAuth
+from PLC.Auth import Auth
 
 
-can_update = lambda (field, value): field not in ['key_id']
+can_update = lambda (field, value): field in ['key_type','key']
 
 class AddPersonKey(Method):
     """
 
 class AddPersonKey(Method):
     """
@@ -21,7 +21,7 @@ class AddPersonKey(Method):
     key_fields = dict(filter(can_update, Key.fields.items()))
 
     accepts = [
     key_fields = dict(filter(can_update, Key.fields.items()))
 
     accepts = [
-        PasswordAuth(),
+        Auth(),
         Mixed(Person.fields['person_id'],
               Person.fields['email']),
         key_fields
         Mixed(Person.fields['person_id'],
               Person.fields['email']),
         key_fields
@@ -29,19 +29,21 @@ class AddPersonKey(Method):
 
     returns = Parameter(int, 'New key_id (> 0) if successful')
 
 
     returns = Parameter(int, 'New key_id (> 0) if successful')
 
-    event_type = 'Add'
-    object_type = 'Key'
-    object_ids = []
+    object_type = 'Person'
+
 
     def call(self, auth, person_id_or_email, key_fields):
         key_fields = dict(filter(can_update, key_fields.items()))
 
         # Get account details
 
     def call(self, auth, person_id_or_email, key_fields):
         key_fields = dict(filter(can_update, key_fields.items()))
 
         # Get account details
-        persons = Persons(self.api, [person_id_or_email]).values()
+        persons = Persons(self.api, [person_id_or_email])
         if not persons:
             raise PLCInvalidArgument, "No such account"
         person = persons[0]
 
         if not persons:
             raise PLCInvalidArgument, "No such account"
         person = persons[0]
 
+        if person['peer_id'] is not None:
+            raise PLCInvalidArgument, "Not a local account"
+
        # If we are not admin, make sure caller is adding a key to their account
         if 'admin' not in self.caller['roles']:
             if person['person_id'] != self.caller['person_id']:
        # If we are not admin, make sure caller is adding a key to their account
         if 'admin' not in self.caller['roles']:
             if person['person_id'] != self.caller['person_id']:
@@ -51,6 +53,9 @@ class AddPersonKey(Method):
         key.sync(commit = False)
         person.add_key(key, commit = True)
 
         key.sync(commit = False)
         person.add_key(key, commit = True)
 
-        self.object_ids = [person['person_id'], key['key_id']]
+        # Logging variables
+       self.object_ids = [person['person_id'], key['key_id']]
+       self.message = 'Key %d added to person %d' % \
+               (key['key_id'], person['person_id'])
 
         return key['key_id']
 
         return key['key_id']