You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.8 KiB
TypeScript
69 lines
1.8 KiB
TypeScript
// TODO check more
|
|
|
|
import os from 'os';
|
|
import superagent from 'superagent';
|
|
import * as system from './model/system';
|
|
import * as db from './service/db';
|
|
|
|
const c = {};
|
|
|
|
async function checkDb(log, warn, error) {
|
|
try {
|
|
const coll = db.collection('check');
|
|
const d = await coll.findOne({ _id: 'check' });
|
|
if (!d) await coll.insertOne({ _id: 'check', value: 'check' });
|
|
await coll.createIndex('check');
|
|
await coll.deleteOne({ _id: 'check' });
|
|
await coll.drop();
|
|
} catch (e) {
|
|
error(`Mongo Error: Database read-write failed.\n${e.message}`);
|
|
}
|
|
}
|
|
|
|
async function checkPerm(log, warn) {
|
|
const { username } = os.userInfo();
|
|
if (username === 'root') warn('Hydro should not be run as root.');
|
|
// TODO check cwd read-write
|
|
}
|
|
|
|
async function checkMail(log, warn) {
|
|
const from = await system.get('smtp.from');
|
|
if (!from) warn('SMTP account was not provided, email verification disabled.');
|
|
}
|
|
|
|
async function checkProxy(log, warn) {
|
|
const [github, google, proxy] = await system.getMany([
|
|
'oauth.githubappid', 'oauth.googleappid', 'proxy',
|
|
]);
|
|
if (proxy) {
|
|
superagent.get('https://www.google.com/').timeout(10000).proxy(proxy)
|
|
.catch(() => warn('The proxy configured seem to be invalid.'));
|
|
} else if (github || google) {
|
|
warn('OAuth enabled. But for well-known reasons, a proxy is required.');
|
|
}
|
|
}
|
|
|
|
const checks = [
|
|
checkDb,
|
|
checkPerm,
|
|
checkMail,
|
|
checkProxy,
|
|
];
|
|
|
|
export async function start(log, warn, error, cb) {
|
|
const id = String.random(6);
|
|
cb(id);
|
|
for (const check of checks) {
|
|
if (c[id]) {
|
|
delete c[id];
|
|
return;
|
|
}
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await check(log, warn, error);
|
|
}
|
|
}
|
|
|
|
export async function cancel(id) {
|
|
c[id] = true;
|
|
}
|