mirror of
https://github.com/spacebarchat/server.git
synced 2026-05-25 20:44:59 +00:00
flags related rights and stats api
This commit is contained in:
committed by
TheArcaneBrony
parent
6977283e0e
commit
2094d57c14
+63
-61
@@ -6,75 +6,77 @@ const { execIn } = require("./utils.js");
|
||||
const { ask } = require("./utils/ask.js");
|
||||
|
||||
async function main() {
|
||||
let filename;
|
||||
if(process.argv[2]) filename = process.argv[2];
|
||||
else filename = await ask("Please enter the name of your migration: ");
|
||||
let dbconf;
|
||||
try {
|
||||
dbconf = JSON.parse(fs.readFileSync("dbconf.json"));
|
||||
} catch (e) {
|
||||
console.log("No dbconf.json found!");
|
||||
dbconf = {};
|
||||
}
|
||||
let filename;
|
||||
if (process.argv[2]) filename = process.argv[2];
|
||||
else filename = await ask("Please enter the name of your migration: ");
|
||||
let dbconf;
|
||||
try {
|
||||
dbconf = JSON.parse(fs.readFileSync("dbconf.json"));
|
||||
} catch (e) {
|
||||
console.log("No dbconf.json found!");
|
||||
dbconf = {};
|
||||
}
|
||||
|
||||
if(!dbconf["sqlite"])
|
||||
dbconf.sqlite = {
|
||||
conn_str: "migrations.db",
|
||||
migrations_dir: "sqlite",
|
||||
package: "sqlite3"
|
||||
}
|
||||
if(!dbconf["postgres"] && process.env.FC_DB_POSTGRES) {
|
||||
console.log("Found FC_DB_POSTGRES environment variable. Using it!");
|
||||
dbconf.postgres = {
|
||||
conn_str: process.env.FC_DB_POSTGRES,
|
||||
migrations_dir: "postgres",
|
||||
package: "pg"
|
||||
}
|
||||
}
|
||||
if(!dbconf["mariadb"] && process.env.FC_DB_MARIADB){
|
||||
console.log("Found FC_DB_MARIADB environment variable. Using it!");
|
||||
dbconf.mariadb = {
|
||||
conn_str: process.env.FC_DB_MARIADB,
|
||||
migrations_dir: "mariadb",
|
||||
package: "mysql2"
|
||||
}
|
||||
}
|
||||
fs.writeFileSync("dbconf.json", JSON.stringify(dbconf, null, 4));
|
||||
if (!dbconf["sqlite"])
|
||||
dbconf.sqlite = {
|
||||
conn_str: "migrations.db",
|
||||
migrations_dir: "sqlite",
|
||||
package: "sqlite3"
|
||||
};
|
||||
if (!dbconf["postgres"] && process.env.FC_DB_POSTGRES) {
|
||||
console.log("Found FC_DB_POSTGRES environment variable. Using it!");
|
||||
dbconf.postgres = {
|
||||
conn_str: process.env.FC_DB_POSTGRES,
|
||||
migrations_dir: "postgres",
|
||||
package: "pg"
|
||||
};
|
||||
}
|
||||
if (!dbconf["mariadb"] && process.env.FC_DB_MARIADB) {
|
||||
console.log("Found FC_DB_MARIADB environment variable. Using it!");
|
||||
dbconf.mariadb = {
|
||||
conn_str: process.env.FC_DB_MARIADB,
|
||||
migrations_dir: "mariadb",
|
||||
package: "mysql2"
|
||||
};
|
||||
}
|
||||
fs.writeFileSync("dbconf.json", JSON.stringify(dbconf, null, 4));
|
||||
|
||||
//build
|
||||
execIn(`node scripts/build_new.js`, process.cwd(), {stdio: "inherit"});
|
||||
//build
|
||||
execIn(`node scripts/build_new.js`, process.cwd(), { stdio: "inherit" });
|
||||
|
||||
if(fs.existsSync(".env") && !fs.existsSync(".env.bak"))
|
||||
fs.renameSync(".env", ".env.bak");
|
||||
Object.keys(dbconf).forEach((db) => {
|
||||
console.log(`Applying migrations for ${db}`);
|
||||
if(!fs.existsSync(path.join("node_modules", dbconf[db].package)))
|
||||
execIn(`npm i ${dbconf[db].package}`, process.cwd());
|
||||
fs.writeFileSync(
|
||||
`.env`,
|
||||
`DATABASE=${dbconf[db].conn_str}
|
||||
if (fs.existsSync(".env") && !fs.existsSync(".env.bak")) fs.renameSync(".env", ".env.bak");
|
||||
Object.keys(dbconf).forEach((db) => {
|
||||
console.log(`Applying migrations for ${db}`);
|
||||
if (!fs.existsSync(path.join("node_modules", dbconf[db].package))) execIn(`npm i ${dbconf[db].package}`, process.cwd());
|
||||
fs.writeFileSync(
|
||||
`.env`,
|
||||
`DATABASE=${dbconf[db].conn_str}
|
||||
THREADS=1
|
||||
DB_MIGRATE=true
|
||||
DB_VERBOSE=true`
|
||||
);
|
||||
execIn(`node dist/start.js`, process.cwd(), {stdio: "inherit"});
|
||||
});
|
||||
);
|
||||
execIn(`node dist/start.js`, process.cwd(), { stdio: "inherit" });
|
||||
});
|
||||
|
||||
Object.keys(dbconf).forEach((db) => {
|
||||
console.log(`Generating new migrations for ${db}`);
|
||||
fs.writeFileSync(
|
||||
`.env`,
|
||||
`DATABASE=${dbconf[db].conn_str}
|
||||
Object.keys(dbconf).forEach((db) => {
|
||||
console.log(`Generating new migrations for ${db}`);
|
||||
fs.writeFileSync(
|
||||
`.env`,
|
||||
`DATABASE=${dbconf[db].conn_str}
|
||||
THREADS=1
|
||||
DB_MIGRATE=true
|
||||
DB_VERBOSE=true`
|
||||
);
|
||||
execIn(`node node_modules/typeorm/cli.js migration:generate "src/util/migrations/${db}/${filename}" -d dist/util/util/Database.js -p`, process.cwd(), {stdio: "inherit"});
|
||||
});
|
||||
if(fs.existsSync(".env.bak")) {
|
||||
fs.rmSync(".env");
|
||||
fs.renameSync(".env.bak", ".env");
|
||||
}
|
||||
exit(0);
|
||||
);
|
||||
execIn(
|
||||
`node node_modules/typeorm/cli.js migration:generate "src/util/migrations/${db}/${filename}" -d dist/util/util/Database.js -p`,
|
||||
process.cwd(),
|
||||
{ stdio: "inherit" }
|
||||
);
|
||||
});
|
||||
if (fs.existsSync(".env.bak")) {
|
||||
fs.rmSync(".env");
|
||||
fs.renameSync(".env.bak", ".env");
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
main();
|
||||
main();
|
||||
|
||||
@@ -5,7 +5,6 @@ const { stdout, exit } = require("process");
|
||||
const { execIn } = require("./utils.js");
|
||||
const { ask } = require("./utils/ask.js");
|
||||
|
||||
|
||||
const data = { env: [], config: { register: {} }, extra_pkgs: [] };
|
||||
let rights = [];
|
||||
|
||||
@@ -201,8 +200,6 @@ async function askRights() {
|
||||
return selectedRights;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function printTitle(input) {
|
||||
let width = stdout.columns / 2 - 1; //40
|
||||
console.log();
|
||||
@@ -210,7 +207,6 @@ function printTitle(input) {
|
||||
console.log();
|
||||
}
|
||||
|
||||
|
||||
function BitFlag(int) {
|
||||
return 1n << BigInt(int);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,6 @@ async function askBool(question) {
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
ask,
|
||||
askBool
|
||||
}
|
||||
ask,
|
||||
askBool
|
||||
};
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
import { route } from "@fosscord/api";
|
||||
import { Config, getRights, Guild, Member, Message, User } from "@fosscord/util";
|
||||
import { Request, Response, Router } from "express";
|
||||
const router = Router();
|
||||
|
||||
router.get("/", route({}), async (req: Request, res: Response) => {
|
||||
let users, guilds, msgs, memberships;
|
||||
// needs to be let otherwise we can't for
|
||||
|
||||
let config = Config.get();
|
||||
if (!config.security.statsWorldReadable) {
|
||||
let rights = await getRights(req.user_id);
|
||||
rights.hasThrow("VIEW_SERVER_STATS");
|
||||
}
|
||||
users = await User.count();
|
||||
guilds = await Guild.count();
|
||||
msgs = await Message.count();
|
||||
memberships = await Member.count();
|
||||
res.json({ user_count: users, guild_count: guilds, msg_count: msgs, membership_rels: memberships });
|
||||
});
|
||||
|
||||
export default router;
|
||||
@@ -16,4 +16,5 @@ export class SecurityConfiguration {
|
||||
ipdataApiKey: string | null = "eca677b284b3bac29eb72f5e496aa9047f26543605efe99ff2ce35c9";
|
||||
mfaBackupCodeCount: number = 10;
|
||||
mfaBackupCodeBytes: number = 4;
|
||||
statsWorldReadable: boolean = true;
|
||||
}
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class test1661273147273 implements MigrationInterface {
|
||||
name = 'test1661273147273'
|
||||
name = "test1661273147273";
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
DROP INDEX \`IDX_2ce5a55796fe4c2f77ece57a64\` ON \`applications\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
CREATE TABLE \`plugin_config\` (
|
||||
\`key\` varchar(255) NOT NULL,
|
||||
\`value\` text NULL,
|
||||
PRIMARY KEY (\`key\`)
|
||||
) ENGINE = InnoDB
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
CREATE TABLE \`user_settings\` (
|
||||
\`id\` varchar(255) NOT NULL,
|
||||
\`afk_timeout\` int NULL,
|
||||
@@ -54,96 +54,95 @@ export class test1661273147273 implements MigrationInterface {
|
||||
PRIMARY KEY (\`id\`)
|
||||
) ENGINE = InnoDB
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\` DROP COLUMN \`settings\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\`
|
||||
ADD \`settingsId\` varchar(255) NULL
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\`
|
||||
ADD UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` (\`settingsId\`)
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`channels\`
|
||||
ADD \`flags\` int NULL
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`channels\`
|
||||
ADD \`default_thread_rate_limit_per_user\` int NULL
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`guilds\`
|
||||
ADD \`premium_progress_bar_enabled\` tinyint NULL
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\` CHANGE \`bio\` \`bio\` varchar(255) NULL
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\` CHANGE \`mfa_enabled\` \`mfa_enabled\` tinyint NULL
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
CREATE UNIQUE INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`)
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\`
|
||||
ADD CONSTRAINT \`FK_76ba283779c8441fd5ff819c8cf\` FOREIGN KEY (\`settingsId\`) REFERENCES \`user_settings\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`invites\`
|
||||
ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE CASCADE ON UPDATE NO ACTION
|
||||
`);
|
||||
}
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\` DROP FOREIGN KEY \`FK_76ba283779c8441fd5ff819c8cf\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
DROP INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\` CHANGE \`mfa_enabled\` \`mfa_enabled\` tinyint NOT NULL
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\` CHANGE \`bio\` \`bio\` varchar(255) NOT NULL
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`guilds\` DROP COLUMN \`premium_progress_bar_enabled\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`channels\` DROP COLUMN \`default_thread_rate_limit_per_user\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`channels\` DROP COLUMN \`flags\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\` DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\` DROP COLUMN \`settingsId\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`users\`
|
||||
ADD \`settings\` text NOT NULL
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
DROP TABLE \`user_settings\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
DROP TABLE \`plugin_config\`
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
CREATE UNIQUE INDEX \`IDX_2ce5a55796fe4c2f77ece57a64\` ON \`applications\` (\`bot_user_id\`)
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE \`invites\`
|
||||
ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION
|
||||
`);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class test21661273179287 implements MigrationInterface {
|
||||
name = 'test21661273179287'
|
||||
name = "test21661273179287";
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\`
|
||||
`);
|
||||
}
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
CREATE UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`)
|
||||
`);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ function getDataSourceOptions(): DataSourceOptions {
|
||||
name: "default",
|
||||
migrations: synchronizeInsteadOfMigrations ? [] : [path.join(__dirname, "..", "migrations", type, "*.js")],
|
||||
migrationsRun: !synchronizeInsteadOfMigrations,
|
||||
applicationName: `Fosscord Server`,
|
||||
applicationName: `Fosscord Server`
|
||||
} as DataSourceOptions;
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,11 @@ export class Rights extends BitField {
|
||||
RESPOND_TO_INTERACTIONS: BitFlag(41), // can respond to interactions
|
||||
SEND_BACKDATED_EVENTS: BitFlag(42), // can send backdated events
|
||||
USE_MASS_INVITES: BitFlag(43), // added per @xnacly's request — can accept mass invites
|
||||
ACCEPT_INVITES: BitFlag(44) // added per @xnacly's request — can accept user-specific invites and DM requests
|
||||
ACCEPT_INVITES: BitFlag(44), // added per @xnacly's request — can accept user-specific invites and DM requests
|
||||
SELF_EDIT_FLAGS: BitFlag(45), // can modify own flags
|
||||
EDIT_FLAGS: BitFlag(46), // can set others' flags
|
||||
MANAGE_GROUPS: BitFlag(47), // can manage others' groups
|
||||
VIEW_SERVER_STATS: BitFlag(48) // added per @chrischrome's request — can view server stats)
|
||||
};
|
||||
|
||||
any(permission: RightResolvable, checkOperator = true) {
|
||||
|
||||
Reference in New Issue
Block a user