try {
const response = await api.get("api/config");
return response.data;
- } catch (error) {
- return Promise.reject(error);
+ } catch (response) {
+ return Promise.reject(response);
}
}
}
}
+export async function authCheck() {
+ try {
+ const response = await api.get("api/auth-check");
+ return response.data;
+ } catch (response) {
+ return Promise.reject(response);
+ }
+}
+
export async function getNotes(term, sort, order, limit) {
try {
const response = await api.get("api/search", {
\r
import { createRouter, createWebHistory } from "vue-router";\r
\r
+import { authCheck } from "./api.js";\r
+\r
const router = createRouter({\r
history: createWebHistory(""),\r
routes: [\r
],\r
});\r
\r
+// Check the user is authenticated on first navigation (unless going to login)\r
+let authChecked = false;\r
+router.beforeEach(async (to) => {\r
+ if (authChecked || to.name === "login") {\r
+ return;\r
+ }\r
+ try {\r
+ await authCheck();\r
+ return;\r
+ } catch (error) {\r
+ if (error.response && error.response.status === 401) {\r
+ return {\r
+ name: "login",\r
+ query: { [constants.params.redirect]: to.fullPath },\r
+ };\r
+ }\r
+ } finally {\r
+ authChecked = true;\r
+ }\r
+});\r
+\r
router.afterEach((to) => {\r
let title = "flatnotes";\r
if (to.name === "note") {\r
# endregion\r
\r
\r
-# region Login\r
+# region Auth\r
if global_config.auth_type not in [AuthType.NONE, AuthType.READ_ONLY]:\r
\r
@router.post("/api/token", response_model=Token)\r
)\r
\r
\r
+@router.get("/api/auth-check", dependencies=auth_deps)\r
+def auth_check() -> str:\r
+ """A lightweight endpoint that simply returns 'OK' if the user is\r
+ authenticated."""\r
+ return "OK"\r
+\r
+\r
# endregion\r
\r
\r