Initial commit
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
from .auth import *
|
||||
from .role import *
|
||||
from .user import *
|
||||
@@ -0,0 +1,68 @@
|
||||
from typing import Optional, List
|
||||
|
||||
from fastapi import Depends, APIRouter, Body, Request
|
||||
from fastapi.security import SecurityScopes
|
||||
from pydantic import BaseModel
|
||||
|
||||
from auth.models import UserModel, OAuth2PasswordRequestFormJson, CreateTokenModel, OAuth2OptRequest, \
|
||||
PasswordForgottenInput
|
||||
from auth.utils import get_current_active_user, get_current_user, generate_token, reset_password
|
||||
from config import conf
|
||||
from core.app import app
|
||||
from core.utils import to_http_res
|
||||
from core.utils.router import BaseRoute, safe_route
|
||||
|
||||
_pre = conf.server.prefix_url
|
||||
|
||||
router = APIRouter(
|
||||
prefix=f"{_pre}/auth",
|
||||
route_class=BaseRoute,
|
||||
)
|
||||
|
||||
_tag_base = ['token']
|
||||
|
||||
|
||||
class ValidateTokenInput(BaseModel):
|
||||
token: str
|
||||
scopes: Optional[List[str]] = ['account']
|
||||
|
||||
|
||||
@router.post('/login/otp', response_model=CreateTokenModel, tags=_tag_base)
|
||||
async def login_with_otp(request: Request, form_data: OAuth2OptRequest = Depends()):
|
||||
client_host = request.client.host
|
||||
return await safe_route('login', generate_token, form_data, client_host, request.headers.get('user-agent'))
|
||||
|
||||
|
||||
@router.post("/token", response_model=CreateTokenModel, tags=_tag_base)
|
||||
async def login_for_access_token(request: Request, form_data: OAuth2PasswordRequestFormJson = Depends()):
|
||||
client_host = request.client.host
|
||||
return await safe_route('login', generate_token, form_data, client_host, request.headers.get('user-agent'))
|
||||
|
||||
|
||||
@router.post('/login', response_model=CreateTokenModel, tags=_tag_base)
|
||||
async def login(request: Request, data: OAuth2PasswordRequestFormJson = Depends()):
|
||||
client_host = request.client.host
|
||||
return await safe_route('login', generate_token, data, client_host, request.headers.get('user-agent'))
|
||||
|
||||
|
||||
@router.post('/reset-password', response_model=bool, tags=_tag_base)
|
||||
async def reset_password_p(_input: PasswordForgottenInput):
|
||||
return await safe_route('update', reset_password, _input)
|
||||
|
||||
|
||||
@router.get('/logout', response_model=bool, tags=_tag_base)
|
||||
async def logout():
|
||||
return to_http_res(True, 'token')
|
||||
|
||||
|
||||
@router.get("/status", tags=_tag_base)
|
||||
async def token_status(current_user: UserModel = Depends(get_current_active_user)):
|
||||
return to_http_res('get', {"status": "token is valid", "scope": current_user.scopes})
|
||||
|
||||
|
||||
@router.post('/validate-token', tags=_tag_base)
|
||||
async def validate_token(body: ValidateTokenInput = Body(...)):
|
||||
return await safe_route('get', get_current_user, SecurityScopes(scopes=body.scopes), body.token)
|
||||
|
||||
|
||||
app.include_router(router)
|
||||
@@ -0,0 +1,36 @@
|
||||
from typing import List
|
||||
|
||||
from fastapi import Request, Body
|
||||
|
||||
from auth.models.roles import RoleModel
|
||||
from auth.repositories.AuthRepository import AuthRepository
|
||||
from core.app import app
|
||||
from core.utils.router import generate_router, safe_route
|
||||
|
||||
router = generate_router("roles", auth_dependencies=True)
|
||||
|
||||
_tag_base = ['roles']
|
||||
|
||||
|
||||
@router.get('/routes', tags=_tag_base)
|
||||
async def get_routes(request: Request) -> List[str]:
|
||||
roles_ids = request.state.user.roles if request.state.user.roles else []
|
||||
return await safe_route('fetch', AuthRepository.get_f_routes, roles_ids)
|
||||
|
||||
|
||||
@router.post('/create', tags=_tag_base)
|
||||
async def create(_input: RoleModel = Body(...)):
|
||||
return await safe_route('create', AuthRepository.create_role, _input)
|
||||
|
||||
|
||||
@router.get('/modules', tags=_tag_base)
|
||||
async def get_my_modules():
|
||||
return await safe_route('fetch', AuthRepository.get_my_modules)
|
||||
|
||||
|
||||
@router.post('', tags=_tag_base)
|
||||
async def fetch() -> List[str]:
|
||||
return await safe_route('fetch', AuthRepository.get_roles)
|
||||
|
||||
|
||||
app.include_router(router)
|
||||
@@ -0,0 +1,85 @@
|
||||
from uuid import UUID
|
||||
|
||||
from fastapi import Body, Depends
|
||||
|
||||
from auth.models import UserModel, UserInDB, UIdsInput, UserOptions, PasswordChangeModel, UserUpdateModel, \
|
||||
VisualUserUpdate
|
||||
from auth.repositories.AuthRepository import AuthRepository
|
||||
from auth.utils import get_current_active_user
|
||||
from auth.utils.mongo import get_auth_db
|
||||
from core.app import app
|
||||
from core.utils import to_http_res
|
||||
from core.utils.router import safe_route, generate_router
|
||||
from core.utils.sumery import setup_sumery_object, SumeryObject
|
||||
|
||||
setup_sumery_object(
|
||||
SumeryObject(db=get_auth_db(),
|
||||
object_name='users',
|
||||
table_name='users',
|
||||
value_col='name',
|
||||
key_col='_id',
|
||||
cols_search=['name', 'mobile']
|
||||
))
|
||||
|
||||
router = generate_router("users", auth_dependencies=True)
|
||||
|
||||
_tag_base = ['users']
|
||||
|
||||
|
||||
@router.get("/me", response_model=UserModel, tags=_tag_base)
|
||||
async def read_users_me(current_user: UserModel = Depends(get_current_active_user)):
|
||||
print("123")
|
||||
return to_http_res(current_user, 'get')
|
||||
|
||||
|
||||
@router.get('/query/{query}', tags=_tag_base)
|
||||
async def users(query: str = None):
|
||||
return await safe_route('fetch', AuthRepository.user_query, query)
|
||||
|
||||
|
||||
@router.get("/sessions", tags=_tag_base)
|
||||
async def get_my_sessions():
|
||||
return await safe_route('fetch', AuthRepository.get_my_sessions)
|
||||
|
||||
|
||||
@router.get("/{_id}", tags=_tag_base)
|
||||
async def get_user_by_id_api(_id: UUID):
|
||||
return await safe_route('fetch', AuthRepository.get_user, _id)
|
||||
|
||||
|
||||
@router.put("/update-password", tags=_tag_base)
|
||||
async def update_password(password: PasswordChangeModel = Body(...)):
|
||||
return await safe_route('update', AuthRepository.update_password, password)
|
||||
|
||||
|
||||
@router.put("/options", tags=_tag_base)
|
||||
async def update_options(options: UserOptions = Body(...)):
|
||||
return await safe_route('update', AuthRepository.update_options, options)
|
||||
|
||||
|
||||
@router.put("/update-avatar", tags=_tag_base)
|
||||
async def update_avatar(options: VisualUserUpdate = Body(...)):
|
||||
return await safe_route('update', AuthRepository.update_avatar, options)
|
||||
|
||||
|
||||
@router.put("", tags=_tag_base)
|
||||
async def update_user(_input: UserUpdateModel = Body(...)):
|
||||
return await safe_route('fetch', AuthRepository.update_user, _input)
|
||||
|
||||
|
||||
@router.delete("/sessions/{_id}", tags=_tag_base)
|
||||
async def delete_session(_id: UUID):
|
||||
return await safe_route('fetch', AuthRepository.delete_session, _id)
|
||||
|
||||
|
||||
@router.post("/create", tags=_tag_base)
|
||||
async def create_user(_input: UserInDB = Body(...)):
|
||||
return await safe_route('create', AuthRepository.create, _input)
|
||||
|
||||
|
||||
@router.post('', tags=_tag_base)
|
||||
async def users(body: UIdsInput = Body(...)):
|
||||
return await safe_route('fetch', AuthRepository.get_users_by_id, body)
|
||||
|
||||
|
||||
app.include_router(router)
|
||||
Reference in New Issue
Block a user