diff --git a/apps/authentication/Dockerfile b/apps/authentication/Dockerfile index d40df09..9b05c5c 100644 --- a/apps/authentication/Dockerfile +++ b/apps/authentication/Dockerfile @@ -4,25 +4,25 @@ FROM python:3.10-slim-bullseye ARG CONTAINER_APP_ROOT="/app" ENV APP_NAME="authentication" -ENV DEVSVC_WEBAPI_URL_BASE="" -ENV NOTIFICATION_WEBAPI_URL_BASE="" +ENV DEVSVC_WEBAPI_URL_BASE="http://devsvc:8007/api/devsvc" +ENV NOTIFICATION_WEBAPI_URL_BASE="http://notification:8003/api/notification/" -ENV JWT_SECRET_KEY="" -ENV JWT_ALGORITHM="" +ENV JWT_SECRET_KEY="8f87ca8c3c9c3df09a9c78e0adb0927855568f6072d9efc892534aee35f5867b" +ENV JWT_ALGORITHM="HS256" #site_settings ENV SERVICE_API_ACCESS_HOST=0.0.0.0 ENV SERVICE_API_ACCESS_PORT=8004 -ENV MONGODB_NAME= -ENV MONGODB_PORT= -ENV MONGODB_URI= +ENV MONGODB_NAME=freeleaps2 +ENV MONGODB_PORT=27017 +ENV MONGODB_URI="mongodb://localhost:27017/" #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/authentication/backend/infra/auth/user_auth_handler.py b/apps/authentication/backend/infra/auth/user_auth_handler.py index 295b785..2661fcb 100644 --- a/apps/authentication/backend/infra/auth/user_auth_handler.py +++ b/apps/authentication/backend/infra/auth/user_auth_handler.py @@ -109,24 +109,6 @@ class UserAuthHandler: def user_sign_out(self, token): pass - async def generate_auth_code_for_email(self, email: str) -> str: - """send auth code to email address - - Args: - email (str): email address - """ - auth_code = generate_auth_code() - expiry = datetime.now(timezone.utc) + timedelta(minutes=5) - auth_code_doc = AuthCodeDoc( - auth_code=auth_code, - method=email.lower(), - method_type=AuthType.EMAIL, - expiry=expiry, - ) - - await auth_code_doc.create() - return auth_code - async def verify_email_code(self, email: str, code: str) -> bool: """sign in with email and code diff --git a/apps/central_storage/Dockerfile b/apps/central_storage/Dockerfile index d76b4c1..0f59f09 100644 --- a/apps/central_storage/Dockerfile +++ b/apps/central_storage/Dockerfile @@ -1,25 +1,25 @@ FROM python:3.10-slim-buster # docker settings -ARG CONTAINER_APP_ROOT= -ENV APP_NAME= +ARG CONTAINER_APP_ROOT="/app" +ENV APP_NAME="central_storage" -ENV AZURE_STORAGE_DOCUMENT_API_KEY="" -ENV AZURE_STORAGE_DOCUMENT_API_ENDPOINT="" +ENV AZURE_STORAGE_DOCUMENT_API_KEY="Cg+wtKpHt6Bo6bTUtjic40cRNRZ8NCI3JYBY69BNPgFJARVx/c18iVC7cASbJfzukyu4pksyhUep+AStFdpH7Q==" +ENV AZURE_STORAGE_DOCUMENT_API_ENDPOINT="https://freeleaps1document.blob.core.windows.net/" #site_settings ENV SERVICE_API_ACCESS_HOST=0.0.0.0 ENV SERVICE_API_ACCESS_PORT=8005 -ENV MONGODB_NAME= -ENV MONGODB_PORT= -ENV MONGODB_URI= +ENV MONGODB_NAME=freeleaps2 +ENV MONGODB_PORT=27017 +ENV MONGODB_URI="mongodb://localhost:27017/" #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/content/Dockerfile b/apps/content/Dockerfile index 61ffd71..bc442b7 100644 --- a/apps/content/Dockerfile +++ b/apps/content/Dockerfile @@ -4,8 +4,8 @@ FROM python:3.10-slim-buster ARG CONTAINER_APP_ROOT="/app" ENV APP_NAME="content" -ENV FREELEAPS_WWW_AS_AZURE_CLIENT_SECRET="" -ENV CENTRAL_STORAGE_WEBAPI_URL_BASE="" +ENV FREELEAPS_WWW_AS_AZURE_CLIENT_SECRET="jTu8Q~WceiK-5dfZB44Ww-K4fVGi3_5tHNWYYbdX" +ENV CENTRAL_STORAGE_WEBAPI_URL_BASE="http://central_storage:8005/api/central_storage/" #site_settings ENV SERVICE_API_ACCESS_HOST=0.0.0.0 @@ -17,9 +17,9 @@ ENV MONGODB_URI="mongodb://freeleaps2-mongodb:27017" #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/content/backend/content/content_sharepoint_manager.py b/apps/content/backend/content/content_sharepoint_manager.py index 05183a1..abde989 100644 --- a/apps/content/backend/content/content_sharepoint_manager.py +++ b/apps/content/backend/content/content_sharepoint_manager.py @@ -4,29 +4,33 @@ from datetime import datetime, timedelta, timezone from backend.sharepoint.sharepoint_graph_client import SharePointGraphClient from common.constants.region import UserRegion from backend.document.document_manager import DocumentManager -from backend.content.constants import ContentSource, ContentMediaType, ContentDataFormat, ContentFileConstants +from backend.content.constants import ( + ContentSource, + ContentFileConstants, +) from backend.content.models import ContentDirectory, ContentFolderDoc class ContentSharePointManager: def __init__(self) -> None: self.sharepoint_client = SharePointGraphClient( - tenant_id='cf151ee8-5c2c-4fe7-a1c4-809ba43c9f24', - client_id='a91e3c1d-d55d-423d-83cb-a736df229817', - client_secret= app_settings.FREELEAPS_WWW_AS_AZURE_CLIENT_SECRET, + tenant_id="cf151ee8-5c2c-4fe7-a1c4-809ba43c9f24", + client_id="a91e3c1d-d55d-423d-83cb-a736df229817", + client_secret=app_settings.FREELEAPS_WWW_AS_AZURE_CLIENT_SECRET, host_name="netorgft10898514.sharepoint.com", - site_name="MediaRoom" + site_name="MediaRoom", ) self.sharepoint_client.set_document_scope( - document_library="freeleaps", - root_folder="production" + document_library="freeleaps", root_folder="production" ) self.share_point_file_expiry = timedelta(hours=24) def __generate_created__by__(self, folder_name): - return "content-service-" + folder_name.replace('/', '-').lower() + return "content-service-" + folder_name.replace("/", "-").lower() - async def retrieve_directories_for_folder(self, folder_name: str, region: UserRegion): + async def retrieve_directories_for_folder( + self, folder_name: str, region: UserRegion + ): content_folder_name = folder_name + "/" + region.name sp_folders = self.sharepoint_client.list_sub_folders(content_folder_name) current_time = datetime.now(timezone.utc) @@ -42,69 +46,89 @@ class ContentSharePointManager: udpate_time=current_time, update_source=ContentSource.SHAREPOINT, valid_thru=current_time + self.share_point_file_expiry, - region=region + region=region, ) else: folder.content_directories.clear() for sp_folder in sp_folders: content_directory = ContentDirectory( - content_name=sp_folder['name'], + content_name=sp_folder["name"], cover_document_id=None, summary_text=None, title_text=None, content_link=None, content_document_id=None, ) - sp_files = self.sharepoint_client.list_files(content_folder_name + "/" + sp_folder['name']) + sp_files = self.sharepoint_client.list_files( + content_folder_name + "/" + sp_folder["name"] + ) for sp_file in sp_files: if ( - sp_file['name'].lower() + sp_file["name"].lower() == ContentFileConstants.COVER_FILE_NAME.lower() ): - cover_file_content = self.sharepoint_client.get_file_content(sp_file['id']) + cover_file_content = self.sharepoint_client.get_file_content( + sp_file["id"] + ) cover_document_manager = DocumentManager() - file_name=sp_file['name'].lower() - created_by=self.__generate_created__by__(folder_name=folder_name) - content_directory.cover_document_id = await cover_document_manager.save_document_file( - created_by, file_name, cover_file_content + file_name = sp_file["name"].lower() + created_by = self.__generate_created__by__(folder_name=folder_name) + content_directory.cover_document_id = ( + await cover_document_manager.save_document_file( + created_by, file_name, cover_file_content + ) ) elif ( - sp_file['name'].lower() + sp_file["name"].lower() == ContentFileConstants.SUMMARY_FILE_NAME.lower() ): - content_directory.summary_text = self.sharepoint_client.get_file_content(sp_file['id']) + content_directory.summary_text = ( + self.sharepoint_client.get_file_content(sp_file["id"]) + ) elif ( - sp_file['name'].lower() + sp_file["name"].lower() == ContentFileConstants.TITLE_FILE_NAME.lower() ): - content_directory.title_text = self.sharepoint_client.get_file_content(sp_file['id']) + content_directory.title_text = ( + self.sharepoint_client.get_file_content(sp_file["id"]) + ) elif ( - sp_file['name'].lower() + sp_file["name"].lower() == ContentFileConstants.CONTENT_LINK_FILE_NAME.lower() ): - content_directory.content_link = self.sharepoint_client.get_file_content(sp_file['id']) + content_directory.content_link = ( + self.sharepoint_client.get_file_content(sp_file["id"]) + ) elif ( - sp_file['name'].lower() + sp_file["name"].lower() == ContentFileConstants.CONTENT_HTML_FILE_NAME.lower() ): - content_directory.content_html = self.sharepoint_client.get_file_content(sp_file['id']) + content_directory.content_html = ( + self.sharepoint_client.get_file_content(sp_file["id"]) + ) elif ( - sp_file['name'].lower() + sp_file["name"].lower() == ContentFileConstants.CONTENT_TEXT_FILE_NAME.lower() ): - content_directory.content_text = self.sharepoint_client.get_file_content(sp_file['id']) + content_directory.content_text = ( + self.sharepoint_client.get_file_content(sp_file["id"]) + ) elif ( - sp_file['name'].lower() + sp_file["name"].lower() == ContentFileConstants.CONTENT_PDF_FILE_NAME.lower() ): - content_file_content = self.sharepoint_client.get_file_content(sp_file['id']) + content_file_content = self.sharepoint_client.get_file_content( + sp_file["id"] + ) content_document_manager = DocumentManager() - file_name=sp_file['name'] - created_by=self.__generate_created__by__(folder_name=folder_name) - content_directory.content_document_id = await content_document_manager.save_document_file( - created_by, file_name, content_file_content + file_name = sp_file["name"] + created_by = self.__generate_created__by__(folder_name=folder_name) + content_directory.content_document_id = ( + await content_document_manager.save_document_file( + created_by, file_name, content_file_content + ) ) folder.content_directories.append(content_directory) @@ -118,8 +142,10 @@ class ContentSharePointManager: current_time = datetime.now(timezone.utc) folders = await ContentFolderDoc.find( ContentFolderDoc.update_source == ContentSource.SHAREPOINT, - ContentFolderDoc.valid_thru < current_time + ContentFolderDoc.valid_thru < current_time, ).to_list() for folder in folders: - await self.retrieve_directories_for_folder(folder.folder_name, folder.region) + await self.retrieve_directories_for_folder( + folder.folder_name, folder.region + ) diff --git a/apps/notification/Dockerfile b/apps/notification/Dockerfile index f88b8bc..4973096 100644 --- a/apps/notification/Dockerfile +++ b/apps/notification/Dockerfile @@ -15,12 +15,12 @@ ENV SYSTEM_USER_ID=117f191e810c19729de860aa ENV SMS_FROM=+16898887156 ENV EMAIL_FROM=freeleaps@freeleaps.com -ENV SECRET_KEY=ea84edf152976b2fcec12b78aa8e45bc26a5cf0ef61bf16f5c317ae33b3fd8b0 +ENV SECRET_KEY=8f87ca8c3c9c3df09a9c78e0adb0927855568f6072d9efc892534aee35f5867b -ENV SENDGRID_API_KEY=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 +ENV SENDGRID_API_KEY=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 ENV TWILIO_ACCOUNT_SID=ACf8c9283a6acda060258eadb29be58bc8 -ENV TWILIO_AUTH_TOKEN=ef160748cc22c8b7195b49df4b8eca7e +ENV TWILIO_AUTH_TOKEN=120165c0550111ddfd58efc97dafc2fe diff --git a/sites/central_storage/deploy/.env b/sites/central_storage/deploy/.env new file mode 100644 index 0000000..65c35f6 --- /dev/null +++ b/sites/central_storage/deploy/.env @@ -0,0 +1,25 @@ +export APP_NAME=central_storage +export GIT_REPO_ROOT=/Users/yaojing/Work/Freeleaps/freeleaps-service-hub +export APP_PARENT_FOLDER=apps +export SERVICE_API_ACCESS_HOST=0.0.0.0 +export SERVICE_API_ACCESS_PORT=8005 +export CONTAINER_APP_ROOT=/app +export AZURE_STORAGE_DOCUMENT_API_KEY=xbiFtFeQ6v5dozgVM99fZ9huUomL7QcLu6s0y8zYHtIXZ8XdneKDMcg4liQr/9oNlVoRFcZhWjLY+ASt9cjICQ== +export AZURE_STORAGE_DOCUMENT_API_ENDPOINT="https://freeleaps1document.blob.core.windows.net/" +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 MONGODB_NAME=freeleaps2 +export MONGODB_PORT=27017 +export CODEBASE_ROOT=/Users/yaojing/Work/Freeleaps/freeleaps-service-hub/apps/central_storage +export WORKING_DIR=/Users/yaojing/Work/Freeleaps/freeleaps-service-hub/sites/central_storage/deploy +#!/bin/bash +export VENV_DIR=venv_t +export VENV_ACTIVATE=venv_t/bin/activate +export DOCKER_HOME=/var/lib/docker +export DOCKER_APP_HOME=$DOCKER_HOME/app +export DOCKER_BACKEND_HOME=$DOCKER_APP_HOME/$APP_NAME +export DOCKER_BACKEND_LOG_HOME=$DOCKER_BACKEND_HOME/log +export MONGODB_URI=mongodb://freeleaps2-mongodb:27017/ +export FREELEAPS_ENV=dev + diff --git a/sites/central_storage/deploy/docker-compose.yaml b/sites/central_storage/deploy/docker-compose.yaml new file mode 100755 index 0000000..5a0e61d --- /dev/null +++ b/sites/central_storage/deploy/docker-compose.yaml @@ -0,0 +1,37 @@ +services: + central_storage: + container_name: $APP_NAME + build: + context: ${CODEBASE_ROOT} + args: + CONTAINER_APP_ROOT: ${CONTAINER_APP_ROOT} + profiles: [prod,alpha,dev] + restart: always + environment: + - APP_NAME=${APP_NAME} + - MONGODB_NAME=${MONGODB_NAME} + - MONGODB_PORT=${MONGODB_PORT} + - MONGODB_URI=${MONGODB_URI} + - SERVICE_API_ACCESS_HOST=${SERVICE_API_ACCESS_HOST} + - SERVICE_API_ACCESS_PORT=${SERVICE_API_ACCESS_PORT} + - AZURE_STORAGE_DOCUMENT_API_KEY=${AZURE_STORAGE_DOCUMENT_API_KEY} + - AZURE_STORAGE_DOCUMENT_API_ENDPOINT=${AZURE_STORAGE_DOCUMENT_API_ENDPOINT} + - LOG_BASE_PATH=${LOG_BASE_PATH} + - BACKEND_LOG_FILE_NAME=${BACKEND_LOG_FILE_NAME} + - APPLICATION_ACTIVITY_LOG=${APPLICATION_ACTIVITY_LOG} + ports: + - ${SERVICE_API_ACCESS_PORT}:${SERVICE_API_ACCESS_PORT} + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=${SERVICE_API_ACCESS_PORT} --host=${SERVICE_API_ACCESS_HOST} + networks: + - devbox_freeleaps2-network + volumes: + - type: bind + source: $DOCKER_BACKEND_LOG_HOME + target: $LOG_BASE_PATH +networks: + devbox_freeleaps2-network: + external: true \ No newline at end of file