Skip to content

Commit 63bc70d

Browse files
committed
feat: hashing user passwords
1 parent b36b28f commit 63bc70d

File tree

4 files changed

+16
-10
lines changed

4 files changed

+16
-10
lines changed

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ sqlalchemy
55
pyjwt[crypto]
66
jinja2
77
langflow==0.0.54
8-
black
8+
black
9+
passlib

server/api/auth.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import database
33
from database import User
44
from typing import Annotated
5+
from passlib.hash import sha256_crypt
56
from sqlalchemy.orm import Session
67
from fastapi import APIRouter, Depends, Query, Header
78
from pydantic import BaseModel
@@ -18,8 +19,8 @@ class AuthModel(BaseModel):
1819

1920
@auth_router.post("/login", status_code=200)
2021
def login(auth: AuthModel, db: Session = Depends(database.db_session)):
21-
user: User = db.query(User).filter((User.username == auth.username) & (User.password == auth.password)).first() # type: ignore
22-
if user is not None:
22+
user: User = db.query(User).filter(User.username == auth.username).first() # type: ignore
23+
if user is not None and sha256_crypt.verify(auth.password, user.password): # type: ignore
2324
token = jwt.encode(payload={"username": auth.username}, key=JWT_SECRET)
2425
response = {"msg": "success", "token": token}
2526
else:

server/api/user.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from typing import Annotated
33
from database import User
44
from sqlalchemy.orm import Session
5+
from passlib.hash import sha256_crypt
56
from fastapi import APIRouter, Depends, Query, Header
67
from pydantic import BaseModel
78
from commons.utils import get_user_from_jwt, verify_user
@@ -17,13 +18,14 @@ class ChangePasswordModel(BaseModel):
1718

1819
@user_router.post("/change_password", status_code=200)
1920
def change_password(inputs: ChangePasswordModel, token: Annotated[str, Header()], db: Session = Depends(database.db_session)):
20-
user = get_user_from_jwt(token)
21-
verify_user(user)
22-
user: User = db.query(User).filter((User.username == inputs.username) & (User.password == inputs.old_password)).first()
23-
if user is not None:
24-
user.password = inputs.new_password
21+
username = get_user_from_jwt(token)
22+
verify_user(username)
23+
user: User = db.query(User).filter(User.username == inputs.username).first() # type: ignore
24+
if sha256_crypt.verify(inputs.old_password, user.password): # type: ignore
25+
password = sha256_crypt.hash(inputs.new_password)
26+
user.password = password # type: ignore
2527
db.commit()
2628
response = {"msg": "success"}
2729
else:
28-
response = {"msg": "failed"}
30+
response = 400, {"msg": "You have entered the wrong password"}
2931
return response

server/commons/utils.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import jwt
2+
from passlib.hash import sha256_crypt
23
from sqlalchemy.exc import IntegrityError
34
from datetime import datetime, timedelta
45
from database import db_session, User, Prompt, IntermediateStep
@@ -9,7 +10,8 @@
910

1011

1112
def add_default_user():
12-
new_user = User(username="admin", password="admin", meta="")
13+
admin_password = sha256_crypt.hash("admin")
14+
new_user = User(username="admin", password=admin_password, meta="")
1315
db = db_session()
1416
try:
1517
db.add(new_user)

0 commit comments

Comments
 (0)