From 16abac898e90dcbc9b1b9626bc545416b0ababd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Kryczka?= Date: Mon, 16 Jun 2025 21:46:56 +0200 Subject: [PATCH] Final deploy --- .env.template | 28 +++++++++-------- backend/event_ticketing_service/.env.template | 5 ---- .../app/services/email.py | 30 +++++++------------ backend/user_auth_service/.env.template | 9 ------ docker-compose.yml | 2 ++ terraform/main/main.tf | 12 ++++++++ terraform/main/variables.tf | 9 ++++++ terraform/modules/ecs_cluster/main.tf | 17 +++++++---- terraform/modules/ecs_cluster/variables.tf | 12 ++++++++ 9 files changed, 73 insertions(+), 51 deletions(-) delete mode 100644 backend/event_ticketing_service/.env.template delete mode 100644 backend/user_auth_service/.env.template diff --git a/.env.template b/.env.template index e8be869..719fdf2 100644 --- a/.env.template +++ b/.env.template @@ -1,17 +1,19 @@ -# Database Configuration -DB_URL=postgres +# Shared Database Configuration +DB_URL=localhost DB_PORT=5432 -DB_NAME=authdb -DB_USER=resellio -DB_PASSWORD=localpassword +DB_NAME=resellio_db +DB_USER=root +DB_PASSWORD=my_password -# Auth Service JWT Configuration -SECRET_KEY=a-very-secret-key-for-local-development-change-me +# JWT & Security Configuration +SECRET_KEY=a-very-secure-secret-key-for-jwt-256-bit ACCESS_TOKEN_EXPIRE_MINUTES=30 -ADMIN_SECRET_KEY=local-admin-secret-key -INITIAL_ADMIN_EMAIL=admin@resellio.com -INITIAL_ADMIN_PASSWORD=AdminPassword123! +ADMIN_SECRET_KEY=change-in-production -# SendGrid Email Configuration -EMAIL_API_KEY="api-key-placeholder" -EMAIL_FROM_EMAIL="sender-email-placeholder" +# Email (SendGrid) Configuration +EMAIL_API_KEY=YOUR_SENDGRID_API_KEY +# The email address that will appear in the "From" field +EMAIL_FROM_EMAIL=noreply@resellio.com +# The base URL of the application, used for constructing verification links +# For local testing, this points to the API Gateway +APP_BASE_URL=http://localhost:8080 diff --git a/backend/event_ticketing_service/.env.template b/backend/event_ticketing_service/.env.template deleted file mode 100644 index 81d96b8..0000000 --- a/backend/event_ticketing_service/.env.template +++ /dev/null @@ -1,5 +0,0 @@ -DB_URL=localhost -DB_PORT=5432 -DB_NAME=db_name -DB_USER=root -DB_PASSWORD=my_password diff --git a/backend/event_ticketing_service/app/services/email.py b/backend/event_ticketing_service/app/services/email.py index 324f89e..d4dddb6 100644 --- a/backend/event_ticketing_service/app/services/email.py +++ b/backend/event_ticketing_service/app/services/email.py @@ -10,6 +10,7 @@ SENDGRID_API_KEY = os.getenv("EMAIL_API_KEY") FROM_EMAIL = os.getenv("EMAIL_FROM_EMAIL", "tickets@resellio.com") +APP_BASE_URL = os.getenv("APP_BASE_URL", "http://localhost:8080") logger = logging.getLogger(__name__) @@ -52,23 +53,16 @@ def send_ticket_email( ): """ Send beautifully designed ticket confirmation email using SendGrid. - - Args: - to_email: Recipient's email address - user_name: Recipient's name - event_name: Name of the event - ticket_id: Ticket ID - event_date: Event date (formatted string) - event_time: Event time (formatted string) - venue: Venue name - seat: Seat number/code - - Returns: - bool: True if email was sent successfully, False otherwise """ if not SENDGRID_API_KEY: logger.error("SendGrid API key not set - cannot send emails") return False + if not APP_BASE_URL: + logger.error("APP_BASE_URL not set - cannot construct email links") + # Fallback to a generic domain if not set, but log an error + base_url = "http://resellio.com" + else: + base_url = APP_BASE_URL.replace('/api', '') # Ensure we have the root URL # Generate QR code containing ticket info qr_data = f"TICKET:{ticket_id}|EVENT:{event_name}|DATE:{event_date}|TIME:{event_time}|VENUE:{venue}|SEAT:{seat}" @@ -208,10 +202,8 @@ def send_ticket_email(

Please save this email and bring it with you to the event. You can also access your tickets anytime from your account.

-

We hope you enjoy the event!

