freedom-accounts-util
Version:
Utility helper for OAuth2.0 calls to Freedom! Accounts
98 lines (80 loc) • 2.4 kB
JavaScript
const cudl = require('cuddle');
const _ = require('lodash');
const config = require('./config');
const cache = require('./cache');
module.exports = {
generate_token,
refresh_token,
revoke_token,
remove_cache_only,
};
function generate_token (scopes) {
const scopes_string = _(scopes).sort().sortedUniq().join(' ');
const cached_token_result = cache.get('client', scopes_string);
if (cached_token_result) {
return Promise.resolve(cached_token_result);
}
const payload = {
client_id: config.client_id,
client_secret: config.client_secret,
grant_type: 'client_credentials',
scopes: scopes_string
};
return cudl.post
.to(config.base_url + config.path + '/oauth/token')
.send(payload)
.max_retry(config.retry_count)
.promise()
.then(result => {
cache.set('client', scopes_string, result, config.client_expiry);
return result;
});
}
function refresh_token (_refresh_token) {
const scopes_string = cache.find_key('client', {_refresh_token});
const payload = {
client_id: config.client_id,
client_secret: config.client_secret,
grant_type: 'refresh_token',
refresh_token: _refresh_token
};
return cudl.post
.to(config.base_url + config.path + '/oauth/token')
.send(payload)
.max_retry(config.retry_count)
.promise()
.then(result => {
if (scopes_string) {
cache.set('client', scopes_string, result, config.client_expiry);
}
return result;
});
}
function revoke_token (
token,
client_id,
type = '',
category = 'server'
) {
const payload = {
client_id,
type
};
const access_token = `Bearer ${token}`;
return Promise.resolve(remove_cache_only(token, category))
.then(() => {
cudl.post
.to(config.base_url + config.path + '/oauth/revoke')
.set_header('Authorization', access_token)
.send(payload)
.max_retry(config.retry_count)
.promise();
});
}
function remove_cache_only (token, category = 'client',) {
const _cache = cache.get(category, token);
if (_cache) {
cache.forget(category, token);
}
return _cache;
}