class CachingUserAPI(object): """The public API to secure L{User}-related functionality. @param user: The L{User} to perform operations on behalf of. """ def __init__(self): self._api = UserAPI(factory=CachingAPIFactory()) def create(self, values, createPrivateNamespace=None): """See L{UserAPI.create}.""" return self._api.create(values, createPrivateNamespace) def delete(self, usernames): """See L{UserAPI.delete}.""" if isgenerator(usernames): usernames = list(usernames) cache = UserCache() for username in usernames: cache.clear(username) return self._api.delete(usernames) def get(self, usernames): """See L{UserAPI.get}.""" return self._api.get(usernames) def set(self, values): """See L{UserAPI.set}.""" cache = UserCache() for username, password, fullname, email, role in values: cache.clear(username) return self._api.set(values)
def createUser(username, password, fullname, email, role): """Create a new L{User}. @param username: A C{unicode} username for the user. @param password: A C{unicode} password in plain text for the user. The password will be hashed before being stored. @param fullname: A C{unicode} name for the user. @param email: The C{unicode} email address for the user. @param role: The L{Role} for the user. @return: A C{list} of C{(objectID, username)} 2-tuples for the new L{User}s. """ username = username.lower() users = UserAPI() result = users.create([(username, password, fullname, email)]) # Set the role with an update to ensure that the 'fluiddb/users/role' tag # value is set correctly. users.set([(username, None, None, None, role)]) try: transaction.commit() except: transaction.abort() raise return result