From 402f35875131c687e04339426cac9f089f891ef2 Mon Sep 17 00:00:00 2001 From: Madeline <46743919+MaddyUnderStars@users.noreply.github.com> Date: Fri, 30 Dec 2022 23:19:05 +1100 Subject: [PATCH 1/2] Patch body-parser to use json-bigint --- package-lock.json | Bin 212809 -> 212808 bytes package.json | 2 +- patches/body-parser+1.20.1.patch | 30 ++++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 patches/body-parser+1.20.1.patch diff --git a/package-lock.json b/package-lock.json index 95f2e3de6a3c6c322fc23457422cba62056361c8..b6d747721603dd6a44ac289b979e75e50cd8b6f4 100644 GIT binary patch delta 1392 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 DMZy3Q diff --git a/package.json b/package.json index 41a49b9e..13b5802e 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "ajv-formats": "2.1.1", "amqplib": "^0.10.3", "bcrypt": "^5.0.1", - "body-parser": "^1.20.1", + "body-parser": "1.20.1", "cheerio": "^1.0.0-rc.12", "cookie-parser": "^1.4.6", "dotenv": "^16.0.2", diff --git a/patches/body-parser+1.20.1.patch b/patches/body-parser+1.20.1.patch new file mode 100644 index 00000000..054e24f7 --- /dev/null +++ b/patches/body-parser+1.20.1.patch @@ -0,0 +1,30 @@ +diff --git a/node_modules/body-parser/lib/types/json.js b/node_modules/body-parser/lib/types/json.js +index c2745be..7104cfa 100644 +--- a/node_modules/body-parser/lib/types/json.js ++++ b/node_modules/body-parser/lib/types/json.js +@@ -18,6 +18,7 @@ var createError = require('http-errors') + var debug = require('debug')('body-parser:json') + var read = require('../read') + var typeis = require('type-is') ++var JSONbig = require("json-bigint"); + + /** + * Module exports. +@@ -86,7 +87,7 @@ function json (options) { + + try { + debug('parse json') +- return JSON.parse(body, reviver) ++ return JSONbig.parse(body, reviver) + } catch (e) { + throw normalizeJsonSyntaxError(e, { + message: e.message, +@@ -157,7 +158,7 @@ function createStrictSyntaxError (str, char) { + : '' + + try { +- JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') ++ JSONbig.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') + } catch (e) { + return normalizeJsonSyntaxError(e, { + message: e.message.replace('#', char), From 7a725bab50aa09253e9f369755ba531092e5d407 Mon Sep 17 00:00:00 2001 From: Madeline <46743919+MaddyUnderStars@users.noreply.github.com> Date: Sat, 31 Dec 2022 17:25:28 +1100 Subject: [PATCH 2/2] Profile themes and pronouns --- assets/schemas.json | Bin 1008504 -> 1009368 bytes src/api/routes/users/#id/profile.ts | 10 ++++++++-- src/gateway/opcodes/Identify.ts | 1 + .../defaults/UserDefaults.ts | 4 ++-- src/util/entities/Member.ts | 6 ++++++ src/util/entities/User.ts | 11 ++++++++++- src/util/schemas/MemberChangeProfileSchema.ts | 6 ++++++ src/util/schemas/UserProfileModifySchema.ts | 6 ++++++ 8 files changed, 39 insertions(+), 5 deletions(-) diff --git a/assets/schemas.json b/assets/schemas.json index 879d202eee7e4a97aa5fba3ce12bf3061ac37248..40599f06db736a0978b78c32481d27aa776537f8 100644 GIT binary patch delta 238 zcmexy%=X4v+lCg#7N!>F7M2#)Eo{H+r$1Q5$j??#l%JPhI(=gam%`)%K^5+jjMUuJ z_~iVY{G#a(pRvkMzhKEIF}*>VnRB|qY*x!jhfJm$*mFotUtrI!KG|Ta;A8<6k;w}d zaZl%&!>YGE{}$U9ul9FcY(UHo#2nk-b#YeDne6bGHa5i;aka-5aRV_A5c6)2E#i~@ F2mrCoTonKS delta 78 zcmca{*7nCS+lCg#7N!>F7M2#)Eo{H+w;QZx{NmLN(RJVpv4C cKRC>O->ZFZDHjlP12GQ}^KRc;$|wC10A*n#82|tP diff --git a/src/api/routes/users/#id/profile.ts b/src/api/routes/users/#id/profile.ts index 083d44af..ac844427 100644 --- a/src/api/routes/users/#id/profile.ts +++ b/src/api/routes/users/#id/profile.ts @@ -92,7 +92,9 @@ router.get( const userProfile = { bio: req.user_bot ? null : user.bio, accent_color: user.accent_color, - banner: user.banner + banner: user.banner, + pronouns: user.pronouns, + theme_colors: user.theme_colors, }; const guildMemberDto = guild_member @@ -126,6 +128,8 @@ router.get( premium_since: user.premium_since, // TODO mutual_guilds: mutual_guilds, // TODO {id: "", nick: null} when ?with_mutual_guilds=true user: userDto, + premium_type: user.premium_type, + profile_themes_experiment_bucket: 4, // TODO: This doesn't make it available, for some reason? user_profile: userProfile, guild_member: guild_id && guildMemberDto, guild_member_profile: guild_id && guildMemberProfile @@ -154,7 +158,9 @@ router.patch("/", route({ body: "UserProfileModifySchema" }), async (req: Reques res.json({ accent_color: user.accent_color, bio: user.bio, - banner: user.banner + banner: user.banner, + theme_colors: user.theme_colors, + pronouns: user.pronouns, }); }); diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts index 69a60880..ca3ae66f 100644 --- a/src/gateway/opcodes/Identify.ts +++ b/src/gateway/opcodes/Identify.ts @@ -198,6 +198,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { bot: related_user.bot, bio: related_user.bio, premium_since: user.premium_since, + premium_type: user.premium_type, accent_color: related_user.accent_color, }; users.push(public_related_user); diff --git a/src/util/config/types/subconfigurations/defaults/UserDefaults.ts b/src/util/config/types/subconfigurations/defaults/UserDefaults.ts index 4481c011..f20a14b6 100644 --- a/src/util/config/types/subconfigurations/defaults/UserDefaults.ts +++ b/src/util/config/types/subconfigurations/defaults/UserDefaults.ts @@ -1,5 +1,5 @@ export class UserDefaults { - premium: boolean = false; - premium_type: number = 2; + premium: boolean = true; + premiumType: number = 2; verified: boolean = true; } \ No newline at end of file diff --git a/src/util/entities/Member.ts b/src/util/entities/Member.ts index bffec326..eeae181e 100644 --- a/src/util/entities/Member.ts +++ b/src/util/entities/Member.ts @@ -125,6 +125,12 @@ export class Member extends BaseClassWithoutId { @Column() bio: string; + + @Column({ nullable: true, type: "simple-array" }) + theme_colors?: number[]; // TODO: Separate `User` and `UserProfile` models + + @Column({ nullable: true }) + pronouns?: string; @Column({ nullable: true }) communication_disabled_until: Date; diff --git a/src/util/entities/User.ts b/src/util/entities/User.ts index eeffab5b..e039eb17 100644 --- a/src/util/entities/User.ts +++ b/src/util/entities/User.ts @@ -34,6 +34,9 @@ export enum PublicUserEnum { bio, bot, premium_since, + premium_type, + theme_colors, + pronouns, } export type PublicUserKeys = keyof typeof PublicUserEnum; @@ -88,6 +91,12 @@ export class User extends BaseClass { @Column({ nullable: true }) banner?: string; // hash of the user banner + @Column({ nullable: true, type: "simple-array" }) + theme_colors?: number[]; // TODO: Separate `User` and `UserProfile` models + + @Column({ nullable: true }) + pronouns?: string; + @Column({ nullable: true, select: false }) phone?: string; // phone number of the user @@ -351,7 +360,7 @@ export class User extends BaseClass { valid_tokens_since: new Date(), }, extended_settings: "{}", - premium_type: Config.get().defaults.user.premium_type, + premium_type: Config.get().defaults.user.premiumType, premium: Config.get().defaults.user.premium, verified: Config.get().defaults.user.verified, settings: settings, diff --git a/src/util/schemas/MemberChangeProfileSchema.ts b/src/util/schemas/MemberChangeProfileSchema.ts index 3e85174d..73c852f3 100644 --- a/src/util/schemas/MemberChangeProfileSchema.ts +++ b/src/util/schemas/MemberChangeProfileSchema.ts @@ -2,4 +2,10 @@ export interface MemberChangeProfileSchema { banner?: string | null; nick?: string; bio?: string; + pronouns?: string; + + /* + * @items.type integer + */ + theme_colors?: [number, number]; } diff --git a/src/util/schemas/UserProfileModifySchema.ts b/src/util/schemas/UserProfileModifySchema.ts index 33a372c9..1e53d9e4 100644 --- a/src/util/schemas/UserProfileModifySchema.ts +++ b/src/util/schemas/UserProfileModifySchema.ts @@ -2,4 +2,10 @@ export interface UserProfileModifySchema { bio?: string; accent_color?: number | null; banner?: string | null; + pronouns?: string; + + /* + * @items.type integer + */ + theme_colors?: [number, number] }