From faeb656e2ababed373cfc3e793d4c2025d4c6207 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Mon, 21 Dec 2020 20:31:16 +0200 Subject: Convert user IDs to string to avoid JS bad behaviours --- backend/models/discord_user.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'backend/models/discord_user.py') diff --git a/backend/models/discord_user.py b/backend/models/discord_user.py index e835176..e61c7b3 100644 --- a/backend/models/discord_user.py +++ b/backend/models/discord_user.py @@ -1,14 +1,16 @@ import typing as t -from pydantic import BaseModel +from pydantic import BaseModel, validator class DiscordUser(BaseModel): """Schema model of Discord user for form response.""" - # Discord default fields - id: int # This is actually snowflake, but we simplify it here + # Discord default fields. username: str + # Store ID as str not as int because JavaScript + # doesn't work correctly with big ints. + id: str discriminator: str avatar: t.Optional[str] bot: t.Optional[bool] @@ -22,3 +24,11 @@ class DiscordUser(BaseModel): # Custom fields admin: bool + + @validator("id", pre=True) + def validate_id(cls, value: t.Any) -> t.Any: + """When ID is integer, convert it to string.""" + if isinstance(value, int): + return str(value) + + return value -- cgit v1.2.3