paramecio2fm/paramecio2/modules/admin/app.py

177 lines
4.7 KiB
Python

from flask import Blueprint, redirect, session, url_for, request, g, make_response
from settings import config
from paramecio2.libraries.mtemplates import PTemplate, env_theme
from paramecio2.libraries.i18n import I18n
from paramecio2.libraries.formsutils import show_form, generate_csrf, set_extra_forms_user, pass_values_to_form
from paramecio2.libraries.db.webmodel import WebModel
from paramecio2.modules.admin.models.admin import UserAdmin
from paramecio2.libraries.keyutils import create_key_encrypt
env=env_theme(__file__)
t=PTemplate(env)
yes_recovery_login=False
email_address='localhost'
if hasattr(config, 'yes_recovery_login'):
yes_recovery_login=config.yes_recovery_login
if hasattr(config, 'email_address'):
email_address=config.email_address
admin_app=Blueprint('admin_app', __name__, static_folder='static')
@admin_app.before_request
def admin_prepare():
g.connection=WebModel.connection()
if request.endpoint!='admin_app.login' and request.endpoint!='admin_app.signup':
if 'login_admin' not in session:
return redirect(url_for('admin_app.login'))
@admin_app.after_request
def admin_finished(response):
#print('pepe')
g.connection.close()
return response
# Load
@admin_app.route('/admin')
@admin_app.route('/admin/<module>')
def admin(module=''):
"""
if 'login_admin' not in session:
return redirect(url_for('admin_app.login'))
"""
return t.load_template('home.phtml', title=I18n.lang('admin', 'paramecio_admin', 'Paramecio admin'))
@admin_app.route('/admin/logout')
def logout():
return redirect(url_for('admin_app.login'))
@admin_app.route('/admin/login', methods=['GET', 'POST'])
def login():
#connection=WebModel.connection()
user_admin=UserAdmin(g.connection)
user_admin.yes_repeat_password=False
user_admin.fields['password'].required=True
user_admin.create_forms(['username', 'password'])
c=user_admin.select_count()
if c==0:
return redirect(url_for('admin_app.signup'))
post={}
if request.method=='POST':
username=request.form['username']
password=request.form['password']
arr_user=user_admin.set_conditions('WHERE username=%s', [username]).select_a_row_where()
if arr_user:
if user_admin.fields['password'].verify(password, arr_user['password']):
session['login_admin']=True
return {'error': 0}
else:
return {'error': 1, 'csrf_token': generate_csrf()}
else:
return {'error': 1, 'csrf_token': generate_csrf()}
#if
else:
forms=show_form(post, user_admin.forms, t, yes_error=False)
return t.load_template('login.phtml', forms=forms, yes_recovery_login=yes_recovery_login)
@admin_app.route('/admin/signup', methods=['GET', 'POST'])
def signup():
user_admin=UserAdmin(g.connection)
c=user_admin.select_count()
if c==0:
if request.method=='POST':
user_admin.conditions=['WHERE privileges=%s', [2]]
forms=dict(request.form)
forms['privileges']=2
user_admin.valid_fields=['username', 'email', 'password', 'privileges']
user_admin.create_forms()
if user_admin.insert(forms, False):
error= {'error': 0}
return error
else:
user_admin.check_all_fields(forms, False)
pass_values_to_form(forms, user_admin.forms, yes_error=True)
session['csrf_token']=create_key_encrypt()
error={'error': 1, 'csrf_token': session['csrf_token']}
for field in user_admin.valid_fields:
error[field]=user_admin.forms[field].txt_error
error['repeat_password']=user_admin.forms['repeat_password'].txt_error
return error
else:
post={}
set_extra_forms_user(user_admin)
forms=show_form(post, user_admin.forms, t, yes_error=False)
return t.load_template('register.phtml', forms=forms)
else:
return redirect(url_for('.login'))
@admin_app.route('/admin/recovery_password')
def recovery_password():
return ""