Skip to content

Commit 8028b2e

Browse files
committed
✨️ user.py Model
1 parent 9d5fd35 commit 8028b2e

6 files changed

Lines changed: 103 additions & 2 deletions

File tree

functions/hashing.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
2+
from passlib.context import CryptContext
3+
4+
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
5+
oauth2_sheme = OAuth2PasswordBearer(tokenUrl="token")
6+
7+
SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
8+
ALOGRITHM = "HS256"
9+
ACCESS_TOKEN_EXPIRE_MINUTES = 30
10+
11+
def verify_password(plain_password, hashed_password):
12+
return pwd_context.verify(plain_password, hashed_password)
13+
14+
15+
def get_password_hash(password):
16+
return pwd_context.hash(password)

functions/user.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from assets.database import openDBConnection
2+
from models.sessionkey import SessionKey
3+
from models.user import User
4+
5+
6+
def get_user(ID=None, EMAIL=None, SESSION_KEY=None):
7+
db = openDBConnection()
8+
cursor = db.cursor()
9+
10+
if ID is not None:
11+
cursor.execute("SELECT * FROM USERDATA WHERE ID = %s", (ID,))
12+
return fetch_data(cursor)
13+
if EMAIL is not None:
14+
cursor.execute("SELECT * FROM USERDATA WHERE ID = %s", (EMAIL,))
15+
return fetch_data(cursor)
16+
if SESSION_KEY is not None:
17+
cursor.execute("SELECT * FROM USERDATA WHERE ID = %s", (SESSION_KEY,))
18+
return fetch_data(cursor)
19+
else:
20+
raise ValueError('USER not Valid')
21+
22+
23+
def fetch_data(cursor):
24+
data = cursor.fetchone()
25+
return User(
26+
ID=data[0],
27+
EMAIL=data[1],
28+
PASSWORD_HASH=data[2],
29+
NAME=data[3],
30+
LASTNAME=data[4],
31+
CLASS=data[5],
32+
PERMISSION_LEVEL=data[6],
33+
LAST_IP=data[7],
34+
ACTIVE=data[8],
35+
SESSION_KEY=SessionKey(key=data[9])
36+
)

main.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
from fastapi import FastAPI
22

3+
import functions
4+
import models
5+
import assets
6+
37
app = FastAPI()
48

9+
10+
11+
12+
13+

models/apikey.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from assets.database import openDBConnection
44

55

6-
class apikey(BaseModel):
6+
class ApiKey(BaseModel):
77
ID: Optional[int]
88
NAME: Optional[str]
99
APIKEY: str

models/sessionkey.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@ def check_session_key(cls, values):
1919
values['valid'] = True
2020
return values
2121

22-
raise ValidationError('SessionKey is not valid')
22+
raise ValueError('SessionKey is not valid')

models/user.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from typing import Optional
2+
from pydantic import BaseModel, validator, ValidationError, IPvAnyAddress
3+
from assets.database import openDBConnection
4+
import re
5+
from models.sessionkey import SessionKey
6+
7+
8+
class User(BaseModel):
9+
ID: int
10+
EMAIL: Optional[str] = None
11+
PASSWORD_HASH: Optional[str] = None
12+
NAME: Optional[str] = None
13+
LASTNAME: Optional[str] = None
14+
CLASS: Optional[str] = None
15+
PERMISSION_LEVEL: Optional[int] = None
16+
LAST_IP: Optional[IPvAnyAddress] = None
17+
ACTIVE: Optional[bool] = None
18+
SESSION_KEY: Optional[SessionKey] = None
19+
20+
@validator('ID')
21+
def is_positiv(cls, values):
22+
if values > 0:
23+
return values
24+
raise ValueError('ID <= 0 is not possible')
25+
26+
@validator('EMAIL')
27+
def is_valid_email(cls, values):
28+
regex = r"^([A-z]+\.[A-z]+(\d\d)?@htl-salzburg.ac.at)$"
29+
if re.search(regex, values):
30+
return values
31+
else:
32+
raise ValueError('EMAIL not Valid')
33+
34+
@validator('CLASS')
35+
def is_valid_class(cls, values):
36+
regex = r"^([1-8][A-I]([A-Z]{2,4})|(LEHRER))$"
37+
if re.search(regex, values):
38+
return values
39+
else:
40+
raise ValueError('CLASS in not Valid')

0 commit comments

Comments
 (0)