diff --git a/main.py b/main.py index c33aa89..1a62d28 100644 --- a/main.py +++ b/main.py @@ -120,32 +120,19 @@ async def update_secret(secret: Secret, current_user: dict = Depends(get_current Updates an encrypted secret for the user. """ - data = [] - with open('database/secrets.json', 'r') as f: - text = f.read() - if text: - data.extend(json.loads(text)) - if secret.id is None: raise HTTPException(status.HTTP_400_BAD_REQUEST, detail="Id must be passed for updating secret") secret.user_id = current_user['id'] - found_secrets = [(i, j) for i, j in enumerate(data) if j['user_id'] == secret.user_id and j['id']==secret.id] - if not found_secrets: - raise HTTPException(status.HTTP_400_BAD_REQUEST, deatil="Secret with this Id not found for this user") - - secret_pos = found_secrets[0][0] - encryption_key = current_user['encryption_key'].encode() encrypted_data = fernet_encrypt(secret.data.encode(), encryption_key) - secret.data = encrypted_data.decode('utf-8') - data[secret_pos] = jsonable_encoder(secret) - with open('database/secrets.json', 'w') as f: - json.dump(data, f) - return secret + token = queries.UPDATE_SECRET(secret.model_dump()) + if not token: + raise HTTPException(status.HTTP_400_BAD_REQUEST, "Token not found for this user") + return token @app.get('/secret') @@ -154,6 +141,8 @@ async def list_secret(current_user: dict = Depends(get_current_user)): user_secrets = queries.GET_SECRETS({'user_id': current_user['id']}) encryption_key = current_user['encryption_key'].encode() + if not user_secrets: + return {'message': 'No tokens stored yet'} for secret in user_secrets: cur_data = secret['data'] diff --git a/queries.py b/queries.py index eea72de..9eb5546 100644 --- a/queries.py +++ b/queries.py @@ -128,6 +128,21 @@ CREATE_SECRET = DbQuery( rows=None ) +UPDATE_SECRET = DbQuery( + """ + UPDATE secrets + SET + data = :data, + modified_on = CURRENT_TIMESTAMP + WHERE + id = :id + RETURNING * + """, + type='write', + returns=True, + rows='single' +) + GET_SECRETS = DbQuery( """ SELECT *