mirror of
https://github.com/github/codeql-action.git
synced 2025-12-30 03:00:13 +08:00
45 lines
1.4 KiB
JavaScript
45 lines
1.4 KiB
JavaScript
function oauthAuthorizationUrl(options) {
|
|
const clientType = options.clientType || "oauth-app";
|
|
const baseUrl = options.baseUrl || "https://github.com";
|
|
const result = {
|
|
clientType,
|
|
allowSignup: options.allowSignup === false ? false : true,
|
|
clientId: options.clientId,
|
|
login: options.login || null,
|
|
redirectUrl: options.redirectUrl || null,
|
|
state: options.state || Math.random().toString(36).substr(2),
|
|
url: ""
|
|
};
|
|
if (clientType === "oauth-app") {
|
|
const scopes = "scopes" in options ? options.scopes : [];
|
|
result.scopes = typeof scopes === "string" ? scopes.split(/[,\s]+/).filter(Boolean) : scopes;
|
|
}
|
|
result.url = urlBuilderAuthorize(`${baseUrl}/login/oauth/authorize`, result);
|
|
return result;
|
|
}
|
|
function urlBuilderAuthorize(base, options) {
|
|
const map = {
|
|
allowSignup: "allow_signup",
|
|
clientId: "client_id",
|
|
login: "login",
|
|
redirectUrl: "redirect_uri",
|
|
scopes: "scope",
|
|
state: "state"
|
|
};
|
|
let url = base;
|
|
Object.keys(map).filter((k) => options[k] !== null).filter((k) => {
|
|
if (k !== "scopes")
|
|
return true;
|
|
if (options.clientType === "github-app")
|
|
return false;
|
|
return !Array.isArray(options[k]) || options[k].length > 0;
|
|
}).map((key) => [map[key], `${options[key]}`]).forEach(([key, value], index) => {
|
|
url += index === 0 ? `?` : "&";
|
|
url += `${key}=${encodeURIComponent(value)}`;
|
|
});
|
|
return url;
|
|
}
|
|
export {
|
|
oauthAuthorizationUrl
|
|
};
|