Newer
Older
import NavbarTop from "@/components/NavbarTop.vue";
import { onBeforeMount } from "vue";
import { useCookies } from "vue3-cookies";
import { useAuthStore } from "@/stores/users";
import { useRouter } from "vue-router";
import { OpenAPI as S3ProxyOpenAPI } from "@/client/s3proxy";
import { OpenAPI as AuthOpenAPI } from "@/client/auth";
import { OpenAPI as WorkflowOpenAPI } from "@/client/workflow";
import { environment } from "@/environment";
import FooterBottom from "@/components/FooterBottom.vue";
const { cookies } = useCookies();
const store = useAuthStore();
const router = useRouter();
onBeforeMount(() => {
S3ProxyOpenAPI.BASE = environment.S3PROXY_API_BASE_URL;
AuthOpenAPI.BASE = environment.AUTH_API_BASE_URL;
WorkflowOpenAPI.BASE = environment.WORKFLOW_API_BASE_URL;
axios.interceptors.response.use(
(res) => res,
(err) => {
if (
(err.response.status === 400 || err.response.status === 403) &&
err.response.data.detail?.includes("JWT")
) {
store.logout();
cookies.remove("bearer");
router.push({
name: "login",
query: {
login_error:
err.response.status === 400 ? "token_invalid" : "token_expired",
},
});
}
return Promise.reject(err);
},
);
store.setToken(cookies.get("bearer"));
router.beforeEach(async (to) => {
// make sure the user is authenticated
if (
!store.authenticated &&
// ❗️ Avoid an infinite redirect
to.name !== "login"
) {
// redirect the user to the login page and preserve query params for login error message
return { name: "login", query: to.query };
} else if (
to.meta.requiresDeveloperRole &&
!(store.workflowDev || store.admin)
) {
return { name: "dashboard" };
} else if (
to.meta.requiresReviewerRole &&
!(store.workflowReviewer || store.admin)
) {
return { name: "dashboard" };
<div class="container-xxl mt-4 flex-grow-1">
<style scoped></style>