Files
landscape-template/api/functions/is-logged-in/is-logged-in.js

73 lines
2.0 KiB
JavaScript

const serverless = require('serverless-http');
const { createExpressApp } = require('../../modules');
const express = require('express');
const jose = require('jose');
const { JWT_SECRET } = require('../../utils/consts');
const lnurlAuthService = require('../../auth/services/lnurlAuth.service');
const isLoggedInHandler = async (req, res) => {
try {
const login_session = req.headers.session_token;
if (login_session) {
const { payload } = await jose.jwtVerify(login_session, Buffer.from(JWT_SECRET), {
algorithms: ['HS256'],
});
const hash = payload.hash;
const authToken = await lnurlAuthService.getAuthTokenByHash(hash);
if (!authToken)
throw new Error("Not logged in yet")
lnurlAuthService.removeHash(hash).catch();
lnurlAuthService.removeExpiredHashes().catch();
res
.status(200)
.clearCookie('login_session', {
secure: true,
httpOnly: true,
sameSite: "none",
})
.cookie('Authorization', authToken, {
maxAge: 3600000 * 24 * 30,
secure: true,
httpOnly: true,
sameSite: "none",
})
.json({
logged_in: true
});
} else {
res.json({
logged_in: false
});
}
} catch (error) {
res.json({
logged_in: false
})
}
}
let app;
if (process.env.LOCAL) {
app = createExpressApp()
app.get('/is-logged-in', isLoggedInHandler);
}
else {
const router = express.Router();
router.get('/is-logged-in', (isLoggedInHandler))
app = createExpressApp(router)
}
const handler = serverless(app);
exports.handler = async (event, context) => {
return await handler(event, context);
};