|
9 | 9 | from uuid import UUID |
10 | 10 |
|
11 | 11 | from fastapi import APIRouter, Request, Depends,\ |
12 | | - HTTPException, status |
| 12 | + HTTPException, status |
13 | 13 | from fastapi.security import OAuth2PasswordRequestForm |
14 | 14 | from sqlalchemy.ext.asyncio import AsyncSession |
15 | 15 |
|
16 | 16 | from ...db import get_async_session |
17 | 17 | from ...models import User |
18 | | -from ...schema import UserResponse, Token |
| 18 | +from ...dto import UserResponse, Token |
19 | 19 | from ...utils.auth import create_access_token |
20 | 20 | from ..utils import get_current_user |
21 | 21 |
|
|
32 | 32 | router.include_router(router_initiate, prefix="/initiate") |
33 | 33 | router.include_router(router_verify, prefix="/verify") |
34 | 34 |
|
| 35 | + |
35 | 36 | @router.post( |
36 | | - "/token", |
37 | | - summary="Provides an endpoint for login via email and password", |
| 37 | + "/token", |
| 38 | + summary="Provides an endpoint for login via email and password", |
38 | 39 | ) |
39 | 40 | async def login_for_auth_token( |
40 | | - form_data: OAuth2PasswordRequestForm = Depends(), |
41 | | - session: AsyncSession = Depends(get_async_session) |
| 41 | + form_data: OAuth2PasswordRequestForm = Depends(), |
| 42 | + session: AsyncSession = Depends(get_async_session) |
42 | 43 | ) -> Token: |
43 | | - """ Attempt to authenticate a user and issue JWT token |
44 | | -
|
45 | | - If the user does not exists or the password is incorrect |
46 | | - then an exception is raised which returns a 4xx response. |
47 | | - |
48 | | - """ |
49 | | - user = await User.get_by_email( |
50 | | - session, |
51 | | - form_data.username |
52 | | - ) |
53 | | - |
54 | | - if user is None or not user.check_password(form_data.password): |
55 | | - raise HTTPException( |
56 | | - status_code=status.HTTP_401_UNAUTHORIZED, |
57 | | - detail="Incorrect username or password", |
58 | | - headers={"WWW-Authenticate": "Bearer"}, |
| 44 | + """ Attempt to authenticate a user and issue JWT token |
| 45 | +
|
| 46 | + If the user does not exists or the password is incorrect |
| 47 | + then an exception is raised which returns a 4xx response. |
| 48 | +
|
| 49 | + """ |
| 50 | + user = await User.get_by_email( |
| 51 | + session, |
| 52 | + form_data.username |
| 53 | + ) |
| 54 | + |
| 55 | + if user is None or not user.check_password(form_data.password): |
| 56 | + raise HTTPException( |
| 57 | + status_code=status.HTTP_401_UNAUTHORIZED, |
| 58 | + detail="Incorrect username or password", |
| 59 | + headers={"WWW-Authenticate": "Bearer"}, |
| 60 | + ) |
| 61 | + |
| 62 | + access_token = create_access_token( |
| 63 | + subject=str(user.id), |
| 64 | + fresh=True |
| 65 | + ) |
| 66 | + |
| 67 | + return Token( |
| 68 | + access_token=access_token, |
| 69 | + token_type="bearer" |
59 | 70 | ) |
60 | 71 |
|
61 | | - access_token = create_access_token( |
62 | | - subject=str(user.id), |
63 | | - fresh=True |
64 | | - ) |
65 | | - |
66 | | - return Token( |
67 | | - access_token=access_token, |
68 | | - token_type="bearer" |
69 | | - ) |
70 | 72 |
|
71 | 73 | @router.post( |
72 | | - "/refresh", |
73 | | - summary=""" Provides an endpoint for refreshing the JWT token""", |
| 74 | + "/refresh", |
| 75 | + summary=""" Provides an endpoint for refreshing the JWT token""", |
74 | 76 | ) |
75 | 77 | async def refresh_jwt_token(request: Request, |
76 | | - current_user: User = Depends(get_current_user) |
77 | | -) -> Token: |
78 | | - """ Provides a refresh token for the JWT session. |
79 | | -
|
80 | | - There must be a currently authenticated user for the refresh |
81 | | - to work, otherwise an exception is raised. |
82 | | - """ |
83 | | - access_token = create_access_token( |
84 | | - subject=str(current_user.id), |
85 | | - ) |
86 | | - |
87 | | - return Token( |
88 | | - access_token=access_token, |
89 | | - token_type="bearer" |
90 | | - ) |
| 78 | + current_user: User = Depends(get_current_user) |
| 79 | + ) -> Token: |
| 80 | + """ Provides a refresh token for the JWT session. |
| 81 | +
|
| 82 | + There must be a currently authenticated user for the refresh |
| 83 | + to work, otherwise an exception is raised. |
| 84 | + """ |
| 85 | + access_token = create_access_token( |
| 86 | + subject=str(current_user.id), |
| 87 | + ) |
| 88 | + |
| 89 | + return Token( |
| 90 | + access_token=access_token, |
| 91 | + token_type="bearer" |
| 92 | + ) |
| 93 | + |
91 | 94 |
|
92 | 95 | @router.post( |
93 | | - "/logout", |
94 | | - summary=""" Provides an endpoint for logging out the user""", |
| 96 | + "/logout", |
| 97 | + summary=""" Provides an endpoint for logging out the user""", |
95 | 98 | ) |
96 | 99 | async def logout_user( |
97 | | - session: AsyncSession = Depends(get_async_session) |
| 100 | + session: AsyncSession = Depends(get_async_session) |
98 | 101 | ): |
99 | | - """ Ends a users session |
| 102 | + """ Ends a users session |
| 103 | +
|
| 104 | + Essentially invalidates a JWT token and then proceeds returns |
| 105 | + a success response. |
| 106 | + """ |
| 107 | + return {} |
100 | 108 |
|
101 | | - Essentially invalidates a JWT token and then proceeds returns |
102 | | - a success response. |
103 | | - """ |
104 | | - return {} |
105 | 109 |
|
106 | 110 | @router.get( |
107 | | - "/me", |
| 111 | + "/me", |
108 | 112 | ) |
109 | 113 | async def get_me( |
110 | | - current_user: User = Depends(get_current_user) |
| 114 | + current_user: User = Depends(get_current_user) |
111 | 115 | ) -> UserResponse: |
112 | | - """Get the currently logged in user or myself |
113 | | -
|
114 | | - This endpoint will return the currently logged in user or raise |
115 | | - and exception if the user is not logged in. |
116 | | - """ |
117 | | - return current_user |
| 116 | + """Get the currently logged in user or myself |
118 | 117 |
|
| 118 | + This endpoint will return the currently logged in user or raise |
| 119 | + and exception if the user is not logged in. |
| 120 | + """ |
| 121 | + return current_user |
0 commit comments