11import datetime
2- from flask import Flask , render_template , redirect , url_for , request , blueprints , flash
3- from flask_login import LoginManager , UserMixin , login_user , login_required , logout_user , current_user
4- from flask_sqlalchemy import SQLAlchemy
2+ from flask import render_template , redirect , url_for , request , blueprints , flash
3+ from flask_login import LoginManager , login_user , login_required , logout_user , current_user
54from werkzeug .security import generate_password_hash , check_password_hash
65
7-
8- from flask import Flask , render_template , request , jsonify
9- import subprocess
10-
116from src .scripts .email_me import send_smpt_email
12-
137from src .config import app , db
14- from src .models import User , SmptEamilPasswordConfig , DashboardSettings
8+ from src .models import User , DashboardSettings
159from src .utils import render_template_from_file
10+ from src .routes .helper import get_email_addresses
1611
1712auth_bp = blueprints .Blueprint ('auth' , __name__ )
1813
19- # Configure Flask-Login
2014login_manager = LoginManager ()
2115login_manager .init_app (app )
2216login_manager .login_view = 'login'
2317
24- # Define the User model
25-
2618@login_manager .user_loader
2719def load_user (user_id ):
2820 return User .query .get (int (user_id ))
2921
30-
31- def get_email_addresses (user_level = None , receive_email_alerts = True , fetch_all_users = False ):
32- with app .app_context ():
33- # Build query filter based on the presence of `user_level`
34- filters = []
35- if user_level :
36- filters .append (User .user_level == user_level )
37- if not fetch_all_users :
38- filters .append (User .receive_email_alerts == receive_email_alerts )
39-
40- # Query the database with the constructed filters
41- users = User .query .filter (* filters ).all ()
42-
43- # Check if no users were found
44- if not users :
45- return None
46-
47- # Return list of email addresses
48- return [user .email for user in users ]
49-
5022@app .route ('/login' , methods = ['GET' , 'POST' ])
5123def login ():
5224 if request .method == 'POST' :
@@ -144,105 +116,6 @@ def signup():
144116
145117 return render_template ('signup.html' )
146118
147- @app .route ('/protected' )
148- @login_required
149- def protected ():
150- if current_user .user_level == 'admin' :
151- return f'Hello, Admin { current_user .username } ! This is a protected page.'
152- return f'Hello, { current_user .username } ! This is a protected page.'
153-
154- @app .route ('/users' )
155- @login_required
156- def view_users ():
157- if current_user .user_level != 'admin' :
158- flash ("Your account does not have permission to view this page." , "danger" )
159- return render_template ("error/permission_denied.html" )
160-
161- # Fetch all users from the database
162- users = User .query .all ()
163-
164- return render_template ('view_users.html' , users = users )
165-
166- @app .route ('/user/<username>' , methods = ['GET' , 'POST' ])
167- @login_required
168- def change_user_settings (username ):
169- user = User .query .filter_by (username = username ).first_or_404 ()
170-
171- if request .method == 'POST' :
172- new_username = request .form ['username' ]
173- new_email = request .form ['email' ]
174- new_user_level = request .form ['user_level' ]
175- receive_email_alerts = 'receive_email_alerts' in request .form
176-
177- # Update user details
178- user .username = new_username
179- user .email = new_email
180- user .user_level = new_user_level
181- user .receive_email_alerts = receive_email_alerts
182-
183- db .session .commit ()
184-
185- flash ('User settings updated successfully!' , 'success' )
186- return redirect (url_for ('change_user_settings' , username = user .username ))
187-
188- return render_template ('change_user.html' , user = user )
189-
190- @app .route ('/delete_user/<username>' , methods = ['POST' ])
191- @login_required
192- def delete_user (username ):
193- if current_user .user_level != 'admin' :
194- flash ("Your account does not have permission to perform this action." , "danger" )
195- return redirect (url_for ('view_users' )) # Redirect to the users page
196-
197- user = User .query .filter_by (username = username ).first_or_404 ()
198-
199- # Get Admin Emails with Alerts Enabled:
200- admin_email_address = get_email_addresses (user_level = 'admin' , receive_email_alerts = True )
201- if admin_email_address :
202- subject = "User Deletion Alert"
203- context = {
204- "username" : user .username ,
205- "deletion_time" : datetime .datetime .now (),
206- "current_user" : current_user .username ,
207- }
208- html_body = render_template_from_file ("src/templates/email_templates/deletion_email.html" , ** context )
209- send_smpt_email (admin_email_address , subject , html_body , is_html = True )
210-
211- db .session .delete (user )
212- db .session .commit ()
213-
214-
215-
216- flash (f'User { username } has been deleted successfully!' , 'success' )
217- return redirect (url_for ('view_users' ))
218-
219- @app .route ("/update-email-password" , methods = ["GET" , "POST" ])
220- @login_required
221- def update_smpt_email_password ():
222- smtp_config = SmptEamilPasswordConfig .query .first ()
223-
224- if request .method == "POST" :
225- new_email = request .form .get ("email" )
226- new_password = request .form .get ("password" )
227-
228- if not new_email or not new_password :
229- flash ("Please provide email and password." , "danger" )
230- return redirect (url_for ("update_smpt_email_password" ))
231-
232-
233- if not smtp_config :
234- smtp_config = SmptEamilPasswordConfig (email = new_email , password = new_password )
235- db .session .add (smtp_config )
236- else :
237- smtp_config .email = new_email
238- smtp_config .password = new_password
239-
240- db .session .commit ()
241- flash ("Email and password updated successfully!" , "success" )
242- return redirect (url_for ("update_smpt_email_password" ))
243-
244- return render_template ("update_smpt_email_password.html" , smtp_config = smtp_config )
245-
246119@app .route ("/send_email" , methods = ["GET" , "POST" ])
247120@login_required
248121def send_email_page ():
@@ -301,74 +174,3 @@ def send_email_page():
301174
302175 return render_template ("send_email.html" , enable_alerts = enable_alerts )
303176
304- @app .route ('/terminal' , methods = ['GET' , 'POST' ])
305- @login_required
306- def terminal ():
307- if current_user .user_level != 'admin' :
308- flash ("Your account does not have permission to view this page." , "danger" )
309- return render_template ("error/permission_denied.html" )
310- if request .method == 'POST' :
311- command = request .form .get ('command' )
312- if command :
313- try :
314- # Run the command and capture the output
315- output = subprocess .check_output (command , shell = True , stderr = subprocess .STDOUT , universal_newlines = True )
316- except subprocess .CalledProcessError as e :
317- # If the command fails, capture the error output
318- output = e .output
319- return jsonify (output = output )
320- return render_template ('terminal.html' )
321-
322- @app .route ('/add_user' , methods = ['GET' , 'POST' ])
323- @login_required
324- def add_user ():
325- if current_user .user_level != 'admin' :
326- flash ("Your account does not have permission to view this page." , "danger" )
327- return render_template ("error/permission_denied.html" )
328- if request .method == 'POST' :
329- username = request .form ['username' ]
330- email = request .form ['email' ]
331- password = request .form ['password' ]
332- user_level = request .form .get ('user_level' , 'user' )
333- receive_email_alerts = request .form .get ('receive_email_alerts' , 'on' ) == 'on'
334-
335- # Check if user already exists
336- if User .query .filter_by (username = username ).first () or User .query .filter_by (email = email ).first ():
337- flash ('Username or email already exists.' , 'danger' )
338- return redirect (url_for ('add_user' ))
339-
340- new_user = User (
341- username = username ,
342- email = email ,
343- password = generate_password_hash (password ),
344- user_level = user_level ,
345- receive_email_alerts = receive_email_alerts
346- )
347-
348- admin_email_address = get_email_addresses (user_level = 'admin' , receive_email_alerts = True )
349- if admin_email_address :
350- subject = "New User Alert"
351- context = {
352- "current_user" : current_user .username ,
353- "username" : new_user .username ,
354- "email" : new_user .email ,
355- "signup_time" : datetime .datetime .now (),
356- "user_level" : new_user .user_level
357- }
358- html_body = render_template_from_file ("src/templates/email_templates/new_user_create.html" , ** context )
359- send_smpt_email (admin_email_address , subject , html_body , is_html = True )
360-
361- subject = "Welcome to the systemGuard"
362- context = {
363- "username" : new_user .username ,
364- "email" : new_user .email ,
365- }
366- html_body = render_template_from_file ("src/templates/email_templates/welcome.html" , ** context )
367- send_smpt_email (email , subject , html_body , is_html = True )
368-
369- db .session .add (new_user )
370- db .session .commit ()
371- flash ('User created successfully!' , 'success' )
372- return redirect (url_for ('view_users' ))
373-
374- return render_template ('add_user.html' )
0 commit comments