expressa 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/auth/index.js CHANGED
@@ -1,31 +1,45 @@
1
- const bcrypt = require('bcryptjs')
2
- const handler = require('./jwt')
3
-
4
- exports.createHash = function (password) {
5
- const salt = bcrypt.genSaltSync(10)
6
- return bcrypt.hashSync(password, salt)
7
- }
8
-
9
- exports.isValidPassword = function (password, hashedPassword) {
10
- return bcrypt.compareSync(password, hashedPassword)
11
- }
12
-
13
- exports.doLogin = handler.doLogin
14
-
15
- exports.middleware = async function authMiddleware(req, res, next) {
16
- try {
17
- req.query = req.query || {}
18
- const token = req.query['token'] || req.headers['x-access-token']
19
- delete req.query['token']
20
- delete req.headers['x-access-token']
21
- const user = await handler.isLoggedIn(token, req.getSetting('jwt_secret'))
22
- if (user) {
23
- req.uid = user._id
24
- req.ucollection = user.collection
25
- }
26
- }
27
- catch(e) {
28
- req.uerror = e.message === 'jwt expired' ? 'expired token' : 'jwt error'
29
- }
30
- next()
31
- }
1
+ const bcrypt = require('bcryptjs')
2
+ const handler = require('./jwt')
3
+ const util = require('../util')
4
+
5
+ exports.createHash = function (password) {
6
+ const salt = bcrypt.genSaltSync(10)
7
+ return bcrypt.hashSync(password, salt)
8
+ }
9
+
10
+ exports.isValidPassword = function (password, hashedPassword) {
11
+ return bcrypt.compareSync(password, hashedPassword)
12
+ }
13
+
14
+ exports.doLogin = handler.doLogin
15
+
16
+ exports.middleware = async function authMiddleware(req, res, next) {
17
+ req.query = req.query || {}
18
+ const token = req.query['token'] || req.headers['x-access-token']
19
+ delete req.query['token']
20
+ delete req.headers['x-access-token']
21
+ let payload
22
+ try {
23
+ payload = await handler.isLoggedIn(token, req.getSetting('jwt_secret'))
24
+ }
25
+ catch(e) {
26
+ req.uerror = e.message
27
+ }
28
+ if (payload) {
29
+ let user
30
+ try {
31
+ user = await req.db[payload.collection].get(payload._id)
32
+ } catch (e) {
33
+ req.uerror = 'user no longer exists'
34
+ }
35
+ if (req.getSetting('jwt_expire_on_password_change') && user.meta.password_last_updated_at !== payload.timestamp) {
36
+ req.uerror = 'jwt expired'
37
+ }
38
+ if (!req.uerror) {
39
+ req.uid = payload._id
40
+ req.ucollection = payload.collection
41
+ req.user = user
42
+ }
43
+ }
44
+ next()
45
+ }
package/auth/jwt.js CHANGED
@@ -4,13 +4,14 @@ const util = require('../util')
4
4
 
5
5
  // User document already validated, created, and saved to database
6
6
  // The id of that document is given.
