mirror of
https://github.com/Dan6erbond/sk-auth.git
synced 2025-06-08 01:16:42 +02:00
69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
var helpers = require('../helpers.js');
|
|
var providers_oauth2_base = require('./oauth2.base.js');
|
|
require('./base.js');
|
|
|
|
const defaultConfig = {
|
|
responseType: "code",
|
|
grantType: "authorization_code",
|
|
contentType: "application/json"
|
|
};
|
|
class OAuth2Provider extends providers_oauth2_base.OAuth2BaseProvider {
|
|
constructor(config) {
|
|
super({
|
|
...defaultConfig,
|
|
...config
|
|
});
|
|
}
|
|
getAuthorizationUrl({ url }, auth, state, nonce) {
|
|
const data = {
|
|
state,
|
|
nonce,
|
|
response_type: this.config.responseType,
|
|
client_id: this.config.clientId,
|
|
scope: Array.isArray(this.config.scope) ? this.config.scope.join(" ") : this.config.scope,
|
|
redirect_uri: this.getCallbackUri(auth, url.host),
|
|
...this.config.authorizationParams ?? {}
|
|
};
|
|
const authUrl = `${this.config.authorizationUrl}?${new URLSearchParams(data)}`;
|
|
return authUrl;
|
|
}
|
|
async getTokens(code, redirectUri) {
|
|
const data = {
|
|
code,
|
|
grant_type: this.config.grantType,
|
|
client_id: this.config.clientId,
|
|
redirect_uri: redirectUri,
|
|
client_secret: this.config.clientSecret,
|
|
...this.config.params ?? {}
|
|
};
|
|
let body;
|
|
if (this.config.contentType === "application/x-www-form-urlencoded") {
|
|
body = Object.entries(data).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join("&");
|
|
} else {
|
|
body = JSON.stringify(data);
|
|
}
|
|
const res = await fetch(this.config.accessTokenUrl, {
|
|
body,
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": this.config.contentType,
|
|
...this.config.headers ?? {}
|
|
}
|
|
});
|
|
return await res.json();
|
|
}
|
|
async getUserProfile(tokens) {
|
|
const res = await fetch(this.config.profileUrl, {
|
|
headers: { Authorization: `${helpers.ucFirst(tokens.token_type)} ${tokens.access_token}` }
|
|
});
|
|
return await res.json();
|
|
}
|
|
}
|
|
|
|
exports.OAuth2Provider = OAuth2Provider;
|
|
//# sourceMappingURL=oauth2.js.map
|