maidstone-hackspace/website/pages/core/login_pages.py

99 lines
3.4 KiB
Python

import os
from werkzeug.security import generate_password_hash, check_password_hash
from flask import session, flash
from flask import redirect, abort
from flask import make_response
from flask import request
from flask import Blueprint
from flask.ext.login import current_user, LoginManager, login_required, UserMixin, login_user, logout_user, make_secure_token
from requests_oauthlib import OAuth2Session
from requests_oauthlib.compliance_fixes import facebook_compliance_fix
from scaffold import web
from libs.mail import sendmail
from pages import header, footer
from pages.core.authorize import User
from data import site_user
from config.settings import *
from website.constants import *
login_pages = Blueprint('login_pages', __name__, template_folder='templates')
@login_pages.route("/login", methods=['GET'])
def login_screen():
web.template.create('Maidstone Hackspace - Login')
header('Members Login')
web.page.create('Member Login')
web.page.section(
web.loginBox.create().enable_oauth('google').enable_oauth('facebook').enable_oauth('github').render()
)
web.template.body.append(web.page.set_classes('page col s10 offset-s1').render())
return make_response(footer())
@login_pages.route("/login", methods=['POST'])
def login_screen_submit():
"""handle the login form submit"""
# try to find user by username
user_details = site_user.get_by_username({
'username': request.form.get('username')}).get()
# not found so lets bail to the login screen
if not user_details:
flash('Failed to login with that username and password, please retry.')
return redirect('/login')
# now lets verify the users password, and bail if its wrong
pw_hash = generate_password_hash(request.form.get('password'))
if check_password_hash(pw_hash, user_details.get('password')):
flash('Failed to login with that username and password, please retry.')
return redirect('/login')
#login user and redirect to profile
login_user(
User(user_details.get('user_id'))
)
flash('You have successfully logged in !')
site_user.update_last_login().execute({'id': user_details.get('user_id')})
# logged in but no E-Mail so lets ask the user for there email.
if not user_details.get('email'):
return redirect('/profile/change_email')
return redirect('/profile')
@login_pages.route("/profile/change_email", methods=['GET'])
@login_required
def change_email_get():
web.template.create('%s - Change Email' % site_name)
header('Members Login')
web.page.create('Set your E-Mail address')
web.form.create('Set E-Mail address for account', '/profile/change_email')
web.form.append(name='email', label='Valid Email', placeholder='ralf@maidstone-hackspace.org.uk', value='')
web.page.section(web.form.render())
web.template.body.append(web.page.render())
return make_response(footer())
@login_pages.route("/profile/change_email", methods=['POST'])
@login_required
def change_email_post():
flash('An E-Mail has been sent to you please check and confirm you identity.')
sendmail().send(
from_address='no-reply@maidstone-hackspace.org.uk',
to_address='oly@leela',
subject="%s - Confirm E-Mail Address" % site_name,
body='generate link here')
site_user.update_user_email().execute({
'id': current_user.get_id(),
'email': request.form.get('email')
})
return redirect('/profile')