import Vue from "vue"; import VueRouter from "vue-router"; import EditNote from "@/views/EditNote.vue"; import ViewNote from "@/views/ViewNote.vue"; import ErrorRoute from "@/views/ErrorRoute.vue"; import ErrorNote from "@/views/ErrorNote.vue"; import { getKeyMeta, getNoteMeta } from "@/api/note"; import { getStoreKey } from "@/api/lock"; import storage from "@/libs/storage"; Vue.use(VueRouter); var keyMeta = null; var noteMeta = null; var errorMeta = null; function getKeyMetaParam() { return keyMeta; } function getNoteMetaParam() { return noteMeta; } function getErrorMetaParam() { return errorMeta; } function getNoteView() { if (errorMeta) { return; } let path = location.pathname; let key = path.substring(1, path.length); if (keyMeta && keyMeta.key) { key = keyMeta.key; } let regKey = /^[abcdefhikmnopqstuvwxyz23456789]{16}$/; if (!regKey.test(key)) { errorMeta = 100002; return ErrorNote; } if (keyMeta && keyMeta.key) { //firstEdit return EditNote; } //set noteMeta noteMeta = getNoteMeta(key); //server error if (!noteMeta) { errorMeta = 100006; return ErrorNote; } //invalidated key if (!noteMeta.key) { errorMeta = 100002; return ErrorNote; } //validated state if (1 == noteMeta.state) { return ViewNote; } //deleted if (0 == noteMeta.state) { let storeKey = getStoreKey(key); storage.local.delete(storeKey); // user deleted if (noteMeta.ttl > 0) { errorMeta = 100003; return ErrorNote; } else {// timeout errorMeta = 100004; return ErrorNote; } } if (null == noteMeta.state) { let storeKey = getStoreKey(key); //if has storage , then edit if (storage.local.getText(storeKey)) { return EditNote; } else { //storage is empty let df = storage.session.getText(storeKey + "_delete") if (df) {//unsubmitted,user deleted. errorMeta = 100003; return ErrorNote; } else {//unsubmitted errorMeta = 100005; return ErrorNote; } } } // other exception errorMeta = 100001; return ErrorNote; } function getHomeRedirect() { let path = location.pathname; if (path != "/") { return; } //setKeyMeta keyMeta = getKeyMeta(); // server error if (!keyMeta) { errorMeta = 100006; return "/error_"+errorMeta; } return "/" + keyMeta.key; } const routes = [ { path: "/", name: "home", redirect: getHomeRedirect(), }, { path: "/error_:code([0-9]{6})", component: ErrorNote }, { path: "/:name([a-z0-9]{10,20})", name: "note", component: getNoteView(), meta: { keyMeta: getKeyMetaParam(), noteMeta: getNoteMetaParam(), errorMeta: getErrorMetaParam() }, }, { path: "/:path(.*)", component: ErrorRoute } ]; const router = new VueRouter({ routes, mode: "history", }); export default router;