diff --git a/.gitignore b/.gitignore index 3693a64..8c6ef1a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ /deploy/.* *.log *.pyc -freedev.code-workspace \ No newline at end of file +freedev.code-workspace +.idea/ \ No newline at end of file diff --git a/apps/notification/.env b/apps/notification/.env index 04c30f2..2403990 100644 --- a/apps/notification/.env +++ b/apps/notification/.env @@ -5,7 +5,7 @@ export CONTAINER_APP_ROOT=/app export LOG_BASE_PATH=$CONTAINER_APP_ROOT/log/$APP_NAME export BACKEND_LOG_FILE_NAME=$APP_NAME export APPLICATION_ACTIVITY_LOG=$APP_NAME-activity -export SENDGRID_API_KEY='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' +export SENDGRID_API_KEY=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 export EMAIL_FROM=freeleaps@freeleaps.com export TWILIO_ACCOUNT_SID=ACf8c9283a6acda060258eadb29be58bc8 export TWILIO_AUTH_TOKEN=ef160748cc22c8b7195b49df4b8eca7e diff --git a/apps/notification/Dockerfile b/apps/notification/Dockerfile index 2268ab8..f88b8bc 100644 --- a/apps/notification/Dockerfile +++ b/apps/notification/Dockerfile @@ -1,33 +1,33 @@ FROM python:3.10-slim-buster # docker settings -ARG CONTAINER_APP_ROOT= -ENV APP_NAME= +ARG CONTAINER_APP_ROOT=/app +ENV APP_NAME=notification #site_settings ENV SERVICE_API_ACCESS_HOST=0.0.0.0 ENV SERVICE_API_ACCESS_PORT=8003 -ENV RABBITMQ_HOST= -ENV RABBITMQ_PORT= +ENV RABBITMQ_HOST=localhost +ENV RABBITMQ_PORT=5672 -ENV SYSTEM_USER_ID= -ENV SMS_FROM= -ENV EMAIL_FROM= +ENV SYSTEM_USER_ID=117f191e810c19729de860aa +ENV SMS_FROM=+16898887156 +ENV EMAIL_FROM=freeleaps@freeleaps.com -ENV SECRET_KEY= +ENV SECRET_KEY=ea84edf152976b2fcec12b78aa8e45bc26a5cf0ef61bf16f5c317ae33b3fd8b0 -ENV SENDGRID_API_KEY= +ENV SENDGRID_API_KEY=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 -ENV TWILIO_ACCOUNT_SID= -ENV TWILIO_AUTH_TOKEN= +ENV TWILIO_ACCOUNT_SID=ACf8c9283a6acda060258eadb29be58bc8 +ENV TWILIO_AUTH_TOKEN=ef160748cc22c8b7195b49df4b8eca7e #log_settings -ENV LOG_BASE_PATH= -ENV BACKEND_LOG_FILE_NAME= -ENV APPLICATION_ACTIVITY_LOG= +ENV LOG_BASE_PATH=$CONTAINER_APP_ROOT/log/$APP_NAME +ENV BACKEND_LOG_FILE_NAME=$APP_NAME +ENV APPLICATION_ACTIVITY_LOG=$APP_NAME-activity WORKDIR ${CONTAINER_APP_ROOT} diff --git a/apps/payment/__init__.py b/apps/payment/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/apps/payment/backend/__init__.py b/apps/payment/backend/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/apps/payment/webapi/main.py b/apps/payment/webapi/main.py index c35ffa3..d325986 100755 --- a/apps/payment/webapi/main.py +++ b/apps/payment/webapi/main.py @@ -1,7 +1,6 @@ from webapi.bootstrap.application import create_app from webapi.config.site_settings import site_settings from fastapi.responses import RedirectResponse -from fastapi.middleware.cors import CORSMiddleware import uvicorn from typing import Any diff --git a/apps/payment/webapi/routes/__init__.py b/apps/payment/webapi/routes/__init__.py index 3151997..52d8002 100644 --- a/apps/payment/webapi/routes/__init__.py +++ b/apps/payment/webapi/routes/__init__.py @@ -1,10 +1,6 @@ from fastapi import APIRouter -from .signin import router as signin_router -from .tokens import router as token_router -from .auth import router as auth_router +from .payment import router as payment_router api_router = APIRouter() -api_router.include_router(signin_router, tags=["user"]) -api_router.include_router(token_router, tags=["token"]) -api_router.include_router(auth_router, tags=["auth"]) +api_router.include_router(payment_router, tags=["payment"]) websocket_router = APIRouter() diff --git a/apps/payment/webapi/routes/auth/__init__.py b/apps/payment/webapi/routes/auth/__init__.py deleted file mode 100644 index 355e2b6..0000000 --- a/apps/payment/webapi/routes/auth/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from fastapi import APIRouter -from .send_email_code import router as sec_router -from .send_mobile_code import router as smc_router - - -router = APIRouter(prefix="/auth") - -router.include_router(sec_router, tags=["authentication"]) -router.include_router(smc_router, tags=["authentication"]) diff --git a/apps/payment/webapi/routes/auth/send_email_code.py b/apps/payment/webapi/routes/auth/send_email_code.py deleted file mode 100644 index 050b791..0000000 --- a/apps/payment/webapi/routes/auth/send_email_code.py +++ /dev/null @@ -1,41 +0,0 @@ -from backend.application.signin_hub import SignInHub -from pydantic import BaseModel -from common.token.token_manager import TokenManager -from fastapi.encoders import jsonable_encoder -from fastapi.responses import JSONResponse -from fastapi import APIRouter, Depends, HTTPException -from starlette.status import HTTP_401_UNAUTHORIZED - -router = APIRouter() -token_manager = TokenManager() -# Web API -# send_email_code -# - - -class RequestIn(BaseModel): - email: str - sender_id: str - - -@router.post( - "/send-email-code", - operation_id="send-email-code", - summary="Send a verification code to the specified email address", - description="This API requires an authenticated user and will send a code to the specified email. \ - The code can be used later to verify the email address.", - response_description="Indicates success or failure of the email code send operation", -) -async def send_email_code( - item: RequestIn, - current_user: dict = Depends(token_manager.get_current_user), -): - user_id = current_user.get("id") - - if not user_id: - raise HTTPException( - status_code=HTTP_401_UNAUTHORIZED, detail="Could not validate credentials" - ) - - result = await SignInHub(user_id).send_email_code(item.sender_id, item.email) - return JSONResponse(content=jsonable_encoder(result)) diff --git a/apps/payment/webapi/routes/auth/send_mobile_code.py b/apps/payment/webapi/routes/auth/send_mobile_code.py deleted file mode 100644 index 29bdd5b..0000000 --- a/apps/payment/webapi/routes/auth/send_mobile_code.py +++ /dev/null @@ -1,40 +0,0 @@ -from backend.application.signin_hub import SignInHub -from pydantic import BaseModel -from common.token.token_manager import TokenManager -from fastapi.encoders import jsonable_encoder -from fastapi.responses import JSONResponse -from fastapi import APIRouter, Depends, HTTPException -from starlette.status import HTTP_401_UNAUTHORIZED - -router = APIRouter() -token_manager = TokenManager() -# Web API -# send_email_code -# - - -class RequestIn(BaseModel): - email: str - - -@router.post( - "/send-mobile-code", - operation_id="send-mobile-code", - summary="Send a verification code to the specified mobile number", - description="This API requires an authenticated user and will send a code to the specified mobile. \ - The code can be used later to verify the mobile.", - response_description="Indicates success or failure of the mobile code send operation", -) -async def send_email_code( - item: RequestIn, - current_user: dict = Depends(token_manager.get_current_user), -): - user_id = current_user.get("id") - - if not user_id: - raise HTTPException( - status_code=HTTP_401_UNAUTHORIZED, detail="Could not validate credentials" - ) - - result = await SignInHub(user_id).send_mobile_code(item.email) - return JSONResponse(content=jsonable_encoder(result)) diff --git a/apps/payment/webapi/routes/payment/__init__.py b/apps/payment/webapi/routes/payment/__init__.py index e69de29..f7c4fae 100644 --- a/apps/payment/webapi/routes/payment/__init__.py +++ b/apps/payment/webapi/routes/payment/__init__.py @@ -0,0 +1,9 @@ +from fastapi import APIRouter +from .payment_manager_controller import router as pmc +from .stripe_manager_controller import router as smc + + +router = APIRouter(prefix="/payment") + +router.include_router(pmc, tags=["payment"]) +router.include_router(smc, tags=["payment"]) diff --git a/apps/payment/webapi/routes/signin/__init__.py b/apps/payment/webapi/routes/signin/__init__.py deleted file mode 100644 index 6cee2d0..0000000 --- a/apps/payment/webapi/routes/signin/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -from fastapi import APIRouter -from .try_signin_with_email import router as ts_router -from .signin_with_email_and_password import router as se_router -from .signin_with_email_and_code import router as sw_router -from .update_user_password import router as up_router -from .update_new_user_flid import router as uu_router -from .reset_password_through_email import router as rp_router -from .sign_out import router as so_router - - -router = APIRouter(prefix="/signin") - -router.include_router(ts_router, tags=["signin"]) -router.include_router(sw_router, tags=["signin"]) -router.include_router(up_router, tags=["signin"]) -router.include_router(se_router, tags=["signin"]) -router.include_router(so_router, tags=["signin"]) -router.include_router(rp_router, tags=["signin"]) -router.include_router(uu_router, tags=["signin"]) diff --git a/apps/payment/webapi/routes/signin/reset_password_through_email.py b/apps/payment/webapi/routes/signin/reset_password_through_email.py deleted file mode 100644 index e4f1519..0000000 --- a/apps/payment/webapi/routes/signin/reset_password_through_email.py +++ /dev/null @@ -1,37 +0,0 @@ -from backend.application.signin_hub import SignInHub -from pydantic import BaseModel -from fastapi import APIRouter -from fastapi.encoders import jsonable_encoder -from fastapi.responses import JSONResponse - -router = APIRouter() - -# Web API -# reset_password_through_email -# - - -class UserSignWithEmailBody(BaseModel): - email: str - host: str - - -class UserSignWithEmailResponse(BaseModel): - signin_type: int - - -@router.post( - "/reset-password-through-email", - operation_id="user-reset-password-through-email", - summary="user reset password through email", - description="A client user forgets the password. \ - The system will send auth code the their email\ - to let the user reset the password", - response_description="action: UserLoginAction", -) -async def reset_password_through_email( - item: UserSignWithEmailBody, -): - result = await SignInHub().reset_password_through_email(item.email, item.host) - result = {"action": result} - return JSONResponse(content=jsonable_encoder(result)) diff --git a/apps/payment/webapi/routes/signin/sign_out.py b/apps/payment/webapi/routes/signin/sign_out.py deleted file mode 100644 index 18395b2..0000000 --- a/apps/payment/webapi/routes/signin/sign_out.py +++ /dev/null @@ -1,40 +0,0 @@ -from backend.application.signin_hub import SignInHub -from pydantic import BaseModel -from fastapi import APIRouter -from common.token.token_manager import TokenManager -from fastapi import APIRouter, Depends -from fastapi.encoders import jsonable_encoder -from fastapi.responses import JSONResponse -from fastapi import Depends, HTTPException -from starlette.status import HTTP_401_UNAUTHORIZED - -router = APIRouter() -token_manager = TokenManager() -# Web API -# sign_out -# - - -class RequestIn(BaseModel): - identity: str - - -@router.post( - "/sign-out", - operation_id="sign-out", - summary="sign out a logged in user", - description="sign out a logged in user", - response_description="none", -) -async def sign_out( - item: RequestIn, - current_user: dict = Depends(token_manager.get_current_user), -): - user_id = current_user.get("id") - - if not user_id: - raise HTTPException( - status_code=HTTP_401_UNAUTHORIZED, detail="Could not validate credentials" - ) - result = await SignInHub().sign_out(user_id) - return JSONResponse(content=jsonable_encoder(result)) diff --git a/apps/payment/webapi/routes/signin/signin_with_email_and_code.py b/apps/payment/webapi/routes/signin/signin_with_email_and_code.py deleted file mode 100644 index b2b2865..0000000 --- a/apps/payment/webapi/routes/signin/signin_with_email_and_code.py +++ /dev/null @@ -1,91 +0,0 @@ -import logging -from datetime import datetime, timezone -from typing import Optional - -from fastapi import APIRouter -from fastapi.encoders import jsonable_encoder -from fastapi.responses import JSONResponse -from pydantic import BaseModel - -from backend.application.signin_hub import SignInHub -from common.token.token_manager import TokenManager - - -router = APIRouter() -token_manager = TokenManager() - -# Web API -# signin-with-email-n-code -# - - -class RequestIn(BaseModel): - email: str - code: str - host: str - time_zone: Optional[str] = "UTC" - - -class ResponseOut(BaseModel): - # 1: succeeded - signin_result: int - # the access token for futhur communication with server - access_token: Optional[str] = None - # the refresh token for new access token generation - refresh_token: Optional[str] = None - # the identity of the signed in user - identity: Optional[str] = None - # the date time when the access toke will be expired - expires_in: Optional[datetime] = None - # the system assigned role of the user. - role: Optional[int] = None - # preferred region for user - preferred_region: Optional[str] = None - - -@router.post( - "/signin-with-email-and-code", - operation_id="user-signin-with-email-and-code", - summary="try to signin with email and authentication code", - description="client user is trying to sign in with their email and the authenication code \ - the system sent to the email in previous step.", - response_model=ResponseOut, -) -async def signin_with_email_and_code(item: RequestIn) -> ResponseOut: - ( - signed_in, - adminstrative_role, - identity, - flid, - preferred_region, - ) = await SignInHub().signin_with_email_and_code( - item.email, item.code, item.host, item.time_zone - ) - - logging.debug( - f"signedin={signed_in}, adminstrative_role={adminstrative_role}, identity={identity}" - ) - - if signed_in and identity and adminstrative_role: - subject = {"id": identity, "role": adminstrative_role} - access_token = token_manager.create_access_token(subject=subject) - refresh_token = token_manager.create_refresh_token(subject=subject) - expires_in = ( - datetime.now(timezone.utc) + token_manager.access_token_expire_minutes - ) - else: - access_token = None - refresh_token = None - expires_in = None - - result = { - "signin_result": signed_in, - "access_token": access_token, - "refresh_token": refresh_token, - "identity": identity, - "expires_in": expires_in, - "role": adminstrative_role, - "flid": flid, - "preferred_region": preferred_region, - } - return JSONResponse(content=jsonable_encoder(result)) diff --git a/apps/payment/webapi/routes/signin/signin_with_email_and_password.py b/apps/payment/webapi/routes/signin/signin_with_email_and_password.py deleted file mode 100644 index ff2a598..0000000 --- a/apps/payment/webapi/routes/signin/signin_with_email_and_password.py +++ /dev/null @@ -1,87 +0,0 @@ -import logging -from datetime import datetime, timezone -from typing import Optional - -from pydantic import BaseModel -from fastapi import APIRouter -from fastapi.encoders import jsonable_encoder -from fastapi.responses import JSONResponse -from fastapi import Depends, HTTPException -from starlette.status import HTTP_401_UNAUTHORIZED - -from backend.application.signin_hub import SignInHub -from common.token.token_manager import TokenManager - -router = APIRouter() -token_manager = TokenManager() - -# Web API -# signin-with-email-n-password -# - - -class RequestIn(BaseModel): - email: str - password: str - - -class ResponseOut(BaseModel): - # 1: succeeded - signin_result: int - # the access token for futhur communication with server - access_token: Optional[str] = None - # the refresh token for new access token generation - refresh_token: Optional[str] = None - # the identity of the signed in user - identity: Optional[str] = None - # the date time when the access toke will be expired - expires_in: Optional[datetime] = None - # the system assigned role of the user. - role: Optional[int] = None - # the flid of the user - flid: Optional[str] = None - - -@router.post( - "/signin-with-email-and-password", - operation_id="user-signin-with-email-and-password", - summary="try to signin with email and password", - description="client user is trying to sign in with their email and the password .", - response_model=ResponseOut, -) -async def signin_with_email_and_password( - item: RequestIn, -) -> ResponseOut: - ( - signed_in, - adminstrative_role, - identity, - flid, - ) = await SignInHub().signin_with_email_and_password(item.email, item.password) - - logging.debug( - f"signedin={signed_in}, adminstrative_role={adminstrative_role}, identity={identity}" - ) - - if signed_in and adminstrative_role and identity: - subject = {"id": identity, "role": adminstrative_role} - access_token = token_manager.create_access_token(subject=subject) - refresh_token = token_manager.create_refresh_token(subject=subject) - expires_in = ( - datetime.now(timezone.utc) + token_manager.access_token_expire_minutes - ) - else: - access_token = None - refresh_token = None - expires_in = None - - result = { - "signin_result": signed_in, - "access_token": access_token, - "refresh_token": refresh_token, - "identity": identity, - "expires_in": expires_in, - "role": adminstrative_role, - "flid": flid, - } - return JSONResponse(content=jsonable_encoder(result)) diff --git a/apps/payment/webapi/routes/signin/try_signin_with_email.py b/apps/payment/webapi/routes/signin/try_signin_with_email.py deleted file mode 100644 index ab750f7..0000000 --- a/apps/payment/webapi/routes/signin/try_signin_with_email.py +++ /dev/null @@ -1,38 +0,0 @@ -from backend.application.signin_hub import SignInHub -from pydantic import BaseModel -from fastapi import APIRouter -from fastapi.encoders import jsonable_encoder -from fastapi.responses import JSONResponse - -router = APIRouter() - -# Web API -# try_signin_with_email -# - - -class UserSignWithEmailBody(BaseModel): - email: str - host: str - - -class UserSignWithEmailResponse(BaseModel): - signin_type: int - - -@router.post( - "/try-signin-with-email", - operation_id="user-try-signin-with-email", - summary="try to signin with email", - description="A client user is trying to sign in with their email. \ - The system will determine to send an authentication code to the email \ - or let the uesr use their FLID and passward to sign in", - response_description="signin_type:0 meaning simplified(using email) signin, \ - 1 meaning standard(using FLID and passward) signin", -) -async def try_signin_with_email( - item: UserSignWithEmailBody, -): - result = await SignInHub().try_signin_with_email(item.email, item.host) - result = {"signin_type": result} - return JSONResponse(content=jsonable_encoder(result)) diff --git a/apps/payment/webapi/routes/signin/update_new_user_flid.py b/apps/payment/webapi/routes/signin/update_new_user_flid.py deleted file mode 100644 index 8ccaa3e..0000000 --- a/apps/payment/webapi/routes/signin/update_new_user_flid.py +++ /dev/null @@ -1,50 +0,0 @@ -from backend.application.signin_hub import SignInHub -from pydantic import BaseModel -from fastapi import APIRouter -from common.token.token_manager import TokenManager -from fastapi import APIRouter, Depends -from fastapi.encoders import jsonable_encoder -from fastapi.responses import JSONResponse -from fastapi import Depends, HTTPException -from starlette.status import HTTP_401_UNAUTHORIZED - -router = APIRouter() -token_manager = TokenManager() -# Web API -# update_user_flid -# - - -class RequestIn(BaseModel): - flid: str - - -@router.post( - "/update-new-user-flid", - operation_id="user_update_new_user_password", - summary="update the new user's freeleaps user id", - description="Freeleaps user ID(FLID) is a unique identifier to be used in git and other service across the platform", - response_description="signin result to indicate the next step for the client", -) -async def update_new_user_flid( - item: RequestIn, - current_user: dict = Depends(token_manager.get_current_user), -): - user_id = current_user.get("id") - - if not user_id: - raise HTTPException( - status_code=HTTP_401_UNAUTHORIZED, detail="Could not validate credentials" - ) - - ( - signed_in, - flid, - ) = await SignInHub().update_new_user_flid(user_id, item.flid) - - result = { - "signin_result": signed_in, - "flid": flid, - } - - return JSONResponse(content=jsonable_encoder(result)) diff --git a/apps/payment/webapi/routes/signin/update_user_password.py b/apps/payment/webapi/routes/signin/update_user_password.py deleted file mode 100644 index 9c2c3cf..0000000 --- a/apps/payment/webapi/routes/signin/update_user_password.py +++ /dev/null @@ -1,49 +0,0 @@ -from backend.application.signin_hub import SignInHub -from pydantic import BaseModel -from fastapi import APIRouter -from common.token.token_manager import TokenManager -from fastapi import APIRouter, Depends -from fastapi.encoders import jsonable_encoder -from fastapi.responses import JSONResponse -from fastapi import Depends, HTTPException -from starlette.status import HTTP_401_UNAUTHORIZED - -router = APIRouter() -token_manager = TokenManager() -# Web API -# update_user_password -# - - -class RequestIn(BaseModel): - password: str - password2: str - - -@router.post( - "/update-user-password", - operation_id="user_update_user_password", - summary="updathe user's sign-in password", - description="Update the user's sign-in password. If the password was not set yet, this will enable the user to log in using the password", - response_description="signin_type:0 meaning simplified(using email) signin, \ - 1 meaning standard(using FLID and passward) signin", -) -async def update_user_password( - item: RequestIn, - current_user: dict = Depends(token_manager.get_current_user), -): - user_id = current_user.get("id") - - if not user_id: - raise HTTPException( - status_code=HTTP_401_UNAUTHORIZED, detail="Could not validate credentials" - ) - if item.password != item.password2: - return JSONResponse( - content=jsonable_encoder( - {"error": "password and password2 are not the same"} - ) - ) - else: - result = await SignInHub().update_user_password(user_id, item.password) - return JSONResponse(content=jsonable_encoder(result)) diff --git a/apps/payment/webapi/routes/tokens/__init__.py b/apps/payment/webapi/routes/tokens/__init__.py deleted file mode 100644 index 853d847..0000000 --- a/apps/payment/webapi/routes/tokens/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -from fastapi import APIRouter -from .generate_tokens import router as generate_tokens_router -from .refresh_token import router as refresh_token_router -from .verify_token import router as verify_token_router - -router = APIRouter() - -router.include_router( - generate_tokens_router, prefix="/token", tags=["Token Management"] -) -router.include_router(refresh_token_router, prefix="/token", tags=["Token Management"]) -router.include_router(verify_token_router, prefix="/token", tags=["Token Management"]) diff --git a/apps/payment/webapi/routes/tokens/generate_tokens.py b/apps/payment/webapi/routes/tokens/generate_tokens.py deleted file mode 100644 index 29d6389..0000000 --- a/apps/payment/webapi/routes/tokens/generate_tokens.py +++ /dev/null @@ -1,35 +0,0 @@ -from fastapi import APIRouter -from pydantic import BaseModel -from datetime import datetime, timedelta, timezone -from common.token.token_manager import TokenManager - -router = APIRouter() -token_manager = TokenManager() # Initialize TokenManager - - -class TokenRequest(BaseModel): - id: str - role: int - - -class TokenResponse(BaseModel): - access_token: str - refresh_token: str - expires_in: datetime - - -@router.post("/generate-tokens", response_model=TokenResponse) -async def generate_tokens(request: TokenRequest): - """ - Endpoint to generate access and refresh tokens. - """ - subject = {"id": request.id, "role": request.role} - access_token = token_manager.create_access_token(subject) - refresh_token = token_manager.create_refresh_token(subject) - expires_in = datetime.now(timezone.utc) + timedelta( - minutes=token_manager.access_token_expire_minutes - ) - - return TokenResponse( - access_token=access_token, refresh_token=refresh_token, expires_in=expires_in - ) diff --git a/apps/payment/webapi/routes/tokens/refresh_token.py b/apps/payment/webapi/routes/tokens/refresh_token.py deleted file mode 100644 index e1eeb84..0000000 --- a/apps/payment/webapi/routes/tokens/refresh_token.py +++ /dev/null @@ -1,33 +0,0 @@ -from fastapi import APIRouter, HTTPException -from pydantic import BaseModel -from common.token.token_manager import TokenManager - -router = APIRouter() -token_manager = TokenManager() # Initialize TokenManager - - -class RefreshTokenRequest(BaseModel): - refresh_token: str - id: str - role: int - - -class RefreshTokenResponse(BaseModel): - access_token: str - - -@router.post("/refresh-token", response_model=RefreshTokenResponse) -async def refresh_token(request: RefreshTokenRequest): - """ - Endpoint to refresh the access token using a valid refresh token. - """ - subject = {"id": request.id, "role": request.role} - - try: - access_token = token_manager.refresh_access_token( - request.refresh_token, subject - ) - except ValueError as e: - raise HTTPException(status_code=400, detail=str(e)) - - return RefreshTokenResponse(access_token=access_token) diff --git a/apps/payment/webapi/routes/tokens/verify_token.py b/apps/payment/webapi/routes/tokens/verify_token.py deleted file mode 100644 index bc18cca..0000000 --- a/apps/payment/webapi/routes/tokens/verify_token.py +++ /dev/null @@ -1,27 +0,0 @@ -from fastapi import APIRouter, HTTPException -from pydantic import BaseModel -from common.token.token_manager import TokenManager - -router = APIRouter() -token_manager = TokenManager() # Initialize TokenManager - - -class VerifyTokenRequest(BaseModel): - token: str - - -class VerifyTokenResponse(BaseModel): - valid: bool - payload: dict - - -@router.post("/verify-token", response_model=VerifyTokenResponse) -async def verify_token(request: VerifyTokenRequest): - """ - Endpoint to verify if a token is valid and return the payload. - """ - try: - payload = token_manager.decode_token(request.token) - return VerifyTokenResponse(valid=True, payload=payload) - except ValueError: - raise HTTPException(status_code=401, detail="Invalid or expired token") diff --git a/sites/notification/deploy/common/.env b/sites/notification/deploy/common/.env index 6678b1b..b5869be 100755 --- a/sites/notification/deploy/common/.env +++ b/sites/notification/deploy/common/.env @@ -4,7 +4,7 @@ export CONTAINER_APP_ROOT=/app export LOG_BASE_PATH=$CONTAINER_APP_ROOT/log/$APP_NAME export BACKEND_LOG_FILE_NAME=$APP_NAME export APPLICATION_ACTIVITY_LOG=$APP_NAME-activity -export SENDGRID_API_KEY='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' +export SENDGRID_API_KEY=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 export EMAIL_FROM=freeleaps@freeleaps.com export TWILIO_ACCOUNT_SID=ACf8c9283a6acda060258eadb29be58bc8 export TWILIO_AUTH_TOKEN=ef160748cc22c8b7195b49df4b8eca7e