- remove is_blacklisted from fields that can be updated
authorMark Huang <mlhuang@cs.princeton.edu>
Wed, 11 Oct 2006 15:43:01 +0000 (15:43 +0000)
committerMark Huang <mlhuang@cs.princeton.edu>
Wed, 11 Oct 2006 15:43:01 +0000 (15:43 +0000)
PLC/Methods/UpdateKey.py

index e269a99..7aa21cc 100644 (file)
@@ -9,7 +9,7 @@ class UpdateKey(Method):
     Updates the parameters of an existing key with the values in
     key_fields.
 
-    Non admins may only update their own keys.
+    Non-admins may only update their own keys.
 
     Returns 1 if successful, faults otherwise.
     """
@@ -17,7 +17,7 @@ class UpdateKey(Method):
     roles = ['admin', 'pi', 'tech', 'user']
 
     can_update = lambda (field, value): field in \
-                 ['key_type', 'key', 'is_blacklisted', 'is_primary']
+                 ['key_type', 'key']
     update_fields = dict(filter(can_update, Key.fields.items()))
 
     accepts = [
@@ -29,18 +29,11 @@ class UpdateKey(Method):
     returns = Parameter(int, '1 if successful')
 
     def call(self, auth, key_id, key_fields):
-        
-       valid_fields = self.update_fields
-       # Remove admin only fields
-        if 'admin' not in self.caller['roles']:
-                for key in ['is_blacklisted']:
-                        valid_fields.remove(key)
-
        # Make sure only valid fields are specified
-       if filter(lambda field: field not in valid_fields, key_fields):
+       if filter(lambda field: field not in self.update_fields, key_fields):
             raise PLCInvalidArgument, "Invalid field specified"
 
-        # Get Key Information
+        # Get key information
         keys = Keys(self.api, [key_id]).values()
         if not keys:
             raise PLCInvalidArgument, "No such key"
@@ -48,7 +41,8 @@ class UpdateKey(Method):
 
         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 account"
+                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()