Rapportsystem API - of D03N
Hovedprosjekt FiV Programmering 20-24
Loading...
Searching...
No Matches
deleteUser.py
Go to the documentation of this file.
1from flask_restx import Resource
2from flask import request, jsonify
3from flask_jwt_extended import jwt_required, get_jwt_identity
4import os
5import sys
6
7current_directory = os.getcwd()
8sys.path.append(os.path.join(current_directory))
9
10from authorization import login_validation as login_auth
11from Models import user_model as UM
12from SQLAdminConnections import SQL_AdminConnector as SQLC
13from SQLAdminConnections import SQL_AdminQuerys as SQLQ
14from USER_session import tokenHandler as TH
15from Common.Requirements import valid_token as vt
16
17#Route for deleting user
19 tokenHandler = TH.UserTokenHandler()
20
21 @ns.route('/deleteUser')
22 class delete_user(Resource):
23 deletion_model = UM.delete_model(ns)
24
25 #Documentation for swagger UI
26 @ns.doc('Delete user', description='Deletes user when given Username and Password...',
27 responses={200: 'OK', 400: 'Invalid Argument or faulty data', 500: 'Internal server error'})
28 @ns.expect(deletion_model, validate=True)
29
30 #Requires valid jwt token
31 @jwt_required()
32 @vt.require_valid_token
33
34 #Function for deleting user
35 def post(self):
36 current_user = get_jwt_identity()
37 data = request.get_json()
38 username = data["username"].lower()
39 password = data["password"]
40
41 #checks if the user is trying to delete their own account
42 if current_user['email'] != username:
43 return {"Error": "Unauthorized deletion attempt"}, 403
44
45
46 login_validation = login_auth.loginValidation(username, password).validate_credentials()
47 user_exists = login_validation[0]
48
49 #checks if the user exists
50 if user_exists:
51 print(username, "Deleted user")
52
53 #logs user out and revokes token
54 tokenHandler.logout()
55
56 #Removes user from database
57 remove_SQL_account(username)
58 remove_user_account(username)
59 remove_database(username)
60
61 return {"message": "Removed account from database.", "We'll miss you": username}, 200
62 return {"Error": "Invalid username or password"}, 400
63
64#Function to remove user from database
65def remove_SQL_account(username):
66 try:
67 connection = SQLC.SQLConAdmin()
68 connection.connect()
69 connection.execute_query(SQLQ.SQLQueries.use_users_database())
70 connection.execute_query(SQLQ.SQLQueries.delete_sql_user(username))
71 connection.cnx.commit()
72 except Exception as e:
73 print(f"An error occurred during deletion: {e}")
74 return False
75 finally:
76 if connection:
77 connection.close()
78
79#Function to remove user from user_info table
80def remove_user_account(username):
81 try:
82 user_id = get_user_id(username)
83 if user_id:
84 delete_user_tokens(user_id)
85 connection = SQLC.SQLConAdmin()
86 connection.connect()
87 connection.execute_query(SQLQ.SQLQueries.use_users_database())
88 connection.execute_query(SQLQ.SQLQueries.delete_activities_by_user_id(user_id))
89 connection.execute_query(SQLQ.SQLQueries.delete_user_from_user_info(username))
90 connection.cnx.commit()
91 except Exception as e:
92 print(f"An error occurred during user deletion: {e}")
93 finally:
94 if connection:
95 connection.close()
96
97#Removes users own database
98def remove_database(username):
99 try:
100 connection = SQLC.SQLConAdmin()
101 connection.connect()
102 connection.execute_query(SQLQ.SQLQueries.use_users_database())
103 connection.execute_query(SQLQ.SQLQueries.drop_database(username))
104 connection.cnx.commit()
105 except Exception as e:
106 print(f"An error occurred during deletion: {e}")
107 return False
108 finally:
109 if connection:
110 connection.close()
111
112
113#Function for getting user ID
114def get_user_id(email):
115 try:
116 connection = SQLC.SQLConAdmin()
117 connection.connect()
118 connection.execute_query(SQLQ.SQLQueries.use_users_database())
119 result = connection.execute_query(SQLQ.SQLQueries.get_user_id_by_email(email))
120 if result:
121 return result[0][0] #return the first result
122 except Exception as e:
123 print(f"An error occurred: {e}")
124 finally:
125 if connection:
126 connection.close()
127 return None
128
129#function for deleting user tokens by user ID
131 try:
132 connection = SQLC.SQLConAdmin()
133 connection.connect()
134 connection.execute_query(SQLQ.SQLQueries.use_users_database())
135 connection.execute_query(SQLQ.SQLQueries.delete_tokens_by_user_id(user_id))
136 connection.cnx.commit()
137 except Exception as e:
138 print(f"An error occurred during token deletion: {e}")
139 finally:
140 if connection:
141 connection.close()
142
143
144
145