323 lines
8.6 KiB
Python
323 lines
8.6 KiB
Python
import uuid
|
|
from typing import Union
|
|
|
|
from fastapi import APIRouter, Request, status, Header
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from ApiServices.AuthService.config import api_config
|
|
from ApiServices.AuthService.validations.request.authentication.login_post import (
|
|
RequestLogin,
|
|
RequestSelectLiving,
|
|
RequestSelectOccupant, RequestCreatePassword, RequestChangePassword, RequestForgotPasswordPhone,
|
|
RequestForgotPasswordEmail,
|
|
)
|
|
|
|
|
|
auth_route = APIRouter(
|
|
prefix="/authentication",
|
|
tags=["Authentication Cluster"],
|
|
)
|
|
|
|
|
|
@auth_route.post(
|
|
path="/login",
|
|
summary="Login via domain and access key : [email] | [phone]",
|
|
description="Login Route",
|
|
)
|
|
def authentication_login_post(
|
|
request: Request,
|
|
data: RequestLogin,
|
|
language: str = Header(None, alias="language"),
|
|
domain: str = Header(None, alias="domain"),
|
|
):
|
|
"""
|
|
Authentication Login Route with Post Method
|
|
"""
|
|
headers = {
|
|
"language": language or "",
|
|
"domain": domain or "",
|
|
"eys-ext": f"{str(uuid.uuid4())}",
|
|
}
|
|
if not domain or not language:
|
|
return JSONResponse(
|
|
content={"error": "EYS_0001"},
|
|
status_code=status.HTTP_406_NOT_ACCEPTABLE,
|
|
headers=headers,
|
|
)
|
|
return JSONResponse(
|
|
content={**data.model_dump()},
|
|
status_code=status.HTTP_202_ACCEPTED,
|
|
headers=headers,
|
|
)
|
|
|
|
|
|
@auth_route.post(
|
|
path="/select",
|
|
summary="Select company or occupant type",
|
|
description="Selection of users company or occupant type",
|
|
)
|
|
def authentication_select_post(
|
|
request: Request,
|
|
data: Union[RequestSelectOccupant, RequestSelectLiving],
|
|
language: str = Header(None, alias="language"),
|
|
domain: str = Header(None, alias="domain"),
|
|
):
|
|
"""
|
|
Authentication Select Route with Post Method
|
|
"""
|
|
token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None)
|
|
headers = {
|
|
"language": language or "",
|
|
"domain": domain or "",
|
|
"eys-ext": f"{str(uuid.uuid4())}",
|
|
"token": token,
|
|
}
|
|
if not domain or not language:
|
|
return JSONResponse(
|
|
content={"error": "EYS_0001"},
|
|
status_code=status.HTTP_406_NOT_ACCEPTABLE,
|
|
headers=headers,
|
|
)
|
|
|
|
return JSONResponse(
|
|
content=data.model_dump(),
|
|
status_code=status.HTTP_202_ACCEPTED,
|
|
headers=headers,
|
|
)
|
|
|
|
|
|
@auth_route.get(
|
|
path="/logout",
|
|
summary="Logout user",
|
|
description="Logout only single session of user which domain is provided",
|
|
)
|
|
def authentication_logout_post(
|
|
request: Request,
|
|
language: str = Header(None, alias="language"),
|
|
domain: str = Header(None, alias="domain"),
|
|
):
|
|
"""
|
|
Logout user from the system
|
|
"""
|
|
token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None)
|
|
headers = {
|
|
"language": language or "",
|
|
"domain": domain or "",
|
|
"eys-ext": f"{str(uuid.uuid4())}",
|
|
"token": token,
|
|
}
|
|
if not domain or not language:
|
|
return JSONResponse(
|
|
content={"error": "EYS_0003"},
|
|
status_code=status.HTTP_406_NOT_ACCEPTABLE,
|
|
headers=headers,
|
|
)
|
|
|
|
return JSONResponse(
|
|
content={},
|
|
status_code=status.HTTP_202_ACCEPTED,
|
|
headers=headers,
|
|
)
|
|
|
|
|
|
@auth_route.get(
|
|
path="/disconnect",
|
|
summary="Disconnect all sessions",
|
|
description="Disconnect all sessions of user in access token",
|
|
)
|
|
def authentication_disconnect_post(
|
|
request: Request,
|
|
language: str = Header(None, alias="language"),
|
|
domain: str = Header(None, alias="domain"),
|
|
):
|
|
"""
|
|
Disconnect all sessions of user in access token
|
|
"""
|
|
|
|
token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None)
|
|
headers = {
|
|
"language": language or "",
|
|
"domain": domain or "",
|
|
"eys-ext": f"{str(uuid.uuid4())}",
|
|
"token": token,
|
|
}
|
|
if not domain or not language:
|
|
return JSONResponse(
|
|
content={"error": "EYS_0003"},
|
|
status_code=status.HTTP_406_NOT_ACCEPTABLE,
|
|
headers=headers,
|
|
)
|
|
|
|
return JSONResponse(
|
|
content={},
|
|
status_code=status.HTTP_202_ACCEPTED,
|
|
headers=headers,
|
|
)
|
|
|
|
|
|
@auth_route.get(
|
|
path="/token/check",
|
|
summary="Check if token is valid",
|
|
description="Check if access token is valid for user",
|
|
)
|
|
def authentication_token_check_post(
|
|
request: Request,
|
|
language: str = Header(None, alias="language"),
|
|
domain: str = Header(None, alias="domain"),
|
|
):
|
|
"""
|
|
Check if access token is valid for user
|
|
"""
|
|
|
|
token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None)
|
|
headers = {
|
|
"language": language or "",
|
|
"domain": domain or "",
|
|
"eys-ext": f"{str(uuid.uuid4())}",
|
|
"token": token,
|
|
}
|
|
if not domain or not language:
|
|
return JSONResponse(
|
|
content={"error": "EYS_0003"},
|
|
status_code=status.HTTP_406_NOT_ACCEPTABLE,
|
|
headers=headers,
|
|
)
|
|
|
|
return JSONResponse(
|
|
content={},
|
|
status_code=status.HTTP_202_ACCEPTED,
|
|
headers=headers,
|
|
)
|
|
|
|
|
|
@auth_route.get(
|
|
path="/token/refresh",
|
|
summary="Refresh if token is valid",
|
|
description="Refresh if access token is valid for user",
|
|
)
|
|
def authentication_token_refresh_post(
|
|
request: Request,
|
|
language: str = Header(None, alias="language"),
|
|
domain: str = Header(None, alias="domain"),
|
|
):
|
|
"""
|
|
Refresh if access token is valid for user
|
|
"""
|
|
headers = {
|
|
"language": language or "",
|
|
"domain": domain or "",
|
|
"eys-ext": f"{str(uuid.uuid4())}",
|
|
}
|
|
if not domain or not language:
|
|
return JSONResponse(
|
|
content={"error": "EYS_0003"},
|
|
status_code=status.HTTP_406_NOT_ACCEPTABLE,
|
|
headers=headers,
|
|
)
|
|
|
|
return JSONResponse(
|
|
content={},
|
|
status_code=status.HTTP_202_ACCEPTED,
|
|
headers=headers,
|
|
)
|
|
|
|
|
|
@auth_route.post(
|
|
path="/password/create",
|
|
summary="Create password with access token",
|
|
description="Create password",
|
|
)
|
|
def authentication_password_create_post(
|
|
request: Request,
|
|
data: RequestCreatePassword,
|
|
language: str = Header(None, alias="language"),
|
|
domain: str = Header(None, alias="domain"),
|
|
):
|
|
"""
|
|
Authentication create password Route with Post Method
|
|
"""
|
|
token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None)
|
|
headers = {
|
|
"language": language or "",
|
|
"domain": domain or "",
|
|
"eys-ext": f"{str(uuid.uuid4())}",
|
|
"token": token,
|
|
}
|
|
if not domain or not language:
|
|
return JSONResponse(
|
|
content={"error": "EYS_0001"},
|
|
status_code=status.HTTP_406_NOT_ACCEPTABLE,
|
|
headers=headers,
|
|
)
|
|
return JSONResponse(
|
|
content={**data.model_dump()},
|
|
status_code=status.HTTP_202_ACCEPTED,
|
|
headers=headers,
|
|
)
|
|
|
|
|
|
@auth_route.post(
|
|
path="/password/change",
|
|
summary="Change password with access token",
|
|
description="Change password",
|
|
)
|
|
def authentication_password_change_post(
|
|
request: Request,
|
|
data: RequestChangePassword,
|
|
language: str = Header(None, alias="language"),
|
|
domain: str = Header(None, alias="domain"),
|
|
):
|
|
"""
|
|
Authentication change password Route with Post Method
|
|
"""
|
|
token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None)
|
|
headers = {
|
|
"language": language or "",
|
|
"domain": domain or "",
|
|
"eys-ext": f"{str(uuid.uuid4())}",
|
|
"token": token,
|
|
}
|
|
if not domain or not language:
|
|
return JSONResponse(
|
|
content={"error": "EYS_0001"},
|
|
status_code=status.HTTP_406_NOT_ACCEPTABLE,
|
|
headers=headers,
|
|
)
|
|
return JSONResponse(
|
|
content={**data.model_dump()},
|
|
status_code=status.HTTP_202_ACCEPTED,
|
|
headers=headers,
|
|
)
|
|
|
|
|
|
@auth_route.post(
|
|
path="/password/reset",
|
|
summary="Reset password with access token",
|
|
description="Reset password",
|
|
)
|
|
def authentication_password_reset_post(
|
|
request: Request,
|
|
data: Union[RequestForgotPasswordEmail, RequestForgotPasswordPhone],
|
|
language: str = Header(None, alias="language"),
|
|
domain: str = Header(None, alias="domain"),
|
|
):
|
|
"""
|
|
Authentication reset password Route with Post Method
|
|
"""
|
|
headers = {
|
|
"language": language or "",
|
|
"domain": domain or "",
|
|
"eys-ext": f"{str(uuid.uuid4())}",
|
|
}
|
|
if not domain or not language:
|
|
return JSONResponse(
|
|
content={"error": "EYS_0001"},
|
|
status_code=status.HTTP_406_NOT_ACCEPTABLE,
|
|
headers=headers,
|
|
)
|
|
return JSONResponse(
|
|
content={**data.model_dump()},
|
|
status_code=status.HTTP_202_ACCEPTED,
|
|
headers=headers,
|
|
)
|