diff --git a/user_managment/app.py b/user_managment/app.py index 2814c91..8876ca2 100644 --- a/user_managment/app.py +++ b/user_managment/app.py @@ -88,12 +88,11 @@ class ConfigClass(object): # Flask-User settings USER_APP_NAME = title # Shown in and email templates and page footers - USER_ENABLE_EMAIL = False # Disable email authentication - USER_ENABLE_USERNAME = True # Enable username authentication - USER_REQUIRE_RETYPE_PASSWORD = True # Simplify register form - USER_ENABLE_CHANGE_USERNAME = False + USER_EMAIL_SENDER_EMAIL = MAIL_DEFAULT_SENDER + + # Setup Flask-User def create_app(): """ Flask application factory """ @@ -120,7 +119,8 @@ def create_app(): username = db.Column(db.String(100, collation='NOCASE'), nullable=False, unique=True) password = db.Column(db.String(255), nullable=False, server_default='') email_confirmed_at = db.Column(db.DateTime()) - + email = db.Column(db.String(255, collation='NOCASE'), nullable=False, unique=True) + # User information first_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') last_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') @@ -152,6 +152,7 @@ def create_app(): if not User.query.filter(User.username == 'admin').first(): user = User( username='admin', + email='admin@no.reply', email_confirmed_at=datetime.datetime.utcnow(), password=user_manager.hash_password('admin'), ) @@ -159,30 +160,6 @@ def create_app(): user.roles.append(Role(name='User')) db.session.add(user) db.session.commit() - -## from flask_user.forms import RegisterForm -## class CustomRegisterForm(RegisterForm): -## # Add a country field to the Register form -## call = StringField(('Callsign')) -## -## # Customize the User profile form: -## from flask_user.forms import EditUserProfileForm -## class CustomUserProfileForm(EditUserProfileForm): -## # Add a country field to the UserProfile form -## call = StringField(('Callsign')) -## -## # Customize Flask-User -## class CustomUserManager(UserManager): -## -## def customize(self, app): -## -## # Configure customized forms -## self.RegisterFormClass = CustomRegisterForm -## #self.UserProfileFormClass = CustomUserProfileForm -## # NB: assign: xyz_form = XyzForm -- the class! -## # (and not: xyz_form = XyzForm() -- the instance!) -## # Setup Flask-User and specify the User data-model - #user_manager = CustomUserManager(app, db, User) # Query radioid.net for list of DMR IDs, then add to DB @user_registered.connect_via(app) @@ -268,7 +245,7 @@ def create_app(): ## print(user_id) ## print(request.args.get('mode')) ## if request.args.get('mode') == 'generated': - print(id_dict) + #print(id_dict) content = '\n' for i in id_dict.items(): if i[1] == '': @@ -345,7 +322,7 @@ def create_app(): @login_required # User must be authenticated def list_users(): u = User.query.all() - u_list = '''

 

+ u_list = '''

Enter Callsign

 

@@ -376,6 +353,8 @@ def create_app(): ## callsign = request.form.get('callsign') ## u = User.query.filter_by(username=callsign).first() ## content = u.dmr_ids + if request.method == 'POST' and request.args.get('callsign') == None: + content = 'Not found' if request.method == 'POST' and request.args.get('callsign') and request.form.get('user_status'): user = request.args.get('callsign') #print(user) @@ -387,13 +366,15 @@ def create_app(): content = content + '''

User ''' + str(user) + ''' has been enabled.

\n''' if request.form.get('user_status') == "False": edit_user.active = False - content = content + '''

User ''' + str(user) + ''' has been disabled.

\n''' - if user != edit_user.username: - #print(user) - #print(edit_user.username) - #print('new uname') - edit_user.username = user - +## content = content + '''

User ''' + str(user) + ''' has been disabled.

\n''' +## if user != edit_user.username: +## #print(user) +## #print(edit_user.username) +## #print('new uname') +## edit_user.username = user + if request.form.get('email') != edit_user.email: + edit_user.email = request.form.get('email') + content = content + '''

Changed email for user: ''' + str(user) + ''' to ''' + request.form.get('email') + '''

\n''' if request.form.get('password') != '': edit_user.password = user_manager.hash_password(request.form.get('password')) content = content + '''

Changed password for user: ''' + str(user) + '''

\n''' @@ -421,21 +402,28 @@ def create_app(): u_role.role_id = 2 db.session.commit() content = '''

Admin now a user: ''' + str(request.args.get('callsign') ) + '''

\n''' - - + elif request.method == 'GET' and request.args.get('callsign') and request.args.get('email_verified') == 'true': + edit_user = User.query.filter(User.username == request.args.get('callsign')).first() + edit_user.email_confirmed_at = datetime.datetime.utcnow() + db.session.commit() + content = '''

