Welcome to mirror list, hosted at ThFree Co, Russian Federation.

captcha_modal_axios_interceptor.js « captcha « javascripts « assets « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: c9eac44eb28a201832f0b16e83ecc9f8881d8f9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
const supportedMethods = ['patch', 'post', 'put'];

export function registerCaptchaModalInterceptor(axios) {
  return axios.interceptors.response.use(
    (response) => {
      return response;
    },
    (err) => {
      if (
        supportedMethods.includes(err?.config?.method) &&
        err?.response?.data?.needs_captcha_response
      ) {
        const { data } = err.response;
        const captchaSiteKey = data.captcha_site_key;
        const spamLogId = data.spam_log_id;
        // eslint-disable-next-line promise/no-promise-in-callback
        return import('~/captcha/wait_for_captcha_to_be_solved')
          .then(({ waitForCaptchaToBeSolved }) => waitForCaptchaToBeSolved(captchaSiteKey))
          .then((captchaResponse) => {
            const errConfig = err.config;
            const originalData = JSON.parse(errConfig.data);
            return axios({
              method: errConfig.method,
              url: errConfig.url,
              data: {
                ...originalData,
                captcha_response: captchaResponse,
                spam_log_id: spamLogId,
              },
            });
          });
      }

      return Promise.reject(err);
    },
  );
}