From 9b396ae74306117c6b67fb8ebe48fbb9fe56c705 Mon Sep 17 00:00:00 2001
From: Hakan Calim <hakan.calim@fau.de>
Date: Tue, 31 Oct 2023 15:06:44 +0100
Subject: [PATCH] NAT-328: added validation for site name

---
 gso/api/v1/imports.py | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gso/api/v1/imports.py b/gso/api/v1/imports.py
index 5a7ef6c6..c65c23b8 100644
--- a/gso/api/v1/imports.py
+++ b/gso/api/v1/imports.py
@@ -1,6 +1,7 @@
 import ipaddress
 from typing import Any
 from uuid import UUID
+import re
 
 from fastapi import Depends, HTTPException, status
 from fastapi.routing import APIRouter
@@ -104,6 +105,15 @@ class IptrunkImportModel(BaseModel):
 
         return value
 
+    @validator("site_name", allow_reuse=True)
+    def site_name_must_be_valid(cls, site_name: str) -> str:
+        # Accept 3 chapital letters and only one ditigt after capital letters.
+        pattern = re.compile(r"^[A-Z]{3}[0-9]?$")
+        if not bool(pattern.match(site_name)):
+            raise ValueError(f"Enter a valid site name similar looks like AMS, AMS1or LON9. Get: {site_name}")
+
+        return site_name
+
     @root_validator
     def check_members(cls, values: dict[str, Any]) -> dict[str, Any]:
         min_links = values["iptrunk_minimum_links"]
-- 
GitLab