phanpy/src/utils/auth.js

68 wiersze
1.8 KiB
JavaScript

const {
PHANPY_CLIENT_NAME: CLIENT_NAME,
PHANPY_WEBSITE: WEBSITE,
PHANPY_SCHEME: SCHEME = 'https',
} = import.meta.env;
const SCOPES = 'read write follow push';
export async function registerApplication({ instanceURL }) {
const registrationParams = new URLSearchParams({
client_name: CLIENT_NAME,
redirect_uris: location.origin + location.pathname,
scopes: SCOPES,
website: WEBSITE,
});
const registrationResponse = await fetch(
`${SCHEME}://${instanceURL}/api/v1/apps`,
{
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: registrationParams.toString(),
},
);
const registrationJSON = await registrationResponse.json();
console.log({ registrationJSON });
return registrationJSON;
}
export async function getAuthorizationURL({ instanceURL, client_id }) {
const authorizationParams = new URLSearchParams({
client_id,
scope: SCOPES,
redirect_uri: location.origin + location.pathname,
// redirect_uri: 'urn:ietf:wg:oauth:2.0:oob',
response_type: 'code',
});
const authorizationURL = `${SCHEME}://${instanceURL}/oauth/authorize?${authorizationParams.toString()}`;
return authorizationURL;
}
export async function getAccessToken({
instanceURL,
client_id,
client_secret,
code,
}) {
const params = new URLSearchParams({
client_id,
client_secret,
redirect_uri: location.origin + location.pathname,
grant_type: 'authorization_code',
code,
scope: SCOPES,
});
const tokenResponse = await fetch(`${SCHEME}://${instanceURL}/oauth/token`, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: params.toString(),
});
const tokenJSON = await tokenResponse.json();
console.log({ tokenJSON });
return tokenJSON;
}