mirror of
https://github.com/smogon/pokemon-showdown-loginserver.git
synced 2026-04-25 16:19:58 -05:00
Add an action to query teams from a database (#19)
This commit is contained in:
parent
2810ce68c6
commit
d380afdb82
|
|
@ -155,3 +155,8 @@ exports.standings = {
|
|||
"30": "Permaban",
|
||||
"100": "Disabled",
|
||||
};
|
||||
|
||||
/**
|
||||
* @type {import('pg').PoolConfig | null}
|
||||
*/
|
||||
exports.postgres = null;
|
||||
|
|
|
|||
145
package-lock.json
generated
145
package-lock.json
generated
|
|
@ -10,6 +10,7 @@
|
|||
"license": "AGPL-3.0",
|
||||
"dependencies": {
|
||||
"@types/node": "^15.12.4",
|
||||
"@types/pg": "^8.10.3",
|
||||
"bcrypt": "^5.0.1",
|
||||
"eslint-plugin-import": "^2.24.2",
|
||||
"google-auth-library": "^3.1.2",
|
||||
|
|
@ -504,6 +505,68 @@
|
|||
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz",
|
||||
"integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A=="
|
||||
},
|
||||
"node_modules/@types/pg": {
|
||||
"version": "8.10.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.10.3.tgz",
|
||||
"integrity": "sha512-BACzsw64lCZesclRpZGu55tnqgFAYcrCBP92xLh1KLypZLCOsvJTSTgaoFVTy3lCys/aZTQzfeDxtjwrvdzL2g==",
|
||||
"dependencies": {
|
||||
"@types/node": "*",
|
||||
"pg-protocol": "*",
|
||||
"pg-types": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/pg/node_modules/pg-types": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.1.tgz",
|
||||
"integrity": "sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==",
|
||||
"dependencies": {
|
||||
"pg-int8": "1.0.1",
|
||||
"pg-numeric": "1.0.2",
|
||||
"postgres-array": "~3.0.1",
|
||||
"postgres-bytea": "~3.0.0",
|
||||
"postgres-date": "~2.0.1",
|
||||
"postgres-interval": "^3.0.0",
|
||||
"postgres-range": "^1.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/pg/node_modules/postgres-array": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz",
|
||||
"integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/pg/node_modules/postgres-bytea": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz",
|
||||
"integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==",
|
||||
"dependencies": {
|
||||
"obuf": "~1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/pg/node_modules/postgres-date": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.0.1.tgz",
|
||||
"integrity": "sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/pg/node_modules/postgres-interval": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz",
|
||||
"integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/ssh2": {
|
||||
"version": "1.11.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.11.7.tgz",
|
||||
|
|
@ -4393,6 +4456,11 @@
|
|||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/obuf": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
|
||||
"integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
|
||||
},
|
||||
"node_modules/once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
|
|
@ -4586,6 +4654,14 @@
|
|||
"node": ">=4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pg-numeric": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz",
|
||||
"integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==",
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/pg-pool": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.0.tgz",
|
||||
|
|
@ -4833,6 +4909,11 @@
|
|||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/postgres-range": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.3.tgz",
|
||||
"integrity": "sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g=="
|
||||
},
|
||||
"node_modules/prelude-ls": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
|
||||
|
|
@ -6779,6 +6860,55 @@
|
|||
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz",
|
||||
"integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A=="
|
||||
},
|
||||
"@types/pg": {
|
||||
"version": "8.10.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.10.3.tgz",
|
||||
"integrity": "sha512-BACzsw64lCZesclRpZGu55tnqgFAYcrCBP92xLh1KLypZLCOsvJTSTgaoFVTy3lCys/aZTQzfeDxtjwrvdzL2g==",
|
||||
"requires": {
|
||||
"@types/node": "*",
|
||||
"pg-protocol": "*",
|
||||
"pg-types": "^4.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"pg-types": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.1.tgz",
|
||||
"integrity": "sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==",
|
||||
"requires": {
|
||||
"pg-int8": "1.0.1",
|
||||
"pg-numeric": "1.0.2",
|
||||
"postgres-array": "~3.0.1",
|
||||
"postgres-bytea": "~3.0.0",
|
||||
"postgres-date": "~2.0.1",
|
||||
"postgres-interval": "^3.0.0",
|
||||
"postgres-range": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"postgres-array": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz",
|
||||
"integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog=="
|
||||
},
|
||||
"postgres-bytea": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz",
|
||||
"integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==",
|
||||
"requires": {
|
||||
"obuf": "~1.1.2"
|
||||
}
|
||||
},
|
||||
"postgres-date": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.0.1.tgz",
|
||||
"integrity": "sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw=="
|
||||
},
|
||||
"postgres-interval": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz",
|
||||
"integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@types/ssh2": {
|
||||
"version": "1.11.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.11.7.tgz",
|
||||
|
|
@ -9725,6 +9855,11 @@
|
|||
"es-abstract": "^1.20.4"
|
||||
}
|
||||
},
|
||||
"obuf": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
|
||||
"integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
|
|
@ -9868,6 +10003,11 @@
|
|||
"resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
|
||||
"integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
|
||||
},
|
||||
"pg-numeric": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz",
|
||||
"integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw=="
|
||||
},
|
||||
"pg-pool": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.0.tgz",
|
||||
|
|
@ -10058,6 +10198,11 @@
|
|||
"xtend": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"postgres-range": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.3.tgz",
|
||||
"integrity": "sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g=="
|
||||
},
|
||||
"prelude-ls": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@types/node": "^15.12.4",
|
||||
"@types/pg": "^8.10.3",
|
||||
"bcrypt": "^5.0.1",
|
||||
"eslint-plugin-import": "^2.24.2",
|
||||
"google-auth-library": "^3.1.2",
|
||||
|
|
|
|||
|
|
@ -654,6 +654,22 @@ export const actions: {[k: string]: QueryHandler} = {
|
|||
await tables.oauthTokens.deleteAll()`WHERE client = ${client.id} and owner = ${this.user.id}`;
|
||||
return {success: true};
|
||||
},
|
||||
|
||||
async getteams(params) {
|
||||
if (!this.user.loggedIn || this.user.id === 'guest') {
|
||||
return {teams: []}; // don't wanna nag people with popups if they aren't logged in
|
||||
}
|
||||
let teams = [];
|
||||
try {
|
||||
teams = await tables.pgdb.query(
|
||||
'SELECT teamid, team, format, title as name FROM teams WHERE ownerid = $1', [this.user.id]
|
||||
) ?? [];
|
||||
} catch (e) {
|
||||
Server.crashlog(e, 'a teams database query', params);
|
||||
throw new ActionError('The server could not load your teams. Please try again later.');
|
||||
}
|
||||
return {teams};
|
||||
},
|
||||
};
|
||||
|
||||
if (Config.actions) {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
import * as mysql from 'mysql2';
|
||||
import * as pg from 'pg';
|
||||
|
||||
export type BasicSQLValue = string | number | null;
|
||||
export type SQLRow = {[k: string]: BasicSQLValue};
|
||||
|
|
@ -290,3 +291,16 @@ export class DatabaseTable<Row> {
|
|||
return this.updateAll(data)`WHERE \`${this.primaryKeyName}\` = ${primaryKey} LIMIT 1`;
|
||||
}
|
||||
}
|
||||
|
||||
export class PGDatabase {
|
||||
database: pg.Pool | null;
|
||||
constructor(config: pg.PoolConfig | null) {
|
||||
this.database = config ? new pg.Pool(config) : null;
|
||||
}
|
||||
async query<O = any>(query: string, values: BasicSQLValue[]) {
|
||||
if (!this.database) return null;
|
||||
const result = await this.database.query(query, values);
|
||||
return result.rows as O[];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/**
|
||||
* Login server database tables
|
||||
*/
|
||||
import {Database, DatabaseTable} from './database';
|
||||
import {Database, DatabaseTable, PGDatabase} from './database';
|
||||
import {Config} from './config-loader';
|
||||
|
||||
import type {LadderEntry} from './ladder';
|
||||
|
|
@ -9,6 +9,7 @@ import type {ReplayData} from './replays';
|
|||
|
||||
// direct access
|
||||
export const psdb = new Database(Config.mysql);
|
||||
export const pgdb = new PGDatabase(Config.postgres);
|
||||
export const replaysDB = Config.replaysdb ? new Database(Config.replaysdb!) : psdb;
|
||||
export const ladderDB = Config.ladderdb ? new Database(Config.ladderdb!) : psdb;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user