mirror of
https://github.com/hexastack/hexabot
synced 2025-02-24 05:14:47 +00:00
54 lines
1.6 KiB
TypeScript
Executable File
54 lines
1.6 KiB
TypeScript
Executable File
/*
|
|
* Copyright © 2024 Hexastack. All rights reserved.
|
|
*
|
|
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
|
|
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
|
|
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
|
|
*/
|
|
|
|
import { usePathname } from "next/navigation";
|
|
import { useRouter } from "next/router";
|
|
import { useContext } from "react";
|
|
|
|
import { AuthContext } from "@/contexts/auth.context";
|
|
import { RouterType } from "@/services/types";
|
|
|
|
export const CURRENT_USER_KEY = "current-user";
|
|
export const PUBLIC_PATHS = [
|
|
"/login/[[...token]]",
|
|
"/register/[token]",
|
|
"/reset/[token]",
|
|
"/reset",
|
|
];
|
|
|
|
export const useAuth = () => {
|
|
const context = useContext(AuthContext);
|
|
|
|
if (!context) {
|
|
throw new Error(`useAuth must be used within an AuthProvider`);
|
|
}
|
|
|
|
return context;
|
|
};
|
|
|
|
export const useLogoutRedirection = () => {
|
|
const router = useRouter();
|
|
const pathname = usePathname();
|
|
const hasPublicPath = PUBLIC_PATHS.includes(router.pathname);
|
|
const logoutRedirection = async (fullReload: boolean = false) => {
|
|
if (!hasPublicPath) {
|
|
const redirectUrl = `/${RouterType.LOGIN}?redirect=${encodeURIComponent(
|
|
pathname,
|
|
)}`;
|
|
|
|
if (fullReload) {
|
|
window.location.replace(redirectUrl);
|
|
} else {
|
|
await router.replace(redirectUrl);
|
|
}
|
|
}
|
|
};
|
|
|
|
return { logoutRedirection };
|
|
};
|