fixes stripe
This commit is contained in:
parent
7cbcaacda1
commit
b53a7f363d
3 changed files with 33 additions and 15 deletions
25
app.py
25
app.py
|
|
@ -489,18 +489,6 @@ def getAllowedOrigins():
|
||||||
CORS_ORIGIN_REGEX = r"https://.*\.(poweron\.swiss|poweron-center\.net)"
|
CORS_ORIGIN_REGEX = r"https://.*\.(poweron\.swiss|poweron-center\.net)"
|
||||||
|
|
||||||
|
|
||||||
# CORS configuration using environment variables
|
|
||||||
app.add_middleware(
|
|
||||||
CORSMiddleware,
|
|
||||||
allow_origins=getAllowedOrigins(),
|
|
||||||
allow_origin_regex=CORS_ORIGIN_REGEX,
|
|
||||||
allow_credentials=True,
|
|
||||||
allow_methods=["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"],
|
|
||||||
allow_headers=["*"],
|
|
||||||
expose_headers=["*"],
|
|
||||||
max_age=86400, # Increased caching for preflight requests
|
|
||||||
)
|
|
||||||
|
|
||||||
# SlowAPI rate limiter initialization
|
# SlowAPI rate limiter initialization
|
||||||
from modules.auth import limiter
|
from modules.auth import limiter
|
||||||
from slowapi.errors import RateLimitExceeded
|
from slowapi.errors import RateLimitExceeded
|
||||||
|
|
@ -538,6 +526,19 @@ app.add_middleware(
|
||||||
ProactiveTokenRefreshMiddleware, enabled=True, check_interval_minutes=5
|
ProactiveTokenRefreshMiddleware, enabled=True, check_interval_minutes=5
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# CORS must be registered LAST so it wraps the whole stack: every response (errors, CSRF 403,
|
||||||
|
# rate limits) still gets Access-Control-Allow-Origin for browser cross-origin calls.
|
||||||
|
app.add_middleware(
|
||||||
|
CORSMiddleware,
|
||||||
|
allow_origins=getAllowedOrigins(),
|
||||||
|
allow_origin_regex=CORS_ORIGIN_REGEX,
|
||||||
|
allow_credentials=True,
|
||||||
|
allow_methods=["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"],
|
||||||
|
allow_headers=["*"],
|
||||||
|
expose_headers=["*"],
|
||||||
|
max_age=86400,
|
||||||
|
)
|
||||||
|
|
||||||
# Include all routers
|
# Include all routers
|
||||||
|
|
||||||
from modules.routes.routeAdmin import router as generalRouter
|
from modules.routes.routeAdmin import router as generalRouter
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ Service_CLICKUP_OAUTH_REDIRECT_URI = http://localhost:8000/api/clickup/auth/conn
|
||||||
|
|
||||||
# Stripe Billing (both end with _SECRET for encryption script)
|
# Stripe Billing (both end with _SECRET for encryption script)
|
||||||
STRIPE_SECRET_KEY_SECRET = INT_ENC:Z0FBQUFBQnB5dkd5ekdBaGNGVUlOQUpncTlzLWlTV0V5OWZzQkpDczhCUGw4U1JpTHZ0d3pfYlFNWElLRlNiNlNsaDRYTGZUTkg2OUFrTW1GZXpOUjBVbmRQWjN6ekhHd2ZSQ195OHlaeWh1TmxrUm10V2R3YmdncmFLbFMzVjdqcWJMSUJPR2xuSEozclNoZG1rZVBTaWg3OFQ1Qzdxb0wyQ2RKazc2dG1aZXBUTXlvbDZqLS1KOVI5M3BGc3NQZkZRbnFpRjIwWmh2ZHlVNlpxZVo2dWNmMjQ5eW02QmtzUT09
|
STRIPE_SECRET_KEY_SECRET = INT_ENC:Z0FBQUFBQnB5dkd5ekdBaGNGVUlOQUpncTlzLWlTV0V5OWZzQkpDczhCUGw4U1JpTHZ0d3pfYlFNWElLRlNiNlNsaDRYTGZUTkg2OUFrTW1GZXpOUjBVbmRQWjN6ekhHd2ZSQ195OHlaeWh1TmxrUm10V2R3YmdncmFLbFMzVjdqcWJMSUJPR2xuSEozclNoZG1rZVBTaWg3OFQ1Qzdxb0wyQ2RKazc2dG1aZXBUTXlvbDZqLS1KOVI5M3BGc3NQZkZRbnFpRjIwWmh2ZHlVNlpxZVo2dWNmMjQ5eW02QmtzUT09
|
||||||
STRIPE_WEBHOOK_SECRET = INT_ENC:Z0FBQUFBQnB5dkd5VUszOWllM1E1YXlsdldIdENlUTd4bWhycVNBZVZzSWxlMjd4NEJwRnFVbnRaNTlGOWUyLVdxRUxySEtGRDdfbEVHM1dFTU93SHZtY1RKZkh0NG92M2cwYTQxQjQ0SFhqNXZnd21jbE52WW0wZC1oMlY3OXFFSV9sd2M1TC10N0hZa2Zha3FzX1FhcE14alo2TGFHX3QybHFxOTlQWWFZR3pabkRtOEp1Zm1zOFlrbDF0MFNkUjUyVFI5NUNZaU5TRXF4X29tcEQ2RUR1MTlXcUoxbTl0dz09
|
STRIPE_WEBHOOK_SECRET = whsec_2agCQEbDPSOn2C40EJcwoPCqlvaPLF7M
|
||||||
STRIPE_API_VERSION = 2026-01-28.clover
|
STRIPE_API_VERSION = 2026-01-28.clover
|
||||||
|
|
||||||
# AI configuration
|
# AI configuration
|
||||||
|
|
|
||||||
|
|
@ -291,14 +291,31 @@ def verifyCheckout(
|
||||||
logger.error("Failed to retrieve checkout session %s: %s", data.sessionId, e)
|
logger.error("Failed to retrieve checkout session %s: %s", data.sessionId, e)
|
||||||
raise HTTPException(status_code=400, detail="Invalid session ID")
|
raise HTTPException(status_code=400, detail="Invalid session ID")
|
||||||
|
|
||||||
if session.get("status") != "complete" or session.get("payment_status") != "paid":
|
payStatus = session.get("payment_status")
|
||||||
|
if session.get("status") != "complete":
|
||||||
|
return {"status": "pending", "message": "Checkout not yet completed"}
|
||||||
|
# Subscription checkouts with trial / $0 first period use no_payment_required, not paid.
|
||||||
|
if payStatus not in ("paid", "no_payment_required"):
|
||||||
return {"status": "pending", "message": "Checkout not yet completed"}
|
return {"status": "pending", "message": "Checkout not yet completed"}
|
||||||
|
|
||||||
if session.get("mode") != "subscription":
|
if session.get("mode") != "subscription":
|
||||||
raise HTTPException(status_code=400, detail="Not a subscription checkout session")
|
raise HTTPException(status_code=400, detail="Not a subscription checkout session")
|
||||||
|
|
||||||
from modules.routes.routeBilling import _handleSubscriptionCheckoutCompleted
|
from modules.routes.routeBilling import _handleSubscriptionCheckoutCompleted
|
||||||
_handleSubscriptionCheckoutCompleted(session, f"verify-{data.sessionId}")
|
|
||||||
|
try:
|
||||||
|
_handleSubscriptionCheckoutCompleted(session, f"verify-{data.sessionId}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(
|
||||||
|
"verifyCheckout: handler failed for session %s mandate %s: %s",
|
||||||
|
data.sessionId,
|
||||||
|
mandateId,
|
||||||
|
e,
|
||||||
|
)
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=500,
|
||||||
|
detail="Subscription-Aktivierung nach Checkout fehlgeschlagen. Bitte erneut versuchen oder Support informieren.",
|
||||||
|
) from e
|
||||||
|
|
||||||
return {"status": "activated", "message": "Subscription activated"}
|
return {"status": "activated", "message": "Subscription activated"}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue