import type express from 'express'; import { asyncErr, checkMinimalWoobVersion, KError, UNKNOWN_WOOB_VERSION } from '../helpers'; import getEmailer from '../lib/emailer'; import { sendTestNotification } from '../lib/notifications'; import { Setting } from '../models'; import * as woob from '../providers/woob'; import { WOOB_NOT_INSTALLED } from '../shared/errors.json'; import { DEMO_MODE } from '../shared/settings'; import type { IdentifiedRequest } from './routes'; export async function getWoobVersion(_req: express.Request, res: express.Response) { try { const version = await woob.getVersion(/* force = */ true); if (version === UNKNOWN_WOOB_VERSION) { throw new KError('cannot get woob version', 500, WOOB_NOT_INSTALLED); } res.json({ version, hasMinimalVersion: checkMinimalWoobVersion(version), }); } catch (err) { asyncErr(res, err, 'when getting woob version'); } } export async function updateWoob(_req: express.Request, res: express.Response) { try { await woob.updateModules(); res.status(200).end(); } catch (err) { asyncErr(res, err, 'when updating woob'); } } export async function testEmail(req: IdentifiedRequest, res: express.Response) { try { const { id: userId } = req.user; const { email } = req.body; if (!email) { throw new KError('Missing email recipient address when sending a test email', 400); } const emailer = getEmailer(); if (emailer !== null) { await emailer.sendTestEmail(userId, email); } else { throw new KError('No emailer found'); } res.status(200).end(); } catch (err) { asyncErr(res, err, 'when trying to send an email'); } } export async function testNotification(req: IdentifiedRequest, res: express.Response) { try { const { id: userId } = req.user; const { appriseUrl } = req.body; if (!appriseUrl) { throw new KError('Missing apprise url when sending a notification', 400); } await sendTestNotification(userId, appriseUrl); res.status(200).end(); } catch (err) { asyncErr(res, err, 'when trying to send a notification'); } } export function isDemoForced(): boolean { return process.kresus.forceDemoMode === true; } export async function isDemoEnabled(userId: number): Promise { return isDemoForced() || (await Setting.findOrCreateDefaultBooleanValue(userId, DEMO_MODE)); }