36 lines
1.3 KiB
JavaScript
36 lines
1.3 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
|
|
const { getSetting } = require('../db/database');
|
|
const { login, cookieOpts, COOKIE_NAME } = require('../services/authService');
|
|
const { standardizeError } = require('../middleware/errorFormatter');
|
|
|
|
// POST /api/auth/login
|
|
// Public endpoint - no CSRF protection needed (no session to hijack)
|
|
router.post('/login', async (req, res) => {
|
|
// Respect admin-configured login method toggle
|
|
if (getSetting('local_login_enabled') === 'false') {
|
|
return res.status(403).json(standardizeError('Local username/password login is not enabled on this server.', 'FORBIDDEN'));
|
|
}
|
|
|
|
const { username, password } = req.body;
|
|
if (!username || !password) {
|
|
return res.status(400).json(standardizeError('Username and password are required', 'VALIDATION_ERROR', !username ? 'username' : 'password'));
|
|
}
|
|
|
|
try {
|
|
const result = await login(username, password);
|
|
if (!result) {
|
|
return res.status(401).json(standardizeError('Invalid username or password', 'AUTH_ERROR'));
|
|
}
|
|
|
|
res.cookie(COOKIE_NAME, result.sessionId, cookieOpts(req));
|
|
res.json({ user: result.user });
|
|
} catch (err) {
|
|
console.error('Login error:', err);
|
|
res.status(500).json(standardizeError('Login failed', 'SERVER_ERROR'));
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|