-
- View My Tickets + View My Tickets
@@ -219,9 +211,9 @@ def send_ticket_email(

© 2025 Resellio. All rights reserved.

This is an automated message. Please do not reply to this email.

- Terms of Service | - Privacy Policy | - Contact Us + Terms of Service | + Privacy Policy | + Contact Us

diff --git a/backend/user_auth_service/.env.template b/backend/user_auth_service/.env.template deleted file mode 100644 index 613ac8c..0000000 --- a/backend/user_auth_service/.env.template +++ /dev/null @@ -1,9 +0,0 @@ -DB_URL=localhost -DB_PORT=5432 -DB_NAME=db_name -DB_USER=root -DB_PASSWORD=my_password - -SECRET_KEY=your-256-bit-secret -ACCESS_TOKEN_EXPIRE_MINUTES=30 -ADMIN_SECRET_KEY=admin-secret-key-change-this-in-production diff --git a/docker-compose.yml b/docker-compose.yml index 1991014..0069eb8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -47,6 +47,7 @@ services: - ADMIN_SECRET_KEY=${ADMIN_SECRET_KEY} - EMAIL_API_KEY=${EMAIL_API_KEY} - EMAIL_FROM_EMAIL=${EMAIL_FROM_EMAIL} + - APP_BASE_URL=${APP_BASE_URL} depends_on: db-init: condition: service_completed_successfully @@ -66,6 +67,7 @@ services: - SECRET_KEY=${SECRET_KEY} - EMAIL_API_KEY=${EMAIL_API_KEY} - EMAIL_FROM_EMAIL=${EMAIL_FROM_EMAIL} + - APP_BASE_URL=${APP_BASE_URL} depends_on: db-init: condition: service_completed_successfully diff --git a/terraform/main/main.tf b/terraform/main/main.tf index 7f3f81d..8c3665b 100644 --- a/terraform/main/main.tf +++ b/terraform/main/main.tf @@ -38,6 +38,15 @@ resource "aws_secretsmanager_secret_version" "admin_secret_key" { secret_string = random_string.admin_secret_key.result } +resource "aws_secretsmanager_secret" "sendgrid_api_key" { + name = "${var.project_name}-sendgrid-api-key" +} + +resource "aws_secretsmanager_secret_version" "sendgrid_api_key" { + secret_id = aws_secretsmanager_secret.sendgrid_api_key.id + secret_string = var.sendgrid_api_key +} + # Database module "db" { @@ -76,6 +85,9 @@ module "ecs_cluster" { db_endpoint = module.db.endpoint db_password_secret_arn = aws_secretsmanager_secret.db_master_password.arn admin_secret_key_arn = aws_secretsmanager_secret.admin_secret_key.arn + sendgrid_api_key_arn = aws_secretsmanager_secret.sendgrid_api_key.arn + email_from_address = var.email_from_address + app_base_url = "http://${module.ecs_cluster.alb_dns_name}" auth_image = "${data.aws_ecr_repository.auth.repository_url}:latest" ticket_image = "${data.aws_ecr_repository.tickets.repository_url}:latest" db_init_image = "${data.aws_ecr_repository.db_init.repository_url}:latest" diff --git a/terraform/main/variables.tf b/terraform/main/variables.tf index 6654add..5a8a436 100644 --- a/terraform/main/variables.tf +++ b/terraform/main/variables.tf @@ -37,3 +37,12 @@ variable "force_db_reset" { description = "If true, forces the db-init task to wipe the public schema before initializing. Use with caution." default = false } +variable "sendgrid_api_key" { + type = string + description = "The SendGrid API key for sending emails." + sensitive = true +} +variable "email_from_address" { + type = string + description = "The email address to use as the sender." +} diff --git a/terraform/modules/ecs_cluster/main.tf b/terraform/modules/ecs_cluster/main.tf index 1e0f024..941bef7 100644 --- a/terraform/modules/ecs_cluster/main.tf +++ b/terraform/modules/ecs_cluster/main.tf @@ -27,7 +27,8 @@ data "aws_iam_policy_document" "task_secrets_access" { ] resources = [ var.db_password_secret_arn, - var.admin_secret_key_arn + var.admin_secret_key_arn, + var.sendgrid_api_key_arn ] } } @@ -199,11 +200,14 @@ resource "aws_ecs_task_definition" "auth" { { name = "DB_USER", value = var.db_user }, { name = "DB_NAME", value = var.db_name }, { name = "DB_PORT", value = tostring(var.db_port) }, - { name = "AWS_REGION", value = var.aws_region } + { name = "AWS_REGION", value = var.aws_region }, + { name = "EMAIL_FROM_EMAIL", value = var.email_from_address }, + { name = "APP_BASE_URL", value = var.app_base_url } ] secrets = [ { name = "DB_PASSWORD", valueFrom = var.db_password_secret_arn }, - { name = "ADMIN_SECRET_KEY", valueFrom = var.admin_secret_key_arn } + { name = "ADMIN_SECRET_KEY", valueFrom = var.admin_secret_key_arn }, + { name = "EMAIL_API_KEY", valueFrom = var.sendgrid_api_key_arn } ] logConfiguration = { logDriver = "awslogs" @@ -241,10 +245,13 @@ resource "aws_ecs_task_definition" "tickets" { { name = "DB_USER", value = var.db_user }, { name = "DB_NAME", value = var.db_name }, { name = "DB_PORT", value = tostring(var.db_port) }, - { name = "AWS_REGION", value = var.aws_region } + { name = "AWS_REGION", value = var.aws_region }, + { name = "EMAIL_FROM_EMAIL", value = var.email_from_address }, + { name = "APP_BASE_URL", value = var.app_base_url } ] secrets = [ - { name = "DB_PASSWORD", valueFrom = var.db_password_secret_arn } + { name = "DB_PASSWORD", valueFrom = var.db_password_secret_arn }, + { name = "EMAIL_API_KEY", valueFrom = var.sendgrid_api_key_arn } ] logConfiguration = { logDriver = "awslogs" diff --git a/terraform/modules/ecs_cluster/variables.tf b/terraform/modules/ecs_cluster/variables.tf index 57b190b..341d7d8 100644 --- a/terraform/modules/ecs_cluster/variables.tf +++ b/terraform/modules/ecs_cluster/variables.tf @@ -20,6 +20,18 @@ variable "admin_secret_key_arn" { type = string description = "ARN for the admin secret key" } +variable "sendgrid_api_key_arn" { + type = string + description = "ARN for the SendGrid API key secret" +} +variable "email_from_address" { + type = string + description = "The email address to use as the sender" +} +variable "app_base_url" { + type = string + description = "The base URL of the application, for constructing links in emails" +} variable "db_user" { type = string } variable "db_name" { type = string } variable "db_port" {