from flask import render_template, request, session, url_for, redirect, flash, jsonify from ..models import User from ..db import redisn from . import auth from oauth2client import client, crypt from .. import basic @auth.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'GET': return render_template('auth/register.html') if request.method == 'POST': data = request.form if User.query_one(User.u_email == data['email']): flash('email existed', category='error') else: User.insert(User( u_name=data['name'] or 't', u_email=data['email'], u_password=data['password'], u_role=data['identity'] )) User.commit() session['user'] = data['email'] if data['identity'] == 3: return redirect(url_for('sch.apply')) return redirect(url_for('auth.login')) @auth.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'GET': if 'user' in session: if 'uid' not in session: session['uid'] = User.query_one(User.u_email == session['user']).u_id return redirect('/') return render_template('auth/login.html') if request.method == 'POST': data = request.form if 'idtoken' in data: try: token = data['idtoken'] idinfo = client.verify_id_token(token, basic.G_CLIENT_ID) if idinfo['iss'] not in ['accounts.google.com', 'https://accounts.google.com']: raise crypt.AppIdentityError("Wrong issuer") msg = 'accepted' except Exception as e: basic.log('User[%s] login with google+ failed <error %s>' % (data['idtoken'], e.args)) msg = '' finally: if msg: user = User.query_one(User.u_gmail == idinfo['email']) if user: session['user'] = user.u_email session['uid'] = user.u_id return jsonify({'msg': msg}) else: user = User.query_one(User.u_email == data['email']) if user and user.check_hash_password(data['password']): session['user'] = user.u_email session['uid'] = user.u_id return redirect('/') flash('Incorrect email or password.', category='error') return redirect(url_for('auth.login')) @auth.route('/logout') def logout(): session.clear() return redirect('/') @auth.route('/sign/video') def gen_cos_vsign(): _sign = redisn.get('vsign') if not _sign: s = basic.Sign() _sign = s.sign_more('/video/') redisn.set('vsign', _sign, ex=604700) return _sign @auth.route('/sign/pdf') def gen_cos_psign(): _sign = redisn.get('psign') if not _sign: s = basic.Sign() _sign = s.sign_more('/pdf/') redisn.set('psign', _sign, ex=604700) return _sign @auth.route('/sign/pic') def gen_cos_picsign(): _sign = redisn.get('picsign') if not _sign: s = basic.Sign() _sign = s.sign_more('/picture/') redisn.set('picsign', _sign, ex=604700) return _sign @auth.route('/sign/once') def gen_cos_nsign(): s = basic.Sign() _sign = s.sign_once('/p2/video') return jsonify({'sign': _sign})