def register_new_user(user_name, email, password, **kwd): """Utility method for registering a new user. Useful for creating the first admin user. Returns the newly-created user. Can pass a `user_model` parameter to use a different User model. """ user_model = import_class(kwd.pop("user_model", User)) unique_properties = ["email"] user_data = user_model.create_user(user_name, unique_properties, password_raw=password, email=email, **kwd) if not user_data[0]: raise ValueError( 'Unable to register user - the username "%s" or email "%s" is already registered' % (user_name, email) ) return user_data[1]
def register_new_user(user_name, email, password, **kwd): """Utility method for registering a new user. Useful for creating the first admin user. Returns the newly-created user. Can pass a `user_model` parameter to use a different User model. """ user_model = import_class(kwd.pop('user_model', User)) unique_properties = ['email'] user_data = user_model.create_user( user_name, unique_properties, password_raw=password, email=email, **kwd ) if not user_data[0]: raise ValueError('Unable to register user - the username "%s" or email "%s" is already registered' % (user_name, email)) return user_data[1]
class UserRESTHandlerClass(BaseRESTHandler): model = import_class(kwd.get('user_model', User)) email_as_username = kwd.get('email_as_username', False) admin_only_user_registration = kwd.get('admin_only_user_registration', False) user_details_permission = kwd.get('user_details_permission', PERMISSION_OWNER_USER) verify_email_address = kwd.get('verify_email_address', False) verification_email = kwd.get('verification_email', None) verification_successful_url = kwd.get('verification_successful_url', None) verification_failed_url = kwd.get('verification_failed_url', None) reset_password_url = kwd.get('reset_password_url', None) reset_password_email = kwd.get('reset_password_email', None) user_policy_callback = [kwd.get('user_policy_callback', None)] send_email_callback = [kwd.get('send_email_callback', None)] # Wrapping in a list so the function won't be turned into a bound method allow_login_for_non_verified_email = kwd.get('allow_login_for_non_verified_email', True) # Validate arguments (we do this at this stage in order to raise exceptions immediately rather than while the app is running) if (model != User) and (User not in model.__bases__): raise ValueError('The provided user_model "%s" does not inherit from rest_gae.users.User class' % (model)) if verify_email_address and not verification_email: raise ValueError('Must set "verification_email" when "verify_email_address" is True') if verification_email and set(verification_email.keys()) != set(['sender', 'subject', 'body_text', 'body_html']): raise ValueError('"verification_email" must include all of the following keys: sender, subject, body_text, body_html') if verify_email_address and not verification_successful_url: raise ValueError('Must set "verification_successful_url" when "verify_email_address" is True') if verify_email_address and not verification_failed_url: raise ValueError('Must set "verification_failed_url" when "verify_email_address" is True') if verify_email_address and not reset_password_url: raise ValueError('Must set "reset_password_url" when "verify_email_address" is True') if verify_email_address and not reset_password_email: raise ValueError('Must set "reset_password_email" when "verify_email_address" is True') if reset_password_email and set(reset_password_email.keys()) != set(['sender', 'subject', 'body_text', 'body_html']): raise ValueError('"reset_password_email" must include all of the following keys: sender, subject, body_text, body_html') permissions = { 'GET': PERMISSION_ANYONE, 'PUT': PERMISSION_OWNER_USER, 'DELETE': PERMISSION_OWNER_USER, 'POST': PERMISSION_ANYONE } # Used by get_response method when building the HTTP response header 'Access-Control-Allow-Methods' def __init__(self, request, response): self.initialize(request, response) self.send_email_callback = self.send_email_callback[0] def rest_method_wrapper(func): """Wraps GET/POST/PUT/DELETE methods and adds standard functionality""" def inner_f(self, model_id): # We make sure the auth session store is using the proper user model (we can't rely on the user initializing it from outside the library) self.auth.store.user_model = self.model method_name = func.func_name.upper() try: # Call original method if model_id: model_id = model_id[1:] # Get rid of '/' at the beginning if model_id == 'me': # 'me' is shorthand for the currently logged-in user if not self.user: # User tried to retrieve information about himself without being logged-in raise self.unauthorized() model = self.user elif (method_name == 'POST' and model_id in ['login', 'reset']) or (method_name == 'GET' and model_id == 'verify'): model = model_id else: model = self._model_id_to_model(model_id) return func(self, model) else: return func(self, None) except RESTException, exc: return self.error(exc) return inner_f