saleor-dashboard/src/auth/utils.ts

91 lines
2.3 KiB
TypeScript
Raw Normal View History

2020-07-24 09:17:25 +00:00
import { IMessageContext } from "@saleor/components/messages";
2020-05-25 23:38:52 +00:00
import { UseNotifierResult } from "@saleor/hooks/useNotifier";
import { commonMessages } from "@saleor/intl";
2020-07-24 09:17:25 +00:00
import { ApolloError } from "apollo-client";
2020-05-25 23:38:52 +00:00
import { IntlShape } from "react-intl";
2020-07-27 09:39:00 +00:00
import { isJwtError, isTokenExpired } from "./errors";
2020-07-24 09:17:25 +00:00
2020-07-23 13:37:39 +00:00
export enum TOKEN_STORAGE_KEY {
AUTH = "auth",
CSRF = "csrf"
}
2019-09-03 13:42:15 +00:00
2020-07-23 13:37:39 +00:00
export const getTokens = () => ({
auth:
localStorage.getItem(TOKEN_STORAGE_KEY.AUTH) ||
sessionStorage.getItem(TOKEN_STORAGE_KEY.AUTH),
refresh:
localStorage.getItem(TOKEN_STORAGE_KEY.CSRF) ||
sessionStorage.getItem(TOKEN_STORAGE_KEY.CSRF)
});
2019-09-03 13:42:15 +00:00
2020-07-23 13:37:39 +00:00
export const setTokens = (auth: string, csrf: string, persist: boolean) => {
if (persist) {
localStorage.setItem(TOKEN_STORAGE_KEY.AUTH, auth);
localStorage.setItem(TOKEN_STORAGE_KEY.CSRF, csrf);
} else {
sessionStorage.setItem(TOKEN_STORAGE_KEY.AUTH, auth);
sessionStorage.setItem(TOKEN_STORAGE_KEY.CSRF, csrf);
}
};
export const setAuthToken = (auth: string, persist: boolean) => {
if (persist) {
localStorage.setItem(TOKEN_STORAGE_KEY.AUTH, auth);
} else {
sessionStorage.setItem(TOKEN_STORAGE_KEY.AUTH, auth);
}
};
2019-09-03 13:42:15 +00:00
2020-07-23 13:37:39 +00:00
export const removeTokens = () => {
localStorage.removeItem(TOKEN_STORAGE_KEY.AUTH);
sessionStorage.removeItem(TOKEN_STORAGE_KEY.AUTH);
2019-09-03 13:42:15 +00:00
};
2020-05-25 23:38:52 +00:00
export const displayDemoMessage = (
intl: IntlShape,
notify: UseNotifierResult
) => {
notify({
text: intl.formatMessage(commonMessages.demo)
});
};
2020-07-24 09:17:25 +00:00
export async function handleQueryAuthError(
error: ApolloError,
notify: IMessageContext,
tokenRefresh: () => Promise<boolean>,
logout: () => void,
intl: IntlShape
) {
if (error.graphQLErrors.some(isJwtError)) {
2020-07-27 09:39:00 +00:00
if (error.graphQLErrors.every(isTokenExpired)) {
2020-07-24 09:17:25 +00:00
const success = await tokenRefresh();
if (!success) {
logout();
notify({
status: "error",
text: intl.formatMessage(commonMessages.sessionExpired)
});
}
} else {
logout();
notify({
status: "error",
text: intl.formatMessage(commonMessages.somethingWentWrong)
});
}
} else if (
!error.graphQLErrors.every(
err => err.extensions?.exception?.code === "PermissionDenied"
)
) {
notify({
status: "error",
text: intl.formatMessage(commonMessages.somethingWentWrong)
});
}
}