added hook to create new session with stored key

This commit is contained in:
tigerbot 2017-08-01 11:15:37 -06:00
parent e42079d856
commit 39b8e19bae
1 changed files with 43 additions and 1 deletions

View File

@ -283,7 +283,7 @@ OAUTH3.urls.publishKey = function (directive, opts) {
return {
method: jwkDir.method || opts.method || 'POST'
, url: url
, data: opts.public_key
, data: opts.public_key || opts.publicKey
, session: opts.session
};
};
@ -605,6 +605,48 @@ OAUTH3.hooks.keyPairs = {
return OAUTH3.PromiseA.resolve(OAUTH3._hooks.keyPairs.clear());
}
};
OAUTH3.hooks.session.get = function (providerUri, id) {
OAUTH3.hooks._checkStorage('sessions', 'get');
var sessProm = OAUTH3.PromiseA.resolve(OAUTH3._hooks.sessions.get(providerUri, id));
if (providerUri !== OAUTH3.clientUri(window.location)) {
return sessProm;
}
return sessProm.then(function (session) {
if (session && OAUTH3.jwt.freshness(session.token) === 'fresh') {
return session;
}
return OAUTH3.hooks.keyPairs.all().then(function (keyPairs) {
var pair;
if (id) {
pair = keyPairs[id];
} else if (Object.keys(keyPairs).length === 1) {
id = Object.keys(keyPairs)[0];
pair = keyPairs[id];
} else if (Object.keys(keyPairs).length > 1) {
console.error("too many users, don't know which key to use");
}
if (!pair) {
return null;
}
var payload = {
iss: providerUri
, aud: providerUri
, azp: providerUri
, sub: pair.sub || id
, scope: ''
};
return OAUTH3.jwt.sign(payload, pair.privateKey).then(function (token) {
return OAUTH3.hooks.session.refresh(
{ provider_uri: providerUri, client_uri: providerUri || providerUri }
, { access_token: token }
);
});
});
});
};
OAUTH3._defaultStorage.grants = {
prefix: 'grants-'