Skip to content

Commit

Permalink
Merge pull request #302 from lelylan/feature/access-token-refactor
Browse files Browse the repository at this point in the history
[access-token-refactor] Refactor access token parsing functionality
  • Loading branch information
jonathansamines authored Jan 31, 2020
2 parents 17fb4dc + 48077b2 commit 6878717
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 32 deletions.
38 changes: 6 additions & 32 deletions lib/access-token.js → lib/access-token/index.js
Original file line number Diff line number Diff line change
@@ -1,42 +1,14 @@
'use strict';

const Hoek = require('@hapi/hoek');
const debug = require('debug')('simple-oauth2:access-token');
const isDate = require('date-fns/isDate');
const parseISO = require('date-fns/parseISO');
const addSeconds = require('date-fns/addSeconds');
const isBefore = require('date-fns/isBefore');

const GrantParams = require('./grant-params');

function getExpirationDate(expiresIn) {
return addSeconds(new Date(), Number.parseInt(expiresIn, 10));
}

function parseToken(token) {
const tokenProperties = {};

if ('expires_at' in token) {
if (!isDate(token.expires_at)) {
if (typeof token.expires_at === 'number') {
tokenProperties.expires_at = new Date(token.expires_at * 1000);
} else {
tokenProperties.expires_at = parseISO(token.expires_at);
}
}
} else if ('expires_in' in token) {
tokenProperties.expires_at = getExpirationDate(token.expires_in);
} else {
debug('No token expiration property was found. Ignoring date parsing');
}

return Object.assign({}, token, tokenProperties);
}
const GrantParams = require('../grant-params');
const { parseToken } = require('./token-parser');

const ACCESS_TOKEN_PROPERTY_NAME = 'access_token';
const REFRESH_TOKEN_PROPERTY_NAME = 'refresh_token';

module.exports = class AccessToken {
class AccessToken {
static factory(config, client) {
return (token) => new AccessToken(config, client, token);
}
Expand Down Expand Up @@ -107,4 +79,6 @@ module.exports = class AccessToken {
await this.revoke(ACCESS_TOKEN_PROPERTY_NAME);
await this.revoke(REFRESH_TOKEN_PROPERTY_NAME);
}
};
}

module.exports = AccessToken;
43 changes: 43 additions & 0 deletions lib/access-token/token-parser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
'use strict';

const debug = require('debug')('simple-oauth2:access-token');
const isDate = require('date-fns/isDate');
const parseISO = require('date-fns/parseISO');
const addSeconds = require('date-fns/addSeconds');

const EXPIRES_AT_PROPERTY_NAME = 'expires_at';
const EXPIRES_IN_PROPERTY_NAME = 'expires_in';

function getExpirationDate(expiresIn) {
return addSeconds(new Date(), Number.parseInt(expiresIn, 10));
}

function parseExpirationDate(expirationDate) {
if (isDate(expirationDate)) {
return expirationDate;
}

// UNIX timestamp
if (typeof expirationDate === 'number') {
return new Date(expirationDate * 1000);
}

// ISO 8601 string
return parseISO(expirationDate);
}

function parseToken(token) {
const tokenProperties = {};

if (EXPIRES_AT_PROPERTY_NAME in token) {
tokenProperties[EXPIRES_AT_PROPERTY_NAME] = parseExpirationDate(token[EXPIRES_AT_PROPERTY_NAME]);
} else if (EXPIRES_IN_PROPERTY_NAME in token) {
tokenProperties[EXPIRES_AT_PROPERTY_NAME] = getExpirationDate(token[EXPIRES_IN_PROPERTY_NAME]);
} else {
debug('No token expiration property was found. Ignoring date parsing');
}

return Object.assign({}, token, tokenProperties);
}

module.exports = { parseToken };

0 comments on commit 6878717

Please sign in to comment.