mirror of
https://github.com/elyby/accounts-frontend.git
synced 2024-12-05 04:59:26 +05:30
79 lines
2.6 KiB
JavaScript
79 lines
2.6 KiB
JavaScript
import request from 'services/request';
|
|
|
|
export default {
|
|
validate(oauthData) {
|
|
return request.get(
|
|
'/api/oauth2/v1/validate',
|
|
getOAuthRequest(oauthData)
|
|
).catch(handleOauthParamsValidation);
|
|
},
|
|
|
|
complete(oauthData, params = {}) {
|
|
const query = request.buildQuery(getOAuthRequest(oauthData));
|
|
|
|
return request.post(
|
|
`/api/oauth2/v1/complete?${query}`,
|
|
typeof params.accept === 'undefined' ? {} : {accept: params.accept}
|
|
).catch((resp = {}) => {
|
|
if (resp.statusCode === 401 && resp.error === 'access_denied') {
|
|
// user declined permissions
|
|
return {
|
|
success: false,
|
|
redirectUri: resp.redirectUri
|
|
};
|
|
}
|
|
|
|
if (resp.status === 401 && resp.name === 'Unauthorized') {
|
|
const error = new Error('Unauthorized');
|
|
error.unauthorized = true;
|
|
throw error;
|
|
}
|
|
|
|
if (resp.statusCode === 401 && resp.error === 'accept_required') {
|
|
const error = new Error('Permissions accept required');
|
|
error.acceptRequired = true;
|
|
throw error;
|
|
}
|
|
|
|
return handleOauthParamsValidation(resp);
|
|
});
|
|
}
|
|
};
|
|
/**
|
|
* @param {object} oauthData
|
|
* @param {string} oauthData.clientId
|
|
* @param {string} oauthData.redirectUrl
|
|
* @param {string} oauthData.responseType
|
|
* @param {string} oauthData.description
|
|
* @param {string} oauthData.scope
|
|
* @param {string} oauthData.state
|
|
*
|
|
* @return {object}
|
|
*/
|
|
function getOAuthRequest(oauthData) {
|
|
return {
|
|
client_id: oauthData.clientId,
|
|
redirect_uri: oauthData.redirectUrl,
|
|
response_type: oauthData.responseType,
|
|
description: oauthData.description,
|
|
scope: oauthData.scope,
|
|
prompt: oauthData.prompt,
|
|
login_hint: oauthData.loginHint,
|
|
state: oauthData.state
|
|
};
|
|
}
|
|
|
|
function handleOauthParamsValidation(resp = {}) {
|
|
if (resp.statusCode === 400 && resp.error === 'invalid_request') {
|
|
resp.userMessage = `Invalid request (${resp.parameter} required).`;
|
|
} else if (resp.statusCode === 400 && resp.error === 'unsupported_response_type') {
|
|
resp.userMessage = `Invalid response type '${resp.parameter}'.`;
|
|
} else if (resp.statusCode === 400 && resp.error === 'invalid_scope') {
|
|
resp.userMessage = `Invalid scope '${resp.parameter}'.`;
|
|
} else if (resp.statusCode === 401 && resp.error === 'invalid_client') {
|
|
resp.userMessage = 'Can not find application you are trying to authorize.';
|
|
}
|
|
|
|
return Promise.reject(resp);
|
|
}
|