mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2024-11-17 17:23:08 +02:00
feat: settings v2
This commit is contained in:
parent
cd71843bb0
commit
96b5c92743
11
package.json
11
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "discord-tickets",
|
"name": "discord-tickets",
|
||||||
"version": "4.0.0-beta.6",
|
"version": "4.0.0-beta.7",
|
||||||
"private": "true",
|
"private": "true",
|
||||||
"description": "An open-source Discord bot for ticket management",
|
"description": "An open-source Discord bot for ticket management",
|
||||||
"main": "src/",
|
"main": "src/",
|
||||||
@ -40,13 +40,11 @@
|
|||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@discord-tickets/settings": "^1.5.0",
|
"@discord-tickets/settings": "^2.0.0",
|
||||||
"@eartharoid/dbf": "^0.3.3",
|
"@eartharoid/dbf": "^0.3.3",
|
||||||
"@eartharoid/dtf": "^2.0.1",
|
"@eartharoid/dtf": "^2.0.1",
|
||||||
"@eartharoid/i18n": "^1.2.1",
|
"@eartharoid/i18n": "^1.2.1",
|
||||||
"@fastify/cookie": "^6.0.0",
|
"@fastify/cookie": "^6.0.0",
|
||||||
"@fastify/cors": "^8.2.0",
|
|
||||||
"@fastify/http-proxy": "^8.4.0",
|
|
||||||
"@fastify/jwt": "^5.0.1",
|
"@fastify/jwt": "^5.0.1",
|
||||||
"@fastify/oauth2": "^5.1.0",
|
"@fastify/oauth2": "^5.1.0",
|
||||||
"@prisma/client": "^4.11.0",
|
"@prisma/client": "^4.11.0",
|
||||||
@ -54,7 +52,6 @@
|
|||||||
"cryptr": "^6.2.0",
|
"cryptr": "^6.2.0",
|
||||||
"discord.js": "^14.7.1",
|
"discord.js": "^14.7.1",
|
||||||
"dotenv": "^16.0.3",
|
"dotenv": "^16.0.3",
|
||||||
"express": "^4.18.2",
|
|
||||||
"fastify": "^4.14.1",
|
"fastify": "^4.14.1",
|
||||||
"figlet": "^1.5.2",
|
"figlet": "^1.5.2",
|
||||||
"fs-extra": "^10.1.0",
|
"fs-extra": "^10.1.0",
|
||||||
@ -76,10 +73,10 @@
|
|||||||
"@commitlint/config-conventional": "^17.4.4",
|
"@commitlint/config-conventional": "^17.4.4",
|
||||||
"all-contributors-cli": "^6.24.0",
|
"all-contributors-cli": "^6.24.0",
|
||||||
"conventional-changelog-cli": "^2.2.2",
|
"conventional-changelog-cli": "^2.2.2",
|
||||||
"eslint": "^8.35.0",
|
"eslint": "^8.36.0",
|
||||||
"eslint-plugin-unused-imports": "^2.0.0",
|
"eslint-plugin-unused-imports": "^2.0.0",
|
||||||
"husky": "^8.0.3",
|
"husky": "^8.0.3",
|
||||||
"lint-staged": "^13.1.2",
|
"lint-staged": "^13.2.0",
|
||||||
"nodemon": "^2.0.21"
|
"nodemon": "^2.0.21"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
|
530
pnpm-lock.yaml
530
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
@ -18,16 +18,14 @@ const env = {
|
|||||||
DISCORD_SECRET: '',
|
DISCORD_SECRET: '',
|
||||||
DISCORD_TOKEN: '',
|
DISCORD_TOKEN: '',
|
||||||
ENCRYPTION_KEY: randomBytes(24).toString('hex'),
|
ENCRYPTION_KEY: randomBytes(24).toString('hex'),
|
||||||
HTTP_EXTERNAL: 'http://127.0.0.1:8080',
|
HTTP_EXTERNAL: 'http://127.0.0.1:8169',
|
||||||
HTTP_HOST: '0.0.0.0',
|
HTTP_HOST: '0.0.0.0',
|
||||||
HTTP_PORT: 8080,
|
HTTP_PORT: 8169,
|
||||||
HTTP_TRUST_PROXY: false,
|
HTTP_TRUST_PROXY: false,
|
||||||
NODE_ENV: 'production', // not bot-specific
|
NODE_ENV: 'production', // not bot-specific
|
||||||
OVERRIDE_ARCHIVE: '',
|
OVERRIDE_ARCHIVE: '',
|
||||||
PUBLIC_BOT: false,
|
PUBLIC_BOT: false,
|
||||||
PUBLISH_COMMANDS: false,
|
PUBLISH_COMMANDS: false,
|
||||||
SETTINGS_HOST: '127.0.0.1',
|
|
||||||
SETTINGS_PORT: 8169,
|
|
||||||
SUPER: '319467558166069248',
|
SUPER: '319467558166069248',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -36,12 +36,6 @@ const env = {
|
|||||||
OVERRIDE_ARCHIVE: () => true, // optional
|
OVERRIDE_ARCHIVE: () => true, // optional
|
||||||
PUBLIC_BOT: () => true, // optional
|
PUBLIC_BOT: () => true, // optional
|
||||||
PUBLISH_COMMANDS: () => true, // optional
|
PUBLISH_COMMANDS: () => true, // optional
|
||||||
SETTINGS_HOST: v =>
|
|
||||||
(!!v && !v.startsWith('http')) ||
|
|
||||||
new Error('is required and must be an address, not a URL'),
|
|
||||||
SETTINGS_PORT: v =>
|
|
||||||
!!v ||
|
|
||||||
new Error('is required'),
|
|
||||||
SUPER: () => true, // optional
|
SUPER: () => true, // optional
|
||||||
};
|
};
|
||||||
|
|
||||||
|
49
src/http.js
49
src/http.js
@ -6,16 +6,8 @@ const { join } = require('path');
|
|||||||
const { files } = require('node-dir');
|
const { files } = require('node-dir');
|
||||||
const { PermissionsBitField } = require('discord.js');
|
const { PermissionsBitField } = require('discord.js');
|
||||||
|
|
||||||
process.env.PUBLIC_HOST = process.env.HTTP_EXTERNAL; // the SvelteKit app expects `PUBLIC_HOST`
|
|
||||||
|
|
||||||
module.exports = async client => {
|
module.exports = async client => {
|
||||||
// cors plugin
|
|
||||||
fastify.register(require('@fastify/cors'), {
|
|
||||||
credentials: true,
|
|
||||||
methods: ['DELETE', 'GET', 'PATCH', 'PUT', 'POST'],
|
|
||||||
origin: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
// oauth2 plugin
|
// oauth2 plugin
|
||||||
fastify.states = new Map();
|
fastify.states = new Map();
|
||||||
fastify.register(oauth, {
|
fastify.register(oauth, {
|
||||||
@ -56,20 +48,6 @@ module.exports = async client => {
|
|||||||
secret: process.env.ENCRYPTION_KEY,
|
secret: process.env.ENCRYPTION_KEY,
|
||||||
});
|
});
|
||||||
|
|
||||||
// proxy `/settings` to express
|
|
||||||
fastify.register(require('@fastify/http-proxy'), {
|
|
||||||
http2: false,
|
|
||||||
prefix: '/settings',
|
|
||||||
replyOptions: {
|
|
||||||
rewriteRequestHeaders: (req, headers) => ({
|
|
||||||
...headers,
|
|
||||||
'host': domain,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
rewritePrefix: '/settings',
|
|
||||||
upstream: `http://${process.env.SETTINGS_HOST}:${process.env.SETTINGS_PORT}`,
|
|
||||||
});
|
|
||||||
|
|
||||||
// auth
|
// auth
|
||||||
fastify.decorate('authenticate', async (req, res) => {
|
fastify.decorate('authenticate', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
@ -176,24 +154,10 @@ module.exports = async client => {
|
|||||||
})); // register route
|
})); // register route
|
||||||
});
|
});
|
||||||
|
|
||||||
// express server for settings
|
|
||||||
const express = require('express')();
|
|
||||||
const { handler } = await import('@discord-tickets/settings/build/handler.js');
|
const { handler } = await import('@discord-tickets/settings/build/handler.js');
|
||||||
process.on('sveltekit:error', ({
|
|
||||||
error,
|
// https://stackoverflow.com/questions/72317071/how-to-set-up-fastify-correctly-so-that-sveltekit-works-fine
|
||||||
errorId,
|
fastify.all('/*', {}, (req, res) => handler(req.raw, res.raw, () => { }));
|
||||||
}) => {
|
|
||||||
client.log.error.http(`Express ${errorId} ${error}`);
|
|
||||||
});
|
|
||||||
express.set('trust proxy', true);
|
|
||||||
express.use((req, res, next) => {
|
|
||||||
next();
|
|
||||||
client.log.verbose.http(short(`Express ${req.ip} ${req.method} ${req.route?.path ?? req.path}`));
|
|
||||||
});
|
|
||||||
express.use(handler); // let SvelteKit handle everything
|
|
||||||
express.listen(process.env.SETTINGS_PORT, process.env.SETTINGS_HOST, () => { // start the express server
|
|
||||||
client.log.verbose.http(`Express listening on port ${process.env.SETTINGS_PORT}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// start the fastify server
|
// start the fastify server
|
||||||
fastify.listen({
|
fastify.listen({
|
||||||
@ -203,4 +167,11 @@ module.exports = async client => {
|
|||||||
if (err) client.log.error.http(err);
|
if (err) client.log.error.http(err);
|
||||||
else client.log.success.http(`Listening at ${addr}`);
|
else client.log.success.http(`Listening at ${addr}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
process.on('sveltekit:error', ({
|
||||||
|
error,
|
||||||
|
errorId,
|
||||||
|
}) => {
|
||||||
|
client.log.error.http(`SvelteKit ${errorId} ${error}`);
|
||||||
|
});
|
||||||
};
|
};
|
@ -3,7 +3,7 @@ const { PermissionsBitField } = require('discord.js');
|
|||||||
module.exports.get = fastify => ({
|
module.exports.get = fastify => ({
|
||||||
handler: async (req, res) => {
|
handler: async (req, res) => {
|
||||||
const { client } = res.context.config;
|
const { client } = res.context.config;
|
||||||
const guilds = await (await fetch('https://discordapp.com/api/users/@me/guilds', { headers: { 'Authorization': `Bearer ${req.user.payload.access_token}` } })).json();
|
const guilds = await (await fetch('https://discordapp.com/api/users/@me/guilds', { headers: { 'Authorization': `Bearer ${req.user.payload.accessToken}` } })).json();
|
||||||
res.send(
|
res.send(
|
||||||
guilds
|
guilds
|
||||||
.filter(guild => guild.owner || new PermissionsBitField(guild.permissions.toString()).has(PermissionsBitField.Flags.ManageGuild))
|
.filter(guild => guild.owner || new PermissionsBitField(guild.permissions.toString()).has(PermissionsBitField.Flags.ManageGuild))
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
module.exports.get = () => ({
|
|
||||||
handler: (req, res) => {
|
|
||||||
const { client } = res.context.config;
|
|
||||||
return `Hello, I am ${client.user.username}!`;
|
|
||||||
// res.redirect(process.env.SETTINGS_EXTERNAL);
|
|
||||||
},
|
|
||||||
});
|
|
Loading…
Reference in New Issue
Block a user