Merge branch 'main' into glitch-soc/merge-upstream

Conflicts:
- `README.md`:
  Upstream README has been changed, but we have a completely different one.
  Kept our `README.md`.
- `lib/sanitize_ext/sanitize_config.rb`:
  Upstream added support for more incoming HTML tags (a large subset of what
  glitch-soc accepts).
  Change the code style to match upstream's but otherwise do not change our
  code.
- `spec/lib/sanitize_config_spec.rb`:
  Upstream added support for more incoming HTML tags (a large subset of what
  glitch-soc accepts).
  Kept our version, since the tests are mostly glitch-soc's, except for cases
  which are purposefuly different.
This commit is contained in:
Claire
2023-03-05 20:43:48 +01:00
216 changed files with 3107 additions and 557 deletions

View File

@ -7,6 +7,7 @@ const express = require('express');
const http = require('http');
const redis = require('redis');
const pg = require('pg');
const dbUrlToConfig = require('pg-connection-string').parse;
const log = require('npmlog');
const url = require('url');
const uuid = require('uuid');
@ -23,43 +24,6 @@ dotenv.config({
log.level = process.env.LOG_LEVEL || 'verbose';
/**
* @param {string} dbUrl
* @return {Object.<string, any>}
*/
const dbUrlToConfig = (dbUrl) => {
if (!dbUrl) {
return {};
}
const params = url.parse(dbUrl, true);
const config = {};
if (params.auth) {
[config.user, config.password] = params.auth.split(':');
}
if (params.hostname) {
config.host = params.hostname;
}
if (params.port) {
config.port = params.port;
}
if (params.pathname) {
config.database = params.pathname.split('/')[1];
}
const ssl = params.query && params.query.ssl;
if (ssl && ssl === 'true' || ssl === '1') {
config.ssl = true;
}
return config;
};
/**
* @param {Object.<string, any>} defaultConfig
* @param {string} redisUrl
@ -117,9 +81,10 @@ const startMaster = () => {
log.warn(`Starting streaming API server master with ${numWorkers} workers`);
};
const startWorker = async (workerId) => {
log.warn(`Starting worker ${workerId}`);
/**
* @return {Object.<string, any>}
*/
const pgConfigFromEnv = () => {
const pgConfigs = {
development: {
user: process.env.DB_USER || pg.defaults.user,
@ -138,16 +103,45 @@ const startWorker = async (workerId) => {
},
};
let baseConfig;
if (process.env.DATABASE_URL) {
baseConfig = dbUrlToConfig(process.env.DATABASE_URL);
} else {
baseConfig = pgConfigs[env];
if (process.env.DB_SSLMODE) {
switch(process.env.DB_SSLMODE) {
case 'disable':
case '':
baseConfig.ssl = false;
break;
case 'no-verify':
baseConfig.ssl = { rejectUnauthorized: false };
break;
default:
baseConfig.ssl = {};
break;
}
}
}
return {
...baseConfig,
max: process.env.DB_POOL || 10,
connectionTimeoutMillis: 15000,
application_name: '',
};
};
const startWorker = async (workerId) => {
log.warn(`Starting worker ${workerId}`);
const app = express();
app.set('trust proxy', process.env.TRUSTED_PROXY_IP ? process.env.TRUSTED_PROXY_IP.split(/(?:\s*,\s*|\s+)/) : 'loopback,uniquelocal');
const pgPool = new pg.Pool(Object.assign(pgConfigs[env], dbUrlToConfig(process.env.DATABASE_URL), {
max: process.env.DB_POOL || 10,
connectionTimeoutMillis: 15000,
ssl: !!process.env.DB_SSLMODE && process.env.DB_SSLMODE !== 'disable',
}));
const pgPool = new pg.Pool(pgConfigFromEnv());
const server = http.createServer(app);
const redisNamespace = process.env.REDIS_NAMESPACE || null;