7
- exports.doLogin = function (id, collection, jwt_secret, jwt_options = {}) {
7
+ exports.doLogin = function ({ id, collection, timestamp, jwt_secret, jwt_options = {} }) {
8
8
  if (!jwt_secret) {
9
9
  throw new util.ApiError(500, 'missing jwt_secret')
10
10
  }
11
11
  const token = jwt.sign({
12
12
  _id: id,
13
- collection
13
+ collection,
14
+ timestamp,
14
15
  }, jwt_secret, jwt_options)
15
16
  return {
16
17
  token: token,
@@ -1,43 +1,50 @@
1
- const auth = require('../auth')
2
- const util = require('../util')
3
- const collectionsApi = require('./collections')
4
- const permissions = require('../middleware/permissions')
5
-
6
- exports.login = async (req, collection) => {
7
- const password = req.body.password
8
-
9
- if (typeof req.body.email !== 'string') {
10
- throw new util.ApiError(400, 'email must be a string')
11
- }
12
-
13
- // check if user exists
14
- const result = await req.db[collection].find({
15
- email: req.body.email
16
- })
17
- if (result.length === 0) {
18
- throw new util.ApiError(400, 'No ' + collection + ' found with this email.')
19
- }
20
- const user = result[0]
21
- if (!auth.isValidPassword(password, user.password)) {
22
- throw new util.ApiError(401, 'Incorrect password')
23
- }
24
- const jwt_options = req.settings.jwt_expires_in ? { expiresIn: req.settings.jwt_expires_in } : {}
25
- const payload = auth.doLogin(user._id, collection, req.getSetting('jwt_secret'), jwt_options)
26
- req.uid = user._id
27
- req.ucollection = collection
28
- await permissions.addRolePermissionsAsync(req)
29
- payload.canUseAdmin = req.hasPermission('login to admin')
30
- return payload
31
- }
32
-
33
- exports.register = function (req, collection) {
34
- req.url = `/${collection}`
35
- req.params.collection = collection
36
- return collectionsApi.insert(req)
37
- }
38
-
39
- exports.getMe = function (req, collection) {
40
- req.params.collection = collection
41
- req.params.id = req.uid
42
- return collectionsApi.getById(req)
43
- }
1
+ const auth = require('../auth')
2
+ const util = require('../util')
3
+ const collectionsApi = require('./collections')
4
+ const permissions = require('../middleware/permissions')
5
+
6
+ exports.login = async (req, collection) => {
7
+ const password = req.body.password
8
+
9
+ if (typeof req.body.email !== 'string') {
10
+ throw new util.ApiError(400, 'email must be a string')
11
+ }
12
+
13
+ // check if user exists
14
+ const result = await req.db[collection].find({
15
+ email: req.body.email
16
+ })
17
+ if (result.length === 0) {
18
+ throw new util.ApiError(400, 'No ' + collection + ' found with this email.')
19
+ }
20
+ const user = result[0]
21
+ if (!auth.isValidPassword(password, user.password)) {
22
+ throw new util.ApiError(401, 'Incorrect password')
23
+ }
24
+ const jwt_options = req.settings.jwt_expires_in ? { expiresIn: req.settings.jwt_expires_in } : {}
25
+ const payload = auth.doLogin({
26
+ id: user._id,
27
+ collection,
28
+ timestamp: user.meta.password_last_updated_at,
29
+ jwt_secret: req.getSetting('jwt_secret'),
30
+ jwt_options
31
+ })
32
+ req.uid = user._id
33
+ req.ucollection = collection
34
+ req.user = user
35
+ await permissions.addRolePermissionsAsync(req)
36
+ payload.canUseAdmin = req.hasPermission('login to admin')
37
+ return payload
38
+ }
39
+
40
+ exports.register = function (req, collection) {
41
+ req.url = `/${collection}`
42
+ req.params.collection = collection
43
+ return collectionsApi.insert(req)
44
+ }
45
+
46
+ exports.getMe = function (req, collection) {
47
+ req.params.collection = collection
48
+ req.params.id = req.uid
49
+ return collectionsApi.getById(req)
50
+ }
package/index.js CHANGED
@@ -93,7 +93,8 @@ function ph (requestHandler) {
93
93
  }
94
94
  req.returnedError = err
95
95
  res.status(err.status).send({
96
- error: err.result || err.message || err, tokenError: req.uerror
96
+ error: err.result || err.message || err,
97
+ tokenError: req.uerror ? (req.uerror === 'jwt expired' ? 'expired token' : 'jwt error') : undefined
97
98
  })
98
99
  }
99
100
  }
@@ -1,87 +1,88 @@
1
- const auth = require('./auth')
2
- const util = require('./util.js')
3
- const debug = require('debug')('expressa')
4
-
5
- module.exports = async function(api) {
6
-
7
- const loginCollections = (await util.getLoginCollections(api)).map((coll) => coll._id)
8
-
9
- api.addCollectionListener(['post', 'put'], loginCollections, async function updatePassword(req, collection, data) {
10
- if (req.method === 'PUT') {
11
- const oldData = await api.db[collection].get(data._id)
12
- if (!data.password) {
13
- data.password = oldData.password // preserve password if not explicitly set
14
- }
15
- }
16
- if (data.password && data.password.length !== 60 && data.password[0] !== '$') {
17
- debug('hashing and replacing password in the user document.')
18
- data.password = auth.createHash(data.password)
19
- }
20
- })
21
-
22
- api.addCollectionListener('post', loginCollections, async function roleCreateCheck(req, collection, data) {
23
- if (!data.roles) {
24
- data.roles = []
25
- }
26
- // user special case to allow first user to be admin
27
- if (collection === 'users') {
28
- const hasUsers = (await api.db.users.find({}, 0, 1)).length === 1
29
- if (!hasUsers && !data.roles.includes('Admin')) {
30
- throw new util.ApiError(400, 'first user must have role Admin')
31
- }
32
- if (hasUsers && data.roles.length > 0 && !req.hasPermission('users: modify roles')) {
33
- throw new util.ApiError(400, 'insufficient permissions to create user with roles')
34
- }
35
- }
36
- else {
37
- if (data.roles.length > 0 && !req.hasPermission(`${collection}: modify roles`)) {
38
- throw new util.ApiError(400, `insufficient permissions to create ${collection} with roles`)
39
- }
40
- }
41
- })
42
-
43
- api.addLateCollectionListener('put', loginCollections, async function roleChangeCheck(req, collection, data) {
44
- if (!req.hasPermission(`${collection}: modify roles`)) {
45
- const oldData = await api.db[collection].get(data._id)
46
- data.roles = oldData.roles
47
- }
48
- })
49
-
50
- api.addCollectionListenerWithPriority(['get', 'changed', 'deleted'], loginCollections, 100, function hidePasswordHashes(req, collection, data) {
51
- if (!req.hasPermission(`${collection}: view hashed passwords`)) {
52
- debug(`deleting password because "${collection}: view hashed passwords"-permission is not set`)
53
- delete data.password
54
- }
55
- })
56
-
57
- api.addCollectionListener('post', loginCollections, async function userUniquenessCheck(req, collection, data) {
58
- const result = await api.db[collection].find({email: data.email})
59
- if (result.length > 0) {
60
- throw new util.ApiError(409, 'This email is already registered.')
61
- }
62
- })
63
-
64
- /* Mantain users-roles reference */
65
- api.addCollectionListener('changed', 'role', async function addRoleToUserSchema(req, collection, data) {
66
- for (const coll of loginCollections) {
67
- const doc = await api.db.collection.get(coll)
68
- if (!doc.schema.properties.roles.items.enum.includes(data._id)) {
69
- doc.schema.properties.roles.items.enum.push(data._id)
70
- await api.db.collection.update(coll, doc)
71
- await api.notify('changed', req, coll, doc)
72
- }
73
- }
74
- })
75
-
76
- api.addCollectionListener('deleted', 'role', async function removeRoleToUserSchema(req, collection, data) {
77
- for (const coll of loginCollections) {
78
- const doc = await api.db.collection.get(coll)
79
- const roles = doc.schema.properties.roles.items.enum
80
- if (roles.includes(data._id)) {
81
- roles.splice(roles.indexOf(data._id), 1)
82
- await api.db.collection.update(coll, doc)
83
- await api.notify('changed', req, coll, doc)
84
- }
85
- }
86
- })
87
- }
1
+ const auth = require('./auth')
2
+ const util = require('./util.js')
3
+ const debug = require('debug')('expressa')
4
+
5
+ module.exports = async function(api) {
6
+
7
+ const loginCollections = (await util.getLoginCollections(api)).map((coll) => coll._id)
8
+
9
+ api.addCollectionListener(['post', 'put'], loginCollections, async function updatePassword(req, collection, data) {
10
+ if (req.method === 'PUT') {
11
+ if (!data.password) {
12
+ const oldData = await api.db[collection].get(data._id)
13
+ data.password = oldData.password // preserve password if not explicitly set
14
+ }
15
+ }
16
+ if (data.password && data.password.length !== 60 && data.password[0] !== '$') {
17
+ debug('hashing and replacing password in the user document.')
18
+ data.password = auth.createHash(data.password)
19
+ data.meta.password_last_updated_at = new Date().toISOString()
20
+ }
21
+ })
22
+
23
+ api.addCollectionListener('post', loginCollections, async function roleCreateCheck(req, collection, data) {
24
+ if (!data.roles) {
25
+ data.roles = []
26
+ }
27
+ // user special case to allow first user to be admin
28
+ if (collection === 'users') {
29
+ const hasUsers = (await api.db.users.find({}, 0, 1)).length === 1
30
+ if (!hasUsers && !data.roles.includes('Admin')) {
31
+ throw new util.ApiError(400, 'first user must have role Admin')
32
+ }
33
+ if (hasUsers && data.roles.length > 0 && !req.hasPermission('users: modify roles')) {
34
+ throw new util.ApiError(400, 'insufficient permissions to create user with roles')
35
+ }
36
+ }
37
+ else {
38
+ if (data.roles.length > 0 && !req.hasPermission(`${collection}: modify roles`)) {
39
+ throw new util.ApiError(400, `insufficient permissions to create ${collection} with roles`)
40
+ }
41
+ }
42
+ })
43
+
44
+ api.addLateCollectionListener('put', loginCollections, async function roleChangeCheck(req, collection, data) {
45
+ if (!req.hasPermission(`${collection}: modify roles`)) {
46
+ const oldData = await api.db[collection].get(data._id)
47
+ data.roles = oldData.roles
48
+ }
49
+ })
50
+
51
+ api.addCollectionListenerWithPriority(['get', 'changed', 'deleted'], loginCollections, 100, function hidePasswordHashes(req, collection, data) {
52
+ if (!req.hasPermission(`${collection}: view hashed passwords`)) {
53
+ debug(`deleting password because "${collection}: view hashed passwords"-permission is not set`)
54
+ delete data.password
55
+ }
56
+ })
57
+
58
+ api.addCollectionListener('post', loginCollections, async function userUniquenessCheck(req, collection, data) {
59
+ const result = await api.db[collection].find({email: data.email})
60
+ if (result.length > 0) {
61
+ throw new util.ApiError(409, 'This email is already registered.')
62
+ }
63
+ })
64
+
65
+ /* Mantain users-roles reference */
66
+ api.addCollectionListener('changed', 'role', async function addRoleToUserSchema(req, collection, data) {
67
+ for (const coll of loginCollections) {
68
+ const doc = await api.db.collection.get(coll)
69
+ if (!doc.schema.properties.roles.items.enum.includes(data._id)) {
70
+ doc.schema.properties.roles.items.enum.push(data._id)
71
+ await api.db.collection.update(coll, doc)
72
+ await api.notify('changed', req, coll, doc)
73
+ }
74
+ }
75
+ })
76
+
77
+ api.addCollectionListener('deleted', 'role', async function removeRoleToUserSchema(req, collection, data) {
78
+ for (const coll of loginCollections) {
79
+ const doc = await api.db.collection.get(coll)
80
+ const roles = doc.schema.properties.roles.items.enum
81
+ if (roles.includes(data._id)) {
82
+ roles.splice(roles.indexOf(data._id), 1)
83
+ await api.db.collection.update(coll, doc)
84
+ await api.notify('changed', req, coll, doc)
85
+ }
86
+ }
87
+ })
88
+ }
@@ -35,13 +35,7 @@ module.exports.addRolePermissionsAsync = async function addRolePermissionsMiddle
35
35
  let roles = ['Anonymous']
36
36
  const isAuthenticatedRole = await doesAuthenticatedRoleExist(req)
37
37
  if (req.uid) {
38
- try {
39
- const user = await req.db[req.ucollection].get(req.uid)
40
- req.user = user
41
- roles = (user.roles || []).concat(isAuthenticatedRole ? ['Authenticated'] : [])
42
- } catch (e) {
43
- throw new util.ApiError(404, 'User no longer exists')
44
- }
38
+ roles = (req.user.roles || []).concat(isAuthenticatedRole ? ['Authenticated'] : [])
45
39
  } else {
46
40
  req.user = {}
47
41
  }
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><script crossorigin src=https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react.min.js></script><script crossorigin src=https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react-dom.min.js></script><link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel=stylesheet><script src=settings.js></script><title>Expressa Admin</title><link rel=icon href=/admin/favicon.ico><link href=/admin/static/css/chunk-elementUI.3d004d9f.css rel=stylesheet><link href=/admin/static/css/chunk-libs.327ad89e.css rel=stylesheet><link href=/admin/static/css/app.9dd57eea.css rel=stylesheet></head><body><div id=app></div><script>!function(e){function n(n){for(var r,c,a=n[0],f=n[1],i=n[2],h=0,d=[];h<a.length;h++)c=a[h],Object.prototype.hasOwnProperty.call(u,c)&&u[c]&&d.push(u[c][0]),u[c]=0;for(r in f)Object.prototype.hasOwnProperty.call(f,r)&&(e[r]=f[r]);for(l&&l(n);d.length;)d.shift()();return o.push.apply(o,i||[]),t()}function t(){for(var e,n=0;n<o.length;n++){for(var t=o[n],r=!0,c=1;c<t.length;c++){var f=t[c];0!==u[f]&&(r=!1)}r&&(o.splice(n--,1),e=a(a.s=t[0]))}return e}var r={},c={runtime:0},u={runtime:0},o=[];function a(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var n=[];c[e]?n.push(c[e]):0!==c[e]&&{"chunk-621e":1,"chunk-e374":1,"chunk-3bc2":1,"chunk-5061":1,"chunk-5e50":1,"chunk-7109":1,"chunk-7291":1,"chunk-7f4f":1,"chunk-b423":1,"chunk-bd5f":1,"chunk-f075":1}[e]&&n.push(c[e]=new Promise((function(n,t){for(var r="static/css/"+({}[e]||e)+"."+{"chunk-09d8":"31d6cfe0","chunk-621e":"b826be8d","chunk-e374":"025d58bb","chunk-3bc2":"89632b9d","chunk-5061":"ce0e4bdb","chunk-5e17":"31d6cfe0","chunk-5e50":"f67eeaed","chunk-7109":"2bd6f37e","chunk-7291":"13514e45","chunk-7f4f":"f67eeaed","chunk-b423":"5f239333","chunk-bd5f":"aefa49d7","chunk-e7c3":"31d6cfe0","chunk-f075":"3a895a1e"}[e]+".css",c=a.p+r,u=document.getElementsByTagName("link"),o=0;o<u.length;o++){var f=(h=u[o]).getAttribute("data-href")||h.getAttribute("href");if("stylesheet"===h.rel&&(f===r||f===c))return n()}var i=document.getElementsByTagName("style");for(o=0;o<i.length;o++){var h;if((f=(h=i[o]).getAttribute("data-href"))===r||f===c)return n()}var l=document.createElement("link");l.rel="stylesheet",l.type="text/css",l.onload=n,l.onerror=function(n){var r=n&&n.target&&n.target.src||c,u=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");u.request=r,t(u)},l.href=c,document.getElementsByTagName("head")[0].appendChild(l)})).then((function(){c[e]=0})));var t=u[e];if(0!==t)if(t)n.push(t[2]);else{var r=new Promise((function(n,r){t=u[e]=[n,r]}));n.push(t[2]=r);var o,f=document.createElement("script");f.charset="utf-8",f.timeout=120,a.nc&&f.setAttribute("nonce",a.nc),f.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{"chunk-09d8":"561880e0","chunk-621e":"ccf42393","chunk-e374":"7c87a0dd","chunk-3bc2":"028748b7","chunk-5061":"83e6ccfa","chunk-5e17":"a2b69611","chunk-5e50":"6820e69c","chunk-7109":"10cb4860","chunk-7291":"590524e9","chunk-7f4f":"ae4400a8","chunk-b423":"387c504c","chunk-bd5f":"e9509f10","chunk-e7c3":"e5df8ceb","chunk-f075":"315ceec1"}[e]+".js"}(e);var i=new Error;o=function(n){f.onerror=f.onload=null,clearTimeout(h);var t=u[e];if(0!==t){if(t){var r=n&&("load"===n.type?"missing":n.type),c=n&&n.target&&n.target.src;i.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",i.name="ChunkLoadError",i.type=r,i.request=c,t[1](i)}u[e]=void 0}};var h=setTimeout((function(){o({type:"timeout",target:f})}),12e4);f.onerror=f.onload=o,document.head.appendChild(f)}return Promise.all(n)},a.m=e,a.c=r,a.d=function(e,n,t){a.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,n){if(1&n&&(e=a(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)a.d(t,r,function(n){return e[n]}.bind(null,r));return t},a.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(n,"a",n),n},a.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},a.p="/admin/",a.oe=function(e){throw console.error(e),e};var f=window.webpackJsonp=window.webpackJsonp||[],i=f.push.bind(f);f.push=n,f=f.slice();for(var h=0;h<f.length;h++)n(f[h]);var l=i;t()}([]);</script><script src=/admin/static/js/chunk-elementUI.b0c99c08.js></script><script src=/admin/static/js/chunk-libs.06c38828.js></script><script src=/admin/static/js/app.cdc00d38.js></script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><script crossorigin src=https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react.min.js></script><script crossorigin src=https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react-dom.min.js></script><link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel=stylesheet><script src=settings.js></script><title>Expressa Admin</title><link rel=icon href=/admin/favicon.ico><link href=/admin/static/css/chunk-elementUI.3d004d9f.css rel=stylesheet><link href=/admin/static/css/chunk-libs.327ad89e.css rel=stylesheet><link href=/admin/static/css/app.9dd57eea.css rel=stylesheet></head><body><div id=app></div><script>!function(e){function n(n){for(var r,c,a=n[0],f=n[1],i=n[2],h=0,d=[];h<a.length;h++)c=a[h],Object.prototype.hasOwnProperty.call(u,c)&&u[c]&&d.push(u[c][0]),u[c]=0;for(r in f)Object.prototype.hasOwnProperty.call(f,r)&&(e[r]=f[r]);for(l&&l(n);d.length;)d.shift()();return o.push.apply(o,i||[]),t()}function t(){for(var e,n=0;n<o.length;n++){for(var t=o[n],r=!0,c=1;c<t.length;c++){var f=t[c];0!==u[f]&&(r=!1)}r&&(o.splice(n--,1),e=a(a.s=t[0]))}return e}var r={},c={runtime:0},u={runtime:0},o=[];function a(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var n=[];c[e]?n.push(c[e]):0!==c[e]&&{"chunk-621e":1,"chunk-e374":1,"chunk-5061":1,"chunk-5e50":1,"chunk-7109":1,"chunk-7291":1,"chunk-7f4f":1,"chunk-9a95":1,"chunk-b423":1,"chunk-bd5f":1,"chunk-f075":1}[e]&&n.push(c[e]=new Promise((function(n,t){for(var r="static/css/"+({}[e]||e)+"."+{"chunk-09d8":"31d6cfe0","chunk-621e":"b826be8d","chunk-e374":"025d58bb","chunk-5061":"ce0e4bdb","chunk-5e17":"31d6cfe0","chunk-5e50":"f67eeaed","chunk-7109":"2bd6f37e","chunk-7291":"13514e45","chunk-7f4f":"f67eeaed","chunk-9a95":"c647a2ef","chunk-b423":"5f239333","chunk-bd5f":"aefa49d7","chunk-e7c3":"31d6cfe0","chunk-f075":"3a895a1e"}[e]+".css",c=a.p+r,u=document.getElementsByTagName("link"),o=0;o<u.length;o++){var f=(h=u[o]).getAttribute("data-href")||h.getAttribute("href");if("stylesheet"===h.rel&&(f===r||f===c))return n()}var i=document.getElementsByTagName("style");for(o=0;o<i.length;o++){var h;if((f=(h=i[o]).getAttribute("data-href"))===r||f===c)return n()}var l=document.createElement("link");l.rel="stylesheet",l.type="text/css",l.onload=n,l.onerror=function(n){var r=n&&n.target&&n.target.src||c,u=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");u.request=r,t(u)},l.href=c,document.getElementsByTagName("head")[0].appendChild(l)})).then((function(){c[e]=0})));var t=u[e];if(0!==t)if(t)n.push(t[2]);else{var r=new Promise((function(n,r){t=u[e]=[n,r]}));n.push(t[2]=r);var o,f=document.createElement("script");f.charset="utf-8",f.timeout=120,a.nc&&f.setAttribute("nonce",a.nc),f.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{"chunk-09d8":"561880e0","chunk-621e":"ccf42393","chunk-e374":"7c87a0dd","chunk-5061":"83e6ccfa","chunk-5e17":"a2b69611","chunk-5e50":"6820e69c","chunk-7109":"10cb4860","chunk-7291":"590524e9","chunk-7f4f":"ae4400a8","chunk-9a95":"bdd76583","chunk-b423":"387c504c","chunk-bd5f":"e9509f10","chunk-e7c3":"e5df8ceb","chunk-f075":"315ceec1"}[e]+".js"}(e);var i=new Error;o=function(n){f.onerror=f.onload=null,clearTimeout(h);var t=u[e];if(0!==t){if(t){var r=n&&("load"===n.type?"missing":n.type),c=n&&n.target&&n.target.src;i.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",i.name="ChunkLoadError",i.type=r,i.request=c,t[1](i)}u[e]=void 0}};var h=setTimeout((function(){o({type:"timeout",target:f})}),12e4);f.onerror=f.onload=o,document.head.appendChild(f)}return Promise.all(n)},a.m=e,a.c=r,a.d=function(e,n,t){a.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,n){if(1&n&&(e=a(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)a.d(t,r,function(n){return e[n]}.bind(null,r));return t},a.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(n,"a",n),n},a.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},a.p="/admin/",a.oe=function(e){throw console.error(e),e};var f=window.webpackJsonp=window.webpackJsonp||[],i=f.push.bind(f);f.push=n,f=f.slice();for(var h=0;h<f.length;h++)n(f[h]);var l=i;t()}([]);</script><script src=/admin/static/js/chunk-elementUI.b0c99c08.js></script><script src=/admin/static/js/chunk-libs.06c38828.js></script><script src=/admin/static/js/app.da5e53a7.js></script></body></html>
Binary file
@@ -0,0 +1 @@
1
+ .side-panel[data-v-c8717050]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}
@@ -1 +1 @@
1
- (window.webpackJsonp=window.webpackJsonp||[]).push([["app"],{"+73H":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"SvgIcon",props:{iconClass:{type:String,required:!0},className:{type:String,default:""}},computed:{iconName:function(){return"#icon-"+this.iconClass},svgClass:function(){return this.className?"svg-icon "+this.className:"svg-icon"}}}},"+p7W":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"MenuItem",functional:!0,props:{icon:{type:String,default:""},title:{type:String,default:""}},render:function(e,t){var n=t.props,i=n.icon,a=n.title,r=[];return i&&r.push(e("unicon",{attrs:{name:i,fill:"#DDDDDD"}})),a&&r.push(e("span",{slot:"title"},[a])),r}}},"/8yo":function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"app-wrapper",class:e.classObj},["mobile"===e.device&&e.sidebar.opened?n("div",{staticClass:"drawer-bg",on:{click:e.handleClickOutside}}):e._e(),e._v(" "),n("sidebar",{staticClass:"sidebar-container"}),e._v(" "),n("div",{staticClass:"main-container"},[n("navbar"),e._v(" "),n("app-main")],1)],1)},a=[]},"/KzS":function(e,t,n){"use strict";n.r(t);var i=n("GBEn"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},"1+NH":function(e,t,n){"use strict";n.r(t);var i=n("IZzN"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},"1qtv":function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement,t=this._self._c||e;return t("section",{staticClass:"app-main"},[t("transition",{attrs:{name:"fade-transform",mode:"out-in"}},[t("router-view")],1)],1)},a=[]},"2c2J":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("p46w"),r=(i=a)&&i.__esModule?i:{default:i};var o={state:{sidebar:{opened:!+r.default.get("sidebarStatus"),withoutAnimation:!1},device:"desktop"},mutations:{TOGGLE_SIDEBAR:function(e){e.sidebar.opened?r.default.set("sidebarStatus",1):r.default.set("sidebarStatus",0),e.sidebar.opened=!e.sidebar.opened,e.sidebar.withoutAnimation=!1},CLOSE_SIDEBAR:function(e,t){r.default.set("sidebarStatus",1),e.sidebar.opened=!1,e.sidebar.withoutAnimation=t},TOGGLE_DEVICE:function(e,t){e.device=t}},actions:{ToggleSideBar:function(e){(0,e.commit)("TOGGLE_SIDEBAR")},CloseSideBar:function(e,t){(0,e.commit)("CLOSE_SIDEBAR",t.withoutAnimation)},ToggleDevice:function(e,t){(0,e.commit)("TOGGLE_DEVICE",t)}}};t.default=o},"2c6e":function(e,t,n){"use strict";n.r(t);var i=n("/8yo"),a=n("O+jn");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("TQwg");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"c895cf98",null);u.options.__file="Layout.vue",t.default=u.exports},"3PhE":function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-nested",use:"icon-nested-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-nested"><path d="M.002 9.2c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-5.043-3.58-9.132-7.997-9.132S.002 4.157.002 9.2zM31.997.066h95.981V18.33H31.997V.066zm0 45.669c0 5.044 3.58 9.132 7.998 9.132 4.417 0 7.997-4.088 7.997-9.132 0-3.263-1.524-6.278-3.998-7.91-2.475-1.63-5.524-1.63-7.998 0-2.475 1.632-4 4.647-4 7.91zM63.992 36.6h63.986v18.265H63.992V36.6zm-31.995 82.2c0 5.043 3.58 9.132 7.998 9.132 4.417 0 7.997-4.089 7.997-9.132 0-5.044-3.58-9.133-7.997-9.133s-7.998 4.089-7.998 9.133zm31.995-9.131h63.986v18.265H63.992V109.67zm0-27.404c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-3.263-1.524-6.277-3.998-7.909-2.475-1.631-5.524-1.631-7.998 0-2.475 1.632-4 4.646-4 7.91zm31.995-9.13h31.991V91.4H95.987V73.135z" /></symbol>'});o.a.add(u);t.default=u},"6cqe":function(e,t,n){"use strict";n.r(t);var i=n("kCNp"),a=n("1+NH");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,null,null);u.options.__file="SidebarItem.vue",t.default=u.exports},"6xvN":function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-form",use:"icon-form-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-form"><path d="M84.068 23.784c-1.02 0-1.877-.32-2.572-.96a8.588 8.588 0 0 1-1.738-2.237 11.524 11.524 0 0 1-1.042-2.621c-.232-.895-.348-1.641-.348-2.238V0h.278c.834 0 1.622.085 2.363.256.742.17 1.645.575 2.711 1.214 1.066.64 2.363 1.535 3.892 2.686 1.53 1.15 3.453 2.664 5.77 4.54 2.502 2.045 4.494 3.771 5.977 5.178 1.483 1.406 2.618 2.6 3.406 3.58.787.98 1.274 1.812 1.46 2.494.185.682.277 1.278.277 1.79v2.046H84.068zM127.3 84.01c.278.682.464 1.535.556 2.558.093 1.023-.37 2.003-1.39 2.94-.463.427-.88.832-1.25 1.215-.372.384-.696.704-.974.96a6.69 6.69 0 0 1-.973.767l-11.816-10.741a44.331 44.331 0 0 0 1.877-1.535 31.028 31.028 0 0 1 1.737-1.406c1.112-.938 2.317-1.343 3.615-1.215 1.297.128 2.363.405 3.197.83.927.427 1.923 1.173 2.989 2.239 1.065 1.065 1.876 2.195 2.432 3.388zM78.23 95.902c2.038 0 3.752-.511 5.143-1.534l-26.969 25.83H18.037c-1.761 0-3.684-.47-5.77-1.407a24.549 24.549 0 0 1-5.838-3.709 21.373 21.373 0 0 1-4.518-5.306c-1.204-2.003-1.807-4.07-1.807-6.202V16.495c0-1.79.44-3.665 1.32-5.626A18.41 18.41 0 0 1 5.04 5.562a21.798 21.798 0 0 1 5.213-3.964C12.198.533 14.237 0 16.37 0h53.24v15.984c0 1.62.278 3.367.834 5.242a16.704 16.704 0 0 0 2.572 5.179c1.159 1.577 2.665 2.898 4.518 3.964 1.853 1.066 4.078 1.598 6.673 1.598h20.295v42.325L85.458 92.45c1.02-1.364 1.529-2.856 1.529-4.476 0-2.216-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1c-2.409 0-4.448.789-6.116 2.366-1.668 1.577-2.502 3.474-2.502 5.69 0 2.217.834 4.092 2.502 5.626 1.668 1.535 3.707 2.302 6.117 2.302h52.13zM26.1 47.951c-2.41 0-4.449.789-6.117 2.366-1.668 1.577-2.502 3.473-2.502 5.69 0 2.216.834 4.092 2.502 5.626 1.668 1.534 3.707 2.302 6.117 2.302h52.13c2.409 0 4.47-.768 6.185-2.302 1.715-1.534 2.572-3.41 2.572-5.626 0-2.217-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1zm52.407 64.063l1.807-1.663 3.476-3.196a479.75 479.75 0 0 0 4.587-4.284 500.757 500.757 0 0 1 5.004-4.667c3.985-3.666 8.48-7.758 13.485-12.276l11.677 10.741-13.485 12.404-5.004 4.603-4.587 4.22a179.46 179.46 0 0 0-3.267 3.068c-.88.853-1.367 1.322-1.46 1.407-.463.341-.973.703-1.529 1.087-.556.383-1.112.703-1.668.959-.556.256-1.413.575-2.572.959a83.5 83.5 0 0 1-3.545 1.087 72.2 72.2 0 0 1-3.475.895c-1.112.256-1.946.426-2.502.511-1.112.17-1.854.043-2.224-.383-.371-.426-.464-1.151-.278-2.174.092-.511.278-1.279.556-2.302.278-1.023.602-2.067.973-3.132l1.042-3.005c.325-.938.58-1.577.765-1.918a10.157 10.157 0 0 1 2.224-2.941z" /></symbol>'});o.a.add(u);t.default=u},"7Qib":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("EJiy"),r=(i=a)&&i.__esModule?i:{default:i};function o(e,t){if(0===arguments.length)return null;var n=t||"{y}-{m}-{d} {h}:{i}:{s}",i=void 0;"object"===(void 0===e?"undefined":(0,r.default)(e))?i=e:(10===(""+e).length&&(e=1e3*parseInt(e)),i=new Date(e));var a={y:i.getFullYear(),m:i.getMonth()+1,d:i.getDate(),h:i.getHours(),i:i.getMinutes(),s:i.getSeconds(),a:i.getDay()},o=n.replace(/{(y|m|d|h|i|s|a)+}/g,(function(e,t){var n=a[t];return"a"===t?["日","一","二","三","四","五","六"][n]:(e.length>0&&n<10&&(n="0"+n),n||0)}));return o}t.parseTime=o,t.formatTime=function(e,t){e=1e3*+e;var n=new Date(e),i=(Date.now()-n)/1e3;if(i<30)return"刚刚";if(i<3600)return Math.ceil(i/60)+"分钟前";if(i<86400)return Math.ceil(i/3600)+"小时前";if(i<172800)return"1天前";return t?o(e,t):n.getMonth()+1+"月"+n.getDate()+"日"+n.getHours()+"时"+n.getMinutes()+"分"},t.isExternal=function(e){return/^(https?:|mailto:|tel:)/.test(e)}},D5rb:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("4d7F"),r=(i=a)&&i.__esModule?i:{default:i},o=n("fe1z"),u=n("X4fA"),s=n("XJYT");var c={state:{statusInfo:{collections:[]},token:(0,u.getToken)(),name:"",email:"",avatar:"",roles:[]},mutations:{SET_TOKEN:function(e,t){e.token=t},SET_NAME:function(e,t){e.name=t},SET_EMAIL:function(e,t){e.email=t},SET_STATUS_INFO:function(e,t){e.statusInfo=t},SET_AVATAR:function(e,t){e.avatar=t},SET_ROLES:function(e,t){e.roles=t}},actions:{Login:function(e,t){var n=e.commit,i=t.username.trim();return new r.default((function(e,a){(0,o.login)(i,t.password).then((function(t){var i=t.data;if(!i.canUseAdmin)return s.Message.error("This user is not authorized to use this tool"),void e();(0,u.setToken)(i.token),n("SET_TOKEN",i.token),e()})).catch((function(e){a(e)}))}))},StatusInfo:function(e,t){var n=e.commit;e.state;n("SET_STATUS_INFO",t)},GetInfo:function(e){var t=e.commit,n=e.state;return new r.default((function(e,i){(0,o.getInfo)(n.token).then((function(n){var a=n.data;a.roles?t("SET_ROLES",a.roles):i("getInfo: roles must be a non-null array !"),t("SET_NAME",a.name),t("SET_EMAIL",a.email),t("SET_AVATAR","https://www.podplus.co.uk/wp-content/uploads/2018/09/person-icon.jpg"),e(n)})).catch((function(e){i(e)}))}))},LogOut:function(e){var t=e.commit,n=e.state;return new r.default((function(e,i){(0,o.logout)(n.token).then((function(){t("SET_TOKEN",""),t("SET_ROLES",[]),(0,u.removeToken)(),e()})).catch((function(e){i(e)}))}))},FedLogOut:function(e){var t=e.commit;return new r.default((function(e){t("SET_TOKEN",""),(0,u.removeToken)(),e()}))}}};t.default=c},EIil:function(e,t,n){"use strict";n.r(t);var i=n("FQil"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},F35N:function(e,t,n){"use strict";n.r(t);var i=n("1qtv"),a=n("/KzS");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("IaxC");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"58225820",null);u.options.__file="AppMain.vue",t.default=u.exports},FQil:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=u(n("m1cH")),a=u(n("QbLZ")),r=n("L2JU"),o=u(n("6cqe"));function u(e){return e&&e.__esModule?e:{default:e}}var s=["users","requestlog","role"],c=function(e){return"string"!=typeof e?"":e.charAt(0).toUpperCase()+e.slice(1)};t.default={components:{SidebarItem:o.default},computed:(0,a.default)({},(0,r.mapGetters)(["sidebar","statusInfo"]),{routes:function(){var e=[].concat((0,i.default)(this.$router.options.routes));return e.push({name:"Data",meta:{title:"Schemas",icon:"database"},path:"/edit/collection/",children:this.statusInfo.collections.map((function(e){return{meta:{title:c(e)},path:e}}))}),e.push({name:"Data",meta:{title:"Data",icon:"database"},path:"/list",children:this.statusInfo.collections.filter((function(e){return!s.includes(e)})).map((function(e){return{meta:{title:c(e)},path:e}}))}),e},isCollapse:function(){return!this.sidebar.opened}})}},GBEn:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=u(n("14Xm")),a=u(n("D3Ub")),r=u(n("Q2AE")),o=u(n("t3Un"));function u(e){return e&&e.__esModule?e:{default:e}}t.default={name:"AppMain",computed:{},created:function(){this.update()},methods:{update:function(){var e=this;return(0,a.default)(i.default.mark((function t(){return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,(0,o.default)({url:"/status/"});case 2:e.statusInfo=t.sent.data,r.default.dispatch("StatusInfo",e.statusInfo);case 4:case"end":return t.stop()}}),t,e)})))()}}}},GPBF:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-link",use:"icon-link-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-link"><g><path d="M115.625 127.937H.063V12.375h57.781v12.374H12.438v90.813h90.813V70.156h12.374z" /><path d="M116.426 2.821l8.753 8.753-56.734 56.734-8.753-8.745z" /><path d="M127.893 37.982h-12.375V12.375H88.706V0h39.187z" /></g></symbol>'});o.a.add(u);t.default=u},HmsV:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement;return(this._self._c||e)("component",this._b({},"component",this.linkProps(this.to),!1),[this._t("default")],2)},a=[]},I77X:function(e,t,n){"use strict";n.r(t);var i=n("Xl2i"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},IKxP:function(e,t,n){},IZzN:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=s(n("QbLZ")),a=s(n("33yf")),r=n("7Qib"),o=s(n("ssOZ")),u=s(n("bITd"));function s(e){return e&&e.__esModule?e:{default:e}}t.default={name:"SidebarItem",components:{Item:o.default,AppLink:u.default},props:{item:{type:Object,required:!0},isNest:{type:Boolean,default:!1},basePath:{type:String,default:""}},data:function(){return{onlyOneChild:null}},methods:{filterOutHidden:function(e){return e.filter((function(e){return!e.hidden}))},hasOneShowingChild:function(e,t){var n=this,a=e.filter((function(e){return!e.hidden&&(n.onlyOneChild=e,!0)}));return 1===a.length||0===a.length&&(this.onlyOneChild=(0,i.default)({},t,{path:"",noShowingChildren:!0}),!0)},resolvePath:function(e){return this.isExternalLink(e)?e:a.default.resolve(this.basePath,e)},isExternalLink:function(e){return(0,r.isExternal)(e)}}}},IaxC:function(e,t,n){"use strict";var i=n("WkwU");n.n(i).a},Ij2q:function(e,t,n){"use strict";var i=c(n("oYx3")),a=c(n("Q2AE")),r=c(n("Mj6V"));n("pdi6");var o=n("XJYT"),u=n("X4fA"),s=c(n("t3Un"));function c(e){return e&&e.__esModule?e:{default:e}}var l=["/login","/install"];i.default.beforeEach((function(e,t,n){r.default.start(),(0,u.getToken)()?"/login"===e.path?(n({path:"/"}),r.default.done()):0===a.default.getters.roles.length?a.default.dispatch("GetInfo").then((function(e){n()})).catch((function(e){a.default.dispatch("FedLogOut").then((function(){o.Message.error(e||"Verification failed, please login again"),n({path:"/"})}))})):n():(0,s.default)({url:"/status"}).then((function(t){t.data.installed||"/install"===e.path?-1!==l.indexOf(e.path)?n():(n("/login?redirect="+e.path),r.default.done()):(n("/install"),r.default.done())}))})),i.default.afterEach((function(){r.default.done()}))},KVr3:function(e,t,n){"use strict";n.r(t);var i=n("vaBn"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},Kj24:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-password",use:"icon-password-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-password"><path d="M108.8 44.322H89.6v-5.36c0-9.04-3.308-24.163-25.6-24.163-23.145 0-25.6 16.881-25.6 24.162v5.361H19.2v-5.36C19.2 15.281 36.798 0 64 0c27.202 0 44.8 15.281 44.8 38.961v5.361zm-32 39.356c0-5.44-5.763-9.832-12.8-9.832-7.037 0-12.8 4.392-12.8 9.832 0 3.682 2.567 6.808 6.407 8.477v11.205c0 2.718 2.875 4.962 6.4 4.962 3.524 0 6.4-2.244 6.4-4.962V92.155c3.833-1.669 6.393-4.795 6.393-8.477zM128 64v49.201c0 8.158-8.645 14.799-19.2 14.799H19.2C8.651 128 0 121.359 0 113.201V64c0-8.153 8.645-14.799 19.2-14.799h89.6c10.555 0 19.2 6.646 19.2 14.799z" /></symbol>'});o.a.add(u);t.default=u},MMMJ:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-example",use:"icon-example-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-example"><path d="M96.258 57.462h31.421C124.794 27.323 100.426 2.956 70.287.07v31.422a32.856 32.856 0 0 1 25.971 25.97zm-38.796-25.97V.07C27.323 2.956 2.956 27.323.07 57.462h31.422a32.856 32.856 0 0 1 25.97-25.97zm12.825 64.766v31.421c30.46-2.885 54.507-27.253 57.713-57.712H96.579c-2.886 13.466-13.146 23.726-26.292 26.291zM31.492 70.287H.07c2.886 30.46 27.253 54.507 57.713 57.713V96.579c-13.466-2.886-23.726-13.146-26.291-26.292z" /></symbol>'});o.a.add(u);t.default=u},MMau:function(e,t,n){"use strict";n.r(t);var i=n("VBxQ"),a=n("EIil");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,null,null);u.options.__file="index.vue",t.default=u.exports},MOri:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement,t=this._self._c||e;return t("svg",{class:this.svgClass,attrs:{"aria-hidden":"true"}},[t("use",{attrs:{"xlink:href":this.iconName}})])},a=[]},NnNH:function(e,t,n){"use strict";var i=n("i2cb");n.n(i).a},"O+jn":function(e,t,n){"use strict";n.r(t);var i=n("s1bt"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},OHj3:function(e,t,n){"use strict";var i=n("ja/U");n.n(i).a},OOIL:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n("oQr/");Object.defineProperty(t,"Navbar",{enumerable:!0,get:function(){return o(i).default}});var a=n("MMau");Object.defineProperty(t,"Sidebar",{enumerable:!0,get:function(){return o(a).default}});var r=n("F35N");function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"AppMain",{enumerable:!0,get:function(){return o(r).default}})},Pf3K:function(e,t,n){"use strict";n.r(t);var i=n("rgsC"),a=n("I77X");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,null,null);u.options.__file="App.vue",t.default=u.exports},Q2AE:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=s(n("Kw5r")),a=s(n("L2JU")),r=s(n("2c2J")),o=s(n("D5rb")),u=s(n("lNWa"));function s(e){return e&&e.__esModule?e:{default:e}}i.default.use(a.default);var c=new a.default.Store({modules:{app:r.default,user:o.default},getters:u.default});t.default=c},"R/Hx":function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-table",use:"icon-table-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-table"><g><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z" /><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z" /></g></symbol>'});o.a.add(u);t.default=u},Ssdo:function(e,t,n){},TLko:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n("7Qib");t.default={props:{to:{type:String,required:!0}},methods:{isExternalLink:function(e){return(0,i.isExternal)(e)},linkProps:function(e){return this.isExternalLink(e)?{is:"a",href:e,target:"_blank",rel:"noopener"}:{is:"router-link",to:e}}}}},TQwg:function(e,t,n){"use strict";var i=n("eqNk");n.n(i).a},TfVu:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-eye",use:"icon-eye-usage",viewBox:"0 0 128 64",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 64" id="icon-eye"><path d="M127.072 7.994c1.37-2.208.914-5.152-.914-6.87-2.056-1.717-4.797-1.226-6.396.982-.229.245-25.586 32.382-55.74 32.382-29.24 0-55.74-32.382-55.968-32.627-1.6-1.963-4.57-2.208-6.397-.49C-.17 3.086-.399 6.275 1.2 8.238c.457.736 5.94 7.36 14.62 14.72L4.17 35.96c-1.828 1.963-1.6 5.152.228 6.87.457.98 1.6 1.471 2.742 1.471s2.284-.49 3.198-1.472l12.564-13.983c5.94 4.416 13.021 8.587 20.788 11.53l-4.797 17.418c-.685 2.699.686 5.397 3.198 6.133h1.37c2.057 0 3.884-1.472 4.341-3.68L52.6 42.83c3.655.736 7.538 1.227 11.422 1.227 3.883 0 7.767-.49 11.422-1.227l4.797 17.173c.457 2.208 2.513 3.68 4.34 3.68.457 0 .914 0 1.143-.246 2.513-.736 3.883-3.434 3.198-6.133l-4.797-17.172c7.767-2.944 14.848-7.114 20.788-11.53l12.336 13.738c.913.981 2.056 1.472 3.198 1.472s2.284-.49 3.198-1.472c1.828-1.963 1.828-4.906.228-6.87l-11.65-13.001c9.366-7.36 14.849-14.474 14.849-14.474z" /></symbol>'});o.a.add(u);t.default=u},Tx5V:function(e,t,n){"use strict";n.r(t);var i=n("mIrJ"),a=n("e6x5");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("gXxq");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"18b41ae9",null);u.options.__file="index.vue",t.default=u.exports},"Uf/o":function(e,t,n){var i={"./example.svg":"MMMJ","./eye.svg":"TfVu","./form.svg":"6xvN","./link.svg":"GPBF","./nested.svg":"3PhE","./password.svg":"Kj24","./table.svg":"R/Hx","./tree.svg":"k80C","./user.svg":"s7Vf"};function a(e){var t=r(e);return n(t)}function r(e){if(!n.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}a.keys=function(){return Object.keys(i)},a.resolve=r,e.exports=a,a.id="Uf/o"},"V+js":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"Hamburger",props:{isActive:{type:Boolean,default:!1},toggleClick:{type:Function,default:null}}}},VBxQ:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement,t=this._self._c||e;return t("el-scrollbar",{attrs:{"wrap-class":"scrollbar-wrapper"}},[t("el-menu",{attrs:{"show-timeout":200,"default-active":this.$route.path,collapse:this.isCollapse,"unique-opened":!0,mode:"vertical","background-color":"#304156","text-color":"#bfcbd9","active-text-color":"#409EFF"}},this._l(this.routes,(function(e){return t("sidebar-item",{key:e.path,attrs:{item:e,"base-path":e.path}})})))],1)},a=[]},VSRc:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-breadcrumb",{staticClass:"app-breadcrumb",attrs:{separator:"/"}},[n("transition-group",{attrs:{name:"breadcrumb"}},e._l(e.filteredLevelList,(function(t,i){return n("el-breadcrumb-item",{key:t.path},["noredirect"===t.redirect||i==e.levelList.length-1?n("span",{staticClass:"no-redirect"},[e._v(e._s(t.meta.title))]):n("a",{on:{click:function(n){n.preventDefault(),e.handleLink(t)}}},[e._v(e._s(t.meta.title))])])})))],1)},a=[]},Vtdi:function(e,t,n){"use strict";var i=f(n("Kw5r"));n("9d8Q");var a=f(n("XJYT"));n("D66Q");var r=f(n("stYL"));n("sg+I");var o=f(n("Pf3K")),u=f(n("oYx3")),s=f(n("Q2AE"));n("SYky"),n("q4sD"),n("L4hS"),n("1I2w"),n("mF2h"),n("Ij2q");var c=n("uK5S"),l=f(n("y4GO")),d=n("0yek");function f(e){return e&&e.__esModule?e:{default:e}}l.default.add([d.uniDatabase,d.uniHome,d.uniUsersAlt,d.uniShieldCheck,d.uniBookOpen,d.uniDiary,d.uniFlask,d.uniCog,d.uniPlus,d.uniLink]),i.default.use(l.default),i.default.use(a.default,{locale:r.default}),i.default.use(c.VuePlugin),i.default.config.productionTip=!1,new i.default({el:"#app",router:u.default,store:s.default,render:function(e){return e(o.default)}})},WkwU:function(e,t,n){},X4fA:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getToken=function(){return r.default.get("Admin-Token")},t.setToken=function(e){return r.default.set("Admin-Token",e)},t.removeToken=function(){return r.default.remove("Admin-Token")};var i,a=n("p46w"),r=(i=a)&&i.__esModule?i:{default:i}},Xl2i:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"App"}},Y1Bl:function(e,t,n){"use strict";n.r(t);var i=n("VSRc"),a=n("KVr3");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("zFxt");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"721dc8c4",null);u.options.__file="index.vue",t.default=u.exports},Z3ev:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("Q2AE"),r=(i=a)&&i.__esModule?i:{default:i};var o=document.body;t.default={watch:{$route:function(e){"mobile"===this.device&&this.sidebar.opened&&r.default.dispatch("CloseSideBar",{withoutAnimation:!1})}},beforeMount:function(){window.addEventListener("resize",this.resizeHandler)},mounted:function(){this.isMobile()&&(r.default.dispatch("ToggleDevice","mobile"),r.default.dispatch("CloseSideBar",{withoutAnimation:!0}))},methods:{isMobile:function(){return o.getBoundingClientRect().width-3<1024},resizeHandler:function(){if(!document.hidden){var e=this.isMobile();r.default.dispatch("ToggleDevice",e?"mobile":"desktop"),e&&r.default.dispatch("CloseSideBar",{withoutAnimation:!0})}}}}},bITd:function(e,t,n){"use strict";n.r(t);var i=n("HmsV"),a=n("s7+5");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,null,null);u.options.__file="Link.vue",t.default=u.exports},e6x5:function(e,t,n){"use strict";n.r(t);var i=n("V+js"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},eqNk:function(e,t,n){},fe1z:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logout=void 0;var i,a=u(n("14Xm")),r=u(n("D3Ub"));t.logout=(i=(0,r.default)(a.default.mark((function e(){return a.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)});t.login=function(e,t){return(0,o.default)({url:"/users/login",method:"post",data:{email:e,password:t}})},t.getInfo=function(e){return(0,o.default)({url:"/users/me",method:"get"})};var o=u(n("t3Un"));function u(e){return e&&e.__esModule?e:{default:e}}},gXxq:function(e,t,n){"use strict";var i=n("IKxP");n.n(i).a},gaGZ:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=u(n("QbLZ")),a=n("L2JU"),r=u(n("Y1Bl")),o=u(n("Tx5V"));function u(e){return e&&e.__esModule?e:{default:e}}t.default={components:{Breadcrumb:r.default,Hamburger:o.default},computed:(0,i.default)({},(0,a.mapGetters)(["sidebar","avatar"])),methods:{toggleSideBar:function(){this.$store.dispatch("ToggleSideBar")},logout:function(){this.$store.dispatch("LogOut").then((function(){location.reload()}))}}}},i2cb:function(e,t,n){},"jF/l":function(e,t,n){"use strict";n.r(t);var i=n("+73H"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},"ja/U":function(e,t,n){},k80C:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-tree",use:"icon-tree-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-tree"><path d="M126.713 90.023c.858.985 1.287 2.134 1.287 3.447v29.553c0 1.423-.429 2.6-1.287 3.53-.858.93-1.907 1.395-3.146 1.395H97.824c-1.145 0-2.146-.465-3.004-1.395-.858-.93-1.287-2.107-1.287-3.53V93.47c0-.875.19-1.696.572-2.462.382-.766.906-1.368 1.573-1.806a3.84 3.84 0 0 1 2.146-.657h9.725V69.007a3.84 3.84 0 0 0-.43-1.806 3.569 3.569 0 0 0-1.143-1.313 2.714 2.714 0 0 0-1.573-.492h-36.47v23.149h9.725c1.144 0 2.145.492 3.004 1.478.858.985 1.287 2.134 1.287 3.447v29.553c0 .876-.191 1.696-.573 2.463-.38.766-.905 1.368-1.573 1.806a3.84 3.84 0 0 1-2.145.656H51.915a3.84 3.84 0 0 1-2.145-.656c-.668-.438-1.216-1.04-1.645-1.806a4.96 4.96 0 0 1-.644-2.463V93.47c0-1.313.43-2.462 1.288-3.447.858-.986 1.907-1.478 3.146-1.478h9.582v-23.15h-37.9c-.953 0-1.74.356-2.359 1.068-.62.711-.93 1.56-.93 2.544v19.538h9.726c1.239 0 2.264.492 3.074 1.478.81.985 1.216 2.134 1.216 3.447v29.553c0 1.423-.405 2.6-1.216 3.53-.81.93-1.835 1.395-3.074 1.395H4.29c-.476 0-.93-.082-1.358-.246a4.1 4.1 0 0 1-1.144-.657 4.658 4.658 0 0 1-.93-1.067 5.186 5.186 0 0 1-.643-1.395 5.566 5.566 0 0 1-.215-1.56V93.47c0-.437.048-.875.143-1.313a3.95 3.95 0 0 1 .429-1.15c.19-.328.429-.656.715-.984.286-.329.572-.602.858-.821.286-.22.62-.383 1.001-.493.382-.11.763-.164 1.144-.164h9.726V61.619c0-.985.31-1.833.93-2.544.619-.712 1.358-1.068 2.216-1.068h44.335V39.62h-9.582c-1.24 0-2.288-.492-3.146-1.477a5.09 5.09 0 0 1-1.287-3.448V5.14c0-1.423.429-2.627 1.287-3.612.858-.985 1.907-1.477 3.146-1.477h25.743c.763 0 1.478.246 2.145.739a5.17 5.17 0 0 1 1.573 1.888c.382.766.573 1.587.573 2.462v29.553c0 1.313-.43 2.463-1.287 3.448-.859.985-1.86 1.477-3.004 1.477h-9.725v18.389h42.762c.954 0 1.74.355 2.36 1.067.62.711.93 1.56.93 2.545v26.925h9.582c1.239 0 2.288.492 3.146 1.478z" /></symbol>'});o.a.add(u);t.default=u},kCNp:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return!e.item.hidden&&e.item.children?n("div",{staticClass:"menu-wrapper"},[!e.hasOneShowingChild(e.item.children,e.item)||e.onlyOneChild.children&&!e.onlyOneChild.noShowingChildren||e.item.alwaysShow?n("el-submenu",{attrs:{index:e.resolvePath(e.item.path)}},[n("template",{slot:"title"},[e.item.meta?n("item",{attrs:{icon:e.item.meta.icon,title:e.item.meta.title}}):e._e()],1),e._v(" "),e._l(e.filterOutHidden(e.item.children),(function(t){return[t.children&&t.children.length>0?n("sidebar-item",{key:t.path,staticClass:"nest-menu",attrs:{"is-nest":!0,item:t,"base-path":e.resolvePath(t.path)}}):n("app-link",{key:t.name,attrs:{to:e.resolvePath(t.path)}},[n("el-menu-item",{attrs:{index:e.resolvePath(t.path)}},[t.meta?n("item",{attrs:{icon:t.meta.icon,title:t.meta.title}}):e._e()],1)],1)]}))],2):[n("app-link",{attrs:{to:e.resolvePath(e.onlyOneChild.path)}},[n("el-menu-item",{class:{"submenu-title-noDropdown":!e.isNest},attrs:{index:e.resolvePath(e.onlyOneChild.path)}},[e.onlyOneChild.meta?n("item",{attrs:{icon:e.onlyOneChild.meta.icon||e.item.meta.icon,title:e.onlyOneChild.meta.title}}):e._e()],1)],1)]],2):e._e()},a=[]},lNWa:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={sidebar:function(e){return e.app.sidebar},device:function(e){return e.app.device},token:function(e){return e.user.token},avatar:function(e){return e.user.avatar},name:function(e){return e.user.name},email:function(e){return e.user.email},roles:function(e){return e.user.roles},statusInfo:function(e){return e.user.statusInfo}}},mF2h:function(e,t,n){"use strict";var i=r(n("Kw5r")),a=r(n("wAo7"));function r(e){return e&&e.__esModule?e:{default:e}}i.default.component("svg-icon",a.default);var o,u=n("Uf/o");(o=u).keys().map(o)},mIrJ:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement,t=this._self._c||e;return t("div",[t("svg",{staticClass:"hamburger",class:{"is-active":this.isActive},attrs:{t:"1492500959545",viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg","p-id":"1691","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"64",height:"64"},on:{click:this.toggleClick}},[t("path",{attrs:{d:"M966.8023 568.849776 57.196677 568.849776c-31.397081 0-56.850799-25.452695-56.850799-56.850799l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 543.397081 998.200404 568.849776 966.8023 568.849776z","p-id":"1692"}}),this._v(" "),t("path",{attrs:{d:"M966.8023 881.527125 57.196677 881.527125c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 856.07443 998.200404 881.527125 966.8023 881.527125z","p-id":"1693"}}),this._v(" "),t("path",{attrs:{d:"M966.8023 256.17345 57.196677 256.17345c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.850799 56.850799-56.850799l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.850799l0 0C1023.653099 230.720755 998.200404 256.17345 966.8023 256.17345z","p-id":"1694"}})])])},a=[]},"oQr/":function(e,t,n){"use strict";n.r(t);var i=n("zASd"),a=n("pviM");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("NnNH");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"24a9ff24",null);u.options.__file="Navbar.vue",t.default=u.exports},oYx3:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.constantRouterMap=void 0;var i=o(n("Kw5r")),a=o(n("jE9Z")),r=o(n("2c6e"));function o(e){return e&&e.__esModule?e:{default:e}}i.default.use(a.default);var u=function(e){return"string"!=typeof e?"":e.charAt(0).toUpperCase()+e.slice(1)},s=t.constantRouterMap=[{path:"/login",component:function(){return n.e("chunk-5061").then(n.bind(null,"ntYl"))},hidden:!0},{path:"/install",component:function(){return Promise.all([n.e("chunk-09d8"),n.e("chunk-621e")]).then(n.bind(null,"l2Fg"))},hidden:!0},{path:"/404",component:function(){return n.e("chunk-bd5f").then(n.bind(null,"jNvO"))},hidden:!0},{path:"/",component:r.default,redirect:"/home",name:"Home",meta:{title:"Home",icon:"home"},children:[{path:"home",meta:{title:"Home",icon:"home"},component:function(){return n.e("chunk-7109").then(n.bind(null,"u1G+"))}},{path:"/edit/:collectionName/:id",component:function(){return Promise.all([n.e("chunk-09d8"),n.e("chunk-e374")]).then(n.bind(null,"ZoMo"))},hidden:!0}]},{path:"/users",redirect:"/users/list",component:r.default,name:"Users",meta:{title:"People",icon:"users-alt"},children:[{path:"list",meta:{title:"Users",icon:"users-alt"},name:"users2",component:function(){return n.e("chunk-7f4f").then(n.bind(null,"VqTb"))},props:{collectionName:"users"}},{path:"add",meta:{title:"Add User",icon:"plus"},name:"newuser",component:function(){return Promise.all([n.e("chunk-09d8"),n.e("chunk-e374")]).then(n.bind(null,"ZoMo"))},props:{collectionName:"users",id:"create"}},{path:"role",meta:{title:"Roles",icon:"shield-check"},name:"role",component:function(){return n.e("chunk-7f4f").then(n.bind(null,"VqTb"))},props:{collectionName:"role"}},{path:"addrole",meta:{title:"Add Role",icon:"plus"},name:"newrole",component:function(){return Promise.all([n.e("chunk-09d8"),n.e("chunk-e374")]).then(n.bind(null,"ZoMo"))},props:{collectionName:"role",id:"create"}}]},{path:"/list/:collectionName",component:r.default,hidden:!0,name:"Data",meta:{title:"Data",icon:"database"},children:[{path:"",name:":collectionName",component:function(){return n.e("chunk-7f4f").then(n.bind(null,"VqTb"))},props:function(e){return{collectionName:e.params.collectionName}},meta:{title:u(name)}}]},{path:"/manage/permissions",component:r.default,name:"permissions",meta:{title:"Manage",icon:"shield-check"},children:[{path:"",name:"permissions",component:function(){return n.e("chunk-f075").then(n.bind(null,"c6Js"))},meta:{title:"Permissions"}}]},{path:"/endpoints",component:r.default,name:"endpoints",meta:{title:"Search",icon:"link"},children:[{path:"",name:"endpoints",component:function(){return Promise.all([n.e("chunk-5e17"),n.e("chunk-5e50")]).then(n.bind(null,"jbWL"))},meta:{title:"Endpoints"}}]},{path:"/dev",component:r.default,meta:{title:"Dev",icon:"flask"},name:"Dev",children:[{path:"",name:"",component:function(){return n.e("chunk-b423").then(n.bind(null,"RAkD"))},meta:{title:""},hidden:!0},{path:"listeners",name:"listeners",component:function(){return n.e("chunk-7291").then(n.bind(null,"5nIF"))},meta:{title:"Listeners"}},{path:"middleware",name:"middleware",component:function(){return n.e("chunk-e7c3").then(n.bind(null,"uezr"))},meta:{title:"Middleware"}},{path:"requestlogs",meta:{title:"Request Logs",icon:"diary"},name:"requestlogs",component:function(){return n.e("chunk-7f4f").then(n.bind(null,"VqTb"))},props:{collectionName:"requestlog",columns:["method","url","req.ip","user","res.message","res.statusCode","res.headers.content-length"]}},{path:"viewrequest/:requestId",hidden:!0,meta:{title:"View Request",icon:"diary"},name:"viewrequest",component:function(){return n.e("chunk-3bc2").then(n.bind(null,"o4XF"))}},{path:"/edit/collection",component:r.default,name:"Schema",hidden:!0,meta:{title:"Schemas",icon:"cog"},children:[{hidden:!0,path:"/:collectionName",name:name,meta:{title:u(name)}}]}]},{path:"external-link",component:r.default,children:[{path:"https://github.com/thomas4019/expressa",meta:{title:"Expressa Docs",icon:"link"}}]},{path:"*",redirect:"/404",hidden:!0}];t.default=new a.default({scrollBehavior:function(){return{y:0}},routes:s})},pviM:function(e,t,n){"use strict";n.r(t);var i=n("gaGZ"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},rgsC:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement,t=this._self._c||e;return t("div",{attrs:{id:"app"}},[t("router-view")],1)},a=[]},s1bt:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("OOIL"),r=n("Z3ev"),o=(i=r)&&i.__esModule?i:{default:i};t.default={name:"Layout",components:{Navbar:a.Navbar,Sidebar:a.Sidebar,AppMain:a.AppMain},mixins:[o.default],computed:{sidebar:function(){return this.$store.state.app.sidebar},device:function(){return this.$store.state.app.device},classObj:function(){return{hideSidebar:!this.sidebar.opened,openSidebar:this.sidebar.opened,withoutAnimation:this.sidebar.withoutAnimation,mobile:"mobile"===this.device}}},methods:{handleClickOutside:function(){this.$store.dispatch("CloseSideBar",{withoutAnimation:!1})}}}},"s7+5":function(e,t,n){"use strict";n.r(t);var i=n("TLko"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},s7Vf:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-user",use:"icon-user-usage",viewBox:"0 0 130 130",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 130 130" id="icon-user"><path d="M63.444 64.996c20.633 0 37.359-14.308 37.359-31.953 0-17.649-16.726-31.952-37.359-31.952-20.631 0-37.36 14.303-37.358 31.952 0 17.645 16.727 31.953 37.359 31.953zM80.57 75.65H49.434c-26.652 0-48.26 18.477-48.26 41.27v2.664c0 9.316 21.608 9.325 48.26 9.325H80.57c26.649 0 48.256-.344 48.256-9.325v-2.663c0-22.794-21.605-41.271-48.256-41.271z" stroke="#979797" /></symbol>'});o.a.add(u);t.default=u},"sg+I":function(e,t,n){},ssOZ:function(e,t,n){"use strict";n.r(t);var i=n("xr5J");for(var a in i)["default"].indexOf(a)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(a);var r=n("KHd+"),o=Object(r.a)(i.default,void 0,void 0,!1,null,null,null);o.options.__file="Item.vue",t.default=o.exports},t3Un:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=s(n("4d7F")),a=s(n("vDqi")),r=n("XJYT"),o=s(n("Q2AE")),u=n("X4fA");function s(e){return e&&e.__esModule?e:{default:e}}var c=a.default.create({baseURL:"undefined"!=typeof settings?settings.apiurl:"/api",timeout:5e3});c.interceptors.request.use((function(e){return o.default.getters.token&&(e.headers["x-access-token"]=(0,u.getToken)()),e}),(function(e){console.log(e),i.default.reject(e)})),c.interceptors.response.use((function(e){return e}),(function(e){console.log(e);var t=["response","data","error"].reduce((function(e,t){return e&&e[t]?e[t]:null}),e)||e.message;return(0,r.Message)({message:t,type:"error",duration:0,showClose:!0}),i.default.reject(e)})),t.default=c},vaBn:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("vRGJ"),r=(i=a)&&i.__esModule?i:{default:i};t.default={data:function(){return{levelList:null}},computed:{filteredLevelList:function(){return this.levelList.filter((function(e){return e.meta.title}))}},watch:{$route:function(){this.getBreadcrumb()}},created:function(){this.getBreadcrumb()},methods:{getBreadcrumb:function(){var e=this.$route.matched.filter((function(e){if(e.name)return!0})),t=e[0];t&&"home"!==t.name&&(e=[{path:"/home",meta:{title:"Home"}}].concat(e)),this.levelList=e},pathCompile:function(e){var t=this.$route.params;return r.default.compile(e)(t)},handleLink:function(e){var t=e.redirect,n=e.path;console.log("handleLink"),console.log(t),console.log(n),t?this.$router.push(t):this.$router.push(this.pathCompile(n))}}}},wAo7:function(e,t,n){"use strict";n.r(t);var i=n("MOri"),a=n("jF/l");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("OHj3");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"75db6a7e",null);u.options.__file="index.vue",t.default=u.exports},xr5J:function(e,t,n){"use strict";n.r(t);var i=n("+p7W"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},zASd:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-menu",{staticClass:"navbar2",attrs:{mode:"horizontal"}},[n("hamburger",{staticClass:"hamburger-container",attrs:{"toggle-click":e.toggleSideBar,"is-active":e.sidebar.opened}}),e._v(" "),n("breadcrumb"),e._v(" "),n("el-dropdown",{staticClass:"avatar-container",attrs:{trigger:"click"}},[n("div",{staticClass:"avatar-wrapper"},[n("i",{staticClass:"material-icons",staticStyle:{"font-size":"40px"}},[e._v("\n person\n ")]),e._v(" "),n("i",{staticClass:"el-icon-caret-bottom"})]),e._v(" "),n("el-dropdown-menu",{staticClass:"user-dropdown",attrs:{slot:"dropdown"},slot:"dropdown"},[n("router-link",{staticClass:"inlineBlock",attrs:{to:"/"}},[n("el-dropdown-item",[e._v("\n Home\n ")])],1),e._v(" "),n("el-dropdown-item",{attrs:{divided:""}},[n("span",{staticStyle:{display:"block"},on:{click:e.logout}},[e._v("LogOut")])])],1)],1)],1)},a=[]},zFxt:function(e,t,n){"use strict";var i=n("Ssdo");n.n(i).a}},[["Vtdi","runtime","chunk-elementUI","chunk-libs"]]]);
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([["app"],{"+73H":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"SvgIcon",props:{iconClass:{type:String,required:!0},className:{type:String,default:""}},computed:{iconName:function(){return"#icon-"+this.iconClass},svgClass:function(){return this.className?"svg-icon "+this.className:"svg-icon"}}}},"+p7W":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"MenuItem",functional:!0,props:{icon:{type:String,default:""},title:{type:String,default:""}},render:function(e,t){var n=t.props,i=n.icon,a=n.title,r=[];return i&&r.push(e("unicon",{attrs:{name:i,fill:"#DDDDDD"}})),a&&r.push(e("span",{slot:"title"},[a])),r}}},"/8yo":function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"app-wrapper",class:e.classObj},["mobile"===e.device&&e.sidebar.opened?n("div",{staticClass:"drawer-bg",on:{click:e.handleClickOutside}}):e._e(),e._v(" "),n("sidebar",{staticClass:"sidebar-container"}),e._v(" "),n("div",{staticClass:"main-container"},[n("navbar"),e._v(" "),n("app-main")],1)],1)},a=[]},"/KzS":function(e,t,n){"use strict";n.r(t);var i=n("GBEn"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},"1+NH":function(e,t,n){"use strict";n.r(t);var i=n("IZzN"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},"1qtv":function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement,t=this._self._c||e;return t("section",{staticClass:"app-main"},[t("transition",{attrs:{name:"fade-transform",mode:"out-in"}},[t("router-view")],1)],1)},a=[]},"2c2J":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("p46w"),r=(i=a)&&i.__esModule?i:{default:i};var o={state:{sidebar:{opened:!+r.default.get("sidebarStatus"),withoutAnimation:!1},device:"desktop"},mutations:{TOGGLE_SIDEBAR:function(e){e.sidebar.opened?r.default.set("sidebarStatus",1):r.default.set("sidebarStatus",0),e.sidebar.opened=!e.sidebar.opened,e.sidebar.withoutAnimation=!1},CLOSE_SIDEBAR:function(e,t){r.default.set("sidebarStatus",1),e.sidebar.opened=!1,e.sidebar.withoutAnimation=t},TOGGLE_DEVICE:function(e,t){e.device=t}},actions:{ToggleSideBar:function(e){(0,e.commit)("TOGGLE_SIDEBAR")},CloseSideBar:function(e,t){(0,e.commit)("CLOSE_SIDEBAR",t.withoutAnimation)},ToggleDevice:function(e,t){(0,e.commit)("TOGGLE_DEVICE",t)}}};t.default=o},"2c6e":function(e,t,n){"use strict";n.r(t);var i=n("/8yo"),a=n("O+jn");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("TQwg");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"c895cf98",null);u.options.__file="Layout.vue",t.default=u.exports},"3PhE":function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-nested",use:"icon-nested-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-nested"><path d="M.002 9.2c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-5.043-3.58-9.132-7.997-9.132S.002 4.157.002 9.2zM31.997.066h95.981V18.33H31.997V.066zm0 45.669c0 5.044 3.58 9.132 7.998 9.132 4.417 0 7.997-4.088 7.997-9.132 0-3.263-1.524-6.278-3.998-7.91-2.475-1.63-5.524-1.63-7.998 0-2.475 1.632-4 4.647-4 7.91zM63.992 36.6h63.986v18.265H63.992V36.6zm-31.995 82.2c0 5.043 3.58 9.132 7.998 9.132 4.417 0 7.997-4.089 7.997-9.132 0-5.044-3.58-9.133-7.997-9.133s-7.998 4.089-7.998 9.133zm31.995-9.131h63.986v18.265H63.992V109.67zm0-27.404c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-3.263-1.524-6.277-3.998-7.909-2.475-1.631-5.524-1.631-7.998 0-2.475 1.632-4 4.646-4 7.91zm31.995-9.13h31.991V91.4H95.987V73.135z" /></symbol>'});o.a.add(u);t.default=u},"6cqe":function(e,t,n){"use strict";n.r(t);var i=n("kCNp"),a=n("1+NH");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,null,null);u.options.__file="SidebarItem.vue",t.default=u.exports},"6xvN":function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-form",use:"icon-form-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-form"><path d="M84.068 23.784c-1.02 0-1.877-.32-2.572-.96a8.588 8.588 0 0 1-1.738-2.237 11.524 11.524 0 0 1-1.042-2.621c-.232-.895-.348-1.641-.348-2.238V0h.278c.834 0 1.622.085 2.363.256.742.17 1.645.575 2.711 1.214 1.066.64 2.363 1.535 3.892 2.686 1.53 1.15 3.453 2.664 5.77 4.54 2.502 2.045 4.494 3.771 5.977 5.178 1.483 1.406 2.618 2.6 3.406 3.58.787.98 1.274 1.812 1.46 2.494.185.682.277 1.278.277 1.79v2.046H84.068zM127.3 84.01c.278.682.464 1.535.556 2.558.093 1.023-.37 2.003-1.39 2.94-.463.427-.88.832-1.25 1.215-.372.384-.696.704-.974.96a6.69 6.69 0 0 1-.973.767l-11.816-10.741a44.331 44.331 0 0 0 1.877-1.535 31.028 31.028 0 0 1 1.737-1.406c1.112-.938 2.317-1.343 3.615-1.215 1.297.128 2.363.405 3.197.83.927.427 1.923 1.173 2.989 2.239 1.065 1.065 1.876 2.195 2.432 3.388zM78.23 95.902c2.038 0 3.752-.511 5.143-1.534l-26.969 25.83H18.037c-1.761 0-3.684-.47-5.77-1.407a24.549 24.549 0 0 1-5.838-3.709 21.373 21.373 0 0 1-4.518-5.306c-1.204-2.003-1.807-4.07-1.807-6.202V16.495c0-1.79.44-3.665 1.32-5.626A18.41 18.41 0 0 1 5.04 5.562a21.798 21.798 0 0 1 5.213-3.964C12.198.533 14.237 0 16.37 0h53.24v15.984c0 1.62.278 3.367.834 5.242a16.704 16.704 0 0 0 2.572 5.179c1.159 1.577 2.665 2.898 4.518 3.964 1.853 1.066 4.078 1.598 6.673 1.598h20.295v42.325L85.458 92.45c1.02-1.364 1.529-2.856 1.529-4.476 0-2.216-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1c-2.409 0-4.448.789-6.116 2.366-1.668 1.577-2.502 3.474-2.502 5.69 0 2.217.834 4.092 2.502 5.626 1.668 1.535 3.707 2.302 6.117 2.302h52.13zM26.1 47.951c-2.41 0-4.449.789-6.117 2.366-1.668 1.577-2.502 3.473-2.502 5.69 0 2.216.834 4.092 2.502 5.626 1.668 1.534 3.707 2.302 6.117 2.302h52.13c2.409 0 4.47-.768 6.185-2.302 1.715-1.534 2.572-3.41 2.572-5.626 0-2.217-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1zm52.407 64.063l1.807-1.663 3.476-3.196a479.75 479.75 0 0 0 4.587-4.284 500.757 500.757 0 0 1 5.004-4.667c3.985-3.666 8.48-7.758 13.485-12.276l11.677 10.741-13.485 12.404-5.004 4.603-4.587 4.22a179.46 179.46 0 0 0-3.267 3.068c-.88.853-1.367 1.322-1.46 1.407-.463.341-.973.703-1.529 1.087-.556.383-1.112.703-1.668.959-.556.256-1.413.575-2.572.959a83.5 83.5 0 0 1-3.545 1.087 72.2 72.2 0 0 1-3.475.895c-1.112.256-1.946.426-2.502.511-1.112.17-1.854.043-2.224-.383-.371-.426-.464-1.151-.278-2.174.092-.511.278-1.279.556-2.302.278-1.023.602-2.067.973-3.132l1.042-3.005c.325-.938.58-1.577.765-1.918a10.157 10.157 0 0 1 2.224-2.941z" /></symbol>'});o.a.add(u);t.default=u},"7Qib":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("EJiy"),r=(i=a)&&i.__esModule?i:{default:i};function o(e,t){if(0===arguments.length)return null;var n=t||"{y}-{m}-{d} {h}:{i}:{s}",i=void 0;"object"===(void 0===e?"undefined":(0,r.default)(e))?i=e:(10===(""+e).length&&(e=1e3*parseInt(e)),i=new Date(e));var a={y:i.getFullYear(),m:i.getMonth()+1,d:i.getDate(),h:i.getHours(),i:i.getMinutes(),s:i.getSeconds(),a:i.getDay()},o=n.replace(/{(y|m|d|h|i|s|a)+}/g,(function(e,t){var n=a[t];return"a"===t?["日","一","二","三","四","五","六"][n]:(e.length>0&&n<10&&(n="0"+n),n||0)}));return o}t.parseTime=o,t.formatTime=function(e,t){e=1e3*+e;var n=new Date(e),i=(Date.now()-n)/1e3;if(i<30)return"刚刚";if(i<3600)return Math.ceil(i/60)+"分钟前";if(i<86400)return Math.ceil(i/3600)+"小时前";if(i<172800)return"1天前";return t?o(e,t):n.getMonth()+1+"月"+n.getDate()+"日"+n.getHours()+"时"+n.getMinutes()+"分"},t.isExternal=function(e){return/^(https?:|mailto:|tel:)/.test(e)}},D5rb:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("4d7F"),r=(i=a)&&i.__esModule?i:{default:i},o=n("fe1z"),u=n("X4fA"),s=n("XJYT");var c={state:{statusInfo:{collections:[]},token:(0,u.getToken)(),name:"",email:"",avatar:"",roles:[]},mutations:{SET_TOKEN:function(e,t){e.token=t},SET_NAME:function(e,t){e.name=t},SET_EMAIL:function(e,t){e.email=t},SET_STATUS_INFO:function(e,t){e.statusInfo=t},SET_AVATAR:function(e,t){e.avatar=t},SET_ROLES:function(e,t){e.roles=t}},actions:{Login:function(e,t){var n=e.commit,i=t.username.trim();return new r.default((function(e,a){(0,o.login)(i,t.password).then((function(t){var i=t.data;if(!i.canUseAdmin)return s.Message.error("This user is not authorized to use this tool"),void e();(0,u.setToken)(i.token),n("SET_TOKEN",i.token),e()})).catch((function(e){a(e)}))}))},StatusInfo:function(e,t){var n=e.commit;e.state;n("SET_STATUS_INFO",t)},GetInfo:function(e){var t=e.commit,n=e.state;return new r.default((function(e,i){(0,o.getInfo)(n.token).then((function(n){var a=n.data;a.roles?t("SET_ROLES",a.roles):i("getInfo: roles must be a non-null array !"),t("SET_NAME",a.name),t("SET_EMAIL",a.email),t("SET_AVATAR","https://www.podplus.co.uk/wp-content/uploads/2018/09/person-icon.jpg"),e(n)})).catch((function(e){i(e)}))}))},LogOut:function(e){var t=e.commit,n=e.state;return new r.default((function(e,i){(0,o.logout)(n.token).then((function(){t("SET_TOKEN",""),t("SET_ROLES",[]),(0,u.removeToken)(),e()})).catch((function(e){i(e)}))}))},FedLogOut:function(e){var t=e.commit;return new r.default((function(e){t("SET_TOKEN",""),(0,u.removeToken)(),e()}))}}};t.default=c},EIil:function(e,t,n){"use strict";n.r(t);var i=n("FQil"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},F35N:function(e,t,n){"use strict";n.r(t);var i=n("1qtv"),a=n("/KzS");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("IaxC");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"58225820",null);u.options.__file="AppMain.vue",t.default=u.exports},FQil:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=u(n("m1cH")),a=u(n("QbLZ")),r=n("L2JU"),o=u(n("6cqe"));function u(e){return e&&e.__esModule?e:{default:e}}var s=["users","requestlog","role"],c=function(e){return"string"!=typeof e?"":e.charAt(0).toUpperCase()+e.slice(1)};t.default={components:{SidebarItem:o.default},computed:(0,a.default)({},(0,r.mapGetters)(["sidebar","statusInfo"]),{routes:function(){var e=[].concat((0,i.default)(this.$router.options.routes));return e.push({name:"Data",meta:{title:"Schemas",icon:"database"},path:"/edit/collection/",children:this.statusInfo.collections.map((function(e){return{meta:{title:c(e)},path:e}}))}),e.push({name:"Data",meta:{title:"Data",icon:"database"},path:"/list",children:this.statusInfo.collections.filter((function(e){return!s.includes(e)})).map((function(e){return{meta:{title:c(e)},path:e}}))}),e},isCollapse:function(){return!this.sidebar.opened}})}},GBEn:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=u(n("14Xm")),a=u(n("D3Ub")),r=u(n("Q2AE")),o=u(n("t3Un"));function u(e){return e&&e.__esModule?e:{default:e}}t.default={name:"AppMain",computed:{},created:function(){this.update()},methods:{update:function(){var e=this;return(0,a.default)(i.default.mark((function t(){return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,(0,o.default)({url:"/status/"});case 2:e.statusInfo=t.sent.data,r.default.dispatch("StatusInfo",e.statusInfo);case 4:case"end":return t.stop()}}),t,e)})))()}}}},GPBF:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-link",use:"icon-link-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-link"><g><path d="M115.625 127.937H.063V12.375h57.781v12.374H12.438v90.813h90.813V70.156h12.374z" /><path d="M116.426 2.821l8.753 8.753-56.734 56.734-8.753-8.745z" /><path d="M127.893 37.982h-12.375V12.375H88.706V0h39.187z" /></g></symbol>'});o.a.add(u);t.default=u},HmsV:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement;return(this._self._c||e)("component",this._b({},"component",this.linkProps(this.to),!1),[this._t("default")],2)},a=[]},I77X:function(e,t,n){"use strict";n.r(t);var i=n("Xl2i"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},IKxP:function(e,t,n){},IZzN:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=s(n("QbLZ")),a=s(n("33yf")),r=n("7Qib"),o=s(n("ssOZ")),u=s(n("bITd"));function s(e){return e&&e.__esModule?e:{default:e}}t.default={name:"SidebarItem",components:{Item:o.default,AppLink:u.default},props:{item:{type:Object,required:!0},isNest:{type:Boolean,default:!1},basePath:{type:String,default:""}},data:function(){return{onlyOneChild:null}},methods:{filterOutHidden:function(e){return e.filter((function(e){return!e.hidden}))},hasOneShowingChild:function(e,t){var n=this,a=e.filter((function(e){return!e.hidden&&(n.onlyOneChild=e,!0)}));return 1===a.length||0===a.length&&(this.onlyOneChild=(0,i.default)({},t,{path:"",noShowingChildren:!0}),!0)},resolvePath:function(e){return this.isExternalLink(e)?e:a.default.resolve(this.basePath,e)},isExternalLink:function(e){return(0,r.isExternal)(e)}}}},IaxC:function(e,t,n){"use strict";var i=n("WkwU");n.n(i).a},Ij2q:function(e,t,n){"use strict";var i=c(n("oYx3")),a=c(n("Q2AE")),r=c(n("Mj6V"));n("pdi6");var o=n("XJYT"),u=n("X4fA"),s=c(n("t3Un"));function c(e){return e&&e.__esModule?e:{default:e}}var l=["/login","/install"];i.default.beforeEach((function(e,t,n){r.default.start(),(0,u.getToken)()?"/login"===e.path?(n({path:"/"}),r.default.done()):0===a.default.getters.roles.length?a.default.dispatch("GetInfo").then((function(e){n()})).catch((function(e){a.default.dispatch("FedLogOut").then((function(){o.Message.error(e||"Verification failed, please login again"),n({path:"/"})}))})):n():(0,s.default)({url:"/status"}).then((function(t){t.data.installed||"/install"===e.path?-1!==l.indexOf(e.path)?n():(n("/login?redirect="+e.path),r.default.done()):(n("/install"),r.default.done())}))})),i.default.afterEach((function(){r.default.done()}))},KVr3:function(e,t,n){"use strict";n.r(t);var i=n("vaBn"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},Kj24:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-password",use:"icon-password-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-password"><path d="M108.8 44.322H89.6v-5.36c0-9.04-3.308-24.163-25.6-24.163-23.145 0-25.6 16.881-25.6 24.162v5.361H19.2v-5.36C19.2 15.281 36.798 0 64 0c27.202 0 44.8 15.281 44.8 38.961v5.361zm-32 39.356c0-5.44-5.763-9.832-12.8-9.832-7.037 0-12.8 4.392-12.8 9.832 0 3.682 2.567 6.808 6.407 8.477v11.205c0 2.718 2.875 4.962 6.4 4.962 3.524 0 6.4-2.244 6.4-4.962V92.155c3.833-1.669 6.393-4.795 6.393-8.477zM128 64v49.201c0 8.158-8.645 14.799-19.2 14.799H19.2C8.651 128 0 121.359 0 113.201V64c0-8.153 8.645-14.799 19.2-14.799h89.6c10.555 0 19.2 6.646 19.2 14.799z" /></symbol>'});o.a.add(u);t.default=u},MMMJ:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-example",use:"icon-example-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-example"><path d="M96.258 57.462h31.421C124.794 27.323 100.426 2.956 70.287.07v31.422a32.856 32.856 0 0 1 25.971 25.97zm-38.796-25.97V.07C27.323 2.956 2.956 27.323.07 57.462h31.422a32.856 32.856 0 0 1 25.97-25.97zm12.825 64.766v31.421c30.46-2.885 54.507-27.253 57.713-57.712H96.579c-2.886 13.466-13.146 23.726-26.292 26.291zM31.492 70.287H.07c2.886 30.46 27.253 54.507 57.713 57.713V96.579c-13.466-2.886-23.726-13.146-26.291-26.292z" /></symbol>'});o.a.add(u);t.default=u},MMau:function(e,t,n){"use strict";n.r(t);var i=n("VBxQ"),a=n("EIil");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,null,null);u.options.__file="index.vue",t.default=u.exports},MOri:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement,t=this._self._c||e;return t("svg",{class:this.svgClass,attrs:{"aria-hidden":"true"}},[t("use",{attrs:{"xlink:href":this.iconName}})])},a=[]},NnNH:function(e,t,n){"use strict";var i=n("i2cb");n.n(i).a},"O+jn":function(e,t,n){"use strict";n.r(t);var i=n("s1bt"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},OHj3:function(e,t,n){"use strict";var i=n("ja/U");n.n(i).a},OOIL:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n("oQr/");Object.defineProperty(t,"Navbar",{enumerable:!0,get:function(){return o(i).default}});var a=n("MMau");Object.defineProperty(t,"Sidebar",{enumerable:!0,get:function(){return o(a).default}});var r=n("F35N");function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"AppMain",{enumerable:!0,get:function(){return o(r).default}})},Pf3K:function(e,t,n){"use strict";n.r(t);var i=n("rgsC"),a=n("I77X");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,null,null);u.options.__file="App.vue",t.default=u.exports},Q2AE:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=s(n("Kw5r")),a=s(n("L2JU")),r=s(n("2c2J")),o=s(n("D5rb")),u=s(n("lNWa"));function s(e){return e&&e.__esModule?e:{default:e}}i.default.use(a.default);var c=new a.default.Store({modules:{app:r.default,user:o.default},getters:u.default});t.default=c},"R/Hx":function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-table",use:"icon-table-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-table"><g><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z" /><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z" /></g></symbol>'});o.a.add(u);t.default=u},Ssdo:function(e,t,n){},TLko:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n("7Qib");t.default={props:{to:{type:String,required:!0}},methods:{isExternalLink:function(e){return(0,i.isExternal)(e)},linkProps:function(e){return this.isExternalLink(e)?{is:"a",href:e,target:"_blank",rel:"noopener"}:{is:"router-link",to:e}}}}},TQwg:function(e,t,n){"use strict";var i=n("eqNk");n.n(i).a},TfVu:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-eye",use:"icon-eye-usage",viewBox:"0 0 128 64",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 64" id="icon-eye"><path d="M127.072 7.994c1.37-2.208.914-5.152-.914-6.87-2.056-1.717-4.797-1.226-6.396.982-.229.245-25.586 32.382-55.74 32.382-29.24 0-55.74-32.382-55.968-32.627-1.6-1.963-4.57-2.208-6.397-.49C-.17 3.086-.399 6.275 1.2 8.238c.457.736 5.94 7.36 14.62 14.72L4.17 35.96c-1.828 1.963-1.6 5.152.228 6.87.457.98 1.6 1.471 2.742 1.471s2.284-.49 3.198-1.472l12.564-13.983c5.94 4.416 13.021 8.587 20.788 11.53l-4.797 17.418c-.685 2.699.686 5.397 3.198 6.133h1.37c2.057 0 3.884-1.472 4.341-3.68L52.6 42.83c3.655.736 7.538 1.227 11.422 1.227 3.883 0 7.767-.49 11.422-1.227l4.797 17.173c.457 2.208 2.513 3.68 4.34 3.68.457 0 .914 0 1.143-.246 2.513-.736 3.883-3.434 3.198-6.133l-4.797-17.172c7.767-2.944 14.848-7.114 20.788-11.53l12.336 13.738c.913.981 2.056 1.472 3.198 1.472s2.284-.49 3.198-1.472c1.828-1.963 1.828-4.906.228-6.87l-11.65-13.001c9.366-7.36 14.849-14.474 14.849-14.474z" /></symbol>'});o.a.add(u);t.default=u},Tx5V:function(e,t,n){"use strict";n.r(t);var i=n("mIrJ"),a=n("e6x5");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("gXxq");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"18b41ae9",null);u.options.__file="index.vue",t.default=u.exports},"Uf/o":function(e,t,n){var i={"./example.svg":"MMMJ","./eye.svg":"TfVu","./form.svg":"6xvN","./link.svg":"GPBF","./nested.svg":"3PhE","./password.svg":"Kj24","./table.svg":"R/Hx","./tree.svg":"k80C","./user.svg":"s7Vf"};function a(e){var t=r(e);return n(t)}function r(e){if(!n.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}a.keys=function(){return Object.keys(i)},a.resolve=r,e.exports=a,a.id="Uf/o"},"V+js":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"Hamburger",props:{isActive:{type:Boolean,default:!1},toggleClick:{type:Function,default:null}}}},VBxQ:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement,t=this._self._c||e;return t("el-scrollbar",{attrs:{"wrap-class":"scrollbar-wrapper"}},[t("el-menu",{attrs:{"show-timeout":200,"default-active":this.$route.path,collapse:this.isCollapse,"unique-opened":!0,mode:"vertical","background-color":"#304156","text-color":"#bfcbd9","active-text-color":"#409EFF"}},this._l(this.routes,(function(e){return t("sidebar-item",{key:e.path,attrs:{item:e,"base-path":e.path}})})))],1)},a=[]},VSRc:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-breadcrumb",{staticClass:"app-breadcrumb",attrs:{separator:"/"}},[n("transition-group",{attrs:{name:"breadcrumb"}},e._l(e.filteredLevelList,(function(t,i){return n("el-breadcrumb-item",{key:t.path},["noredirect"===t.redirect||i==e.levelList.length-1?n("span",{staticClass:"no-redirect"},[e._v(e._s(t.meta.title))]):n("a",{on:{click:function(n){n.preventDefault(),e.handleLink(t)}}},[e._v(e._s(t.meta.title))])])})))],1)},a=[]},Vtdi:function(e,t,n){"use strict";var i=f(n("Kw5r"));n("9d8Q");var a=f(n("XJYT"));n("D66Q");var r=f(n("stYL"));n("sg+I");var o=f(n("Pf3K")),u=f(n("oYx3")),s=f(n("Q2AE"));n("SYky"),n("q4sD"),n("L4hS"),n("1I2w"),n("mF2h"),n("Ij2q");var c=n("uK5S"),l=f(n("y4GO")),d=n("0yek");function f(e){return e&&e.__esModule?e:{default:e}}l.default.add([d.uniDatabase,d.uniHome,d.uniUsersAlt,d.uniShieldCheck,d.uniBookOpen,d.uniDiary,d.uniFlask,d.uniCog,d.uniPlus,d.uniLink]),i.default.use(l.default),i.default.use(a.default,{locale:r.default}),i.default.use(c.VuePlugin),i.default.config.productionTip=!1,new i.default({el:"#app",router:u.default,store:s.default,render:function(e){return e(o.default)}})},WkwU:function(e,t,n){},X4fA:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getToken=function(){return r.default.get("Admin-Token")},t.setToken=function(e){return r.default.set("Admin-Token",e)},t.removeToken=function(){return r.default.remove("Admin-Token")};var i,a=n("p46w"),r=(i=a)&&i.__esModule?i:{default:i}},Xl2i:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"App"}},Y1Bl:function(e,t,n){"use strict";n.r(t);var i=n("VSRc"),a=n("KVr3");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("zFxt");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"721dc8c4",null);u.options.__file="index.vue",t.default=u.exports},Z3ev:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("Q2AE"),r=(i=a)&&i.__esModule?i:{default:i};var o=document.body;t.default={watch:{$route:function(e){"mobile"===this.device&&this.sidebar.opened&&r.default.dispatch("CloseSideBar",{withoutAnimation:!1})}},beforeMount:function(){window.addEventListener("resize",this.resizeHandler)},mounted:function(){this.isMobile()&&(r.default.dispatch("ToggleDevice","mobile"),r.default.dispatch("CloseSideBar",{withoutAnimation:!0}))},methods:{isMobile:function(){return o.getBoundingClientRect().width-3<1024},resizeHandler:function(){if(!document.hidden){var e=this.isMobile();r.default.dispatch("ToggleDevice",e?"mobile":"desktop"),e&&r.default.dispatch("CloseSideBar",{withoutAnimation:!0})}}}}},bITd:function(e,t,n){"use strict";n.r(t);var i=n("HmsV"),a=n("s7+5");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,null,null);u.options.__file="Link.vue",t.default=u.exports},e6x5:function(e,t,n){"use strict";n.r(t);var i=n("V+js"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},eqNk:function(e,t,n){},fe1z:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logout=void 0;var i,a=u(n("14Xm")),r=u(n("D3Ub"));t.logout=(i=(0,r.default)(a.default.mark((function e(){return a.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)});t.login=function(e,t){return(0,o.default)({url:"/users/login",method:"post",data:{email:e,password:t}})},t.getInfo=function(e){return(0,o.default)({url:"/users/me",method:"get"})};var o=u(n("t3Un"));function u(e){return e&&e.__esModule?e:{default:e}}},gXxq:function(e,t,n){"use strict";var i=n("IKxP");n.n(i).a},gaGZ:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=u(n("QbLZ")),a=n("L2JU"),r=u(n("Y1Bl")),o=u(n("Tx5V"));function u(e){return e&&e.__esModule?e:{default:e}}t.default={components:{Breadcrumb:r.default,Hamburger:o.default},computed:(0,i.default)({},(0,a.mapGetters)(["sidebar","avatar"])),methods:{toggleSideBar:function(){this.$store.dispatch("ToggleSideBar")},logout:function(){this.$store.dispatch("LogOut").then((function(){location.reload()}))}}}},i2cb:function(e,t,n){},"jF/l":function(e,t,n){"use strict";n.r(t);var i=n("+73H"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},"ja/U":function(e,t,n){},k80C:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-tree",use:"icon-tree-usage",viewBox:"0 0 128 128",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" id="icon-tree"><path d="M126.713 90.023c.858.985 1.287 2.134 1.287 3.447v29.553c0 1.423-.429 2.6-1.287 3.53-.858.93-1.907 1.395-3.146 1.395H97.824c-1.145 0-2.146-.465-3.004-1.395-.858-.93-1.287-2.107-1.287-3.53V93.47c0-.875.19-1.696.572-2.462.382-.766.906-1.368 1.573-1.806a3.84 3.84 0 0 1 2.146-.657h9.725V69.007a3.84 3.84 0 0 0-.43-1.806 3.569 3.569 0 0 0-1.143-1.313 2.714 2.714 0 0 0-1.573-.492h-36.47v23.149h9.725c1.144 0 2.145.492 3.004 1.478.858.985 1.287 2.134 1.287 3.447v29.553c0 .876-.191 1.696-.573 2.463-.38.766-.905 1.368-1.573 1.806a3.84 3.84 0 0 1-2.145.656H51.915a3.84 3.84 0 0 1-2.145-.656c-.668-.438-1.216-1.04-1.645-1.806a4.96 4.96 0 0 1-.644-2.463V93.47c0-1.313.43-2.462 1.288-3.447.858-.986 1.907-1.478 3.146-1.478h9.582v-23.15h-37.9c-.953 0-1.74.356-2.359 1.068-.62.711-.93 1.56-.93 2.544v19.538h9.726c1.239 0 2.264.492 3.074 1.478.81.985 1.216 2.134 1.216 3.447v29.553c0 1.423-.405 2.6-1.216 3.53-.81.93-1.835 1.395-3.074 1.395H4.29c-.476 0-.93-.082-1.358-.246a4.1 4.1 0 0 1-1.144-.657 4.658 4.658 0 0 1-.93-1.067 5.186 5.186 0 0 1-.643-1.395 5.566 5.566 0 0 1-.215-1.56V93.47c0-.437.048-.875.143-1.313a3.95 3.95 0 0 1 .429-1.15c.19-.328.429-.656.715-.984.286-.329.572-.602.858-.821.286-.22.62-.383 1.001-.493.382-.11.763-.164 1.144-.164h9.726V61.619c0-.985.31-1.833.93-2.544.619-.712 1.358-1.068 2.216-1.068h44.335V39.62h-9.582c-1.24 0-2.288-.492-3.146-1.477a5.09 5.09 0 0 1-1.287-3.448V5.14c0-1.423.429-2.627 1.287-3.612.858-.985 1.907-1.477 3.146-1.477h25.743c.763 0 1.478.246 2.145.739a5.17 5.17 0 0 1 1.573 1.888c.382.766.573 1.587.573 2.462v29.553c0 1.313-.43 2.463-1.287 3.448-.859.985-1.86 1.477-3.004 1.477h-9.725v18.389h42.762c.954 0 1.74.355 2.36 1.067.62.711.93 1.56.93 2.545v26.925h9.582c1.239 0 2.288.492 3.146 1.478z" /></symbol>'});o.a.add(u);t.default=u},kCNp:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return!e.item.hidden&&e.item.children?n("div",{staticClass:"menu-wrapper"},[!e.hasOneShowingChild(e.item.children,e.item)||e.onlyOneChild.children&&!e.onlyOneChild.noShowingChildren||e.item.alwaysShow?n("el-submenu",{attrs:{index:e.resolvePath(e.item.path)}},[n("template",{slot:"title"},[e.item.meta?n("item",{attrs:{icon:e.item.meta.icon,title:e.item.meta.title}}):e._e()],1),e._v(" "),e._l(e.filterOutHidden(e.item.children),(function(t){return[t.children&&t.children.length>0?n("sidebar-item",{key:t.path,staticClass:"nest-menu",attrs:{"is-nest":!0,item:t,"base-path":e.resolvePath(t.path)}}):n("app-link",{key:t.name,attrs:{to:e.resolvePath(t.path)}},[n("el-menu-item",{attrs:{index:e.resolvePath(t.path)}},[t.meta?n("item",{attrs:{icon:t.meta.icon,title:t.meta.title}}):e._e()],1)],1)]}))],2):[n("app-link",{attrs:{to:e.resolvePath(e.onlyOneChild.path)}},[n("el-menu-item",{class:{"submenu-title-noDropdown":!e.isNest},attrs:{index:e.resolvePath(e.onlyOneChild.path)}},[e.onlyOneChild.meta?n("item",{attrs:{icon:e.onlyOneChild.meta.icon||e.item.meta.icon,title:e.onlyOneChild.meta.title}}):e._e()],1)],1)]],2):e._e()},a=[]},lNWa:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={sidebar:function(e){return e.app.sidebar},device:function(e){return e.app.device},token:function(e){return e.user.token},avatar:function(e){return e.user.avatar},name:function(e){return e.user.name},email:function(e){return e.user.email},roles:function(e){return e.user.roles},statusInfo:function(e){return e.user.statusInfo}}},mF2h:function(e,t,n){"use strict";var i=r(n("Kw5r")),a=r(n("wAo7"));function r(e){return e&&e.__esModule?e:{default:e}}i.default.component("svg-icon",a.default);var o,u=n("Uf/o");(o=u).keys().map(o)},mIrJ:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement,t=this._self._c||e;return t("div",[t("svg",{staticClass:"hamburger",class:{"is-active":this.isActive},attrs:{t:"1492500959545",viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg","p-id":"1691","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"64",height:"64"},on:{click:this.toggleClick}},[t("path",{attrs:{d:"M966.8023 568.849776 57.196677 568.849776c-31.397081 0-56.850799-25.452695-56.850799-56.850799l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 543.397081 998.200404 568.849776 966.8023 568.849776z","p-id":"1692"}}),this._v(" "),t("path",{attrs:{d:"M966.8023 881.527125 57.196677 881.527125c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 856.07443 998.200404 881.527125 966.8023 881.527125z","p-id":"1693"}}),this._v(" "),t("path",{attrs:{d:"M966.8023 256.17345 57.196677 256.17345c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.850799 56.850799-56.850799l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.850799l0 0C1023.653099 230.720755 998.200404 256.17345 966.8023 256.17345z","p-id":"1694"}})])])},a=[]},"oQr/":function(e,t,n){"use strict";n.r(t);var i=n("zASd"),a=n("pviM");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("NnNH");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"24a9ff24",null);u.options.__file="Navbar.vue",t.default=u.exports},oYx3:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.constantRouterMap=void 0;var i=o(n("Kw5r")),a=o(n("jE9Z")),r=o(n("2c6e"));function o(e){return e&&e.__esModule?e:{default:e}}i.default.use(a.default);var u=function(e){return"string"!=typeof e?"":e.charAt(0).toUpperCase()+e.slice(1)},s=t.constantRouterMap=[{path:"/login",component:function(){return n.e("chunk-5061").then(n.bind(null,"ntYl"))},hidden:!0},{path:"/install",component:function(){return Promise.all([n.e("chunk-09d8"),n.e("chunk-621e")]).then(n.bind(null,"l2Fg"))},hidden:!0},{path:"/404",component:function(){return n.e("chunk-bd5f").then(n.bind(null,"jNvO"))},hidden:!0},{path:"/",component:r.default,redirect:"/home",name:"Home",meta:{title:"Home",icon:"home"},children:[{path:"home",meta:{title:"Home",icon:"home"},component:function(){return n.e("chunk-7109").then(n.bind(null,"u1G+"))}},{path:"/edit/:collectionName/:id",component:function(){return Promise.all([n.e("chunk-09d8"),n.e("chunk-e374")]).then(n.bind(null,"ZoMo"))},hidden:!0}]},{path:"/users",redirect:"/users/list",component:r.default,name:"Users",meta:{title:"People",icon:"users-alt"},children:[{path:"list",meta:{title:"Users",icon:"users-alt"},name:"users2",component:function(){return n.e("chunk-7f4f").then(n.bind(null,"VqTb"))},props:{collectionName:"users"}},{path:"add",meta:{title:"Add User",icon:"plus"},name:"newuser",component:function(){return Promise.all([n.e("chunk-09d8"),n.e("chunk-e374")]).then(n.bind(null,"ZoMo"))},props:{collectionName:"users",id:"create"}},{path:"role",meta:{title:"Roles",icon:"shield-check"},name:"role",component:function(){return n.e("chunk-7f4f").then(n.bind(null,"VqTb"))},props:{collectionName:"role"}},{path:"addrole",meta:{title:"Add Role",icon:"plus"},name:"newrole",component:function(){return Promise.all([n.e("chunk-09d8"),n.e("chunk-e374")]).then(n.bind(null,"ZoMo"))},props:{collectionName:"role",id:"create"}}]},{path:"/list/:collectionName",component:r.default,hidden:!0,name:"Data",meta:{title:"Data",icon:"database"},children:[{path:"",name:":collectionName",component:function(){return n.e("chunk-7f4f").then(n.bind(null,"VqTb"))},props:function(e){return{collectionName:e.params.collectionName}},meta:{title:u(name)}}]},{path:"/manage/permissions",component:r.default,name:"permissions",meta:{title:"Manage",icon:"shield-check"},children:[{path:"",name:"permissions",component:function(){return n.e("chunk-f075").then(n.bind(null,"c6Js"))},meta:{title:"Permissions"}}]},{path:"/endpoints",component:r.default,name:"endpoints",meta:{title:"Search",icon:"link"},children:[{path:"",name:"endpoints",component:function(){return Promise.all([n.e("chunk-5e17"),n.e("chunk-5e50")]).then(n.bind(null,"jbWL"))},meta:{title:"Endpoints"}}]},{path:"/dev",component:r.default,meta:{title:"Dev",icon:"flask"},name:"Dev",children:[{path:"",name:"",component:function(){return n.e("chunk-b423").then(n.bind(null,"RAkD"))},meta:{title:""},hidden:!0},{path:"listeners",name:"listeners",component:function(){return n.e("chunk-7291").then(n.bind(null,"5nIF"))},meta:{title:"Listeners"}},{path:"middleware",name:"middleware",component:function(){return n.e("chunk-e7c3").then(n.bind(null,"uezr"))},meta:{title:"Middleware"}},{path:"requestlogs",meta:{title:"Request Logs",icon:"diary"},name:"requestlogs",component:function(){return n.e("chunk-7f4f").then(n.bind(null,"VqTb"))},props:{collectionName:"requestlog",columns:["method","url","req.ip","user","res.message","res.statusCode","res.headers.content-length"]}},{path:"viewrequest/:requestId",hidden:!0,meta:{title:"View Request",icon:"diary"},name:"viewrequest",component:function(){return n.e("chunk-9a95").then(n.bind(null,"o4XF"))}},{path:"/edit/collection",component:r.default,name:"Schema",hidden:!0,meta:{title:"Schemas",icon:"cog"},children:[{hidden:!0,path:"/:collectionName",name:name,meta:{title:u(name)}}]}]},{path:"external-link",component:r.default,children:[{path:"https://github.com/thomas4019/expressa",meta:{title:"Expressa Docs",icon:"link"}}]},{path:"*",redirect:"/404",hidden:!0}];t.default=new a.default({scrollBehavior:function(){return{y:0}},routes:s})},pviM:function(e,t,n){"use strict";n.r(t);var i=n("gaGZ"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},rgsC:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this.$createElement,t=this._self._c||e;return t("div",{attrs:{id:"app"}},[t("router-view")],1)},a=[]},s1bt:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("OOIL"),r=n("Z3ev"),o=(i=r)&&i.__esModule?i:{default:i};t.default={name:"Layout",components:{Navbar:a.Navbar,Sidebar:a.Sidebar,AppMain:a.AppMain},mixins:[o.default],computed:{sidebar:function(){return this.$store.state.app.sidebar},device:function(){return this.$store.state.app.device},classObj:function(){return{hideSidebar:!this.sidebar.opened,openSidebar:this.sidebar.opened,withoutAnimation:this.sidebar.withoutAnimation,mobile:"mobile"===this.device}}},methods:{handleClickOutside:function(){this.$store.dispatch("CloseSideBar",{withoutAnimation:!1})}}}},"s7+5":function(e,t,n){"use strict";n.r(t);var i=n("TLko"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},s7Vf:function(e,t,n){"use strict";n.r(t);var i=n("4BeY"),a=n.n(i),r=n("IaFt"),o=n.n(r),u=new a.a({id:"icon-user",use:"icon-user-usage",viewBox:"0 0 130 130",content:'<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 130 130" id="icon-user"><path d="M63.444 64.996c20.633 0 37.359-14.308 37.359-31.953 0-17.649-16.726-31.952-37.359-31.952-20.631 0-37.36 14.303-37.358 31.952 0 17.645 16.727 31.953 37.359 31.953zM80.57 75.65H49.434c-26.652 0-48.26 18.477-48.26 41.27v2.664c0 9.316 21.608 9.325 48.26 9.325H80.57c26.649 0 48.256-.344 48.256-9.325v-2.663c0-22.794-21.605-41.271-48.256-41.271z" stroke="#979797" /></symbol>'});o.a.add(u);t.default=u},"sg+I":function(e,t,n){},ssOZ:function(e,t,n){"use strict";n.r(t);var i=n("xr5J");for(var a in i)["default"].indexOf(a)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(a);var r=n("KHd+"),o=Object(r.a)(i.default,void 0,void 0,!1,null,null,null);o.options.__file="Item.vue",t.default=o.exports},t3Un:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=s(n("4d7F")),a=s(n("vDqi")),r=n("XJYT"),o=s(n("Q2AE")),u=n("X4fA");function s(e){return e&&e.__esModule?e:{default:e}}var c=a.default.create({baseURL:"undefined"!=typeof settings?settings.apiurl:"/api",timeout:5e3});c.interceptors.request.use((function(e){return o.default.getters.token&&(e.headers["x-access-token"]=(0,u.getToken)()),e}),(function(e){console.log(e),i.default.reject(e)})),c.interceptors.response.use((function(e){return e}),(function(e){console.log(e);var t=["response","data","error"].reduce((function(e,t){return e&&e[t]?e[t]:null}),e)||e.message;return(0,r.Message)({message:t,type:"error",duration:0,showClose:!0}),i.default.reject(e)})),t.default=c},vaBn:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n("vRGJ"),r=(i=a)&&i.__esModule?i:{default:i};t.default={data:function(){return{levelList:null}},computed:{filteredLevelList:function(){return this.levelList.filter((function(e){return e.meta.title}))}},watch:{$route:function(){this.getBreadcrumb()}},created:function(){this.getBreadcrumb()},methods:{getBreadcrumb:function(){var e=this.$route.matched.filter((function(e){if(e.name)return!0})),t=e[0];t&&"home"!==t.name&&(e=[{path:"/home",meta:{title:"Home"}}].concat(e)),this.levelList=e},pathCompile:function(e){var t=this.$route.params;return r.default.compile(e)(t)},handleLink:function(e){var t=e.redirect,n=e.path;console.log("handleLink"),console.log(t),console.log(n),t?this.$router.push(t):this.$router.push(this.pathCompile(n))}}}},wAo7:function(e,t,n){"use strict";n.r(t);var i=n("MOri"),a=n("jF/l");for(var r in a)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return a[e]}))}(r);n("OHj3");var o=n("KHd+"),u=Object(o.a)(a.default,i.a,i.b,!1,null,"75db6a7e",null);u.options.__file="index.vue",t.default=u.exports},xr5J:function(e,t,n){"use strict";n.r(t);var i=n("+p7W"),a=n.n(i);for(var r in i)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(r);t.default=a.a},zASd:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-menu",{staticClass:"navbar2",attrs:{mode:"horizontal"}},[n("hamburger",{staticClass:"hamburger-container",attrs:{"toggle-click":e.toggleSideBar,"is-active":e.sidebar.opened}}),e._v(" "),n("breadcrumb"),e._v(" "),n("el-dropdown",{staticClass:"avatar-container",attrs:{trigger:"click"}},[n("div",{staticClass:"avatar-wrapper"},[n("i",{staticClass:"material-icons",staticStyle:{"font-size":"40px"}},[e._v("\n person\n ")]),e._v(" "),n("i",{staticClass:"el-icon-caret-bottom"})]),e._v(" "),n("el-dropdown-menu",{staticClass:"user-dropdown",attrs:{slot:"dropdown"},slot:"dropdown"},[n("router-link",{staticClass:"inlineBlock",attrs:{to:"/"}},[n("el-dropdown-item",[e._v("\n Home\n ")])],1),e._v(" "),n("el-dropdown-item",{attrs:{divided:""}},[n("span",{staticStyle:{display:"block"},on:{click:e.logout}},[e._v("LogOut")])])],1)],1)],1)},a=[]},zFxt:function(e,t,n){"use strict";var i=n("Ssdo");n.n(i).a}},[["Vtdi","runtime","chunk-elementUI","chunk-libs"]]]);
@@ -0,0 +1 @@
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([["chunk-9a95"],{"09IW":function(e,t,s){"use strict";var n=s("s+D9");s.n(n).a},"13QN":function(e,t,s){"use strict";s.r(t);var n=s("X9YS"),r=s.n(n);for(var d in n)["default"].indexOf(d)<0&&function(e){s.d(t,e,(function(){return n[e]}))}(d);t.default=r.a},IXfz:function(e,t,s){"use strict";s.d(t,"a",(function(){return n})),s.d(t,"b",(function(){return r}));var n=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"app-container",staticStyle:{display:"flex",width:"100%"}},[s("div",{staticClass:"side-panel"},[s("h2",[e._v("Request")]),e._v(" "),s("p",[e._v("\n "+e._s(e.log.method)+" "+e._s(e.log.url)+"\n ")]),e._v(" "),s("dl",[s("dt",[e._v("Request Time")]),e._v(" "),s("dd",[e._v(e._s(e.log.meta.created))]),e._v(" "),s("dt",[e._v("User")]),e._v(" "),s("dd",[e._v(e._s(e.log.user))]),e._v(" "),s("dt",[e._v("User Collection")]),e._v(" "),s("dd",[e._v(e._s(e.log.user_collection))]),e._v(" "),s("dt",[e._v("IP")]),e._v(" "),s("dd",[e._v(e._s(e.req.ip))]),e._v(" "),s("dt",[e._v("User-Agent")]),e._v(" "),s("dd",[e._v(e._s(e.req.headers["user-agent"]))]),e._v(" "),s("dt",[e._v("Referrer")]),e._v(" "),s("dd",[e._v(e._s(e.req.headers.referer))]),e._v(" "),s("dt",[e._v("Origin")]),e._v(" "),s("dd",[e._v(e._s(e.req.headers.origin))])])]),e._v(" "),s("div",{staticClass:"side-panel"},[s("h2",[e._v("Response")]),e._v(" "),s("dl",[s("dt",[e._v("ID")]),e._v(" "),s("dd",[e._v(e._s(e.res.requestId))]),e._v(" "),s("dt",[e._v("Response Time")]),e._v(" "),s("dd",[e._v(e._s(e.log.meta.created))]),e._v(" "),s("dt",[e._v("Status Code")]),e._v(" "),s("dd",[e._v(e._s(e.res.statusCode))]),e._v(" "),s("dt",[e._v("Content-Length")]),e._v(" "),s("dd",[e._v(e._s(e.res.headers["content-length"])+" bytes")]),e._v(" "),s("dt",[e._v("Message")]),e._v(" "),s("dd",[e._v(e._s(e.res.message))]),e._v(" "),s("dt",[e._v("Token Message")]),e._v(" "),s("dd",[e._v(e._s(e.res.tokenMessage))])])])])},r=[]},X9YS:function(e,t,s){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=_(s("14Xm")),r=_(s("D3Ub")),d=_(s("t3Un"));function _(e){return e&&e.__esModule?e:{default:e}}t.default={name:"ViewRequest",data:function(){return{log:{},req:{},res:{}}},mounted:function(){this.update()},methods:{update:function(){var e=this;return(0,r.default)(n.default.mark((function t(){var s,r;return n.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return s=e.$route.params.requestId,console.log("id"),console.log(s),t.next=5,(0,d.default)({url:"/requestlog/"+s});case 5:r=t.sent.data,e.log=r,e.req=r.req,e.res=r.res;case 9:case"end":return t.stop()}}),t,e)})))()}}}},o4XF:function(e,t,s){"use strict";s.r(t);var n=s("IXfz"),r=s("13QN");for(var d in r)["default"].indexOf(d)<0&&function(e){s.d(t,e,(function(){return r[e]}))}(d);s("09IW");var _=s("KHd+"),a=Object(_.a)(r.default,n.a,n.b,!1,null,"c8717050",null);a.options.__file="ViewRequest.vue",t.default=a.exports},"s+D9":function(e,t,s){}}]);
@@ -8,12 +8,14 @@
8
8
  <dl>
