2024-02-17 11:42:19 +02:00
|
|
|
const becca = require('../becca/becca');
|
2024-02-16 21:38:09 +02:00
|
|
|
const eu = require('./etapi_utils');
|
2024-02-17 11:54:55 +02:00
|
|
|
const passwordEncryptionService = require('../services/encryption/password_encryption');
|
2024-02-17 19:55:40 +02:00
|
|
|
const etapiTokenService = require('../services/etapi_tokens');
|
2022-01-10 17:09:20 +01:00
|
|
|
|
2022-08-22 11:50:58 +02:00
|
|
|
function register(router, loginMiddleware) {
|
|
|
|
eu.NOT_AUTHENTICATED_ROUTE(router, 'post', '/etapi/auth/login', loginMiddleware, (req, res, next) => {
|
2022-01-10 17:09:20 +01:00
|
|
|
const {password, tokenName} = req.body;
|
|
|
|
|
|
|
|
if (!passwordEncryptionService.verifyPassword(password)) {
|
|
|
|
throw new eu.EtapiError(401, "WRONG_PASSWORD", "Wrong password.");
|
|
|
|
}
|
|
|
|
|
|
|
|
const {authToken} = etapiTokenService.createToken(tokenName || "ETAPI login");
|
2022-01-12 21:14:12 +01:00
|
|
|
|
|
|
|
res.status(201).json({
|
2022-01-10 17:09:20 +01:00
|
|
|
authToken
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
eu.route(router, 'post', '/etapi/auth/logout', (req, res, next) => {
|
|
|
|
const parsed = etapiTokenService.parseAuthToken(req.headers.authorization);
|
|
|
|
|
|
|
|
if (!parsed || !parsed.etapiTokenId) {
|
|
|
|
throw new eu.EtapiError(400, eu.GENERIC_CODE, "Cannot logout this token.");
|
|
|
|
}
|
|
|
|
|
|
|
|
const etapiToken = becca.getEtapiToken(parsed.etapiTokenId);
|
2022-01-12 21:14:12 +01:00
|
|
|
|
2022-01-10 17:09:20 +01:00
|
|
|
if (!etapiToken) {
|
|
|
|
// shouldn't happen since this already passed auth validation
|
2023-05-04 22:16:18 +02:00
|
|
|
throw new Error(`Cannot find the token '${parsed.etapiTokenId}'.`);
|
2022-01-10 17:09:20 +01:00
|
|
|
}
|
2022-01-12 21:14:12 +01:00
|
|
|
|
2022-01-10 17:09:20 +01:00
|
|
|
etapiToken.markAsDeletedSimple();
|
2022-01-12 21:14:12 +01:00
|
|
|
|
2022-01-10 17:09:20 +01:00
|
|
|
res.sendStatus(204);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
register
|
2022-01-12 21:14:12 +01:00
|
|
|
}
|