42 lines
1 KiB
JavaScript
42 lines
1 KiB
JavaScript
const express = require('express')
|
|
const router = express.Router()
|
|
|
|
const login = require('../services/login')
|
|
const options = require('../../options')
|
|
const T = require('../../time')
|
|
|
|
const NEVER = new Date(Date.now() + 100 * T.years)
|
|
const hostname = options.hostname
|
|
|
|
const register = (req, res, next) => {
|
|
const otp = req.query.otp
|
|
const ua = req.headers['user-agent']
|
|
const ip = req.ip
|
|
|
|
if (!otp) return next()
|
|
|
|
return login.register(otp, ua, ip)
|
|
.then(r => {
|
|
if (r.expired) return res.status(401).send('OTP expired, generate new registration link')
|
|
|
|
// Maybe user is using old registration key, attempt to authenticate
|
|
if (!r.success) return next()
|
|
|
|
const cookieOpts = {
|
|
httpOnly: true,
|
|
secure: true,
|
|
domain: hostname,
|
|
sameSite: true,
|
|
expires: NEVER
|
|
}
|
|
|
|
const token = r.token
|
|
req.token = token
|
|
res.cookie('token', token, cookieOpts)
|
|
res.sendStatus(200)
|
|
})
|
|
}
|
|
|
|
router.get('/register', register)
|
|
|
|
module.exports = router
|