From d57cd783ac664c95c5d915d9399033c671c1bfbb Mon Sep 17 00:00:00 2001 From: The Arcane Brony Date: Wed, 20 Oct 2021 17:54:54 +0200 Subject: [PATCH 1/7] Add plugin & css support, add styling to differentiate from discord.com --- .gitignore | 2 + api/assets/autoRegister.js | 57 --------------- api/assets/preload-plugins/autoRegister.js | 62 ++++++++++++++++ api/client_test/index.html | 27 ++++++- bundle/scripts/build.js | 84 +++++++++++----------- 5 files changed, 132 insertions(+), 100 deletions(-) delete mode 100644 api/assets/autoRegister.js create mode 100644 api/assets/preload-plugins/autoRegister.js diff --git a/.gitignore b/.gitignore index 6e6de8d2..ca5886e1 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ tsconfig.tsbuildinfo files/ .env config.json + +.vscode/settings.json diff --git a/api/assets/autoRegister.js b/api/assets/autoRegister.js deleted file mode 100644 index 29f93370..00000000 --- a/api/assets/autoRegister.js +++ /dev/null @@ -1,57 +0,0 @@ - // Auto register guest account: - const prefix = [ - "mysterious", - "adventurous", - "courageous", - "precious", - "cynical", - "despicable", - "suspicious", - "gorgeous", - "lovely", - "stunning", - "based", - "keyed", - "ratioed", - "twink", - "phoned" - ]; - const suffix = [ - "Anonymous", - "Lurker", - "User", - "Enjoyer", - "Hunk", - "Top", - "Bottom", - "Sub", - "Coolstar", - "Wrestling", - "TylerTheCreator", - "Ad" - ]; - - Array.prototype.random = function () { - return this[Math.floor(Math.random() * this.length)]; - }; - - function _generateName() { - return `${prefix.random()}${suffix.random()}`; - } - - const token = JSON.parse(localStorage.getItem("token")); - if (!token && location.pathname !== "/login" && location.pathname !== "/register") { - fetch(`${window.GLOBAL_ENV.API_ENDPOINT}/auth/register`, { - method: "POST", - headers: { "content-type": "application/json" }, - body: JSON.stringify({ username: `${_generateName()}`, consent: true }) //${Date.now().toString().slice(-4)} - }) - .then((x) => x.json()) - .then((x) => { - localStorage.setItem("token", `"${x.token}"`); - if (!window.localStorage) { - // client already loaded -> need to reload to apply the newly registered user token - location.reload(); - } - }); - } diff --git a/api/assets/preload-plugins/autoRegister.js b/api/assets/preload-plugins/autoRegister.js new file mode 100644 index 00000000..bb0b903d --- /dev/null +++ b/api/assets/preload-plugins/autoRegister.js @@ -0,0 +1,62 @@ +// Auto register guest account: +const prefix = [ + "mysterious", + "adventurous", + "courageous", + "precious", + "cynical", + "flamer ", + "despicable", + "suspicious", + "gorgeous", + "impeccable", + "lovely", + "stunning", + "keyed", + "phoned", + "glorious", + "amazing", + "strange", + "arcane" +]; +const suffix = [ + "Anonymous", + "Boy", + "Lurker", + "Keyhitter", + "User", + "Enjoyer", + "Hunk", + "Coolstar", + "Wrestling", + "TylerTheCreator", + "Ad", + "Gamer", + "Games", + "Programmer" +]; + +Array.prototype.random = function () { + return this[Math.floor(Math.random() * this.length)]; +}; + +function _generateName() { + return `${prefix.random()}${suffix.random()}`; +} + +var token = JSON.parse(localStorage.getItem("token")); +if (!token && location.pathname !== "/login" && location.pathname !== "/register") { + fetch(`${window.GLOBAL_ENV.API_ENDPOINT}/auth/register`, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ username: `${_generateName()}`, consent: true }) //${Date.now().toString().slice(-4)} + }) + .then((x) => x.json()) + .then((x) => { + localStorage.setItem("token", `"${x.token}"`); + if (!window.localStorage) { + // client already loaded -> need to reload to apply the newly registered user token + location.reload(); + } + }); +} diff --git a/api/client_test/index.html b/api/client_test/index.html index 92499034..2ff0b469 100644 --- a/api/client_test/index.html +++ b/api/client_test/index.html @@ -4,6 +4,10 @@ Discord Test Client + + + + @@ -38,12 +42,33 @@ ALGOLIA_KEY: "aca0d7082e4e63af5ba5917d5e96bed0" }; GLOBAL_ENV.MEDIA_PROXY_ENDPOINT = location.protocol + "//" + GLOBAL_ENV.CDN_HOST; + const localStorage = window.localStorage; + // TODO: remote auth + // window.GLOBAL_ENV.REMOTE_AUTH_ENDPOINT = window.GLOBAL_ENV.GATEWAY_ENDPOINT.replace(/wss?:/, ""); + localStorage.setItem("gatewayURL", window.GLOBAL_ENV.GATEWAY_ENDPOINT); + localStorage.setItem( + "DeveloperOptionsStore", + `{"trace":false,"canary":false,"logGatewayEvents":true,"logOverlayEvents":true,"logAnalyticsEvents":true,"sourceMapsEnabled":false,"axeEnabled":false}` + ); + + + const token = JSON.parse(localStorage.getItem("token")); + if(token) { + document.querySelector("#logincss").remove(); + } + + const settings = JSON.parse(localStorage.getItem("UserSettingsStore")); + if (settings && settings.locale.length <= 2) { + // fix client locale wrong and client not loading at all + settings.locale = "en-US"; + localStorage.setItem("UserSettingsStore", JSON.stringify(settings)); + } - + diff --git a/bundle/scripts/build.js b/bundle/scripts/build.js index affd7892..c00c2eaa 100644 --- a/bundle/scripts/build.js +++ b/bundle/scripts/build.js @@ -9,57 +9,57 @@ const dirs = ["api", "util", "cdn", "gateway", "bundle"]; const verbose = argv.includes("verbose") || argv.includes("v"); if (argv.includes("clean")) { - dirs.forEach((a) => { - var d = "../" + a + "/dist"; - if (fse.existsSync(d)) { - fse.rmSync(d, { recursive: true }); - if (verbose) console.log(`Deleted ${d}!`); - } - }); + dirs.forEach((a) => { + var d = "../" + a + "/dist"; + if (fse.existsSync(d)) { + fse.rmSync(d, { recursive: true }); + if (verbose) console.log(`Deleted ${d}!`); + } + }); } fse.copySync( - path.join(__dirname, "..", "..", "api", "assets"), - path.join(__dirname, "..", "dist", "api", "assets") + path.join(__dirname, "..", "..", "api", "assets"), + path.join(__dirname, "..", "dist", "api", "assets") ); fse.copySync( - path.join(__dirname, "..", "..", "api", "client_test"), - path.join(__dirname, "..", "dist", "api", "client_test") + path.join(__dirname, "..", "..", "api", "client_test"), + path.join(__dirname, "..", "dist", "api", "client_test") ); fse.copySync( - path.join(__dirname, "..", "..", "api", "locales"), - path.join(__dirname, "..", "dist", "api", "locales") + path.join(__dirname, "..", "..", "api", "locales"), + path.join(__dirname, "..", "dist", "api", "locales") ); dirs.forEach((a) => { - fse.copySync("../" + a + "/src", "dist/" + a + "/src"); - if (verbose) - console.log( - `Copied ${"../" + a + "/dist"} -> ${"dist/" + a + "/src"}!` - ); + fse.copySync("../" + a + "/src", "dist/" + a + "/src"); + if (verbose) + console.log(`Copied ${"../" + a + "/dist"} -> ${"dist/" + a + "/src"}!`); }); -console.log("[1/2] Copying src files done"); -console.log("[2/2] Compiling src files ..."); +console.log("Copying src files done"); +if (!argv.includes("copyonly")) { + console.log("Compiling src files ..."); -console.log( - execSync( - 'node "' + - path.join( - __dirname, - "..", - "node_modules", - "typescript", - "lib", - "tsc.js" - ) + - '" -p "' + - path.join(__dirname, "..") + - '"', - { - cwd: path.join(__dirname, ".."), - shell: true, - env: process.env, - encoding: "utf8", - } - ) -); + console.log( + execSync( + 'node "' + + path.join( + __dirname, + "..", + "node_modules", + "typescript", + "lib", + "tsc.js" + ) + + '" -p "' + + path.join(__dirname, "..") + + '"', + { + cwd: path.join(__dirname, ".."), + shell: true, + env: process.env, + encoding: "utf8", + } + ) + ); +} From 29411814309ea392436a9fc5239bf4c8344c8393 Mon Sep 17 00:00:00 2001 From: The Arcane Brony Date: Fri, 22 Oct 2021 09:26:01 +0200 Subject: [PATCH 2/7] Global prettierrc, format build.js --- .prettierrc | 7 ++-- bundle/scripts/build.js | 73 ++++++++++++++++------------------------- 2 files changed, 33 insertions(+), 47 deletions(-) diff --git a/.prettierrc b/.prettierrc index 8dc2e726..7d715cba 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,7 @@ { "tabWidth": 4, - "useTabs": true -} + "useTabs": true, + "printWidth": 140, + "trailingComma": "none", + "useTabs": true +} \ No newline at end of file diff --git a/bundle/scripts/build.js b/bundle/scripts/build.js index c00c2eaa..549e340f 100644 --- a/bundle/scripts/build.js +++ b/bundle/scripts/build.js @@ -9,57 +9,40 @@ const dirs = ["api", "util", "cdn", "gateway", "bundle"]; const verbose = argv.includes("verbose") || argv.includes("v"); if (argv.includes("clean")) { - dirs.forEach((a) => { - var d = "../" + a + "/dist"; - if (fse.existsSync(d)) { - fse.rmSync(d, { recursive: true }); - if (verbose) console.log(`Deleted ${d}!`); - } - }); + dirs.forEach((a) => { + var d = "../" + a + "/dist"; + if (fse.existsSync(d)) { + fse.rmSync(d, { recursive: true }); + if (verbose) console.log(`Deleted ${d}!`); + } + }); } -fse.copySync( - path.join(__dirname, "..", "..", "api", "assets"), - path.join(__dirname, "..", "dist", "api", "assets") -); -fse.copySync( - path.join(__dirname, "..", "..", "api", "client_test"), - path.join(__dirname, "..", "dist", "api", "client_test") -); -fse.copySync( - path.join(__dirname, "..", "..", "api", "locales"), - path.join(__dirname, "..", "dist", "api", "locales") -); +fse.copySync(path.join(__dirname, "..", "..", "api", "assets"), path.join(__dirname, "..", "dist", "api", "assets")); +fse.copySync(path.join(__dirname, "..", "..", "api", "client_test"), path.join(__dirname, "..", "dist", "api", "client_test")); +fse.copySync(path.join(__dirname, "..", "..", "api", "locales"), path.join(__dirname, "..", "dist", "api", "locales")); dirs.forEach((a) => { - fse.copySync("../" + a + "/src", "dist/" + a + "/src"); - if (verbose) - console.log(`Copied ${"../" + a + "/dist"} -> ${"dist/" + a + "/src"}!`); + fse.copySync("../" + a + "/src", "dist/" + a + "/src"); + if (verbose) console.log(`Copied ${"../" + a + "/dist"} -> ${"dist/" + a + "/src"}!`); }); console.log("Copying src files done"); if (!argv.includes("copyonly")) { - console.log("Compiling src files ..."); + console.log("Compiling src files ..."); - console.log( - execSync( - 'node "' + - path.join( - __dirname, - "..", - "node_modules", - "typescript", - "lib", - "tsc.js" - ) + - '" -p "' + - path.join(__dirname, "..") + - '"', - { - cwd: path.join(__dirname, ".."), - shell: true, - env: process.env, - encoding: "utf8", - } - ) - ); + console.log( + execSync( + 'node "' + + path.join(__dirname, "..", "node_modules", "typescript", "lib", "tsc.js") + + '" -p "' + + path.join(__dirname, "..") + + '"', + { + cwd: path.join(__dirname, ".."), + shell: true, + env: process.env, + encoding: "utf8" + } + ) + ); } From ac8588f20f6f4111e0bc9c85bb7769abf1200801 Mon Sep 17 00:00:00 2001 From: The Arcane Brony Date: Fri, 22 Oct 2021 09:56:36 +0200 Subject: [PATCH 3/7] Attempt to fix auto register --- api/client_test/index.html | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/api/client_test/index.html b/api/client_test/index.html index 2ff0b469..b19d5f0d 100644 --- a/api/client_test/index.html +++ b/api/client_test/index.html @@ -51,11 +51,12 @@ `{"trace":false,"canary":false,"logGatewayEvents":true,"logOverlayEvents":true,"logAnalyticsEvents":true,"sourceMapsEnabled":false,"axeEnabled":false}` ); - - const token = JSON.parse(localStorage.getItem("token")); - if(token) { - document.querySelector("#logincss").remove(); - } + setInterval(() => { + var token = JSON.parse(localStorage.getItem("token")); + if (token) { + document.querySelector("#logincss").remove(); + } + }, 1000); const settings = JSON.parse(localStorage.getItem("UserSettingsStore")); if (settings && settings.locale.length <= 2) { From 062fe0769578e41895024534d8b2eae2bbbd9959 Mon Sep 17 00:00:00 2001 From: The Arcane Brony Date: Thu, 11 Nov 2021 22:14:33 +0100 Subject: [PATCH 4/7] Fix autoregister, add inline plugins --- .vscode/settings.json | 4 ++++ api/assets/dff87c953f43b561d71fbcfe8a93a79a.png | 0 2 files changed, 4 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 api/assets/dff87c953f43b561d71fbcfe8a93a79a.png diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..46e4e52f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "awooga.originalColorCustomizations": {}, + "workbench.colorCustomizations": {} +} \ No newline at end of file diff --git a/api/assets/dff87c953f43b561d71fbcfe8a93a79a.png b/api/assets/dff87c953f43b561d71fbcfe8a93a79a.png new file mode 100644 index 00000000..e69de29b From ce1e10620c7f0ffbfdd56999a2b44dc8854bc7bd Mon Sep 17 00:00:00 2001 From: The Arcane Brony Date: Thu, 11 Nov 2021 22:17:21 +0100 Subject: [PATCH 5/7] Inline plugin support --- api/client_test/index.html | 6 +++--- api/package-lock.json | Bin 658099 -> 658149 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/client_test/index.html b/api/client_test/index.html index b19d5f0d..0b3a775a 100644 --- a/api/client_test/index.html +++ b/api/client_test/index.html @@ -4,9 +4,9 @@ Discord Test Client - - - + + + diff --git a/api/package-lock.json b/api/package-lock.json index e8ebd5bfc752b18cd0871537b461a5e4243dbf6e..a4ad6b2b9ebfe710fb022d77451a433fc2413790 100644 GIT binary patch delta 102 zcmdlyRpaSYjSY>Qg2jb7nI);lN>&O=ai)3(dPdVPxUlCoKjUnF#>oi8OhC*G#4JF} h3dC&NpK-F^u)?Bm!4fu+_ERqGK+LiIlndv}qX2}0C8_`b delta 64 zcmaDlRb%s1jSY>QlbKlrn^$wTujXU~VkRJF24WT Date: Thu, 11 Nov 2021 22:32:46 +0100 Subject: [PATCH 6/7] Fix dependencies --- bundle/package-lock.json | Bin 480093 -> 588582 bytes bundle/package.json | 1 - 2 files changed, 1 deletion(-) diff --git a/bundle/package-lock.json b/bundle/package-lock.json index 2a743b787413c35490bc6ba979e491eb969c1648..6775470da5b2a079a3a6a42b4f9b8f8671a299cc 100644 GIT binary patch delta 22254 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 delta 13902 zcmai5cX(CBw*U4yyQTMD3F*B+s38#$LJI-uH7XD~K?DI60!j-lvPl-5ponyWAV;ZD zE?}VqMJW;z#fG%NMMdiS%}mZoAGYbXyLu@j&!*jEu1QOTYNK3-T`cl0uGxTsQjAh zUOLR=Y$+LFs&=3+15E)`UTO-md_BUn&5e2=F?m})nQA&`#~K^q{GYm0)soQi>?mQ3<6eT}htU6gQ*X z)lq-~z|Gj}e1mFrr40k>^iLFxj79FLHVmP3(nSfUeuMBQSyP;i!7k25vR4z^X+J7+ zS7f8JcM1dQZ}?_=8*6-m8G=AcPEvvmzifA-$Tym82N=bX5mb{6#wJvEIJW$Ut&kslpw!SWe}W1{iBmEm+dUh$-ySixaHX`J#N zT_{jGQ(nAsLV&r33kcP6CPA@C&nyxahZ-}|RBDo_#2cY4>@8m;EAs@HQI;A{2bw55 zjoU4`3IaHLJ6fIPObOz7iHeJHt939(3bhKuDo*#Jin+oRFG zkaW(RI#iXNlylEOlt#d(cJ-+P0EN1PmA;BM%{wN8D{lwEKPPrN+|C%%pM&@3B#ew; zovL$$>;c5}b#AB{6ijTynIbquEETs`B53AV#f28V zq%0BKLTyHFL@4E^D{TxXAD#SPl^6w$CXRx)?ud6Z#!arXG}v9;z!{SZ6lGaQHFL(eGr;*Svr&gH) zh?!%o{uDP>ne_~xGr>O+bvB~DS| z=|Yz3Nl#V);@2s#RP!PwhAQn;cgz0Qltw1npRJ9h=?Q8G!;;Lln^W8y%53)3hc4+- zf}y?RZRD2d40$qT&Qn55G9@3Qc$YU7EL41G-EIWvl^I}}<8GZI#nYMgsA0d(R2GOs zLzgKjlh~liocPw z<~~&q(7h?oQH^Q9Z(fPw#Mo&gSOt1l8si{&8o3+oIYuMn-C>+XJb2Lu3j~LAIk@q7 zXCr!Zqf#dslXdALB}t%q>Iy8kJ_x22RZ25s{2G^%RjNBc z(w3!4uE1Dx#>H5-E!d`TCnMlt0Ihq6k!6~Le0v$j6bQdrs4m9?JfFCyx>4C15QeLK zT#53$K$y7&Rq{iw);`A4PkbnGmFz~f;gTXXqqA9R05hu-)3t~3#ol_ttpvR~eUD|N zyp8^rFw$2mhuGfNv}%JANu@q|Z}AjzPgm&iU9=oeu9zLE*jMjQ1^!rbSr4b;z#aYd zKFm*COJCP?nqG$Wx;Kro@9E+67n8&$Xj1>tSmDl~1lQvK`fK!Typz;k#>7C8uS_gGs-m^fGowd6Ndp3r$K2k!BU0iXF;Q2hn!yniWm4A@RX zrC2(FPUq=ERH7Bf1>M!+K-uR?D@JY@ReT9m);32m8uAC{fG=@uQVTxkJhN`LyRh@&V_3F<(4WID;4*7_K+GjX z*4U!Hi`c!~3Z8W3lGq(jF0J7aK~69;!&#bv;ArA1g+pU7Vf&j@DM$SyeAliQtok7_zND^Ft;5L#c zRs3pY<;ZWSOGtKMRCrC9B0#=qgDX?T*H)05*Oe%?@z10|4mXuSbwo3P(k2dV&t%#E zw)OZ^O?9HGcDSGAO;&UZQiPL4^Y1EaY)T%-7>Kc;TDiJXU?KGFr>NX_+tFi1{p+8^ zkz@OizpgfCRo9)d?MUDE(Cz7_u6E>@SWPu-PvNxQ-|R|7@1xsc8LvU@)5xmQU=)y4 zs&Y`bH>hg7mdnm+BvXG5E&Tx|{PoJ zY5{u+qgUM36Joc*LrtLhK>#kcH~UhVr}{B}wG8be^)yq+SaO&JO5@QdUnbgsyah#fqcV*Tu%*;aV`QoG7)YgOfCO8k?sfYs3ml zF_ineDTuP>YCaZ+iPB0*2oQG@_5=RTLJzr}RF(1))r;gCp?O%2B&mrKjs679(5?=e zFD*$?+f%1hwS!ojF-uFLq$a8z<)*1oLVu1;)V>1O-%Zrs^l4KyO|`ePdo$jiCLS>R zP}3OMgOWF?G9|ZAed*Cm3=`08dC{3>;KcgmM6+i#*l?ok7AlAHr$1W=QjLi-`$
Jwzkpjg`(~b95V_o~E>XzGOX+$sCEf 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 diff --git a/bundle/package.json b/bundle/package.json index f55599bf..8a49a7ac 100644 --- a/bundle/package.json +++ b/bundle/package.json @@ -65,7 +65,6 @@ "assert": "^1.5.0", "async-exit-hook": "^2.0.1", "bcrypt": "^5.0.1", - "better-sqlite3": "^7.4.3", "body-parser": "^1.19.0", "btoa": "^1.2.1", "cheerio": "^1.0.0-rc.10", From 74d6290f3350fc98cbee69262f5aeaa95df93e2c Mon Sep 17 00:00:00 2001 From: The Arcane Brony Date: Sun, 14 Nov 2021 16:30:12 +0100 Subject: [PATCH 7/7] Add user.css --- api/assets/user.css | 1 + 1 file changed, 1 insertion(+) create mode 100644 api/assets/user.css diff --git a/api/assets/user.css b/api/assets/user.css new file mode 100644 index 00000000..a7e5c4f3 --- /dev/null +++ b/api/assets/user.css @@ -0,0 +1 @@ +/* Your custom CSS goes here, enjoy! */ \ No newline at end of file