mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2024-12-22 15:53:08 +02:00
Settings reverse proxy (doesn't work)
This commit is contained in:
parent
742dedd635
commit
be0795cde0
@ -34,12 +34,12 @@
|
|||||||
"node": ">=18.0"
|
"node": ">=18.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@discord-tickets/settings": "^1.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.0.4",
|
"@eartharoid/i18n": "^1.0.4",
|
||||||
"@fastify/cookie": "^6.0.0",
|
"@fastify/cookie": "^6.0.0",
|
||||||
"@fastify/cors": "^8.1.0",
|
"@fastify/cors": "^8.1.0",
|
||||||
|
"@fastify/http-proxy": "^8.2.2",
|
||||||
"@fastify/jwt": "^5.0.1",
|
"@fastify/jwt": "^5.0.1",
|
||||||
"@fastify/oauth2": "^5.1.0",
|
"@fastify/oauth2": "^5.1.0",
|
||||||
"@prisma/client": "^4.3.1",
|
"@prisma/client": "^4.3.1",
|
||||||
|
@ -2,7 +2,6 @@ require('dotenv').config();
|
|||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const { spawnSync } = require('child_process');
|
const { spawnSync } = require('child_process');
|
||||||
|
|
||||||
|
|
||||||
const providers = ['mysql', 'postgresql', 'sqlite'];
|
const providers = ['mysql', 'postgresql', 'sqlite'];
|
||||||
const provider = process.env.DB_PROVIDER;
|
const provider = process.env.DB_PROVIDER;
|
||||||
|
|
||||||
|
@ -2,16 +2,16 @@ const { randomBytes } = require('crypto');
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
const env = {
|
const env = {
|
||||||
API_BIND: 8080,
|
|
||||||
API_EXTERNAL: 'http://localhost:8080',
|
|
||||||
DB_CONNECTION_URL: '',
|
DB_CONNECTION_URL: '',
|
||||||
DB_PROVIDER: '', // don't default to sqlite, postinstall checks if empty
|
DB_PROVIDER: '', // don't default to sqlite, postinstall checks if empty
|
||||||
DISCORD_SECRET: '',
|
DISCORD_SECRET: '',
|
||||||
DISCORD_TOKEN: '',
|
DISCORD_TOKEN: '',
|
||||||
ENCRYPTION_KEY: randomBytes(24).toString('hex'),
|
ENCRYPTION_KEY: randomBytes(24).toString('hex'),
|
||||||
|
HTTP_BIND: 8080,
|
||||||
|
HTTP_EXTERNAL: 'http://localhost',
|
||||||
PORTAL: '',
|
PORTAL: '',
|
||||||
PUBLIC_BOT: false,
|
PUBLIC_BOT: false,
|
||||||
SETTINGS_BIND: 80,
|
SETTINGS_BIND: 8888,
|
||||||
SUPER: '319467558166069248',
|
SUPER: '319467558166069248',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
45
src/http.js
45
src/http.js
@ -4,7 +4,7 @@ const { short } = require('leeks.js');
|
|||||||
const { join } = require('path');
|
const { join } = require('path');
|
||||||
const { files } = require('node-dir');
|
const { files } = require('node-dir');
|
||||||
|
|
||||||
process.env.PUBLIC_HOST = process.env.API_EXTERNAL; // the SvelteKit app expects `PUBLIC_HOST`
|
process.env.PUBLIC_HOST = process.env.HTTP_EXTERNAL; // the SvelteKit app expects `PUBLIC_HOST`
|
||||||
|
|
||||||
module.exports = async client => {
|
module.exports = async client => {
|
||||||
// cors plugin
|
// cors plugin
|
||||||
@ -16,7 +16,7 @@ module.exports = async client => {
|
|||||||
|
|
||||||
// oauth2 plugin
|
// oauth2 plugin
|
||||||
fastify.register(oauth, {
|
fastify.register(oauth, {
|
||||||
callbackUri: `${process.env.API_EXTERNAL}/auth/callback`,
|
callbackUri: `${process.env.HTTP_EXTERNAL}/auth/callback`,
|
||||||
credentials: {
|
credentials: {
|
||||||
auth: oauth.DISCORD_CONFIGURATION,
|
auth: oauth.DISCORD_CONFIGURATION,
|
||||||
client: {
|
client: {
|
||||||
@ -41,6 +41,14 @@ 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',
|
||||||
|
rewritePrefix: '/settings',
|
||||||
|
upstream: `http://127.0.0.1:${process.env.SETTINGS_BIND}`,
|
||||||
|
});
|
||||||
|
|
||||||
// auth
|
// auth
|
||||||
fastify.decorate('authenticate', async (req, res) => {
|
fastify.decorate('authenticate', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
@ -54,6 +62,8 @@ module.exports = async client => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.log(req);
|
||||||
|
console.log(req.cookies);
|
||||||
res.send(err);
|
res.send(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -116,15 +126,15 @@ module.exports = async client => {
|
|||||||
: responseTime >= 5
|
: responseTime >= 5
|
||||||
? '&e'
|
? '&e'
|
||||||
: '&a') + responseTime + 'ms';
|
: '&a') + responseTime + 'ms';
|
||||||
client.log.info.http(short(`API ${req.ip} ${req.method} ${req.routerPath ?? '*'} &m-+>&r ${status}&b in ${responseTime}`));
|
client.log.info.http(short(`${req.id} ${req.ip} ${req.method} ${req.routerPath ?? '*'} &m-+>&r ${status}&b in ${responseTime}`));
|
||||||
|
if (!req.routerPath) client.log.verbose.http(`${req.id} ${req.method} ${req.url}`);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
fastify.addHook('onError', async (req, res, err) => client.log.error.http(err));
|
fastify.addHook('onError', async (req, res, err) => client.log.error.http(req.id, err));
|
||||||
|
|
||||||
// route loading
|
// route loading
|
||||||
const dir = join(__dirname, '/routes');
|
const dir = join(__dirname, '/routes');
|
||||||
|
|
||||||
files(dir, {
|
files(dir, {
|
||||||
exclude: /^\./,
|
exclude: /^\./,
|
||||||
match: /.js$/,
|
match: /.js$/,
|
||||||
@ -146,24 +156,21 @@ module.exports = async client => {
|
|||||||
})); // register route
|
})); // register route
|
||||||
});
|
});
|
||||||
|
|
||||||
// start server
|
// express server for settings
|
||||||
fastify.listen({ port: process.env.API_BIND }, (err, addr) => {
|
|
||||||
if (err) client.log.error.http(err);
|
|
||||||
else client.log.success.http(`API Listening at ${addr}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
const express = require('express')();
|
const express = require('express')();
|
||||||
const { handler } = await import('@discord-tickets/settings/build/handler.js');
|
const { handler } = await import('@discord-tickets/settings/build/handler.js');
|
||||||
express.get('/api/client', (req, res) => {
|
|
||||||
res.end('ok');
|
|
||||||
});
|
|
||||||
express.use((req, res, next) => {
|
express.use((req, res, next) => {
|
||||||
next();
|
next();
|
||||||
// req.route?.path ?? '*'
|
client.log.verbose.http(short(`Express ${req.ip} ${req.method} ${req.route?.path ?? req.path}`));
|
||||||
client.log.verbose.http(short(`SETTINGS ${req.ip} ${req.method} ${req.path}`)); // verbose because little information & SvelteKit is very spammy (lots of routes)
|
|
||||||
});
|
});
|
||||||
express.use(handler);
|
express.use(handler); // let SvelteKit handle everything
|
||||||
express.listen(process.env.SETTINGS_BIND, () => {
|
express.listen(process.env.SETTINGS_BIND, () => { // start the express server
|
||||||
client.log.success.http(`SETTINGS Listening at ${process.env.SETTINGS_BIND}`);
|
client.log.verbose.http(`Express listening on port ${process.env.SETTINGS_BIND}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// start the fastify server
|
||||||
|
fastify.listen({ port: process.env.HTTP_BIND }, (err, addr) => {
|
||||||
|
if (err) client.log.error.http(err);
|
||||||
|
else client.log.success.http(`Listening at ${addr}`);
|
||||||
});
|
});
|
||||||
};
|
};
|
@ -1 +1 @@
|
|||||||
module.exports.domain = process.env.API_EXTERNAL.match(/http(s?):\/\/(?<domain>[a-zA-Z0-9\-_.]+)(:\d+)?/).groups.domain;
|
module.exports.domain = process.env.HTTP_EXTERNAL.match(/http(s?):\/\/(?<domain>[a-zA-Z0-9\-_.]+)(:\d+)?/).groups.domain;
|
@ -10,6 +10,7 @@ const colours = {
|
|||||||
info: ['&3', '&b'],
|
info: ['&3', '&b'],
|
||||||
notice: ['&!6&0', '&!6&0'],
|
notice: ['&!6&0', '&!6&0'],
|
||||||
success: ['&2', '&a'],
|
success: ['&2', '&a'],
|
||||||
|
verbose: ['&7', '&f'],
|
||||||
warn: ['&6', '&e'],
|
warn: ['&6', '&e'],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -23,6 +23,6 @@ module.exports.get = () => ({
|
|||||||
sameSite: true,
|
sameSite: true,
|
||||||
secure: false,
|
secure: false,
|
||||||
})
|
})
|
||||||
.redirect('/');
|
.redirect('/settings');
|
||||||
},
|
},
|
||||||
});
|
});
|
@ -2,5 +2,6 @@ module.exports.get = () => ({
|
|||||||
handler: (req, res) => {
|
handler: (req, res) => {
|
||||||
const { client } = res.context.config;
|
const { client } = res.context.config;
|
||||||
return `Hello, I am ${client.user.username}!`;
|
return `Hello, I am ${client.user.username}!`;
|
||||||
|
// res.redirect(process.env.SETTINGS_EXTERNAL);
|
||||||
},
|
},
|
||||||
});
|
});
|
14
src/stdin/settings.js
Normal file
14
src/stdin/settings.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
const { StdinCommand } = require('@eartharoid/dbf');
|
||||||
|
|
||||||
|
module.exports = class extends StdinCommand {
|
||||||
|
constructor(client, options) {
|
||||||
|
super(client, {
|
||||||
|
...options,
|
||||||
|
id: 'settings',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async run() {
|
||||||
|
this.client.log.info.settings(process.env.HTTP_EXTERNAL + '/settings');
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user