diff --git a/allianceauth/srp/form.py b/allianceauth/srp/form.py index 6822ab68..a7e80663 100755 --- a/allianceauth/srp/form.py +++ b/allianceauth/srp/form.py @@ -13,7 +13,7 @@ class SrpFleetMainForm(forms.Form): class SrpFleetUserRequestForm(forms.Form): additional_info = forms.CharField(required=False, max_length=25, label=_("Additional Info")) killboard_link = forms.CharField( - label=_("zKillboard Link"), + label=_("Killboard Link (zkillboard.com or kb.evetools.org)"), max_length=255, required=True @@ -21,13 +21,31 @@ class SrpFleetUserRequestForm(forms.Form): def clean_killboard_link(self): data = self.cleaned_data['killboard_link'] - if "zkillboard.com" not in data: - raise forms.ValidationError(_("Invalid Link. Please use zKillboard.com")) - if not re.match(r"http[s]?://zkillboard\.com/kill/\d+\/", data): + # Check if it's a link from one of the accepted kill boards + if not any( + re.match(regex, data) + for regex in [ + r"^http[s]?:\/\/zkillboard\.com\/", + r"^http[s]?:\/\/kb\.evetools\.org\/", + ] + ): + raise forms.ValidationError( + _("Invalid Link. Please use zkillboard.com or kb.evetools.org") + ) + + # Check if it's an actual kill mail + if not any( + re.match(regex, data) + for regex in [ + r"^http[s]?:\/\/zkillboard\.com\/kill\/\d+\/", + r"^http[s]?:\/\/kb\.evetools\.org\/kill\/\d+", + ] + ): raise forms.ValidationError( _("Invalid Link. Please post a direct link to a killmail.") ) + return data diff --git a/allianceauth/srp/views.py b/allianceauth/srp/views.py index 788c6793..404904ec 100755 --- a/allianceauth/srp/views.py +++ b/allianceauth/srp/views.py @@ -170,9 +170,13 @@ def srp_request_view(request, fleet_srp): logger.debug("Request type POST contains form valid: %s" % form.is_valid()) if form.is_valid(): - if SrpUserRequest.objects.filter(killboard_link=form.cleaned_data['killboard_link']).exists(): + request_killboard_link = form.cleaned_data['killboard_link'] + killmail_id = SRPManager.get_kill_id(killboard_link=request_killboard_link) + + # check if the killmail_id is already present + if SrpUserRequest.objects.filter(killboard_link__icontains="/kill/" + killmail_id).exists(): messages.error(request, - _("This Killboard link has already been posted.")) + _("This kill mail has already been posted.")) return redirect("srp:management") character = request.user.profile.main_character @@ -180,7 +184,7 @@ def srp_request_view(request, fleet_srp): post_time = timezone.now() srp_request = SrpUserRequest() - srp_request.killboard_link = form.cleaned_data['killboard_link'] + srp_request.killboard_link = request_killboard_link srp_request.additional_info = form.cleaned_data['additional_info'] srp_request.character = character srp_request.srp_fleet_main = srp_fleet_main