From 270df5c5b05a1e1d0ab1009fa386e6d74744f000 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 21 Nov 2021 13:43:07 +0900 Subject: move tools dir into src --- packages/backend/src/tools/accept-migration.ts | 25 ++++++++++ packages/backend/src/tools/add-emoji.ts | 30 ++++++++++++ packages/backend/src/tools/demote-admin.ts | 32 +++++++++++++ packages/backend/src/tools/mark-admin.ts | 32 +++++++++++++ packages/backend/src/tools/refresh-question.ts | 14 ++++++ packages/backend/src/tools/resync-remote-user.ts | 30 ++++++++++++ packages/backend/src/tools/show-signin-history.ts | 56 +++++++++++++++++++++++ 7 files changed, 219 insertions(+) create mode 100644 packages/backend/src/tools/accept-migration.ts create mode 100644 packages/backend/src/tools/add-emoji.ts create mode 100644 packages/backend/src/tools/demote-admin.ts create mode 100644 packages/backend/src/tools/mark-admin.ts create mode 100644 packages/backend/src/tools/refresh-question.ts create mode 100644 packages/backend/src/tools/resync-remote-user.ts create mode 100644 packages/backend/src/tools/show-signin-history.ts (limited to 'packages/backend/src/tools') diff --git a/packages/backend/src/tools/accept-migration.ts b/packages/backend/src/tools/accept-migration.ts new file mode 100644 index 0000000000..2e54fc129f --- /dev/null +++ b/packages/backend/src/tools/accept-migration.ts @@ -0,0 +1,25 @@ +// ex) node built/tools/accept-migration Yo 1000000000001 + +import { createConnection } from 'typeorm'; +import config from '@/config/index'; + +createConnection({ + type: 'postgres', + host: config.db.host, + port: config.db.port, + username: config.db.user, + password: config.db.pass, + database: config.db.db, + extra: config.db.extra, + synchronize: false, + dropSchema: false, +}).then(c => { + c.query(`INSERT INTO migrations(timestamp,name) VALUES (${process.argv[3]}, '${process.argv[2]}${process.argv[3]}');`).then(() => { + console.log('done'); + process.exit(0); + }).catch(e => { + console.log('ERROR:'); + console.log(e); + process.exit(1); + }); +}); diff --git a/packages/backend/src/tools/add-emoji.ts b/packages/backend/src/tools/add-emoji.ts new file mode 100644 index 0000000000..9ffe7dfa81 --- /dev/null +++ b/packages/backend/src/tools/add-emoji.ts @@ -0,0 +1,30 @@ +import { Emojis } from '@/models/index'; +import { genId } from '@/misc/gen-id'; + +async function main(name: string, url: string, alias?: string): Promise { + const aliases = alias != null ? [ alias ] : []; + + await Emojis.save({ + id: genId(), + host: null, + name, + url, + aliases, + updatedAt: new Date() + }); +} + +const args = process.argv.slice(2); +const name = args[0]; +const url = args[1]; + +if (!name) throw new Error('require name'); +if (!url) throw new Error('require url'); + +main(name, url).then(() => { + console.log('success'); + process.exit(0); +}).catch(e => { + console.warn(e); + process.exit(1); +}); diff --git a/packages/backend/src/tools/demote-admin.ts b/packages/backend/src/tools/demote-admin.ts new file mode 100644 index 0000000000..d7c6d1cec2 --- /dev/null +++ b/packages/backend/src/tools/demote-admin.ts @@ -0,0 +1,32 @@ +import { initDb } from '../db/postgre'; +import { getRepository } from 'typeorm'; +import { User } from '@/models/entities/user'; + +async function main(username: string) { + if (!username) throw `username required`; + username = username.replace(/^@/, ''); + + await initDb(); + const Users = getRepository(User); + + const res = await Users.update({ + usernameLower: username.toLowerCase(), + host: null + }, { + isAdmin: false + }); + + if (res.affected !== 1) { + throw 'Failed'; + } +} + +const args = process.argv.slice(2); + +main(args[0]).then(() => { + console.log('Success'); + process.exit(0); +}).catch(e => { + console.error(`Error: ${e.message || e}`); + process.exit(1); +}); diff --git a/packages/backend/src/tools/mark-admin.ts b/packages/backend/src/tools/mark-admin.ts new file mode 100644 index 0000000000..62ed0f09ee --- /dev/null +++ b/packages/backend/src/tools/mark-admin.ts @@ -0,0 +1,32 @@ +import { initDb } from '../db/postgre'; +import { getRepository } from 'typeorm'; +import { User } from '@/models/entities/user'; + +async function main(username: string) { + if (!username) throw `username required`; + username = username.replace(/^@/, ''); + + await initDb(); + const Users = getRepository(User); + + const res = await Users.update({ + usernameLower: username.toLowerCase(), + host: null + }, { + isAdmin: true + }); + + if (res.affected !== 1) { + throw 'Failed'; + } +} + +const args = process.argv.slice(2); + +main(args[0]).then(() => { + console.log('Success'); + process.exit(0); +}).catch(e => { + console.error(`Error: ${e.message || e}`); + process.exit(1); +}); diff --git a/packages/backend/src/tools/refresh-question.ts b/packages/backend/src/tools/refresh-question.ts new file mode 100644 index 0000000000..98a3c2865f --- /dev/null +++ b/packages/backend/src/tools/refresh-question.ts @@ -0,0 +1,14 @@ +import { updateQuestion } from '@/remote/activitypub/models/question'; + +async function main(uri: string): Promise { + return await updateQuestion(uri); +} + +const args = process.argv.slice(2); +const uri = args[0]; + +main(uri).then(result => { + console.log(`Done: ${result}`); +}).catch(e => { + console.warn(e); +}); diff --git a/packages/backend/src/tools/resync-remote-user.ts b/packages/backend/src/tools/resync-remote-user.ts new file mode 100644 index 0000000000..22d2f7c895 --- /dev/null +++ b/packages/backend/src/tools/resync-remote-user.ts @@ -0,0 +1,30 @@ +import { initDb } from '@/db/postgre'; +import * as Acct from 'misskey-js/built/acct'; + +async function main(acct: string): Promise { + await initDb(); + const { resolveUser } = await import('@/remote/resolve-user'); + + const { username, host } = Acct.parse(acct); + await resolveUser(username, host, {}, true); +} + +// get args +const args = process.argv.slice(2); +let acct = args[0]; + +// normalize args +acct = acct.replace(/^@/, ''); + +// check args +if (!acct.match(/^\w+@\w/)) { + throw `Invalid acct format. Valid format are user@host`; +} + +console.log(`resync ${acct}`); + +main(acct).then(() => { + console.log('Done'); +}).catch(e => { + console.warn(e); +}); diff --git a/packages/backend/src/tools/show-signin-history.ts b/packages/backend/src/tools/show-signin-history.ts new file mode 100644 index 0000000000..ad92316314 --- /dev/null +++ b/packages/backend/src/tools/show-signin-history.ts @@ -0,0 +1,56 @@ +import { Users, Signins } from '@/models/index'; + +// node built/tools/show-signin-history username +// => {Success} {Date} {IPAddrsss} + +// node built/tools/show-signin-history username user-agent,x-forwarded-for +// with user-agent and x-forwarded-for + +// node built/tools/show-signin-history username all +// with full request headers + +async function main(username: string, headers?: string[]) { + const user = await Users.findOne({ + host: null, + usernameLower: username.toLowerCase(), + }); + + if (user == null) throw new Error('User not found'); + + const history = await Signins.find({ + userId: user.id + }); + + for (const signin of history) { + console.log(`${signin.success ? 'OK' : 'NG'} ${signin.createdAt ? signin.createdAt.toISOString() : 'Unknown'} ${signin.ip}`); + + // headers + if (headers != null) { + for (const key of Object.keys(signin.headers)) { + if (headers.includes('all') || headers.includes(key)) { + console.log(` ${key}: ${signin.headers[key]}`); + } + } + } + } +} + +// get args +const args = process.argv.slice(2); + +let username = args[0]; +let headers: string[] | undefined; + +if (args[1] != null) { + headers = args[1].split(/,/).map(header => header.toLowerCase()); +} + +// normalize args +username = username.replace(/^@/, ''); + +main(username, headers).then(() => { + process.exit(0); +}).catch(e => { + console.warn(e); + process.exit(1); +}); -- cgit v1.3.1-freya