2020def load_user (user_id ):
2121 return User .query .get (int (user_id ))
2222
23+
24+ def get_admin_emails_for_email_alerts ():
25+ with app .app_context ():
26+ admin_emails = User .query .filter_by (user_level = 'admin' , receive_email_alerts = True ).all ()
27+ print (admin_emails )
28+ if not admin_emails :
29+ return None
30+ return [admin .email for admin in admin_emails ]
31+
32+ def get_all_users_emails (receive_email_alerts = True ):
33+ with app .app_context ():
34+ users = User .query .filter_by (receive_email_alerts = receive_email_alerts ).all ()
35+ if not users :
36+ return None
37+ return [user .email for user in users ]
38+
39+
40+
2341@app .route ('/login' , methods = ['GET' , 'POST' ])
2442def login ():
2543 if request .method == 'POST' :
@@ -28,6 +46,10 @@ def login():
2846 user = User .query .filter_by (username = username ).first ()
2947 if user and check_password_hash (user .password , password ):
3048 login_user (user )
49+ admin_email_address = get_admin_emails_for_email_alerts ()
50+ if admin_email_address :
51+ send_email (admin_email_address , 'Login Alert' , f'{ user .username } logged in to the system.' )
52+
3153 return redirect (url_for ('dashboard' ))
3254 flash ('Invalid username or password' , 'danger' )
3355 return render_template ('login.html' )
@@ -50,6 +72,15 @@ def signup():
5072
5173 hashed_password = generate_password_hash (password )
5274 new_user = User (username = username , password = hashed_password )
75+
76+ admin_email_address = get_admin_emails_for_email_alerts ()
77+ # extends the signup user to send an email to the admin
78+ if admin_email_address :
79+ send_email (admin_email_address , 'New User Alert' , f'{ username } has signed up to the system.' )
80+
81+ # send email to the new user
82+ send_email ([new_user .email ], 'Welcome to the system' , f'Hello { new_user .username } , welcome to the system.' )
83+
5384 db .session .add (new_user )
5485 db .session .commit ()
5586 flash ('Account created successfully, please log in.' )
@@ -90,25 +121,55 @@ def logout():
90121# return f(*args, **kwargs)
91122# return decorated_function
92123
124+ @app .route ('/users' )
125+ @login_required
126+ def view_users ():
127+ if current_user .user_level != 'admin' :
128+ flash ("Your account does not have permission to view this page." , "danger" )
129+ return render_template ("error/permission_denied.html" )
130+
131+ # Fetch all users from the database
132+ users = User .query .all ()
133+
134+ return render_template ('view_users.html' , users = users )
135+
93136@app .route ('/user/<username>' , methods = ['GET' , 'POST' ])
94137@login_required
95138def change_user_settings (username ):
96139 user = User .query .filter_by (username = username ).first_or_404 ()
97140
98141 if request .method == 'POST' :
99142 new_username = request .form ['username' ]
143+ new_email = request .form ['email' ]
100144 new_user_level = request .form ['user_level' ]
101-
145+ receive_email_alerts = 'receive_email_alerts' in request .form
146+
102147 # Update user details
103148 user .username = new_username
149+ user .email = new_email
104150 user .user_level = new_user_level
151+ user .receive_email_alerts = receive_email_alerts
152+
105153 db .session .commit ()
106-
154+
107155 flash ('User settings updated successfully!' , 'success' )
108156 return redirect (url_for ('change_user_settings' , username = user .username ))
109157
110158 return render_template ('change_user.html' , user = user )
111159
160+ @app .route ('/delete_user/<username>' , methods = ['POST' ])
161+ @login_required
162+ def delete_user (username ):
163+ if current_user .user_level != 'admin' :
164+ flash ("Your account does not have permission to perform this action." , "danger" )
165+ return redirect (url_for ('view_users' )) # Redirect to the users page
166+
167+ user = User .query .filter_by (username = username ).first_or_404 ()
168+ db .session .delete (user )
169+ db .session .commit ()
170+
171+ flash (f'User { username } has been deleted successfully!' , 'success' )
172+ return redirect (url_for ('view_users' ))
112173
113174@app .route ("/update-email-password" , methods = ["GET" , "POST" ])
114175@login_required
@@ -134,17 +195,30 @@ def update_email_password():
134195@login_required
135196def send_email_page ():
136197 if request .method == "POST" :
137- receiver_email = request .form .get ("receiver_email" )
198+
199+ receiver_email = request .form .get ("recipient" )
138200 subject = request .form .get ("subject" )
139201 body = request .form .get ("body" )
140202 attachment = request .files .get ("attachment" )
141203
204+ if not receiver_email or not subject or not body :
205+ flash ("Please provide recipient, subject, and body." , "danger" )
206+ return redirect (url_for ('send_email_page' ))
207+
208+ if receiver_email == "all_users" :
209+ receiver_email = get_all_users_emails ()
210+ elif receiver_email == "admin_users" :
211+ receiver_email = get_admin_emails_for_email_alerts ()
212+
213+ if not receiver_email :
214+ flash ("No users found to send email to." , "danger" )
215+ return redirect (url_for ('send_email_page' ))
216+
142217 # Save attachment if any
143218 attachment_path = None
144219 if attachment :
145220 attachment_path = f"/tmp/{ attachment .filename } "
146221 attachment .save (attachment_path )
147-
148222 try :
149223 send_email (receiver_email , subject , body , attachment_path )
150224 flash ("Email sent successfully!" , "success" )
0 commit comments