Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0aa1e24

Browse filesBrowse files
committed
updated
1 parent 52f1e05 commit 0aa1e24
Copy full SHA for 0aa1e24

File tree

5 files changed

+24
-21
lines changed
Filter options

5 files changed

+24
-21
lines changed

‎app/models.py

Copy file name to clipboardExpand all lines: app/models.py
+6-5Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import uuid
12
from .database import Base
23
from sqlalchemy import TIMESTAMP, Column, ForeignKey, String, Boolean, text
34
from sqlalchemy.dialects.postgresql import UUID
@@ -6,8 +7,8 @@
67

78
class User(Base):
89
__tablename__ = 'users'
9-
id = Column(UUID, primary_key=True, nullable=False,
10-
server_default=text("uuid_generate_v4()"))
10+
id = Column(UUID(as_uuid=True), primary_key=True, nullable=False,
11+
default=uuid.uuid4)
1112
name = Column(String, nullable=False)
1213
email = Column(String, unique=True, nullable=False)
1314
password = Column(String, nullable=False)
@@ -22,9 +23,9 @@ class User(Base):
2223

2324
class Post(Base):
2425
__tablename__ = 'posts'
25-
id = Column(UUID, primary_key=True, nullable=False,
26-
server_default=text("uuid_generate_v4()"))
27-
user_id = Column(UUID, ForeignKey(
26+
id = Column(UUID(as_uuid=True), primary_key=True, nullable=False,
27+
default=uuid.uuid4)
28+
user_id = Column(UUID(as_uuid=True), ForeignKey(
2829
'users.id', ondelete='CASCADE'), nullable=False)
2930
title = Column(String, nullable=False)
3031
content = Column(String, nullable=False)

‎app/oauth2.py

Copy file name to clipboardExpand all lines: app/oauth2.py
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class Settings(BaseModel):
1616
authjwt_token_location: set = {'cookies', 'headers'}
1717
authjwt_access_cookie_key: str = 'access_token'
1818
authjwt_refresh_cookie_key: str = 'refresh_token'
19+
authjwt_cookie_csrf_protect: bool = False
1920
authjwt_public_key: str = base64.b64decode(
2021
settings.JWT_PUBLIC_KEY).decode('utf-8')
2122
authjwt_private_key: str = base64.b64decode(

‎app/routers/auth.py

Copy file name to clipboardExpand all lines: app/routers/auth.py
+3-4Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ def login(payload: schemas.LoginUserSchema, response: Response, db: Session = De
6161

6262
# Create access token
6363
access_token = Authorize.create_access_token(
64-
subject=user.id, expires_time=timedelta(minutes=ACCESS_TOKEN_EXPIRES_IN))
64+
subject=str(user.id), expires_time=timedelta(minutes=ACCESS_TOKEN_EXPIRES_IN))
6565

6666
# Create refresh token
6767
refresh_token = Authorize.create_refresh_token(
68-
subject=user.id, expires_time=timedelta(minutes=REFRESH_TOKEN_EXPIRES_IN))
68+
subject=str(user.id), expires_time=timedelta(minutes=REFRESH_TOKEN_EXPIRES_IN))
6969

7070
# Store refresh and access tokens in cookie
7171
response.set_cookie('access_token', access_token, ACCESS_TOKEN_EXPIRES_IN * 60,
@@ -82,7 +82,6 @@ def login(payload: schemas.LoginUserSchema, response: Response, db: Session = De
8282
@router.get('/refresh')
8383
def refresh_token(response: Response, request: Request, Authorize: AuthJWT = Depends(), db: Session = Depends(get_db)):
8484
try:
85-
print(Authorize._refresh_cookie_key)
8685
Authorize.jwt_refresh_token_required()
8786

8887
user_id = Authorize.get_jwt_subject()
@@ -94,7 +93,7 @@ def refresh_token(response: Response, request: Request, Authorize: AuthJWT = Dep
9493
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,
9594
detail='The user belonging to this token no logger exist')
9695
access_token = Authorize.create_access_token(
97-
subject=user_id, expires_time=timedelta(minutes=ACCESS_TOKEN_EXPIRES_IN))
96+
subject=str(user.id), expires_time=timedelta(minutes=ACCESS_TOKEN_EXPIRES_IN))
9897
except Exception as e:
9998
error = e.__class__.__name__
10099
if error == 'MissingTokenError':

‎app/routers/post.py

Copy file name to clipboardExpand all lines: app/routers/post.py
+10-9Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
from typing import List
2-
from app import oauth2
1+
import uuid
32
from .. import schemas, models
43
from sqlalchemy.orm import Session
54
from fastapi import Depends, HTTPException, status, APIRouter, Response
65
from ..database import get_db
6+
from app.oauth2 import require_user
77

88
router = APIRouter()
99

1010

11-
@router.get("/")
12-
def get_posts(db: Session = Depends(get_db), limit: int = 10, page: int = 1, search: str = ''):
11+
@router.get('/')
12+
def get_posts(db: Session = Depends(get_db), limit: int = 10, page: int = 1, search: str = '', user_id: str = Depends(require_user)):
1313
skip = (page - 1) * limit
1414

1515
posts = db.query(models.Post).group_by(models.Post.id).filter(
@@ -18,16 +18,17 @@ def get_posts(db: Session = Depends(get_db), limit: int = 10, page: int = 1, sea
1818

1919

2020
@router.post('/', status_code=status.HTTP_201_CREATED, response_model=schemas.PostResponse)
21-
def create_post(post: schemas.CreatePostSchema, db: Session = Depends(get_db), user_id: str = Depends(oauth2.require_user)):
22-
new_post = models.Post(**post.dict(), user_id=user_id)
21+
def create_post(post: schemas.CreatePostSchema, db: Session = Depends(get_db), owner_id: str = Depends(require_user)):
22+
post.user_id = uuid.UUID(owner_id)
23+
new_post = models.Post(**post.dict())
2324
db.add(new_post)
2425
db.commit()
2526
db.refresh(new_post)
2627
return new_post
2728

2829

2930
@router.put('/{id}', response_model=schemas.PostResponse)
30-
def update_post(id: str, post: schemas.CreatePostSchema, db: Session = Depends(get_db), user_id: str = Depends(oauth2.require_user)):
31+
def update_post(id: str, post: schemas.CreatePostSchema, db: Session = Depends(get_db), user_id: str = Depends(require_user)):
3132
post_query = db.query(models.Post).filter(models.Post.id == id)
3233
updated_post = post_query.first()
3334

@@ -43,7 +44,7 @@ def update_post(id: str, post: schemas.CreatePostSchema, db: Session = Depends(g
4344

4445

4546
@router.get('/{id}', response_model=schemas.PostResponse)
46-
def get_post(id: str, db: Session = Depends(get_db), user_id: str = Depends(oauth2.require_user)):
47+
def get_post(id: str, db: Session = Depends(get_db), user_id: str = Depends(require_user)):
4748
post = db.query(models.Post).filter(models.Post.id == id).first()
4849
if not post:
4950
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND,
@@ -52,7 +53,7 @@ def get_post(id: str, db: Session = Depends(get_db), user_id: str = Depends(oaut
5253

5354

5455
@router.delete('/{id}')
55-
def delete_post(id: int, db: Session = Depends(get_db), user_id: str = Depends(oauth2.require_user)):
56+
def delete_post(id: str, db: Session = Depends(get_db), user_id: str = Depends(require_user)):
5657
post_query = db.query(models.Post).filter(models.Post.id == id)
5758
post = post_query.first()
5859
if not post:

‎app/schemas.py

Copy file name to clipboardExpand all lines: app/schemas.py
+4-3Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datetime import datetime
2+
import uuid
23
from pydantic import BaseModel, EmailStr, constr
34

45

@@ -24,7 +25,7 @@ class LoginUserSchema(BaseModel):
2425

2526

2627
class UserResponse(UserBaseSchema):
27-
id: str
28+
id: uuid.UUID
2829
created_at: datetime
2930
updated_at: datetime
3031

@@ -34,7 +35,7 @@ class PostBaseSchema(BaseModel):
3435
content: str
3536
category: str
3637
image: str
37-
user_id: str | None = None
38+
user_id: uuid.UUID | None = None
3839

3940
class Config:
4041
orm_mode = True
@@ -45,7 +46,7 @@ class CreatePostSchema(PostBaseSchema):
4546

4647

4748
class PostResponse(PostBaseSchema):
48-
id: str
49+
id: uuid.UUID
4950
user: UserResponse
5051
created_at: datetime
5152
updated_at: datetime

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.