Email verified for: ''' + str(request.args.get('callsign')) + '''

\n''' + elif request.method == 'POST' and request.form.get('callsign') and not request.form.get('user_status') or request.method == 'GET' and request.args.get('callsign'): # and request.form.get('user_status') : if request.args.get('callsign'): callsign = request.args.get('callsign') if request.form.get('callsign'): callsign = request.form.get('callsign') u = User.query.filter_by(username=callsign).first() + confirm_link = '' + if u.email_confirmed_at == None: + confirm_link = '''

Verify email - ''' + str(u.username) + '''

\n''' u_role = UserRoles.query.filter_by(user_id=u.id).first() if u_role.role_id == 2: # Link to promote to Admin - role_link = '''

Make Admin: ''' + str(u.username) + '''

\n''' + role_link = '''

Give Admin role: ''' + str(u.username) + '''

\n''' if u_role.role_id == 1: # Link to promote to User - role_link = '''

Revert to user: ''' + str(u.username) + '''

\n''' + role_link = '''

Revert to User role: ''' + str(u.username) + '''

\n''' content = ''' @@ -457,6 +445,12 @@ def create_app(): + + +
Callsign
+
+
+

@@ -487,6 +481,7 @@ def create_app():

 

Deleted user: ''' + str(u.username) + '''

\n +''' + confirm_link + '''

 

''' + role_link + '''

 

@@ -651,12 +646,12 @@ def create_app(): #print(u_role) return str(u) - @app.route('/add_admin', methods=['POST', 'GET']) + @app.route('/add_user', methods=['POST', 'GET']) @roles_required('Admin') def add_admin(): if request.method == 'GET': content = ''' -
+ @@ -671,6 +666,12 @@ def create_app():
+ + + @@ -685,13 +686,20 @@ def create_app(): elif request.method == 'POST' and request.form.get('username'): if not User.query.filter(User.username == request.form.get('username')).first(): user = User( - username='admin', + username=request.form.get('username'), + email=request.form.get('email'), email_confirmed_at=datetime.datetime.utcnow(), password=user_manager.hash_password(request.form.get('password')), + dmr_ids = get_ids(request.form.get('username')) ) - user.roles.append(Role(name='Admin')) - user.roles.append(Role(name='User')) + db.session.add(user) + u = User.query.filter_by(username=request.form.get('username')).first() + user_role = UserRoles( + user_id=u.id, + role_id=2, + ) + db.session.add(user_role) db.session.commit() content = 'Created user ' + str(request.form.get('username')) else: diff --git a/user_managment/config-SAMPLE.py b/user_managment/config-SAMPLE.py index 14fdcac..2ae4f16 100644 --- a/user_managment/config-SAMPLE.py +++ b/user_managment/config-SAMPLE.py @@ -24,6 +24,25 @@ append_int = 1 shared_secrets = ['test'] +# Email settings +MAIL_SERVER = 'smtp.gmail.com' +MAIL_PORT = 465 +MAIL_USE_SSL = True +MAIL_USE_TLS = False +MAIL_USERNAME = 'app@gmail.com' +MAIL_PASSWORD = 'password' +MAIL_DEFAULT_SENDER = '"' + title + '" ' + +# UMS settings +USER_ENABLE_EMAIL = True +USER_ENABLE_USERNAME = True # Enable username authentication +USER_REQUIRE_RETYPE_PASSWORD = True # Simplify register form +USER_ENABLE_CHANGE_USERNAME = False +USER_ENABLE_MULTIPLE_EMAILS = True +USER_ENABLE_CONFIRM_EMAIL = True +USER_ENABLE_REGISTER = True +USER_AUTO_LOGIN_AFTER_CONFIRM = False +USER_SHOW_USERNAME_DOES_NOT_EXIST = True # Gateway contact info displayed on about page. contact_name = 'your name' diff --git a/user_managment/templates/flask_user/emails/base_message.html b/user_managment/templates/flask_user/emails/base_message.html new file mode 100644 index 0000000..5a4c0d7 --- /dev/null +++ b/user_managment/templates/flask_user/emails/base_message.html @@ -0,0 +1,8 @@ +

Dear {{ user.email }} - {{ user.username }},

+ +{% block message %} +{% endblock %} + +

Sincerely,
+{{ app_name }} +

diff --git a/user_managment/templates/flask_user_layout.html b/user_managment/templates/flask_user_layout.html index 5539f7c..54e286f 100644 --- a/user_managment/templates/flask_user_layout.html +++ b/user_managment/templates/flask_user_layout.html @@ -45,7 +45,7 @@ {% endif %} {% if call_or_get(current_user.is_authenticated) %} {% if call_or_get(current_user.has_roles('Admin')) %} -
+ {% endif %}
+
+
+
Find a UserAdd a User Edit UsersView Passphrase(s)