Files
cloudron-box/src/tokens.js
Johannes Zellner 5e11a9c8ed Fixup typo
2020-02-07 23:12:53 +01:00

106 lines
2.8 KiB
JavaScript

'use strict';
exports = module.exports = {
add: add,
get: get,
del: del,
getAllByUserId: getAllByUserId,
validateTokenType: validateTokenType,
// token client ids. we categorize them so we can have different restrictions based on the client
ID_WEBADMIN: 'cid-webadmin', // dashboard oauth
ID_SDK: 'cid-sdk', // created by user via dashboard
ID_CLI: 'cid-cli' // created via cli tool
};
let assert = require('assert'),
BoxError = require('./boxerror.js'),
hat = require('./hat.js'),
uuid = require('uuid'),
tokendb = require('./tokendb.js');
function validateTokenName(name) {
assert.strictEqual(typeof name, 'string');
if (name.length > 64) return new BoxError(BoxError.BAD_FIELD, 'name too long', { field: 'name' });
return null;
}
function validateTokenType(type) {
assert.strictEqual(typeof type, 'string');
const types = [ exports.ID_WEBADMIN, exports.ID_CLI, exports.ID_SDK ];
if (types.indexOf(type) === -1) return BoxError(BoxError.BAD_FIELD, `type must be one of ${types.join(',')}`);
return null;
}
function add(clientId, userId, expiresAt, options, callback) {
assert.strictEqual(typeof clientId, 'string');
assert.strictEqual(typeof userId, 'string');
assert.strictEqual(typeof expiresAt, 'number');
assert.strictEqual(typeof options, 'object');
assert.strictEqual(typeof callback, 'function');
const name = options.name || '';
let error = validateTokenName(name);
if (error) return callback(error);
const token = {
id: 'tid-' + uuid.v4(),
accessToken: hat(8 * 32),
identifier: userId,
clientId: clientId,
expires: expiresAt,
scope: 'unused',
name: name
};
tokendb.add(token, function (error) {
if (error) return callback(error);
callback(null, {
accessToken: token.accessToken,
tokenScopes: 'unused',
identifier: userId,
clientId: clientId,
expires: expiresAt
});
});
}
function get(id, callback) {
assert.strictEqual(typeof id, 'string');
assert.strictEqual(typeof callback, 'function');
tokendb.get(id, function (error, result) {
if (error) return callback(error);
callback(null, result);
});
}
function del(id, callback) {
assert.strictEqual(typeof id, 'string');
assert.strictEqual(typeof callback, 'function');
tokendb.del(id, function (error, result) {
if (error) return callback(error);
callback(null, result);
});
}
function getAllByUserId(userId, callback) {
assert.strictEqual(typeof userId, 'string');
assert.strictEqual(typeof callback, 'function');
tokendb.getByIdentifier(userId, function (error, result) {
if (error) return callback(error);
callback(null, result);
});
}