All files / react/session logout.js

62.5% Statements 20/32
25% Branches 3/12
50% Functions 3/6
62.5% Lines 20/32

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80    3x 3x         3x           3x               3x                               3x   3x   3x 3x   3x 3x           3x   3x 3x     3x 3x 3x             3x     3x 3x                
import { parse } from "cookie";
 
export const deleteImpersonatedUser = (cookies) => {
  Iif ("qpp_impersonated_user" in cookies) {
    document.cookie =
      "qpp_impersonated_user=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;";
  }
 
  Iif ("qpp_impersonated_type" in cookies) {
    document.cookie =
      "qpp_impersonated_type=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;";
  }
};
 
export const revertApmPaymentCookie = () => {
  const userHasApmPayments = localStorage.getItem("user_has_apm_payments");
 
  if (userHasApmPayments) {
    document.cookie = `user_has_apm_payments=${userHasApmPayments}; Path=/;`;
  }
};
 
export const revertQppHasAuthsCookie = () => {
  const { qppHasAuthorizations, behindSSL } = JSON.parse(
    localStorage.getItem("impersonatorAuthValues"),
  );
  if (qppHasAuthorizations) {
    document.cookie = `qpp_has_authorizations=${qppHasAuthorizations};path=/${
      behindSSL ? ";secure" : ""
    }`;
  }
};
 
/**
 * Makes an API request to end the user session.
 * @param  {Object} [_window] The DOM Window
 * @return {Function} Returns a promise
 */
const LogoutSession = async (_window) => {
  // Remove the Side Nav expanded state from localStorage
  localStorage.removeItem("qpp_side_nav_expanded");
 
  let cookies = parse(_window.document.cookie);
  let logoutDestination = "/logout-confirmation";
 
  if ("qpp_auth_token" in cookies) {
    let onSuccess = () => {
      // redirect to login/logged out screen
      deleteImpersonatedUser(cookies);
      _window.location.pathname = logoutDestination;
    };
 
    let onError = () => {
      // delete cookie and redirect login/logged out screen
      deleteImpersonatedUser(cookies);
      _window.location.pathname = logoutDestination;
    };
 
    try {
      const url = "/user/session-logout";
      const options = {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${cookies.qpp_auth_token}`,
        },
      };
      await fetch(url, options);
      onSuccess();
    } catch (error) {
      onError();
      console.log(error);
    }
  } else E{
    _window.location.pathname = logoutDestination;
  }
};
 
export default LogoutSession;