9
9
  <dt>Request Time</dt>
10
10
  <dd>{{ log.meta.created }}</dd>
11
+ <dt>User</dt>
12
+ <dd>{{ log.user }}</dd>
13
+ <dt>User Collection</dt>
14
+ <dd>{{ log.user_collection }}</dd>
11
15
  <dt>IP</dt>
12
16
  <dd>{{ req.ip }}</dd>
13
- <dt>Access token</dt>
14
- <dd>{{ req.headers.x-access-token }}</dd>
15
17
  <dt>User-Agent</dt>
16
- <dd>{{ req.headers.user-agent }}</dd>
18
+ <dd>{{ req.headers['user-agent'] }}</dd>
17
19
  <dt>Referrer</dt>
18
20
  <dd>{{ req.headers.referer }}</dd>
19
21
  <dt>Origin</dt>
@@ -34,6 +36,8 @@
34
36
  <dd>{{ res.headers['content-length'] }} bytes</dd>
35
37
  <dt>Message</dt>
36
38
  <dd>{{ res.message }}</dd>
39
+ <dt>Token Message</dt>
40
+ <dd>{{ res.tokenMessage }}</dd>
37
41
  </dl>
38
42
  </div>
39
43
  </div>
@@ -13,6 +13,11 @@ exports.settingSchema = {
13
13
  type: 'string',
14
14
  description: 'JWT expires after - expressed in seconds or a string describing a time span eg 60, "2 days", "10h", "7d", if undefined tokens wont expire'
15
15
  },
