2023-03-13 13:42:43 +01:00
|
|
|
import restana from 'restana';
|
|
|
|
|
import * as userStorage from '../../services/storage/userStorage.js';
|
|
|
|
|
import * as hasher from '../../services/security/hash.js';
|
2025-07-26 20:42:58 +02:00
|
|
|
import { trackDemoAccessed } from '../../services/tracking/Tracker.js';
|
2025-09-13 18:57:56 +02:00
|
|
|
import logger from '../../services/logger.js';
|
2025-12-09 13:56:46 +01:00
|
|
|
import { getSettings } from '../../services/storage/settingsStorage.js';
|
2023-03-13 13:42:43 +01:00
|
|
|
const service = restana();
|
2021-01-21 16:09:23 +01:00
|
|
|
const loginRouter = service.newRouter();
|
|
|
|
|
loginRouter.get('/user', async (req, res) => {
|
|
|
|
|
const currentUserId = req.session.currentUser;
|
2022-01-25 15:11:21 +01:00
|
|
|
const currentUser = currentUserId == null ? null : userStorage.getUser(currentUserId);
|
|
|
|
|
if (currentUser == null) {
|
2021-01-21 16:09:23 +01:00
|
|
|
res.body = {};
|
|
|
|
|
} else {
|
|
|
|
|
res.body = {
|
2022-01-25 15:11:21 +01:00
|
|
|
userId: currentUser.id,
|
|
|
|
|
isAdmin: currentUser.isAdmin,
|
2021-01-21 16:09:23 +01:00
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
res.send();
|
|
|
|
|
});
|
|
|
|
|
loginRouter.post('/', async (req, res) => {
|
2025-12-09 13:56:46 +01:00
|
|
|
const settings = await getSettings();
|
2021-01-21 16:09:23 +01:00
|
|
|
const { username, password } = req.body;
|
|
|
|
|
const user = userStorage.getUsers(true).find((user) => user.username === username);
|
|
|
|
|
if (user == null) {
|
|
|
|
|
res.send(401);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (user.password === hasher.hash(password)) {
|
2025-12-09 13:56:46 +01:00
|
|
|
if (settings.demoMode) {
|
2025-09-12 13:38:53 +02:00
|
|
|
await trackDemoAccessed();
|
2024-11-22 09:11:10 +01:00
|
|
|
}
|
|
|
|
|
|
2021-01-21 16:09:23 +01:00
|
|
|
req.session.currentUser = user.id;
|
|
|
|
|
userStorage.setLastLoginToNow({ userId: user.id });
|
|
|
|
|
res.send(200);
|
|
|
|
|
return;
|
|
|
|
|
} else {
|
2025-09-13 18:57:56 +02:00
|
|
|
logger.error(`User ${username} tried to login, but password was wrong.`);
|
2021-01-21 16:09:23 +01:00
|
|
|
}
|
|
|
|
|
res.send(401);
|
|
|
|
|
});
|
|
|
|
|
loginRouter.post('/logout', async (req, res) => {
|
|
|
|
|
req.session = null;
|
|
|
|
|
res.send(200);
|
|
|
|
|
});
|
2023-03-13 13:42:43 +01:00
|
|
|
export { loginRouter };
|