def siteadmin_new(site_id): """ Create a new site_admin. """ siteobj = mmlib.get_site(SESSION, site_id) if siteobj is None: flask.abort(404, 'Site not found') form = login_forms.LostPasswordForm() if form.validate_on_submit(): site_admin = model.SiteAdmin() SESSION.add(site_admin) site_admin.site_id = siteobj.id form.populate_obj(obj=site_admin) try: SESSION.flush() flask.flash('Site Admin added') except SQLAlchemyError as err: # pragma: no cover # We cannot check this as there is no unique constraint in the # Site table. So the only situation where it could fail is a # failure at the DB server level itself. SESSION.rollback() flask.flash('Could not add Site Admin') APP.logger.debug('Could not add Site Admin') APP.logger.exception(err) SESSION.commit() return flask.redirect(flask.url_for('site_view', site_id=site_id)) return flask.render_template( 'site_admin_new.html', form=form, site=siteobj, )
def lost_password(): """ Method to allow a user to change his/her password assuming the email is not compromised. """ form = forms.LostPasswordForm() if form.validate_on_submit(): username = form.username.data user_obj = mirrormanager2.lib.get_user_by_username(SESSION, username) if not user_obj: flask.flash('Username invalid.', 'error') return flask.redirect(flask.url_for('auth_login')) elif user_obj.token: flask.flash( 'Invalid user, did you confirm the creation with the url ' 'provided by email? Or did you already ask for a password ' 'change?', 'error') return flask.redirect(flask.url_for('auth_login')) token = mirrormanager2.lib.id_generator(40) user_obj.token = token SESSION.add(user_obj) try: SESSION.commit() send_lostpassword_email(user_obj) flask.flash('Check your email to finish changing your password') except SQLAlchemyError as err: SESSION.rollback() flask.flash( 'Could not set the token allowing changing a password.', 'error') APP.logger.debug('Password lost change - Error setting token.') APP.logger.exception(err) return flask.redirect(flask.url_for('auth_login')) return flask.render_template( 'password_change.html', form=form, )