Allow LAN admin access and add a campaign mint form (#11).
CI / test (pull_request) Successful in 6s
CI / test (pull_request) Successful in 6s
Serve /admin/ on 10.0.0.128 so it can be used from another machine on the network, and mint tracked short URLs from domain/campaign/source/metric.
This commit is contained in:
+56
-1
@@ -1,6 +1,7 @@
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
|
||||
from links.services import ValidationError, validate_target_url
|
||||
from links.services import ValidationError, build_tracked_url, validate_target_url
|
||||
|
||||
|
||||
class DebugCreateForm(forms.Form):
|
||||
@@ -19,3 +20,57 @@ class DebugCreateForm(forms.Form):
|
||||
return validate_target_url(raw)
|
||||
except ValidationError as exc:
|
||||
raise forms.ValidationError(str(exc)) from exc
|
||||
|
||||
|
||||
def allowlisted_domain_choices() -> list[str]:
|
||||
hosts = list(getattr(settings, "SHORT_ALLOWED_HOSTS", []) or [])
|
||||
return [host for host in hosts if host and not host.startswith("*")]
|
||||
|
||||
|
||||
class QuickMintForm(forms.Form):
|
||||
domain = forms.CharField(
|
||||
label="Domain",
|
||||
max_length=253,
|
||||
widget=forms.TextInput(
|
||||
attrs={
|
||||
"placeholder": "mkdrealtor.com",
|
||||
"list": "allowed-domains",
|
||||
"autocomplete": "off",
|
||||
}
|
||||
),
|
||||
)
|
||||
campaign = forms.CharField(
|
||||
label="Campaign",
|
||||
max_length=200,
|
||||
widget=forms.TextInput(attrs={"placeholder": "open-house"}),
|
||||
)
|
||||
source = forms.CharField(
|
||||
label="Source",
|
||||
max_length=200,
|
||||
widget=forms.TextInput(attrs={"placeholder": "sms"}),
|
||||
)
|
||||
metric = forms.CharField(
|
||||
label="Metric",
|
||||
max_length=200,
|
||||
widget=forms.TextInput(attrs={"placeholder": "listing-click"}),
|
||||
help_text="Stored as utm_medium.",
|
||||
)
|
||||
|
||||
def clean(self):
|
||||
cleaned = super().clean()
|
||||
domain = cleaned.get("domain")
|
||||
campaign = cleaned.get("campaign")
|
||||
source = cleaned.get("source")
|
||||
metric = cleaned.get("metric")
|
||||
if not all((domain, campaign, source, metric)):
|
||||
return cleaned
|
||||
try:
|
||||
cleaned["target_url"] = build_tracked_url(
|
||||
domain=domain,
|
||||
campaign=campaign,
|
||||
source=source,
|
||||
metric=metric,
|
||||
)
|
||||
except ValidationError as exc:
|
||||
self.add_error("domain", str(exc))
|
||||
return cleaned
|
||||
|
||||
Reference in New Issue
Block a user