diff --git a/app/(auth)/cloud/payment/success/page.tsx b/app/(auth)/cloud/payment/success/page.tsx index 22abaec..bcf102c 100644 --- a/app/(auth)/cloud/payment/success/page.tsx +++ b/app/(auth)/cloud/payment/success/page.tsx @@ -51,7 +51,9 @@ export default async function CloudPaymentSuccessPage({ Payment Successful - You can login to your account now + + Welcome to TaxHacker, {user.name}. You can login to your account now + diff --git a/app/api/stripe/checkout/route.ts b/app/api/stripe/checkout/route.ts index 5b09689..ef260b2 100644 --- a/app/api/stripe/checkout/route.ts +++ b/app/api/stripe/checkout/route.ts @@ -29,6 +29,9 @@ export async function POST(request: NextRequest) { }, ], mode: "subscription", + automatic_tax: { + enabled: true, + }, success_url: config.stripe.paymentSuccessUrl, cancel_url: config.stripe.paymentCancelUrl, }) diff --git a/docker-compose.production.yml b/docker-compose.production.yml index 0547de2..707c91d 100644 --- a/docker-compose.production.yml +++ b/docker-compose.production.yml @@ -7,7 +7,6 @@ services: environment: - NODE_ENV=production - BASE_URL=https://taxhacker.app - - DISABLE_SIGNUP=true - SELF_HOSTED_MODE=false - UPLOAD_PATH=/app/data/uploads env_file: diff --git a/etc/nginx/taxhacker.app.conf b/etc/nginx/taxhacker.app.conf index 183804c..6175c02 100644 --- a/etc/nginx/taxhacker.app.conf +++ b/etc/nginx/taxhacker.app.conf @@ -7,27 +7,33 @@ server { charset utf-8; client_max_body_size 256M; - set_real_ip_from 172.17.0.0/16; + set_real_ip_from 172.17.0.0/16; real_ip_header X-Forwarded-For; real_ip_recursive on; - ssl_certificate /home/vas3k/certs/pubkey.pem; + ssl_certificate /home/vas3k/certs/pubkey.pem; ssl_certificate_key /home/vas3k/certs/privkey.pem; - location / { - add_header "Access-Control-Allow-Origin" "*"; - add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS"; - add_header "Access-Control-Allow-Headers" "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range"; - add_header "Access-Control-Expose-Headers" "Content-Length,Content-Range"; - add_header "Strict-Transport-Security" "max-age=31536000;includeSubDomains"; - add_header "X-Content-Type-Options" "nosniff"; - add_header "Referrer-Policy" "strict-origin-when-cross-origin"; - add_header "Permissions-Policy" "accelerometer=(),camera=(),geolocation=(self 'https://taxhacker.app'),gyroscope=(),magnetometer=(),microphone=(),payment=(),usb=()"; + # Global security headers + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Referrer-Policy "strict-origin-when-cross-origin" always; + add_header X-Frame-Options "DENY" always; + add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()" always; + add_header Content-Security-Policy "default-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self';" always; + + location / { + # CORS headers (adjust if needed) + add_header Access-Control-Allow-Origin "https://taxhacker.app"; + add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; + add_header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range"; + add_header Access-Control-Expose-Headers "Content-Length,Content-Range"; + + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header "Host" $http_host; - proxy_set_header "X-Forwarded-Host" $host; - proxy_set_header "X-Forwarded-For" $proxy_add_x_forwarded_for; - proxy_set_header "X-Forwarded-Proto" $scheme; proxy_redirect off; proxy_buffering off; diff --git a/lib/stripe.ts b/lib/stripe.ts index e981160..fc789c5 100644 --- a/lib/stripe.ts +++ b/lib/stripe.ts @@ -47,7 +47,7 @@ export const PLANS: Record = { "Unlimited fields, categories and projects", ], price: "€35 for a year", - stripePriceId: "price_1RHTmTAs8DS4NhOzGnWqxvZC", + stripePriceId: "price_1RHTj1As8DS4NhOzhejpTN3I", limits: { storage: 512 * 1024 * 1024, ai: 1000,