@bee.js/node 0.0.34 → 0.0.38
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/beeRequest.js +42 -42
- package/beehive.js +482 -454
- package/index.js +14 -14
- package/lib/DBA/beeDBA.js +119 -119
- package/lib/DEV/beeDEV.js +41 -41
- package/lib/JWT/beeJWT.js +72 -68
- package/lib/ORM/beeORM.js +319 -314
- package/lib/WEB/freeRoute.js +4 -4
- package/lib/WEB/route.js +27 -27
- package/lib/beeHive/create.js +51 -51
- package/lib/beeHive/headers.js +9 -9
- package/lib/beeHive/load.js +19 -19
- package/lib/beeHive/log.js +2 -2
- package/lib/beeHive/routes.js +34 -34
- package/lib/beeHive/start.js +29 -29
- package/package.json +40 -40
- package/security/index.js +8 -8
- package/services/CRON.js +8 -8
- package/services/EMAIL.js +2 -2
- package/services/HTTP.js +32 -32
- package/services/HTTPS.js +31 -31
- package/services/LOGS.js +7 -7
- package/services/SCRIPT.js +13 -13
- package/services/SHELL.js +2 -2
- package/services/index.js +9 -9
- package/tools/beeTools.js +18 -18
- package/tools/guid.js +14 -14
- package/tools/hash.js +12 -12
- package/tools/model.js +20 -20
- package/tools/slug.js +16 -16
- package/tools/string.js +55 -55
package/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
load: require('./lib/beeHive/load'),
|
|
3
|
-
create: require('./lib/beeHive/create'),
|
|
4
|
-
start: require('./lib/beeHive/start'),
|
|
5
|
-
routes: require('./lib/beeHive/routes'),
|
|
6
|
-
route: require('./lib/WEB/route'),
|
|
7
|
-
freeRoute: require('./lib/WEB/freeRoute'),
|
|
8
|
-
request: require('./beeRequest'),
|
|
9
|
-
hive: require('./beehive'),
|
|
10
|
-
tools: require('./tools/beeTools'),
|
|
11
|
-
security: require('./security'),
|
|
12
|
-
services: require('./services'),
|
|
13
|
-
//scheduler: require('./security'), //TODO
|
|
14
|
-
status: (req, res)=>res.status(200).send(`${global.configs.name || 'Bee.js'} running version: ${global.configs.version}`)
|
|
1
|
+
module.exports = {
|
|
2
|
+
load: require('./lib/beeHive/load'),
|
|
3
|
+
create: require('./lib/beeHive/create'),
|
|
4
|
+
start: require('./lib/beeHive/start'),
|
|
5
|
+
routes: require('./lib/beeHive/routes'),
|
|
6
|
+
route: require('./lib/WEB/route'),
|
|
7
|
+
freeRoute: require('./lib/WEB/freeRoute'),
|
|
8
|
+
request: require('./beeRequest'),
|
|
9
|
+
hive: require('./beehive'),
|
|
10
|
+
tools: require('./tools/beeTools'),
|
|
11
|
+
security: require('./security'),
|
|
12
|
+
services: require('./services'),
|
|
13
|
+
//scheduler: require('./security'), //TODO
|
|
14
|
+
status: (req, res)=>res.status(200).send(`${global.configs.name || 'Bee.js'} running version: ${global.configs.version}`)
|
|
15
15
|
}
|
package/lib/DBA/beeDBA.js
CHANGED
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
const beeORM = require('../ORM/beeORM')
|
|
2
|
-
const beeHive = require('../../beehive')
|
|
3
|
-
|
|
4
|
-
const fieldType = {
|
|
5
|
-
mysql : function(field) {
|
|
6
|
-
let type = field.type.split(' ')[0].trim()
|
|
7
|
-
|
|
8
|
-
switch (type) {
|
|
9
|
-
case 'integer':
|
|
10
|
-
case 'int':
|
|
11
|
-
type = 'int'
|
|
12
|
-
break
|
|
13
|
-
case 'decimal':
|
|
14
|
-
type = `decimal(${(field.length || 10.1).toString().replace('.',',')})`
|
|
15
|
-
break
|
|
16
|
-
|
|
17
|
-
case 'string':
|
|
18
|
-
case 'varchar':
|
|
19
|
-
type = `varchar(${field.length || 45})`
|
|
20
|
-
break
|
|
21
|
-
case 'guid':
|
|
22
|
-
type = `binary(16)`
|
|
23
|
-
field.ai = false
|
|
24
|
-
break
|
|
25
|
-
case 'char':
|
|
26
|
-
type = `char(${field.length || 5})`
|
|
27
|
-
break
|
|
28
|
-
}
|
|
29
|
-
return type
|
|
30
|
-
+ (!field.null ? ' NOT NULL' : '')
|
|
31
|
-
+ (field.ai ? ' AUTO_INCREMENT' : '')
|
|
32
|
-
+ (field.default !== undefined ? ` DEFAULT ${field.default}` : '')
|
|
33
|
-
+ (field.default !== undefined && field.onUpdate ? ` ON UPDATE ${field.default}` : '')
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
module.exports.actions = {
|
|
38
|
-
mysql : {
|
|
39
|
-
MODEL_STATEMENT_EXECUTE : async function(req, res) {
|
|
40
|
-
let hive = beeHive()
|
|
41
|
-
let data = await hive.dbExec(req.body.statement_execute)
|
|
42
|
-
|
|
43
|
-
res.status(200).send({data: data})
|
|
44
|
-
},
|
|
45
|
-
|
|
46
|
-
MODEL_CREATE_DB : function(req, res) {
|
|
47
|
-
let configsDB = global.configs.databases.default
|
|
48
|
-
let models = global.models
|
|
49
|
-
let SQL = ['','']
|
|
50
|
-
|
|
51
|
-
//TODO create db with user permissions
|
|
52
|
-
|
|
53
|
-
Object
|
|
54
|
-
.keys(models)
|
|
55
|
-
.map((model)=> {
|
|
56
|
-
if(!req.body.models[model]._checked) return
|
|
57
|
-
|
|
58
|
-
SQL[0] += this.MODEL_CREATE_TABLE(models[model], configsDB)
|
|
59
|
-
SQL[1] += models[model].relations
|
|
60
|
-
? this.MODEL_CREATE_CONSTRAINT(models[model], configsDB)
|
|
61
|
-
: ''
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
res.status(200).send({data: SQL.join("")})
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
MODEL_CREATE_TABLE : function(model, configsDB) {
|
|
68
|
-
let q = beeORM.quote
|
|
69
|
-
let SQL = ''
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
SQL = `CREATE TABLE IF NOT EXISTS ${q(model.table)} (`
|
|
73
|
-
|
|
74
|
-
for(let field in model.schema)
|
|
75
|
-
SQL += `\n ${q(field)} ${fieldType[configsDB.drive](model.schema[field])},` // TODO criar funcao para relacionamentos.
|
|
76
|
-
|
|
77
|
-
SQL = SQL.slice(0, SQL.length - 1)
|
|
78
|
-
|
|
79
|
-
if(model.indexes) {
|
|
80
|
-
if(model.indexes.keys)
|
|
81
|
-
SQL += `,\n PRIMARY KEY (${q(model.indexes.keys)})`
|
|
82
|
-
|
|
83
|
-
//TODO fazer uniques e cia. colocar em funcao.
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
SQL += `\n) ENGINE=${configsDB.engine} DEFAULT CHARSET=${configsDB.charset};\n\n`
|
|
87
|
-
|
|
88
|
-
return SQL
|
|
89
|
-
},
|
|
90
|
-
|
|
91
|
-
MODEL_CREATE_CONSTRAINT : function(model, configsDB) {
|
|
92
|
-
let q = beeORM.quote
|
|
93
|
-
let SQL = '\n\n\n\n'
|
|
94
|
-
|
|
95
|
-
SQL += `----- Constraints for table ${q(model.table)} -----\n\n`
|
|
96
|
-
SQL += `ALTER TABLE ${q(model.table)}\n`
|
|
97
|
-
|
|
98
|
-
for(let field in model.relations)
|
|
99
|
-
SQL += ` ADD CONSTRAINT ${q('FK_'+model.relations[field].split('.')[0])}
|
|
100
|
-
FOREIGN KEY ${q(field)}
|
|
101
|
-
REFERENCES ${model.relations[field].split('.')[0]}(${q('FK_'+model.relations[field].split('.')[0])})
|
|
102
|
-
ON DELETE CASCATE ON UPDATE CASCATE;
|
|
103
|
-
\n\n`
|
|
104
|
-
|
|
105
|
-
//SQL += `-- COMMIT; \n\n`
|
|
106
|
-
|
|
107
|
-
return SQL
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
|
|
111
|
-
mssql : {
|
|
112
|
-
// TODO next version
|
|
113
|
-
},
|
|
114
|
-
|
|
115
|
-
mongoDB : {
|
|
116
|
-
// TODO next version
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
}
|
|
1
|
+
const beeORM = require('../ORM/beeORM')
|
|
2
|
+
const beeHive = require('../../beehive')
|
|
3
|
+
|
|
4
|
+
const fieldType = {
|
|
5
|
+
mysql : function(field) {
|
|
6
|
+
let type = field.type.split(' ')[0].trim()
|
|
7
|
+
|
|
8
|
+
switch (type) {
|
|
9
|
+
case 'integer':
|
|
10
|
+
case 'int':
|
|
11
|
+
type = 'int'
|
|
12
|
+
break
|
|
13
|
+
case 'decimal':
|
|
14
|
+
type = `decimal(${(field.length || 10.1).toString().replace('.',',')})`
|
|
15
|
+
break
|
|
16
|
+
|
|
17
|
+
case 'string':
|
|
18
|
+
case 'varchar':
|
|
19
|
+
type = `varchar(${field.length || 45})`
|
|
20
|
+
break
|
|
21
|
+
case 'guid':
|
|
22
|
+
type = `binary(16)`
|
|
23
|
+
field.ai = false
|
|
24
|
+
break
|
|
25
|
+
case 'char':
|
|
26
|
+
type = `char(${field.length || 5})`
|
|
27
|
+
break
|
|
28
|
+
}
|
|
29
|
+
return type
|
|
30
|
+
+ (!field.null ? ' NOT NULL' : '')
|
|
31
|
+
+ (field.ai ? ' AUTO_INCREMENT' : '')
|
|
32
|
+
+ (field.default !== undefined ? ` DEFAULT ${field.default}` : '')
|
|
33
|
+
+ (field.default !== undefined && field.onUpdate ? ` ON UPDATE ${field.default}` : '')
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports.actions = {
|
|
38
|
+
mysql : {
|
|
39
|
+
MODEL_STATEMENT_EXECUTE : async function(req, res) {
|
|
40
|
+
let hive = beeHive()
|
|
41
|
+
let data = await hive.dbExec(req.body.statement_execute)
|
|
42
|
+
|
|
43
|
+
res.status(200).send({data: data})
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
MODEL_CREATE_DB : function(req, res) {
|
|
47
|
+
let configsDB = global.configs.databases.default
|
|
48
|
+
let models = global.models
|
|
49
|
+
let SQL = ['','']
|
|
50
|
+
|
|
51
|
+
//TODO create db with user permissions
|
|
52
|
+
|
|
53
|
+
Object
|
|
54
|
+
.keys(models)
|
|
55
|
+
.map((model)=> {
|
|
56
|
+
if(!req.body.models[model]._checked) return
|
|
57
|
+
|
|
58
|
+
SQL[0] += this.MODEL_CREATE_TABLE(models[model], configsDB)
|
|
59
|
+
SQL[1] += models[model].relations
|
|
60
|
+
? this.MODEL_CREATE_CONSTRAINT(models[model], configsDB)
|
|
61
|
+
: ''
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
res.status(200).send({data: SQL.join("")})
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
MODEL_CREATE_TABLE : function(model, configsDB) {
|
|
68
|
+
let q = beeORM.quote
|
|
69
|
+
let SQL = ''
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
SQL = `CREATE TABLE IF NOT EXISTS ${q(model.table)} (`
|
|
73
|
+
|
|
74
|
+
for(let field in model.schema)
|
|
75
|
+
SQL += `\n ${q(field)} ${fieldType[configsDB.drive](model.schema[field])},` // TODO criar funcao para relacionamentos.
|
|
76
|
+
|
|
77
|
+
SQL = SQL.slice(0, SQL.length - 1)
|
|
78
|
+
|
|
79
|
+
if(model.indexes) {
|
|
80
|
+
if(model.indexes.keys)
|
|
81
|
+
SQL += `,\n PRIMARY KEY (${q(model.indexes.keys)})`
|
|
82
|
+
|
|
83
|
+
//TODO fazer uniques e cia. colocar em funcao.
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
SQL += `\n) ENGINE=${configsDB.engine} DEFAULT CHARSET=${configsDB.charset};\n\n`
|
|
87
|
+
|
|
88
|
+
return SQL
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
MODEL_CREATE_CONSTRAINT : function(model, configsDB) {
|
|
92
|
+
let q = beeORM.quote
|
|
93
|
+
let SQL = '\n\n\n\n'
|
|
94
|
+
|
|
95
|
+
SQL += `----- Constraints for table ${q(model.table)} -----\n\n`
|
|
96
|
+
SQL += `ALTER TABLE ${q(model.table)}\n`
|
|
97
|
+
|
|
98
|
+
for(let field in model.relations)
|
|
99
|
+
SQL += ` ADD CONSTRAINT ${q('FK_'+model.relations[field].split('.')[0])}
|
|
100
|
+
FOREIGN KEY ${q(field)}
|
|
101
|
+
REFERENCES ${model.relations[field].split('.')[0]}(${q('FK_'+model.relations[field].split('.')[0])})
|
|
102
|
+
ON DELETE CASCATE ON UPDATE CASCATE;
|
|
103
|
+
\n\n`
|
|
104
|
+
|
|
105
|
+
//SQL += `-- COMMIT; \n\n`
|
|
106
|
+
|
|
107
|
+
return SQL
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
mssql : {
|
|
112
|
+
// TODO next version
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
mongoDB : {
|
|
116
|
+
// TODO next version
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
}
|
package/lib/DEV/beeDEV.js
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
const log = require('../beeHive/log')
|
|
2
|
-
const beeDBA = require('../DBA/beeDBA')
|
|
3
|
-
const glob = require('glob')
|
|
4
|
-
const fs = require('fs')
|
|
5
|
-
|
|
6
|
-
module.exports = async function(req, res, next) {
|
|
7
|
-
if(!global.configs.dev) return res.send(null)
|
|
8
|
-
|
|
9
|
-
res.header("Access-Control-Allow-Origin", "*")
|
|
10
|
-
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
|
|
11
|
-
|
|
12
|
-
var result = {}
|
|
13
|
-
|
|
14
|
-
switch(req.params.action) {
|
|
15
|
-
case 'MODEL_STATEMENT_EXECUTE':
|
|
16
|
-
result = await beeDBA.actions[global.configs.databases.default.type || 'mysql'][req.params.action](req, res, next)
|
|
17
|
-
break
|
|
18
|
-
|
|
19
|
-
case 'MODEL_CREATE_DB':
|
|
20
|
-
result = beeDBA.actions[global.configs.databases.default.type || 'mysql'][req.params.action](req, res, next)
|
|
21
|
-
break
|
|
22
|
-
|
|
23
|
-
case 'PATHS':
|
|
24
|
-
return glob("**/*", {},
|
|
25
|
-
function (err, files) {
|
|
26
|
-
res.send({ data: files })
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
case 'PATH_DATA':
|
|
30
|
-
return fs.readFile(`${require.main.path}/${req.body.path}`,
|
|
31
|
-
function (err, data) {
|
|
32
|
-
res.send({ data: { path_data: Buffer.from(data).toString(), path: req.body.path } })
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
default:
|
|
36
|
-
result = {...global.configs, env : process.env}
|
|
37
|
-
log('# Started a remote connection.')
|
|
38
|
-
break
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
res.send(result)
|
|
1
|
+
const log = require('../beeHive/log')
|
|
2
|
+
const beeDBA = require('../DBA/beeDBA')
|
|
3
|
+
const glob = require('glob')
|
|
4
|
+
const fs = require('fs')
|
|
5
|
+
|
|
6
|
+
module.exports = async function(req, res, next) {
|
|
7
|
+
if(!global.configs.dev) return res.send(null)
|
|
8
|
+
|
|
9
|
+
res.header("Access-Control-Allow-Origin", "*")
|
|
10
|
+
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
|
|
11
|
+
|
|
12
|
+
var result = {}
|
|
13
|
+
|
|
14
|
+
switch(req.params.action) {
|
|
15
|
+
case 'MODEL_STATEMENT_EXECUTE':
|
|
16
|
+
result = await beeDBA.actions[global.configs.databases.default.type || 'mysql'][req.params.action](req, res, next)
|
|
17
|
+
break
|
|
18
|
+
|
|
19
|
+
case 'MODEL_CREATE_DB':
|
|
20
|
+
result = beeDBA.actions[global.configs.databases.default.type || 'mysql'][req.params.action](req, res, next)
|
|
21
|
+
break
|
|
22
|
+
|
|
23
|
+
case 'PATHS':
|
|
24
|
+
return glob("**/*", {},
|
|
25
|
+
function (err, files) {
|
|
26
|
+
res.send({ data: files })
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
case 'PATH_DATA':
|
|
30
|
+
return fs.readFile(`${require.main.path}/${req.body.path}`,
|
|
31
|
+
function (err, data) {
|
|
32
|
+
res.send({ data: { path_data: Buffer.from(data).toString(), path: req.body.path } })
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
default:
|
|
36
|
+
result = {...global.configs, env : process.env}
|
|
37
|
+
log('# Started a remote connection.')
|
|
38
|
+
break
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
res.send(result)
|
|
42
42
|
}
|
package/lib/JWT/beeJWT.js
CHANGED
|
@@ -1,69 +1,73 @@
|
|
|
1
|
-
const crypto = require('crypto')
|
|
2
|
-
const log = require('../beeHive/log')
|
|
3
|
-
|
|
4
|
-
module.exports = function token(_payload = null, header = {}) {
|
|
5
|
-
|
|
6
|
-
if(_payload) {
|
|
7
|
-
|
|
8
|
-
let { jwt, ...payload } = _payload
|
|
9
|
-
|
|
10
|
-
if(!global.configs.jwt && !global.configs.jwt.secret) return log("ERROR: no jwt.secret defined in configs.")
|
|
11
|
-
|
|
12
|
-
let secret = global.configs.jwt.secret
|
|
13
|
-
let iat = new Date().getTime()
|
|
14
|
-
let exp = new Date().getTime() + 60 * 1000
|
|
15
|
-
|
|
16
|
-
header = {...header,
|
|
17
|
-
typ: header.typ || "JWT",
|
|
18
|
-
alg: header.alg || "HS256"
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
payload = {...payload,
|
|
22
|
-
iat: iat,
|
|
23
|
-
exp: exp,
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
header = JSON.stringify(header)
|
|
27
|
-
header = (new Buffer.from(header)).toString('base64')
|
|
28
|
-
|
|
29
|
-
payload = JSON.stringify(payload)
|
|
30
|
-
payload = (new Buffer.from(payload)).toString('base64')
|
|
31
|
-
|
|
32
|
-
let signature = crypto
|
|
33
|
-
.createHmac("sha256", secret)
|
|
34
|
-
.update(`${header}.${payload}`)
|
|
35
|
-
.digest("base64")
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.data.jwt =
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
this.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
let
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
1
|
+
const crypto = require('crypto')
|
|
2
|
+
const log = require('../beeHive/log')
|
|
3
|
+
|
|
4
|
+
module.exports = function token(_payload = null, header = {}) {
|
|
5
|
+
|
|
6
|
+
if(_payload) {
|
|
7
|
+
|
|
8
|
+
let { jwt, ...payload } = _payload
|
|
9
|
+
|
|
10
|
+
if(!global.configs.jwt && !global.configs.jwt.secret) return log("ERROR: no jwt.secret defined in configs.")
|
|
11
|
+
|
|
12
|
+
let secret = global.configs.jwt.secret
|
|
13
|
+
let iat = new Date().getTime()
|
|
14
|
+
let exp = new Date().getTime() + 60 * 1000
|
|
15
|
+
|
|
16
|
+
header = {...header,
|
|
17
|
+
typ: header.typ || "JWT",
|
|
18
|
+
alg: header.alg || "HS256"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
payload = {...payload,
|
|
22
|
+
iat: iat,
|
|
23
|
+
exp: exp,
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
header = JSON.stringify(header)
|
|
27
|
+
header = (new Buffer.from(header)).toString('base64')
|
|
28
|
+
|
|
29
|
+
payload = JSON.stringify(payload)
|
|
30
|
+
payload = (new Buffer.from(payload)).toString('base64')
|
|
31
|
+
|
|
32
|
+
let signature = crypto
|
|
33
|
+
.createHmac("sha256", secret)
|
|
34
|
+
.update(`${header}.${payload}`)
|
|
35
|
+
.digest("base64")
|
|
36
|
+
|
|
37
|
+
let token = `${header}.${payload}.${signature}`
|
|
38
|
+
|
|
39
|
+
this.data.jwt = this.data.jwt && typeof this.data.jwt !== "object"
|
|
40
|
+
? [this.data.jwt]
|
|
41
|
+
: this.data.jwt
|
|
42
|
+
|
|
43
|
+
this.data.jwt = !this.data.jwt
|
|
44
|
+
? token
|
|
45
|
+
: this.data.jwt.concat(token)
|
|
46
|
+
|
|
47
|
+
this.counters.jwt = (this.counters.jwt||0) + 1
|
|
48
|
+
|
|
49
|
+
log("JWT created: " + this.data.jwt)
|
|
50
|
+
|
|
51
|
+
return this
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return {...this,
|
|
55
|
+
verify: function(token) {
|
|
56
|
+
|
|
57
|
+
let secret = global.configs.jwt.secret
|
|
58
|
+
let array = token.split(".")
|
|
59
|
+
let header = array[0]
|
|
60
|
+
let payload = array[1]
|
|
61
|
+
|
|
62
|
+
let signature = crypto
|
|
63
|
+
.createHmac("sha256", secret)
|
|
64
|
+
.update(`${header}.${payload}`)
|
|
65
|
+
.digest("base64")
|
|
66
|
+
|
|
67
|
+
return token === `${header}.${payload}.${signature}`
|
|
68
|
+
? (new Buffer.from(payload, 'base64')).toString("ascii")
|
|
69
|
+
: false
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
}
|
|
69
73
|
}
|