auth.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /* global WIKI */
  2. const express = require('express')
  3. const router = express.Router()
  4. const moment = require('moment')
  5. const _ = require('lodash')
  6. /**
  7. * Login form
  8. */
  9. router.get('/login', (req, res, next) => {
  10. _.set(res.locals, 'pageMeta.title', 'Login')
  11. res.render('login')
  12. })
  13. router.get('/login/:strategy', async (req, res, next) => {
  14. try {
  15. const authResult = await WIKI.models.users.login({
  16. strategy: req.params.strategy
  17. }, { req, res })
  18. } catch (err) {
  19. next(err)
  20. }
  21. })
  22. router.get('/login/:strategy/callback', async (req, res, next) => {
  23. try {
  24. const authResult = await WIKI.models.users.login({
  25. strategy: req.params.strategy
  26. }, { req, res })
  27. res.cookie('jwt', authResult.jwt, { expires: moment().add(1, 'y').toDate() })
  28. res.redirect('/')
  29. } catch (err) {
  30. next(err)
  31. }
  32. })
  33. /**
  34. * Logout
  35. */
  36. router.get('/logout', function (req, res) {
  37. req.logout()
  38. res.redirect('/')
  39. })
  40. /**
  41. * Register form
  42. */
  43. router.get('/register', async (req, res, next) => {
  44. _.set(res.locals, 'pageMeta.title', 'Register')
  45. const localStrg = await WIKI.models.authentication.getStrategy('local')
  46. if (localStrg.selfRegistration) {
  47. res.render('register')
  48. } else {
  49. next(new WIKI.Error.AuthRegistrationDisabled())
  50. }
  51. })
  52. /**
  53. * Verify
  54. */
  55. router.get('/verify/:token', async (req, res, next) => {
  56. const usr = await WIKI.models.userKeys.validateToken({ kind: 'verify', token: req.params.token })
  57. await WIKI.models.users.query().patch({ isVerified: true }).where('id', usr.id)
  58. const result = await WIKI.models.users.refreshToken(usr)
  59. res.cookie('jwt', result.token, { expires: moment().add(1, 'years').toDate() })
  60. res.redirect('/')
  61. })
  62. /**
  63. * JWT Public Endpoints
  64. */
  65. router.get('/.well-known/jwk.json', function (req, res, next) {
  66. res.json(WIKI.config.certs.jwk)
  67. })
  68. router.get('/.well-known/jwk.pem', function (req, res, next) {
  69. res.send(WIKI.config.certs.public)
  70. })
  71. module.exports = router