Make allowed extra length configurable
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Kai Vogelgesang 2022-10-09 17:54:53 +02:00
parent 0512449140
commit 3bb77d29a5
Signed by: kai
GPG Key ID: 0A95D3B6E62C0879

View File

@ -77,7 +77,7 @@ async def find_guest(party: str, token: str) -> DBGuest:
class Party(MongoModel): class Party(MongoModel):
name: str name: str
created: datetime created: datetime
allowed_extra: list[str] allowed_extra: dict[str, int]
async def find_party(name: str) -> Party: async def find_party(name: str) -> Party:
@ -88,7 +88,10 @@ async def find_party(name: str) -> Party:
def validate_extra(extra: dict[str, str], party: Party): def validate_extra(extra: dict[str, str], party: Party):
return all(k in party.allowed_extra and len(v) <= 64 for (k, v) in extra.items()) return all(
k in party.allowed_extra and len(v) <= party.allowed_extra[k]
for (k, v) in extra.items()
)
# Guest methods # Guest methods
@ -188,7 +191,7 @@ async def list_parties(_=Depends(auth_admin)):
class PartyCreate(BaseModel): class PartyCreate(BaseModel):
name: str name: str
allowed_extra: list[str] = [] allowed_extra: dict[str, int] = dict()
@app.post( @app.post(
@ -269,7 +272,7 @@ async def create_new_guest(party: str, new_guest: GuestCreate, _=Depends(auth_ad
@app.get( @app.get(
"/{admin_token}/{party}/userAllowedExtra", "/{admin_token}/{party}/userAllowedExtra",
response_model=list[str], response_model=dict[str, int],
responses=error_responses(401, 404), responses=error_responses(401, 404),
tags=["admin"], tags=["admin"],
) )
@ -284,7 +287,9 @@ async def get_allowed_extra_keys(party: str, _=Depends(auth_admin)):
responses=error_responses(401, 404), responses=error_responses(401, 404),
tags=["admin"], tags=["admin"],
) )
async def modify_allowed_extra_keys(party: str, keys: list[str], _=Depends(auth_admin)): async def modify_allowed_extra_keys(
party: str, keys: dict[str, int], _=Depends(auth_admin)
):
party_obj = await find_party(party) party_obj = await find_party(party)
party_dict = party_obj.dict(exclude={"id"}) party_dict = party_obj.dict(exclude={"id"})
party_dict["allowed_extra"] = keys party_dict["allowed_extra"] = keys