[refactoring] auth as middleware
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
div
|
div
|
||||||
el-form(inline label-width="400px")
|
el-form(inline label-width="400px")
|
||||||
//- select timezone
|
//- select timezone
|
||||||
|
client-only
|
||||||
el-form-item(:label="$t('admin.select_instance_timezone')")
|
el-form-item(:label="$t('admin.select_instance_timezone')")
|
||||||
el-select(v-model='instance_timezone' filterable)
|
el-select(v-model='instance_timezone' filterable)
|
||||||
el-option(v-for='timezone in timezones' :key='timezone.value' :value='timezone.value')
|
el-option(v-for='timezone in timezones' :key='timezone.value' :value='timezone.value')
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ module.exports = {
|
|||||||
endpoints: {
|
endpoints: {
|
||||||
login: { url: '/auth/login', method: 'post', propertyName: 'token' },
|
login: { url: '/auth/login', method: 'post', propertyName: 'token' },
|
||||||
logout: false,
|
logout: false,
|
||||||
user: { url: '/auth/user', method: 'get', propertyName: false }
|
user: false
|
||||||
},
|
},
|
||||||
tokenRequired: true,
|
tokenRequired: true,
|
||||||
tokenType: 'Bearer'
|
tokenType: 'Bearer'
|
||||||
|
|||||||
@@ -2,16 +2,10 @@ const { Op } = require('sequelize')
|
|||||||
const { user: User } = require('./models')
|
const { user: User } = require('./models')
|
||||||
|
|
||||||
const Auth = {
|
const Auth = {
|
||||||
async fillUser (req, res, next) {
|
|
||||||
if (!req.user) { return next() }
|
/** isAuth middleware
|
||||||
req.user = await User.findOne({
|
* req.user is filled in server/helper.js#initMiddleware
|
||||||
where: { id: { [Op.eq]: req.user.id }, is_active: true }
|
*/
|
||||||
}).catch(e => {
|
|
||||||
res.sendStatus(404)
|
|
||||||
return next(false)
|
|
||||||
})
|
|
||||||
next()
|
|
||||||
},
|
|
||||||
async isAuth (req, res, next) {
|
async isAuth (req, res, next) {
|
||||||
if (!req.user) {
|
if (!req.user) {
|
||||||
return res
|
return res
|
||||||
@@ -29,6 +23,8 @@ const Auth = {
|
|||||||
}
|
}
|
||||||
next()
|
next()
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/** isAdmin middleware */
|
||||||
isAdmin (req, res, next) {
|
isAdmin (req, res, next) {
|
||||||
if (!req.user) {
|
if (!req.user) {
|
||||||
return res
|
return res
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ const bodyParser = require('body-parser')
|
|||||||
const expressJwt = require('express-jwt')
|
const expressJwt = require('express-jwt')
|
||||||
const config = require('config')
|
const config = require('config')
|
||||||
|
|
||||||
const { fillUser, isAuth, isAdmin } = require('./auth')
|
const { isAuth, isAdmin } = require('./auth')
|
||||||
const eventController = require('./controller/event')
|
const eventController = require('./controller/event')
|
||||||
const exportController = require('./controller/export')
|
const exportController = require('./controller/export')
|
||||||
const userController = require('./controller/user')
|
const userController = require('./controller/user')
|
||||||
@@ -21,16 +21,9 @@ api.use(cookieParser())
|
|||||||
api.use(bodyParser.urlencoded({ extended: false }))
|
api.use(bodyParser.urlencoded({ extended: false }))
|
||||||
api.use(bodyParser.json())
|
api.use(bodyParser.json())
|
||||||
|
|
||||||
// const jwt = expressJwt({
|
|
||||||
// secret: config.secret,
|
|
||||||
// credentialsRequired: false
|
|
||||||
// })
|
|
||||||
|
|
||||||
// api.use(jwt)
|
|
||||||
|
|
||||||
// AUTH
|
// AUTH
|
||||||
api.post('/auth/login', userController.login)
|
api.post('/auth/login', userController.login)
|
||||||
api.get('/auth/user', fillUser, userController.current)
|
api.get('/auth/user', userController.current)
|
||||||
|
|
||||||
api.post('/user/recover', userController.forgotPassword)
|
api.post('/user/recover', userController.forgotPassword)
|
||||||
api.post('/user/check_recover_code', userController.checkRecoverCode)
|
api.post('/user/check_recover_code', userController.checkRecoverCode)
|
||||||
@@ -38,28 +31,24 @@ api.post('/user/recover_password', userController.updatePasswordWithRecoverCode)
|
|||||||
|
|
||||||
// register and add users
|
// register and add users
|
||||||
api.post('/user/register', userController.register)
|
api.post('/user/register', userController.register)
|
||||||
api.post('/user', isAuth, isAdmin, userController.create)
|
api.post('/user', isAdmin, userController.create)
|
||||||
|
|
||||||
// update user
|
// update user
|
||||||
api.put('/user', isAuth, userController.update)
|
api.put('/user', isAuth, userController.update)
|
||||||
|
|
||||||
// delete user
|
// delete user
|
||||||
api.delete('/user/:id', isAuth, isAdmin, userController.remove)
|
api.delete('/user/:id', isAdmin, userController.remove)
|
||||||
|
|
||||||
//
|
|
||||||
// api.delete('/user', userController.remove)
|
// api.delete('/user', userController.remove)
|
||||||
|
|
||||||
// get all users
|
// get all users
|
||||||
api.get('/users', isAuth, isAdmin, userController.getAll)
|
api.get('/users', isAdmin, userController.getAll)
|
||||||
|
|
||||||
// update a tag (modify color)
|
|
||||||
api.put('/tag', isAuth, isAdmin, eventController.updateTag)
|
|
||||||
|
|
||||||
// update a place (modify address..)
|
// update a place (modify address..)
|
||||||
api.put('/place', isAuth, isAdmin, eventController.updatePlace)
|
api.put('/place', isAdmin, eventController.updatePlace)
|
||||||
|
|
||||||
// add event
|
// add event
|
||||||
api.post('/user/event', fillUser, upload.single('image'), userController.addEvent)
|
api.post('/user/event', upload.single('image'), userController.addEvent)
|
||||||
|
|
||||||
// update event
|
// update event
|
||||||
api.put('/user/event', isAuth, upload.single('image'), userController.updateEvent)
|
api.put('/user/event', isAuth, upload.single('image'), userController.updateEvent)
|
||||||
@@ -71,14 +60,14 @@ api.delete('/user/event/:id', isAuth, userController.delEvent)
|
|||||||
api.get('/event/meta', eventController.getMeta)
|
api.get('/event/meta', eventController.getMeta)
|
||||||
|
|
||||||
// get unconfirmed events
|
// get unconfirmed events
|
||||||
api.get('/event/unconfirmed', isAuth, isAdmin, eventController.getUnconfirmed)
|
api.get('/event/unconfirmed', isAdmin, eventController.getUnconfirmed)
|
||||||
|
|
||||||
// add event notification
|
// add event notification
|
||||||
api.post('/event/notification', eventController.addNotification)
|
api.post('/event/notification', eventController.addNotification)
|
||||||
api.delete('/event/notification/:code', eventController.delNotification)
|
api.delete('/event/notification/:code', eventController.delNotification)
|
||||||
|
|
||||||
api.get('/settings', settingsController.getAllRequest)
|
api.get('/settings', settingsController.getAllRequest)
|
||||||
api.post('/settings', fillUser, isAdmin, settingsController.setRequest)
|
api.post('/settings', isAdmin, settingsController.setRequest)
|
||||||
|
|
||||||
api.get('/settings/user_locale', settingsController.getUserLocale)
|
api.get('/settings/user_locale', settingsController.getUserLocale)
|
||||||
|
|
||||||
@@ -87,7 +76,7 @@ api.get('/event/confirm/:event_id', isAuth, eventController.confirm)
|
|||||||
api.get('/event/unconfirm/:event_id', isAuth, eventController.unconfirm)
|
api.get('/event/unconfirm/:event_id', isAuth, eventController.unconfirm)
|
||||||
|
|
||||||
// get event
|
// get event
|
||||||
api.get('/event/:event_id.:format?', fillUser, eventController.get)
|
api.get('/event/:event_id.:format?', eventController.get)
|
||||||
|
|
||||||
// export events (rss/ics)
|
// export events (rss/ics)
|
||||||
api.get('/export/:type', exportController.export)
|
api.get('/export/:type', exportController.export)
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
const settingsController = require('./api/controller/settings')
|
const settingsController = require('./api/controller/settings')
|
||||||
|
const { user: User } = require('./api/models')
|
||||||
|
const { Op } = require('sequelize')
|
||||||
const acceptLanguage = require('accept-language')
|
const acceptLanguage = require('accept-language')
|
||||||
const expressJwt = require('express-jwt')
|
const expressJwt = require('express-jwt')
|
||||||
const debug = require('debug')
|
|
||||||
const moment = require('moment-timezone')
|
const moment = require('moment-timezone')
|
||||||
const config = require('config')
|
const config = require('config')
|
||||||
const package = require('../package.json')
|
const pkg = require('../package.json')
|
||||||
|
|
||||||
const jwt = expressJwt({
|
const jwt = expressJwt({
|
||||||
secret: config.secret,
|
secret: config.secret,
|
||||||
@@ -22,17 +23,14 @@ const jwt = expressJwt({
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
initMiddleware (req, res, next) {
|
initMiddleware (req, res, next) {
|
||||||
|
|
||||||
// initialize settings
|
// initialize settings
|
||||||
req.settings = settingsController.settings
|
req.settings = settingsController.settings
|
||||||
req.secretSettings = settingsController.secretSettings
|
req.secretSettings = settingsController.secretSettings
|
||||||
|
|
||||||
// const package = require('../package.json')
|
|
||||||
|
|
||||||
req.settings.baseurl = config.baseurl
|
req.settings.baseurl = config.baseurl
|
||||||
req.settings.title = config.title
|
req.settings.title = config.title
|
||||||
req.settings.description = config.description
|
req.settings.description = config.description
|
||||||
req.settings.version = package.version
|
req.settings.version = pkg.version
|
||||||
|
|
||||||
// set locale and user locale
|
// set locale and user locale
|
||||||
const acceptedLanguages = req.headers['accept-language']
|
const acceptedLanguages = req.headers['accept-language']
|
||||||
@@ -43,9 +41,11 @@ module.exports = {
|
|||||||
moment.locale(req.settings.locale)
|
moment.locale(req.settings.locale)
|
||||||
|
|
||||||
// auth
|
// auth
|
||||||
jwt(req, res, () => {
|
jwt(req, res, async () => {
|
||||||
|
if (!req.user) { return next() }
|
||||||
|
req.user = await User.findOne({
|
||||||
|
where: { id: { [Op.eq]: req.user.id }, is_active: true } })
|
||||||
next()
|
next()
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ const config = require('config')
|
|||||||
const express = require('express')
|
const express = require('express')
|
||||||
const cors = require('cors')
|
const cors = require('cors')
|
||||||
const api = require('./api')
|
const api = require('./api')
|
||||||
|
const cookieParser = require('cookie-parser')
|
||||||
const federation = require('./federation')
|
const federation = require('./federation')
|
||||||
const webfinger = require('./federation/webfinger')
|
const webfinger = require('./federation/webfinger')
|
||||||
const { spamFilter } = require('./federation/helpers')
|
const { spamFilter } = require('./federation/helpers')
|
||||||
@@ -24,6 +25,7 @@ router.use('/favicon.ico', express.static(path.resolve(config.favicon || './asse
|
|||||||
router.use('/media/', express.static(config.upload_path))
|
router.use('/media/', express.static(config.upload_path))
|
||||||
|
|
||||||
// get instance settings
|
// get instance settings
|
||||||
|
router.use(cookieParser())
|
||||||
router.use(helpers.initMiddleware)
|
router.use(helpers.initMiddleware)
|
||||||
|
|
||||||
// rss/ics/atom feed
|
// rss/ics/atom feed
|
||||||
|
|||||||
@@ -149,6 +149,9 @@ export const actions = {
|
|||||||
// this method is called server side only for each request
|
// this method is called server side only for each request
|
||||||
// we use it to get configuration from db, setting locale, etc...
|
// we use it to get configuration from db, setting locale, etc...
|
||||||
nuxtServerInit ({ commit }, { app, store, req }) {
|
nuxtServerInit ({ commit }, { app, store, req }) {
|
||||||
|
if (req.user) {
|
||||||
|
this.$auth.setUser(req.user)
|
||||||
|
}
|
||||||
const settings = req.settings
|
const settings = req.settings
|
||||||
commit('setSettings', settings)
|
commit('setSettings', settings)
|
||||||
// apply settings
|
// apply settings
|
||||||
|
|||||||
Reference in New Issue
Block a user