Browse Source

GET js for error report embed works

David Burke 4 years ago
parent
commit
91dc852b4e

+ 1 - 0
.gitignore

@@ -8,6 +8,7 @@ db.sqlite3
 db.sqlite3-journal
 media
 env/
+.env/
 
 # If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/
 # in your Git repository. Update and uncomment the following line accordingly.

+ 1 - 0
glitchtip/settings.py

@@ -137,6 +137,7 @@ INSTALLED_APPS = [
     "event_store",
     "issues",
     "users",
+    "user_reports",
     "projects",
     "teams",
 ]

+ 1 - 0
glitchtip/urls.py

@@ -65,6 +65,7 @@ urlpatterns += [
     path("api/0/", include("organizations_ext.urls")),
     path("api/0/", include("teams.urls")),
     path("api/", include("event_store.urls")),
+    path("api/embed/", include("user_reports.urls")),
     # What an oddball API endpoint
     path(
         "organizations/<slug:org>/issues/<int:issue>/events/<str:event>/json/",

+ 1 - 1
projects/models.py

@@ -74,7 +74,7 @@ class ProjectKey(models.Model):
         return str(self.public_key)
 
     @classmethod
-    def from_dsn(cls, dsn):
+    def from_dsn(cls, dsn: str):
         urlparts = urlparse(dsn)
 
         public_key = urlparts.username

+ 0 - 0
user_reports/__init__.py


+ 24 - 0
user_reports/forms.py

@@ -0,0 +1,24 @@
+from django.utils.translation import ugettext_lazy as _
+from django import forms
+from .models import UserReport
+
+
+class UserReportForm(forms.ModelForm):
+    name = forms.CharField(
+        max_length=128, widget=forms.TextInput(attrs={"placeholder": _("Jane Doe")})
+    )
+    email = forms.EmailField(
+        max_length=75,
+        widget=forms.TextInput(
+            attrs={"placeholder": _("jane@example.com"), "type": "email"}
+        ),
+    )
+    comments = forms.CharField(
+        widget=forms.Textarea(
+            attrs={"placeholder": _("I clicked on 'X' and then hit 'Confirm'")}
+        )
+    )
+
+    class Meta:
+        model = UserReport
+        fields = ("name", "email", "comments")

+ 33 - 0
user_reports/migrations/0001_initial.py

@@ -0,0 +1,33 @@
+# Generated by Django 3.0.8 on 2020-07-25 20:07
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('issues', '0002_auto_20200714_1333'),
+        ('projects', '0003_projectcounter'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='UserReport',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('event_id', models.UUIDField()),
+                ('name', models.CharField(max_length=128)),
+                ('email', models.EmailField(max_length=254)),
+                ('comments', models.TextField()),
+                ('created', models.DateTimeField(auto_now_add=True, db_index=True)),
+                ('issue', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='issues.Issue')),
+                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='projects.Project')),
+            ],
+            options={
+                'unique_together': {('project', 'event_id')},
+            },
+        ),
+    ]

+ 0 - 0
user_reports/migrations/__init__.py


+ 14 - 0
user_reports/models.py

@@ -0,0 +1,14 @@
+from django.db import models
+
+
+class UserReport(models.Model):
+    project = models.ForeignKey("projects.Project", on_delete=models.CASCADE)
+    issue = models.ForeignKey("issues.Issue", null=True, on_delete=models.CASCADE)
+    event_id = models.UUIDField()
+    name = models.CharField(max_length=128)
+    email = models.EmailField()
+    comments = models.TextField()
+    created = models.DateTimeField(auto_now_add=True, db_index=True)
+
+    class Meta:
+        unique_together = (("project", "event_id"),)

+ 36 - 0
user_reports/serializers.py

@@ -0,0 +1,36 @@
+from django.utils.translation import ugettext_lazy as _
+from rest_framework import serializers
+
+# Copy credited to OSS Sentry sentry/web/error_page_embed.py
+DEFAULT_TITLE = _("It looks like we're having issues.")
+GENERIC_ERROR = _(
+    "An unknown error occurred while submitting your report. Please try again."
+)
+FORM_ERROR = _("Some fields were invalid. Please correct the errors and try again.")
+SENT_MESSAGE = _("Your feedback has been sent. Thank you!")
+
+DEFAULT_SUBTITLE = _("Our team has been notified.")
+DEFAULT_SUBTITLE2 = _("If you'd like to help, tell us what happened below.")
+
+DEFAULT_NAME_LABEL = _("Name")
+DEFAULT_EMAIL_LABEL = _("Email")
+DEFAULT_COMMENTS_LABEL = _("What happened?")
+
+DEFAULT_CLOSE_LABEL = _("Close")
+DEFAULT_SUBMIT_LABEL = _("Submit Crash Report")
+
+
+class ErrorPageEmbedSerializer(serializers.Serializer):
+    dsn = serializers.CharField()
+    eventId = serializers.CharField()
+    title = serializers.CharField(default=DEFAULT_TITLE)
+    subtitle = serializers.CharField(default=DEFAULT_SUBTITLE)
+    subtitle2 = serializers.CharField(default=DEFAULT_SUBTITLE2)
+    labelName = serializers.CharField(default=DEFAULT_NAME_LABEL)
+    labelEmail = serializers.CharField(default=DEFAULT_EMAIL_LABEL)
+    labelComments = serializers.CharField(default=DEFAULT_COMMENTS_LABEL)
+    labelClose = serializers.CharField(default=DEFAULT_CLOSE_LABEL)
+    labelSubmit = serializers.CharField(default=DEFAULT_SUBMIT_LABEL)
+    errorGeneric = serializers.CharField(default=GENERIC_ERROR)
+    errorFormEntry = serializers.CharField(default=FORM_ERROR)
+    successMessage = serializers.CharField(default=SENT_MESSAGE)

Some files were not shown because too many files changed in this diff