email = db.Column(db.String(255), nullable=False) # save the user of the invitee invited_by_user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # token used for registration page to identify user registering token = db.Column(db.String(100), nullable=False, server_default='') def password_validator(form, field): if len(field.data) < 8: raise wtforms.validators.ValidationError('Password must have at least 8 characters') # Setup Flask-User. Creating the UserManager will register all kinds of stuff, # such as routes for login, register, etc. db_adapter = flask_user.SQLAlchemyAdapter(database.sqla, User, UserInvitationClass=UserInvitation) user_manager = flask_user.UserManager( app=app, db_adapter=db_adapter, password_validator=password_validator, ) @app.cli.command('invite') @click.argument('email') def initdb_command(email): """Invite a user to this project.""" user_invite = db_adapter.add_object( db_adapter.UserInvitationClass, email = email, invited_by_user_id = -1, ) db_adapter.commit() user_invite.token = user_manager.generate_token(user_invite.id) db_adapter.commit()
import login import main import info import static import textflow import comparison import editor import set_cover import checks dba = flask_sqlalchemy.SQLAlchemy() user, _role, _roles_users = login.declare_user_model_on(dba) db_adapter = flask_user.SQLAlchemyAdapter(dba, user) login_manager = flask_login.LoginManager() login_manager.anonymous_user = login.AnonymousUserMixin user_manager = flask_user.UserManager(db_adapter) mail = flask_mail.Mail() class Config(): """ Default configuration object. """ APPLICATION_HOST = 'localhost' APPLICATION_PORT = 5000 APPLICATION_DESCRIPTION = '' CONFIG_FILE = '_global.conf' # default = ./instance/_global.conf STATIC_FOLDER = 'static' STATIC_URL_PATH = 'static' AFTER_LOGIN_URL = None USE_RELOADER = False USE_DEBUGGER = False
app.logger.addHandler(logging.StreamHandler()) app.logger.setLevel(logging.INFO) # We have to import these after defining app, api and db as these # imports will be looking for those variables. import backend.common.auth as auth import backend.common.response as response import backend.missions.views as mission_views import backend.organizations.views as organization_views import backend.quests.views as quest_views import backend.questions.views as question_views import backend.users.models as user_models import backend.users.views as user_views db_adapter = flask_user.SQLAlchemyAdapter(db, user_models.User) flask_user.UserManager(db_adapter, app) @app.route('/') def index(): """Return the index page.""" return app.send_static_file('index.html') @app.route('/app') @flask_user.login_required @response.no_cache def app_page(): """Return the javascript for the app.""" return app.send_static_file('app.html')
def authenticate(username, password): user = user_manager.find_user_by_username(username) if user and user_manager.verify_password(password, user): return user def identity(payload): user = get_user(payload['identity']) return user jwt = JWT(app, authenticate, identity) login_manager = flask_login.LoginManager() db_adapter = flask_user.SQLAlchemyAdapter(db, User) user_manager = flask_user.UserManager(db_adapter, app, login_manager=login_manager) @login_manager.request_loader def load_user_from_request(request): """This function is called by login manager to get user info from the request (JWT authorization) when there is no info in the session. The trick here is that we don't want it to error when there is no JWT token, as otherwise the user can never access registration page. """ @jwt_required() def get_user():