Der er desværre nogle kriminelle, der har opdaget min kortlink-service lnk.dk og bruger siden til at lave korte links, der peger på forskellige phishing-formularer. De fleste på fransk, enkelte på dansk.
Jeg vil helst kun have, at min side bruges til lovlige formål, og derfor har jeg i første omgang lavet et kontrolspørgsmål i formularen til at oprette links. Jeg håber, at det kun er ærlige mennesker, der kan svare på spørgsmålet, og at det er relativt nemt for dem:

For at implementere det nye felt, redigerede jeg min Django-applikations forms.py med feltet og krav til validering:
from django.forms import ModelForm
from django import forms
from .models import Link
from django.core.exceptions import ValidationError
class LinkForm(ModelForm):
everyoneknows = forms.CharField(label='Hvad er fornavnet på cykelrytteren, der vandt Tour de France for mænd i 2022?', error_messages={'required': 'Indtast cykelrytterens fornavn'})
def clean_everyoneknows(self):
answer = self.cleaned_data['everyoneknows'].lower()
if answer != 'jonas':
raise ValidationError("Det fornavn, du har indtastet, er forkert.")
return answer
def __init__(self, *args, **kwargs):
super(LinkForm, self).__init__(*args, **kwargs)
self.fields['destination'].widget.attrs['placeholder'] = 'https://eksempel.dk/meget/lang/url'
self.fields['shortlink'].widget.attrs['placeholder'] = 'eksempel'
self.fields['shortlink'].label_suffix = "" # Remove colon after label
self.fields['shortlink'].required = False # Not required in form
def clean_shortlink(self):
shortlink = self.cleaned_data['shortlink']
return shortlink.lower()
class Meta:
model = Link
fields = ['destination', 'shortlink']
labels = {
'shortlink': ('Evt. selvvalgt kort link:'),
}
error_messages = {
'destination': {
'max_length': ('Din destinationsurl er for lang til denne kortlinkservice.'),
'invalid': ('Din destinationsurl er ikke en gyldig adresse. Husk http://, https:// eller ftp:// foran dit link, hvis du har glemt det.'),
},
'shortlink': {
'unique': ('Det selvvalgte link, du har valgt, er allerede i brug. Find på et andet.'),
'max_length': ('Dit selvvalgte link må maksimalt være 100 tegn langt.'),
'invalid': ('Du kan kun bruge bogstaver (dog ikke æ, ø, å - kun ASCII-tegnsættet), tal, bindestreg og understreg i din selvvalgte adresse.'),
}
}
Det bliver spændende at se, om ændringen har nogen effekt.