diff options
Diffstat (limited to 'Projekt/app/oauth2.py')
-rw-r--r-- | Projekt/app/oauth2.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Projekt/app/oauth2.py b/Projekt/app/oauth2.py new file mode 100644 index 0000000..f381f97 --- /dev/null +++ b/Projekt/app/oauth2.py @@ -0,0 +1,49 @@ +from fastapi import Depends, status, HTTPException +from jose import JWTError, jwt +from datetime import datetime, timedelta +from sqlalchemy.orm import Session +from . import schemas, database, models +from fastapi.security import OAuth2PasswordBearer +from .config import settings + +oaut2_scheme = OAuth2PasswordBearer(tokenUrl="login") + +#Secrete_Key +#Algorütm +#Säilivusaeg, expiration time + +SECRET_KEY = settings.secret_key +ALGORITHM = settings.algorithm +ACCESS_TOKEN_EXPIRE_MINUTES = settings.access_token_expire_minutes + +def create_access_token(data: dict): + to_encode = data.copy() + + expire = datetime.utcnow() + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES) + to_encode.update( {"exp" : expire} ) + + encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM) + return encoded_jwt + +def verify_access_token(token: str, credentials_exception): + + try: + payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) #Decodeme tokeni + id: str = payload.get("user_id") # Ekstraktime tokenist id + if id is None: + raise credentials_exception + token_data = schemas.TokenData(id=id) + except JWTError: + raise credentials_exception + + return token_data + + +def get_current_user( token: str = Depends(oaut2_scheme), db: Session = Depends(database.get_db)): + credentials_exception = HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, + detail=f"Could not validate credentials", headers={"WWW-Authenticate": "Bearer"} ) + + token = verify_access_token(token, credentials_exception) + user = db.query(models.User).filter(models.User.id == token.id).first() + + return user |