| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | 
							- /* global WIKI */
 
- const Model = require('objection').Model
 
- const moment = require('moment')
 
- const ms = require('ms')
 
- const jwt = require('jsonwebtoken')
 
- /**
 
-  * Users model
 
-  */
 
- module.exports = class ApiKey extends Model {
 
-   static get tableName() { return 'apiKeys' }
 
-   static get jsonSchema () {
 
-     return {
 
-       type: 'object',
 
-       required: ['name', 'key'],
 
-       properties: {
 
-         id: {type: 'integer'},
 
-         name: {type: 'string'},
 
-         key: {type: 'string'},
 
-         expiration: {type: 'string'},
 
-         isRevoked: {type: 'boolean'},
 
-         createdAt: {type: 'string'},
 
-         validUntil: {type: 'string'}
 
-       }
 
-     }
 
-   }
 
-   async $beforeUpdate(opt, context) {
 
-     await super.$beforeUpdate(opt, context)
 
-     this.updatedAt = moment.utc().toISOString()
 
-   }
 
-   async $beforeInsert(context) {
 
-     await super.$beforeInsert(context)
 
-     this.createdAt = moment.utc().toISOString()
 
-     this.updatedAt = moment.utc().toISOString()
 
-   }
 
-   static async createNewKey ({ name, expiration, fullAccess, group }) {
 
-     const entry = await WIKI.models.apiKeys.query().insert({
 
-       name,
 
-       key: 'pending',
 
-       expiration: moment.utc().add(ms(expiration), 'ms').toISOString(),
 
-       isRevoked: true
 
-     })
 
-     const key = jwt.sign({
 
-       api: entry.id,
 
-       grp: fullAccess ? 1 : group
 
-     }, {
 
-       key: WIKI.config.certs.private,
 
-       passphrase: WIKI.config.sessionSecret
 
-     }, {
 
-       algorithm: 'RS256',
 
-       expiresIn: expiration,
 
-       audience: WIKI.config.auth.audience,
 
-       issuer: 'urn:wiki.js'
 
-     })
 
-     await WIKI.models.apiKeys.query().findById(entry.id).patch({
 
-       key,
 
-       isRevoked: false
 
-     })
 
-     return key
 
-   }
 
- }
 
 
  |