16
+ jwt_expire_on_password_change: {
17
+ description: 'Whether to expire jwt on password change. Defaults to true',
18
+ type: 'boolean',
19
+ default: true,
20
+ },
16
21
  postgresql_uri: {
17
22
  type: 'string',
18
23
  description: 'The full path to your postgres database. E.g. postgres://username:password@host/db'
@@ -31,6 +31,9 @@ exports.collections = [{
31
31
  user: {
32
32
  type: 'string'
33
33
  },
34
+ user_collection: {
35
+ type: 'string'
36
+ },
34
37
  req: {
35
38
  type: 'object',
36
39
  properties: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expressa",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "API framework using JSON schemas",
5
5
  "main": "index.js",
6
6
  "repository": "https://github.com/thomas4019/expressa",
package/test/0-install.js CHANGED
@@ -24,6 +24,7 @@ describe('install flow', function () {
24
24
  modules: ['collections', 'core', 'logging', 'permissions'],
25
25
  settings: {
26
26
  jwt_secret: 'testing 123',
27
+ jwt_expire_on_password_change: true,
27
28
  mongodb_uri: 'mongodb://localhost:27017/test',
28
29
  postgresql_uri: 'postgresql://postgres:expressa@localhost/pgtest',
29
30
  enforce_permissions: true,
package/test/users.js CHANGED
@@ -18,7 +18,7 @@ const invalidEmailUser = {
18
18
  password: 'test'
19
19
  }
20
20
  describe('user functionality', function () {
21
- let validId
21
+ let validId, userToken
22
22
 
23
23
  it('can signup', async function () {
24
24
  const res = await request(app)
@@ -34,6 +34,7 @@ describe('user functionality', function () {
34
34
  .send(validUser)
35
35
  .expect(200)
36
36
  expect(res.body.uid).to.equal(validId)
37
+ userToken = res.body.token
37
38
  })
38
39
 
39
40
  it('rejects unknown email', async function () {
@@ -66,6 +67,41 @@ describe('user functionality', function () {
66
67
  .expect(409)
67
68
  })
68
69
 
70
+ it ('new token required after password change', async function () {
71
+
72
+ validUser.password = '123test'
73
+
74
+ await request(app)
75
+ .post(`/users/${validId}/update`)
76
+ .set('x-access-token', userToken)
77
+ .send({ $set: { password: validUser.password } })
78
+ .expect(200)
79
+
80
+ const res = await request(app)
81
+ .get('/users/me')
82
+ .set('x-access-token', userToken)
83
+ .expect(404)
84
+
85
+ expect(res.body.error).to.exist
86
+ expect(res.body.tokenError).to.equal('expired token')
87
+
88
+ const res2 = await request(app)
89
+ .post('/users/login')
90
+ .send(validUser)
91
+ .expect(200)
92
+
93
+ expect(res2.body.uid).to.equal(validId)
94
+ userToken = res2.body.token
95
+
96
+ const res3 = await request(app)
97
+ .get('/users/me')
98
+ .set('x-access-token', userToken)
99
+ .expect(200)
100
+
101
+ expect(res3.body.error).to.not.exist
102
+ expect(res3.body.tokenError).to.not.exist
103
+ })
104
+
69
105
  let user
70
106
  it('get my user', async function () {
71
107
  const token = await testutils.getUserWithPermissions(api, 'users: view own')
package/util.js CHANGED
@@ -1,5 +1,4 @@
1
1
  const randomstring = require('randomstring')
2
- const jwt = require('jsonwebtoken')
3
2
  const {v4} = require('uuid')
4
3
  const debug = require('debug')('expressa')
5
4
  const crypto = require('crypto')
@@ -172,11 +171,17 @@ exports.getUserWithPermissions = async function (api, permissions) {
172
171
  })
173
172
  const randId = randomstring.generate(12)
174
173
  const roleName = 'role' + randId
174
+ const now = new Date().toISOString()
175
175
  const user = {
176
176
  email: 'test' + randId + '@example.com',
177
177
  password: '123',
178
178
  collection: 'users',
179
- roles: [roleName]
179
+ roles: [roleName],
180
+ meta: {
181
+ created: now,
182
+ updated: now,
183
+ password_last_updated_at: now,
184
+ }
180
185
  }
181
186
  await api.db.role.cache.create({
182
187
  _id: roleName,
@@ -184,8 +189,13 @@ exports.getUserWithPermissions = async function (api, permissions) {
184
189
  })
185
190
  const result = await api.db.users.create(user)
186
191
  user._id = result
187
- const token = jwt.sign(user, api.settings.jwt_secret, {})
188
- return token
192
+ const payload = api.util.doLogin({
193
+ id: user._id,
194
+ collection: 'users',
195
+ timestamp: user.meta.password_last_updated_at,
196
+ jwt_secret: api.settings.jwt_secret,
197
+ })
198
+ return payload.token
189
199
  }
190
200
 
191
201
  const severities = ['critical', 'error', 'warning', 'notice', 'info', 'debug']
@@ -211,8 +221,6 @@ function filterHeaders(req) {
211
221
  'user-agent': headers['user-agent'],
212
222
  origin: headers['origin'],
213
223
  referer: headers['referer'],
214
- 'x-access-token': req.headers['x-access-token'] ?
215
- req.headers['x-access-token'].substring(0, 8) + '...' : ''
216
224
  }
217
225
  }
218
226
 
@@ -220,7 +228,8 @@ exports.createLogEntry = function (req, res) {
220
228
  const severity = exports.getLogSeverity(res.statusCode)
221
229
  return {
222
230
  severity: severity,
223
- user: req.user ? req.user._id : undefined,
231
+ user: req.uid,
232
+ user_collection: req.ucollection,
224
233
  url: decodeURI(req.originalUrl || req.url),
225
234
  method: req.method,
226
235
  referer: req.headers['referer'],
@@ -232,7 +241,8 @@ exports.createLogEntry = function (req, res) {
232
241
  statusCode: res.statusCode,
233
242
  requestId: res.getHeader('x-request-id'),
234
243
  headers: res.getHeaders(),
235
- message: req.returnedError ? req.returnedError.message : undefined,
244
+ message: req.returnedError ? req.returnedError.result || req.returnedError.message : undefined,
245
+ tokenMessage: req.uerror,
236
246
  },
237
247
  meta: {
238
248
  created: new Date().toISOString(),
@@ -1 +0,0 @@
1
- .side-panel[data-v-e0156982]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}
@@ -1 +0,0 @@
1
- (window.webpackJsonp=window.webpackJsonp||[]).push([["chunk-3bc2"],{"13QN":function(e,t,s){"use strict";s.r(t);var n=s("X9YS"),r=s.n(n);for(var d in n)["default"].indexOf(d)<0&&function(e){s.d(t,e,(function(){return n[e]}))}(d);t.default=r.a},"5ZCy":function(e,t,s){"use strict";s.d(t,"a",(function(){return n})),s.d(t,"b",(function(){return r}));var n=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"app-container",staticStyle:{display:"flex",width:"100%"}},[s("div",{staticClass:"side-panel"},[s("h2",[e._v("Request")]),e._v(" "),s("p",[e._v("\n "+e._s(e.log.method)+" "+e._s(e.log.url)+"\n ")]),e._v(" "),s("dl",[s("dt",[e._v("Request Time")]),e._v(" "),s("dd",[e._v(e._s(e.log.meta.created))]),e._v(" "),s("dt",[e._v("IP")]),e._v(" "),s("dd",[e._v(e._s(e.req.ip))]),e._v(" "),s("dt",[e._v("Access token")]),e._v(" "),s("dd",[e._v(e._s(e.req.headers.x-e.access-e.token))]),e._v(" "),s("dt",[e._v("User-Agent")]),e._v(" "),s("dd",[e._v(e._s(e.req.headers.user-e.agent))]),e._v(" "),s("dt",[e._v("Referrer")]),e._v(" "),s("dd",[e._v(e._s(e.req.headers.referer))]),e._v(" "),s("dt",[e._v("Origin")]),e._v(" "),s("dd",[e._v(e._s(e.req.headers.origin))])])]),e._v(" "),s("div",{staticClass:"side-panel"},[s("h2",[e._v("Response")]),e._v(" "),s("dl",[s("dt",[e._v("ID")]),e._v(" "),s("dd",[e._v(e._s(e.res.requestId))]),e._v(" "),s("dt",[e._v("Response Time")]),e._v(" "),s("dd",[e._v(e._s(e.log.meta.created))]),e._v(" "),s("dt",[e._v("Status Code")]),e._v(" "),s("dd",[e._v(e._s(e.res.statusCode))]),e._v(" "),s("dt",[e._v("Content-Length")]),e._v(" "),s("dd",[e._v(e._s(e.res.headers["content-length"])+" bytes")]),e._v(" "),s("dt",[e._v("Message")]),e._v(" "),s("dd",[e._v(e._s(e.res.message))])])])])},r=[]},X9YS:function(e,t,s){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a(s("14Xm")),r=a(s("D3Ub")),d=a(s("t3Un"));function a(e){return e&&e.__esModule?e:{default:e}}t.default={name:"ViewRequest",data:function(){return{log:{},req:{},res:{}}},mounted:function(){this.update()},methods:{update:function(){var e=this;return(0,r.default)(n.default.mark((function t(){var s,r;return n.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return s=e.$route.params.requestId,console.log("id"),console.log(s),t.next=5,(0,d.default)({url:"/requestlog/"+s});case 5:r=t.sent.data,e.log=r,e.req=r.req,e.res=r.res;case 9:case"end":return t.stop()}}),t,e)})))()}}}},dWyy:function(e,t,s){"use strict";var n=s("p2RV");s.n(n).a},o4XF:function(e,t,s){"use strict";s.r(t);var n=s("5ZCy"),r=s("13QN");for(var d in r)["default"].indexOf(d)<0&&function(e){s.d(t,e,(function(){return r[e]}))}(d);s("dWyy");var a=s("KHd+"),u=Object(a.a)(r.default,n.a,n.b,!1,null,"e0156982",null);u.options.__file="ViewRequest.vue",t.default=u.exports},p2RV:function(e,t,s){}}]);