def suspend_acct(request): """Reset a user account to enable them to change their password""" params = request.params user = request.user # we need to get the user from the email email = params.get('email', None) if email is None and hasattr(request, 'json_body'): # try the json body email = request.json_body.get('email', None) if user is None and email is None: request.response.status_int = 406 return _api_response(request, { 'error': "Please submit an email address", }) if user is None and email is not None: user = UserMgr.get(email=email) if user is None: request.response.status_int = 404 return _api_response(request, { 'error': "Please submit a valid address", 'email': email }) # check if we've already gotten an activation for this user if user.activation is not None: request.response.status_int = 406 return _api_response(request, { 'error': """You've already marked your account for reactivation. Please check your email for the reactivation link. Make sure to check your spam folder.""", 'username': user.username, }) # mark them for reactivation user.reactivate("FORGOTTEN") # log it AuthLog.reactivate(user.username) # and then send an email notification # @todo the email side of things settings = request.registry.settings msg = ReactivateMsg(user.email, "Activate your account", settings) msg.send({ 'url': request.route_url( 'reset', username=user.username, reset_key=user.activation.code), 'username': user.username }) return _api_response(request, { 'message': """Your account has been marked for reactivation. Please check your email for instructions to reset your password.""", })
def account_activate(request): """Reset a user after being suspended :param username: required to know what user we're resetting :param activation: code needed to activate :param password: new password to use for the user """ params = request.params username = params.get('username', None) activation = params.get('code', None) password = params.get('password', None) new_username = params.get('new_username', None) if username is None and activation is None and password is None: # then try to get the same fields out of a json body json_body = request.json_body username = json_body.get('username', None) activation = json_body.get('code', None) password = json_body.get('password', None) new_username = json_body.get('new_username', None) if not UserMgr.acceptable_password(password): request.response.status_int = 406 return _api_response(request, { 'error': "Come on, pick a real password please", }) res = ActivationMgr.activate_user(username, activation, password) if res: # success so respond nicely AuthLog.reactivate(username, success=True, code=activation) # if there's a new username and it's not the same as our current # username, update it if new_username and new_username != username: try: user = UserMgr.get(username=username) user.username = new_username except IntegrityError, exc: request.response.status_int = 500 return _api_response(request, { 'error': 'There was an issue setting your new username', 'exc': str(exc) }) return _api_response(request, { 'message': "Account activated, please log in.", 'username': username, })
def reset(request): """Once deactivated, allow for changing the password via activation key""" rdict = request.matchdict params = request.params message = '' # This is an initial request to show the activation form. username = rdict.get('username', None) activation_key = rdict.get('reset_key', None) user = ActivationMgr.get_user(username, activation_key) if user is None: # just 404 if we don't have an activation code for this user raise HTTPNotFound() if 'code' in params: # This is a posted form with the activation, attempt to unlock the # user's account. username = params.get('username', None) activation = params.get('code', None) password1 = params.get('password1', None) password2 = params.get('password2', None) new_username = params.get('new_username', None) res = ActivationMgr.activate_user(username, activation, password1) if res: # success so respond nicely AuthLog.reactivate(username, success=True, code=activation) # if there's a new username and it's not the same as our current # username, update it if new_username and new_username != username: try: user = UserMgr.get(username=username) user.username = new_username except IntegrityError, exc: message = 'There was an issue setting your new username. Please try again.' else: AuthLog.reactivate(username, success=False, code=activation) message = 'There was an issue attempting to activate this account.' if message is not '': return { 'message': message, 'user': user } else: # log the user out to have them re-login with the new password headers = forget(request) return HTTPFound(location=route_url('login', request), headers=headers)
def signup_process(request): """Process the signup request If there are any errors drop to the same template with the error information. """ if request.user and request.user.username: print("user logged in") return HTTPFound(location=request.route_url('user_account', username=request.user.username)) else: signupForm = SignupForm(request.POST) if request.method == 'POST' and signupForm.validate(): message = 'Thank you for signing up from: ' + str(signupForm.email.data) + '\nPlease check your email.' request.session.flash(message) #return HTTPFound(location=request.route_url('signup_process2')) new_user = UserMgr.signup_user(signupForm.email.data, 'signup') print "new_user: "******"Enable your account", settings, request.route_url( 'reset', username=new_user.username, reset_key=new_user.activation.code ) ) # And let the user know they're signed up. return {'signup_success_message': message, 'form':signupForm, } return {'form':signupForm, 'action':request.matchdict.get('action'), }
def reset(request): """Once deactivated, allow for changing the password via activation key""" rdict = request.matchdict params = request.params # This is an initial request to show the activation form. username = rdict.get('username', None) activation_key = rdict.get('reset_key', None) user = ActivationMgr.get_user(username, activation_key) if user is None: # just 404 if we don't have an activation code for this user raise HTTPNotFound() if 'code' in params: # This is a posted form with the activation, attempt to unlock the # user's account. username = params.get('username', None) activation = params.get('code', None) password = params.get('new_password', None) new_username = params.get('new_username', None) error = None if not UserMgr.acceptable_password(password): # Set an error message to the template. error = "Come on, pick a real password please." else: res = ActivationMgr.activate_user(username, activation, password) if res: # success so respond nicely AuthLog.reactivate(username, success=True, code=activation) # if there's a new username and it's not the same as our current # username, update it if new_username and new_username != username: try: user = UserMgr.get(username=username) user.username = new_username except IntegrityError, exc: error = 'There was an issue setting your new username' else: AuthLog.reactivate(username, success=False, code=activation) error = 'There was an issue attempting to activate this account.'
def invite_user(request): """Invite a new user into the system. :param username: user that is requested we invite someone :param email: email address of the new user """ params = request.params email = params.get('email', None) user = request.user if not email: # try to get it from the json body email = request.json_body.get('email', None) if not email: # if still no email, I give up! request.response.status_int = 406 return _api_response(request, { 'username': user.username, 'error': "Please submit an email address" }) # first see if the user is already in the system exists = UserMgr.get(email=email) if exists: request.response.status_int = 406 return _api_response(request, { 'username': exists.username, 'error': "This user is already a user!" }) new_user = user.invite(email) if new_user: LOG.error(new_user.username) # then this user is able to invite someone # log it AuthLog.reactivate(new_user.username) # and then send an email notification # @todo the email side of things settings = request.registry.settings msg = InvitationMsg(new_user.email, "Enable your account", settings) msg.send( request.route_url( 'reset', username=new_user.username, reset_key=new_user.activation.code)) return _api_response(request, { 'message': 'You have invited: ' + new_user.email }) else: # you have no invites request.response.status_int = 406 return _api_response(request, { 'username': user.username, 'error': "You have no invites left at this time." })
try: user = UserMgr.get(username=username) user.username = new_username except IntegrityError, exc: request.response.status_int = 500 return _api_response(request, { 'error': 'There was an issue setting your new username', 'exc': str(exc) }) return _api_response(request, { 'message': "Account activated, please log in.", 'username': username, }) else: AuthLog.reactivate(username, success=False, code=activation) request.response.status_int = 500 return _api_response(request, { 'error': "There was an issue attempting to activate this account.", }) @view_config(route_name="api_user_invite", renderer="jsonp") @api_auth('api_key', UserMgr.get) def invite_user(request): """Invite a new user into the system. :param username: user that is requested we invite someone :param email: email address of the new user """
def signup(request): """Process the signup request If there are any errors drop to the same template with the error information. """ message = '' # import pdb; pdb.set_trace() if request.user and request.user.username: print("user logged in") return HTTPFound(location=request.route_url('user_account', username=request.user.username)) else: if request.method == 'POST': email = request.params['email'] # password = request.params['password'] LOG.debug(email) auth = UserMgr.get(email=email) if auth and auth.activated: return { 'email': '', 'message': 'A user with this email already exists.', } else: if auth and auth.activated is not True: message = 'Re-sending another signup to: ' + str(email) + '\nPlease check your email.' else: message = 'Thank you for signing up from: ' + str(email) + '\nPlease check your email.' request.session.flash(message) #return HTTPFound(location=request.route_url('signup_process2')) new_user = UserMgr.signup_user(email, 'signup') print "new_user: "******"Enable your account", settings, request.route_url( 'reset', username=new_user.username, reset_key=new_user.activation.code ) ) # And let the user know they're signed up. return {'message': message, 'email':email, } return {'email': '', 'message': message, }