update db, add message

This commit is contained in:
KF7EEL 2021-05-22 11:55:18 -07:00
parent 37af7aab2a
commit 90aa470bb9
1 changed files with 107 additions and 13 deletions

View File

@ -4,10 +4,10 @@
# - Using class-based configuration (instead of file-based configuration)
# - Using string-based templates (instead of file-based templates)
from flask import Flask, render_template_string, request, make_response, jsonify, render_template, Markup
from flask import Flask, render_template_string, request, make_response, jsonify, render_template, Markup, flash, redirect, url_for, current_app
from flask_sqlalchemy import SQLAlchemy
from flask_user import login_required, UserManager, UserMixin, user_registered, roles_required
from flask_login import current_user
from flask_login import current_user, login_user, logout_user
from wtforms import StringField, SubmitField
import requests
import base64, hashlib
@ -24,7 +24,6 @@ try:
except:
pass
script_links = {}
def gen_passphrase(dmr_id):
@ -138,7 +137,7 @@ def create_app():
dmr_ids = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
city = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
#Used for initial approval
initial_admin_approved = db.Column('admin_approved', db.Boolean(), nullable=False, server_default='1')
initial_admin_approved = db.Column('initial_admin_approved', db.Boolean(), nullable=False, server_default='1')
# Define the relationship to Role via UserRoles
roles = db.relationship('Role', secondary='user_roles')
@ -155,8 +154,95 @@ def create_app():
user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
role_id = db.Column(db.Integer(), db.ForeignKey('roles.id', ondelete='CASCADE'))
# Customize Flask-User
class CustomUserManager(UserManager):
# Override or extend the default login view method
def login_view(self):
"""Prepare and process the login form."""
# Authenticate username/email and login authenticated users.
safe_next_url = self._get_safe_next_url('next', self.USER_AFTER_LOGIN_ENDPOINT)
safe_reg_next = self._get_safe_next_url('reg_next', self.USER_AFTER_REGISTER_ENDPOINT)
# Immediately redirect already logged in users
if self.call_or_get(current_user.is_authenticated) and self.USER_AUTO_LOGIN_AT_LOGIN:
return redirect(safe_next_url)
# Initialize form
login_form = self.LoginFormClass(request.form) # for login.html
register_form = self.RegisterFormClass() # for login_or_register.html
if request.method != 'POST':
login_form.next.data = register_form.next.data = safe_next_url
login_form.reg_next.data = register_form.reg_next.data = safe_reg_next
# Process valid POST
if request.method == 'POST' and login_form.validate():
# Retrieve User
user = None
user_email = None
if self.USER_ENABLE_USERNAME:
# Find user record by username
user = self.db_manager.find_user_by_username(login_form.username.data)
# Find user record by email (with form.username)
if not user and self.USER_ENABLE_EMAIL:
user, user_email = self.db_manager.get_user_and_user_email_by_email(login_form.username.data)
else:
# Find user by email (with form.email)
user, user_email = self.db_manager.get_user_and_user_email_by_email(login_form.email.data)
#Add aditional message
if not user.initial_admin_approved:
flash('<strong>You account is waiting for approval from an administrator. See <a href="/help">the Help page</a> for more information.</strong>', 'success')
if user:
# Log user in
safe_next_url = self.make_safe_url(login_form.next.data)
return self._do_login_user(user, safe_next_url, login_form.remember_me.data)
# Render form
self.prepare_domain_translations()
template_filename = self.USER_LOGIN_AUTH0_TEMPLATE if self.USER_ENABLE_AUTH0 else self.USER_LOGIN_TEMPLATE
return render_template(template_filename,
form=login_form,
login_form=login_form,
register_form=register_form)
# Override or extend the default login view method
## def _do_login_user(self, user, safe_next_url, remember_me=False):
## # User must have been authenticated
## if not user: return self.unauthenticated()
##
## # Check if user account has been disabled
## if not user.active:
## flash(('Your account has not been enabled.'), 'error')
## return redirect(url_for('user.login'))
##
## # Check if user has a confirmed email address
## if self.USER_ENABLE_EMAIL \
## and self.USER_ENABLE_CONFIRM_EMAIL \
## and not current_app.user_manager.USER_ALLOW_LOGIN_WITHOUT_CONFIRMED_EMAIL \
## and not self.db_manager.user_has_confirmed_email(user):
## url = url_for('user.resend_email_confirmation')
## #flash(('Your email address has not yet been confirmed. Check your email Inbox and Spam folders for the confirmation email or <a href="%(url)s">Re-send confirmation email</a>.', url=url), 'error')
## return redirect(url_for('user.login'))
## #return flash('nope', 'error')
## # Use Flask-Login to sign in user
## # print('login_user: remember_me=', remember_me)
## login_user(user, remember=remember_me)
##
## # Send user_logged_in signal
## signals.user_logged_in.send(current_app._get_current_object(), user=user)
##
## # Flash a system message
## flash(('You have signed in successfully.'), 'success')
##
## # Redirect to 'next' URL
## return redirect(safe_next_url)
user_manager = UserManager(app, db, User)
#user_manager = UserManager(app, db, User)
user_manager = CustomUserManager(app, db, User)
# Create all database tables
@ -544,6 +630,9 @@ def create_app():
</table>
<p>&nbsp;</p>
<p style="text-align: center;"><strong>Email confirmed: ''' + str(u.email_confirmed_at) + '''</strong></p>
<p style="text-align: center;"><strong><a href="update_ids?callsign=''' + u.username + '''">Update user information from RadioID.net</a></strong></p>
<td><form action="edit_user?callsign=''' + callsign + '''" method="POST">
@ -700,10 +789,10 @@ def create_app():
#user.add_roles('Admin')
#db.session.add(user)
#db.session.commit()
#u = User.query.filter_by(username='kf7eel').first()
u = User.query.filter_by(username='kf7eel').first()
#u = Role.query.all()
## u = User.query.filter(User.dmr_ids.contains('3153591')).first()
u = User.query.all()
#u = User.query.all()
## #tu = User.query().all()
#### print((tu.dmr_ids))
#### #print(tu.dmr_ids)
@ -757,18 +846,23 @@ def create_app():
# print('userhasjkdhfdsejksfdahjkdhjklhjkhjkl')
## print(u.has_roles('Admin'))
#u_role.role_id = 1
print(u)
for i in u:
#print(i.initial_admin_approved)
if not i.initial_admin_approved:
print(i.username)
#print(u)
# for i in u:
##print(i.initial_admin_approved)
#if not i.initial_admin_approved:
#print(i.username)
# print(i)
#u_role = UserRoles.query.filter_by(id=2).first().role_id
#u_role = 1
# db.session.commit()
#u_role = UserRoles.query.filter_by(id=u.id).first().role_id
#print(u_role)
return str(u)
#return str(u)
if not u.active:
flash('We come in peace', 'success')
content = 'hello'
return render_template('flask_user_layout.html', markup_content = Markup(content))
@app.route('/add_user', methods=['POST', 'GET'])
@roles_required('Admin')