Compare commits

...

3 commits

6 changed files with 46 additions and 14 deletions

View file

@ -1,6 +1,5 @@
# MUSS # MUSS
- api: admin Login case sensitivity (username "admin" == "AdMiN")
- api: Config-Liste von Extra-Türchen (kein Buchstabe, nur manuelles Bild) - api: Config-Liste von Extra-Türchen (kein Buchstabe, nur manuelles Bild)
- api: Config-Option "Überspringe leere Türchen" (standard ja) - api: Config-Option "Überspringe leere Türchen" (standard ja)
@ -8,7 +7,6 @@
- api/ui: Türchen mit Tag "0" einem zufälligen Tag zuweisen - api/ui: Türchen mit Tag "0" einem zufälligen Tag zuweisen
- api/?: Option "custom Zuordnung Buchstaben" (standard leer) - api/?: Option "custom Zuordnung Buchstaben" (standard leer)
- api: `config.solution` - whitespace="IGNORE"->"REMOVE" umbenennen, +Sonderzeichen
- ui: `confirm` durch bulma Komponente(n) ersetzen - ui: `confirm` durch bulma Komponente(n) ersetzen
# Erledigt # Erledigt
@ -20,3 +18,5 @@
- Option "Leerzeichen ignorieren" (standard ja) - Option "Leerzeichen ignorieren" (standard ja)
- Nach einigen Sekunden: Meldung "Türchen anzeigen?" - Nach einigen Sekunden: Meldung "Türchen anzeigen?"
- `alert` durch bulma Komponente(n) ersetzen - `alert` durch bulma Komponente(n) ersetzen
- api: admin Login case sensitivity (username "admin" == "AdMiN")
- api: `config.solution` - whitespace="IGNORE"->"REMOVE" umbenennen, +Sonderzeichen

View file

@ -23,10 +23,18 @@ class TransformedString(BaseModel):
# Leerzeichen an Anfang und Ende entfernen # Leerzeichen an Anfang und Ende entfernen
STRIP = "STRIP" STRIP = "STRIP"
# whitespace entfernen # whitespace durch Leerzeichen ersetzen
IGNORE = "IGNORE" SPACE = "SPACE"
# special chars # whitespace entfernen
REMOVE = "REMOVE"
class __SpecialChars(str, Enum):
# unverändert
KEEP = "KEEP"
# Sonderzeichen entfernen
REMOVE = "REMOVE"
class __Case(str, Enum): class __Case(str, Enum):
# unverändert # unverändert
@ -43,7 +51,8 @@ class TransformedString(BaseModel):
value: str value: str
whitespace: __Whitespace = __Whitespace.IGNORE whitespace: __Whitespace = __Whitespace.REMOVE
special_chars: __SpecialChars = __SpecialChars.REMOVE
case: __Case = __Case.UPPER case: __Case = __Case.UPPER
@field_validator("whitespace", "case", mode="before") @field_validator("whitespace", "case", mode="before")
@ -54,21 +63,28 @@ class TransformedString(BaseModel):
def clean(self) -> str: def clean(self) -> str:
result = self.value result = self.value
# Whitespace bearbeiten # Whitespace verarbeiten
if self.whitespace is self.__Whitespace.STRIP: if self.whitespace is TransformedString.__Whitespace.STRIP:
result = result.strip() result = result.strip()
elif self.whitespace is self.__Whitespace.IGNORE: elif self.whitespace is TransformedString.__Whitespace.SPACE:
result = re.sub(string=result, pattern=r"\s+", repl=" ")
elif self.whitespace is TransformedString.__Whitespace.REMOVE:
result = re.sub(string=result, pattern=r"\s+", repl="") result = re.sub(string=result, pattern=r"\s+", repl="")
# Sonderzeichen verarbeiten
if self.special_chars is TransformedString.__SpecialChars.REMOVE:
result = re.sub(string=result, pattern=r"[^a-zA-Z0-9\s]+", repl="")
# Groß-/Kleinschreibung verarbeiten # Groß-/Kleinschreibung verarbeiten
if self.case is self.__Case.UPPER: if self.case is TransformedString.__Case.UPPER:
result = result.upper() result = result.upper()
elif self.case is self.__Case.LOWER: elif self.case is TransformedString.__Case.LOWER:
result = result.lower() result = result.lower()
elif self.case is self.__Case.RANDOM: elif self.case is TransformedString.__Case.RANDOM:
rnd = Random(self.value) rnd = Random(self.value)
def randomcase(c: str) -> str: def randomcase(c: str) -> str:

View file

@ -19,8 +19,14 @@ async def user_is_admin(
True iff der user "admin" ist True iff der user "admin" ist
""" """
username_correct = secrets.compare_digest(credentials.username, cfg.admin.name) username_correct = secrets.compare_digest(
password_correct = secrets.compare_digest(credentials.password, cfg.admin.password) credentials.username.lower(),
cfg.admin.name.lower(),
)
password_correct = secrets.compare_digest(
credentials.password,
cfg.admin.password,
)
return username_correct and password_correct return username_correct and password_correct

View file

@ -31,6 +31,7 @@ class AdminConfigModel(BaseModel):
class __Solution(BaseModel): class __Solution(BaseModel):
value: str value: str
whitespace: str whitespace: str
special_chars: str
case: str case: str
clean: str clean: str
@ -81,6 +82,7 @@ async def get_config_model(
"solution": { "solution": {
"value": cfg.solution.value, "value": cfg.solution.value,
"whitespace": cfg.solution.whitespace, "whitespace": cfg.solution.whitespace,
"special_chars": cfg.solution.special_chars,
"case": cfg.solution.case, "case": cfg.solution.case,
"clean": cfg.solution.clean, "clean": cfg.solution.clean,
}, },

View file

@ -27,6 +27,12 @@
{{ admin_config_model.solution.whitespace }} {{ admin_config_model.solution.whitespace }}
</span> </span>
</dd> </dd>
<dd>
Sonderzeichen:
<span class="is-uppercase is-family-monospace">
{{ admin_config_model.solution.special_chars }}
</span>
</dd>
<dd> <dd>
Buchstaben: Buchstaben:
<span class="is-uppercase is-family-monospace"> <span class="is-uppercase is-family-monospace">
@ -184,6 +190,7 @@ export default class extends Vue {
solution: { solution: {
value: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", value: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
whitespace: "KEEP", whitespace: "KEEP",
special_chars: "KEEP",
case: "KEEP", case: "KEEP",
clean: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", clean: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
}, },

View file

@ -2,6 +2,7 @@ export interface AdminConfigModel {
solution: { solution: {
value: string; value: string;
whitespace: string; whitespace: string;
special_chars: string;
case: string; case: string;
clean: string; clean: string;
}; };