aboutsummaryrefslogtreecommitdiffstats
path: root/routes/users.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2021-12-16 22:05:36 -0500
committerAdam Soltys <[email protected]>2021-12-16 22:05:43 -0500
commit667302c91ceb1c1477782a6262d8d618ccd133e6 (patch)
treec51f0f21b2ea3c3cf51fe56b9890514cfbf3a543 /routes/users.js
parent14d870dec052c4ae279933983d56ab6a0149bc1e (diff)
downloadcoinos-server-667302c91ceb1c1477782a6262d8d618ccd133e6.tar.gz
coinos-server-667302c91ceb1c1477782a6262d8d618ccd133e6.zip
check for payment existence
Diffstat (limited to 'routes/users.js')
-rw-r--r--routes/users.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/routes/users.js b/routes/users.js
index df42d82d..6ff515fc 100644
--- a/routes/users.js
+++ b/routes/users.js
@@ -303,6 +303,68 @@ app.post(
);
app.post(
+ "/login",
+ ah(async (req, res) => {
+ try {
+ const { params, sig, key } = req.body;
+
+ if (sig) {
+ const { callback } = params;
+
+ try {
+ const url = `${callback}&sig=${sig}&key=${key}`;
+ const response = await axios.get(url);
+ res.send(response.data);
+ } catch (e) {
+ l.error("problem calling lnurl login", e.message);
+ res.status(500).send(e.message);
+ }
+
+ return;
+ }
+
+ let twofa = req.body.token;
+
+ let user = await getUser(req.body.username);
+
+ if (
+ !user ||
+ (user.password &&
+ !(await bcrypt.compare(req.body.password, user.password)))
+ ) {
+ l.warn("invalid username or password attempt", req.body.username);
+ return res.status(401).end();
+ }
+
+ if (
+ user.twofa &&
+ (typeof twofa === "undefined" ||
+ !authenticator.check(twofa, user.otpsecret))
+ ) {
+ return res.status(401).send("2fa required");
+ }
+
+ l.info(
+ "login",
+ req.body.username,
+ req.headers["x-forwarded-for"] || req.connection.remoteAddress
+ );
+
+ let payload = { username: user.username };
+ let token = jwt.sign(payload, config.jwt);
+ res.cookie("token", token, { expires: new Date(Date.now() + 432000000) });
+ user.accounts = await user.getAccounts();
+ user.keys = await user.getKeys();
+ user = pick(user, ...whitelist);
+ res.send({ user, token });
+ } catch (e) {
+ l.error("login error", e.message);
+ res.status(401).end();
+ }
+ })
+);
+
+app.post(
"/taboggan",
ah(async (req, res) => {
try {