mirror of
https://github.com/simple-login/app.git
synced 2024-11-10 21:27:10 +01:00
3e0b7bb369
* feat: add protocol buffers for events * chore: add EventDispatcher * chore: add WebhookEvent class * chore: emit events * feat: initial version of event listener * chore: emit user plan change with new timestamp * feat: emit metrics + add alias status to create event * chore: add newrelic decorator to functions * fix: event emitter fixes * fix: take null end_time into account * fix: avoid double-commits * chore: move UserDeleted event to User.delete method * db: add index to sync_event created_at and taken_time columns * chore: add index to model
39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
import requests
|
|
from requests import RequestException
|
|
|
|
from app import config
|
|
from app.events.event_dispatcher import EventDispatcher
|
|
from app.events.generated.event_pb2 import EventContent, UserPlanChange
|
|
from app.log import LOG
|
|
from app.models import User
|
|
|
|
|
|
def execute_subscription_webhook(user: User):
|
|
webhook_url = config.SUBSCRIPTION_CHANGE_WEBHOOK
|
|
if webhook_url is None:
|
|
return
|
|
subscription_end = user.get_active_subscription_end(
|
|
include_partner_subscription=False
|
|
)
|
|
sl_subscription_end = None
|
|
if subscription_end:
|
|
sl_subscription_end = subscription_end.timestamp
|
|
payload = {
|
|
"user_id": user.id,
|
|
"is_premium": user.is_premium(),
|
|
"active_subscription_end": sl_subscription_end,
|
|
}
|
|
try:
|
|
response = requests.post(webhook_url, json=payload, timeout=2)
|
|
if response.status_code == 200:
|
|
LOG.i("Sent request to subscription update webhook successfully")
|
|
else:
|
|
LOG.i(
|
|
f"Request to webhook failed with statue {response.status_code}: {response.text}"
|
|
)
|
|
except RequestException as e:
|
|
LOG.error(f"Subscription request exception: {e}")
|
|
|
|
event = UserPlanChange(plan_end_time=sl_subscription_end)
|
|
EventDispatcher.send_event(user, EventContent(user_plan_change=event))
|