# Calendar.social # Copyright (C) 2018 Gergely Polonkai # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import os from flask import Flask, current_app, redirect, render_template, url_for from flask_babel import Babel, get_locale as babel_get_locale from flask_security import SQLAlchemyUserDatastore, current_user def get_locale(): """Locale selector Selects the best locale based on values sent by the browser. """ from flask import request supported_languages = ['en', 'hu'] if 'l' in request.args and request.args['l'].lower() in supported_languages: return request.args['l'].lower() return request.accept_languages.best_match(supported_languages) def template_vars(): return { 'lang': babel_get_locale().language, } class CalendarSocialApp(Flask): def __init__(self, name, config=None): from app.models import db, User, Role from app.security import security Flask.__init__(self, name) config_name = os.environ.get('ENV', config or 'dev') self.config.from_pyfile(f'config_{config_name}.py', True) # Make sure we look up users both by their usernames and email addresses self.config['SECURITY_USER_IDENTITY_ATTRIBUTES'] = ('username', 'email') db.init_app(self) babel = Babel(app=self) babel.localeselector(get_locale) user_store = SQLAlchemyUserDatastore(db, User, Role) security.init_app(self, datastore=user_store) self.context_processor(template_vars) app = CalendarSocialApp(__name__) @app.route('/') def hello(): if not current_user.is_authenticated: return render_template('welcome.html') return render_template('index.html') @app.route('/register', methods=['POST', 'GET']) def register(): if not current_app.config['REGISTRATION_ENABLED']: return render_template('registration-disabled.html') from app.forms import RegistrationForm from app.models import db, User form = RegistrationForm() if form.validate_on_submit(): # TODO: This might become False later, if we want registrations to be confirmed via E-mail user = User(active=True) form.populate_obj(user) db.session.add(user) db.session.commit() return redirect(url_for('hello')) return render_template('registration.html', form=form) if __name__ == '__main__': app.run()