diff --git a/apps/api/plane/silo/migrations/0005_create_sentry_app.py b/apps/api/plane/silo/migrations/0005_create_sentry_app.py new file mode 100644 index 0000000000..1747fa3512 --- /dev/null +++ b/apps/api/plane/silo/migrations/0005_create_sentry_app.py @@ -0,0 +1,36 @@ +# Generated by Django 4.2.22 on 2025-06-23 15:11 + +from django.db import migrations + +def create_sentry_app(apps, schema_editor): + # Getting the models from apps to avoid circular imports + Application = apps.get_model("authentication", "Application") + ApplicationSecret = apps.get_model("silo", "ApplicationSecret") + User = apps.get_model("db", "User") + InstanceAdmin = apps.get_model("license", "InstanceAdmin") + + # Importing the function and constants directly here to avoid circular imports + from plane.silo.services.generate_application import generate_application + from plane.silo.utils.constants import APPLICATIONS + + # Getting the first instance admin + instance_admin = InstanceAdmin.objects.first() + if instance_admin: + generate_application( + user_id=instance_admin.user.id, + app_key=APPLICATIONS["sentry"]["key"], + application_model=Application, + application_secret_model=ApplicationSecret, + user_model=User, + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ('silo', '0004_create_github_enterprise_app'), + ] + + operations = [ + migrations.RunPython(create_sentry_app, reverse_code=migrations.RunPython.noop) + ] diff --git a/apps/api/plane/silo/services/generate_application.py b/apps/api/plane/silo/services/generate_application.py index 930a77cd94..ea01b92b08 100644 --- a/apps/api/plane/silo/services/generate_application.py +++ b/apps/api/plane/silo/services/generate_application.py @@ -44,6 +44,8 @@ def generate_application( app_slug = app_data["slug"] user = user_model.objects.get(id=user_id) + webhook_url = app_data.get("webhook_url", None) + with transaction.atomic(): client_secret = generate_client_secret() @@ -59,6 +61,7 @@ def generate_application( "authorization_grant_type": "authorization-code", "user_id": user_id, "client_secret": client_secret, + "webhook_url": webhook_url, } # check if application already exists @@ -67,6 +70,7 @@ def generate_application( # Application already exists, update client_secret application.client_secret = client_secret application.redirect_uris = app_data["redirect_uris"] + application.webhook_url = webhook_url application.save() else: application = application_model.objects.create(**application_data) diff --git a/apps/api/plane/silo/utils/constants.py b/apps/api/plane/silo/utils/constants.py index 7ecd254620..3d893b21af 100644 --- a/apps/api/plane/silo/utils/constants.py +++ b/apps/api/plane/silo/utils/constants.py @@ -33,6 +33,15 @@ APPLICATIONS = { "description_html": "
Slack Integration
", "redirect_uris": f"{settings.SILO_URL}/api/slack/plane-oauth/callback", }, + "sentry": { + "key": "sentry", + "name": "Sentry", + "slug": "sentry", + "short_description": "Sentry Integration", + "description_html": "Sentry Integration
", + "redirect_uris": f"{settings.SILO_URL}/api/oauth/sentry/plane-oauth/callback", + "webhook_url": f"{settings.SILO_URL}/api/sentry/plane/events", + }, "importer": { "key": "importer", "name": "Importer",