|
1 | 1 | from fastapi import APIRouter, Depends, HTTPException
|
2 | 2 | from sqlalchemy.orm import Session
|
3 |
| -from app.schema import (DatabaseSchema, DatabaseFlavor) |
| 3 | +from app.schema import (DatabaseSchema, DatabaseFlavor, PasswordUpdate) |
4 | 4 | import os
|
5 | 5 | import json
|
6 | 6 | from app.core.config import get_db
|
@@ -81,10 +81,10 @@ async def create_database(database: DatabaseFlavor, db: Session = Depends(get_db
|
81 | 81 | data=database
|
82 | 82 | ), 201
|
83 | 83 |
|
84 |
| -@router.get("/admin/postgresql_databases/") |
85 |
| -def get_all_postgresql_databases(db: Session = Depends(get_db)): |
86 |
| - postgresql_databases = db.query(Database).filter(Database.database_flavour_name == "postgres").all() |
87 |
| - return postgresql_databases |
| 84 | +# @router.get("/admin/postgresql_databases/") |
| 85 | +# def get_all_postgresql_databases(db: Session = Depends(get_db)): |
| 86 | +# postgresql_databases = db.query(Database).filter(Database.database_flavour_name == "postgres").all() |
| 87 | +# return postgresql_databases |
88 | 88 |
|
89 | 89 | @router.get("/user/databases")
|
90 | 90 | def get_user_databases(user_id:str, db: Session = Depends(get_db)):
|
@@ -114,16 +114,56 @@ def get_one_databases(database_id:str, db: Session = Depends(get_db)):
|
114 | 114 | raise HTTPException(status_code=404, detail="Databases not found")
|
115 | 115 | return user_databases
|
116 | 116 |
|
| 117 | +@router.get("/user/databases/{database_id}/password") |
| 118 | +def get_database_password(database_id:str, db: Session = Depends(get_db)): |
| 119 | + db_exists = db.query(Database).filter(Database.id == database_id).first() |
| 120 | + if not db_exists: |
| 121 | + raise HTTPException(status_code=404, detail="Database not found") |
| 122 | + return db_exists.password |
| 123 | + |
117 | 124 | @router.delete("/user/databases/{database_id}")
|
118 |
| -def admin_delete_user_database(database_id:str, db: Session = Depends(get_db)): |
| 125 | +def delete_user_database(database_id:str, db: Session = Depends(get_db)): |
119 | 126 | database = db.query(Database).filter(Database.id == database_id).first()
|
120 | 127 | if database is None:
|
121 | 128 | raise HTTPException(status_code=404, detail="Databases not found")
|
122 | 129 | database.deleted = True
|
123 | 130 | db.commit()
|
124 | 131 | return {"message": "Database deleted successfully"}
|
125 | 132 |
|
126 |
| -@router.post("/user/databases/reset/{database_id}") |
| 133 | +@router.post("/user/databases/{database_id}/enable") |
| 134 | +def enable_user_database(database_id:str, db: Session = Depends(get_db)): |
| 135 | + database = db.query(Database).filter(Database.id == database_id).first() |
| 136 | + if database is None: |
| 137 | + raise HTTPException(status_code=404, detail="Databases not found") |
| 138 | + |
| 139 | + if (database.disabled == False): |
| 140 | + raise HTTPException(status_code=404, detail="Databases is already enabled.") |
| 141 | + |
| 142 | + if database.admin_disabled: |
| 143 | + return {'You are not authorised to enable Database with id {database_id}, please contact an admin'}, 403 |
| 144 | + |
| 145 | + database.disabled = False |
| 146 | + db.commit() |
| 147 | + return {"message": "Database enabled successfully"} |
| 148 | + |
| 149 | + |
| 150 | +@router.post("/user/databases/{database_id}/disable") |
| 151 | +def disable_user_database(database_id:str, db: Session = Depends(get_db)): |
| 152 | + database = db.query(Database).filter(Database.id == database_id).first() |
| 153 | + if database is None: |
| 154 | + raise HTTPException(status_code=404, detail="Databases not found") |
| 155 | + |
| 156 | + if database.disabled: |
| 157 | + raise HTTPException(status_code=404, detail="Databases is already disabled.") |
| 158 | + |
| 159 | + if database.admin_disabled: |
| 160 | + return {'Database with id {database_id} is disabled, please contact an admin'}, 403 |
| 161 | + |
| 162 | + database.disabled = True |
| 163 | + db.commit() |
| 164 | + return {"message": "Database disabled successfully"} |
| 165 | + |
| 166 | +@router.post("/user/databases/{database_id}/reset/") |
127 | 167 | def reset_database(database_id:str, db: Session = Depends(get_db)):
|
128 | 168 | database = db.query(Database).filter(Database.id == database_id).first()
|
129 | 169 | if database is None:
|
@@ -162,6 +202,49 @@ def reset_database(database_id:str, db: Session = Depends(get_db)):
|
162 | 202 |
|
163 | 203 | return ({"status":'success', "message":"Database Reset Successfully"}), 200
|
164 | 204 |
|
| 205 | +@router.post("/user/databases/{database_id}/reset_password") |
| 206 | +def password_reset_database(database_id:str, field_update:PasswordUpdate, db: Session = Depends(get_db)): |
| 207 | + database = db.query(Database).filter(Database.id == database_id).first() |
| 208 | + if not database: |
| 209 | + raise HTTPException(status_code=404, detail="Databases not found") |
| 210 | + |
| 211 | + db_flavour = get_db_flavour(database.database_flavour_name) |
| 212 | + |
| 213 | + if not db_flavour: |
| 214 | + return dict( |
| 215 | + status="fail", |
| 216 | + message=f"Database with flavour name {database.database_flavour_name} is not mysql or postgres." |
| 217 | + ), 409 |
| 218 | + |
| 219 | + database_service = db_flavour['class'] |
| 220 | + |
| 221 | + database_connection = database_service.check_db_connection() |
| 222 | + |
| 223 | + if not database_connection: |
| 224 | + |
| 225 | + return dict( |
| 226 | + status="fail", |
| 227 | + message=f"Failed to connect to the database service" |
| 228 | + ), 500 |
| 229 | + |
| 230 | + password_reset_database = database_service.reset_password( |
| 231 | + |
| 232 | + user=database.user, |
| 233 | + password= field_update.password |
| 234 | + ) |
| 235 | + |
| 236 | + if not password_reset_database: |
| 237 | + return dict( |
| 238 | + status="fail", |
| 239 | + message=f"Unable to reset database password" |
| 240 | + ), 500 |
| 241 | + |
| 242 | + database.password = field_update.password |
| 243 | + |
| 244 | + db.commit() |
| 245 | + |
| 246 | + return ({"status":'success', "message":"Database Password Reset Successfully"}), 200 |
| 247 | + |
165 | 248 | @router.post("/user/databases")
|
166 | 249 | async def create_database(database: DatabaseFlavor, db: Session = Depends(get_db)):
|
167 | 250 |
|
|
0 commit comments