insomnia/app/network/o-auth-2/grant-client-credentials.js
Gregory Schier 3f5e7e2e14 First-Party OAuth 2.0 Support (#120)
* Proof of concept authorize call

* Authorize and Refresh endpoints done

* OAuth2 editor started

* Some small fixes

* Set OAuth headers on request

* Started on some OAuth tests

* Updated network logic with new OAuth API

* OAuth forms and refactor flows

* Fix grant type handling

* Moved auth handling out of render pipeline

* Fixed legacy auth header

* Fix vertical center

* Prompt user on auth type change

* Refresh tokens working (I think) and better UI

* Catch same type auth change

* POC refresh token and small refactor

* Better token handling

* LOading state to token refresh

* Show o-auth-2 errors

* Some minor updates
2017-03-23 15:10:42 -07:00

47 lines
1.3 KiB
JavaScript

import * as querystring from '../../common/querystring';
import {getBasicAuthHeader} from '../../common/misc';
import * as c from './constants';
import {responseToObject} from './misc';
export default async function (accessTokenUrl, credentialsInBody, clientId, clientSecret, scope = '') {
const params = [
{name: c.P_GRANT_TYPE, value: c.GRANT_TYPE_CLIENT_CREDENTIALS}
];
// Add optional params
scope && params.push({name: c.P_SCOPE, value: scope});
const headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/x-www-form-urlencoded, application/json'
};
if (credentialsInBody) {
params.push({name: c.P_CLIENT_ID, value: clientId});
params.push({name: c.P_CLIENT_SECRET, value: clientSecret});
} else {
const {name, value} = getBasicAuthHeader(clientId, clientSecret);
headers[name] = value;
}
const config = {
method: 'POST',
body: querystring.buildFromParams(params),
headers: headers
};
const response = await window.fetch(accessTokenUrl, config);
const body = await response.text();
const results = responseToObject(body, [
c.P_ACCESS_TOKEN,
c.P_TOKEN_TYPE,
c.P_EXPIRES_IN,
c.P_SCOPE,
c.P_ERROR,
c.P_ERROR_URI,
c.P_ERROR_DESCRIPTION
]);
return results;
}