vuepress-theme-hope
Version:
A light vuepress theme with tons of features
39 lines • 1.61 kB
JavaScript
import { useSessionStorage, useStorage } from "@vueuse/core";
import { compareSync } from "bcrypt-ts/browser";
import { computed } from "vue";
import { useEncryptConfig } from "./useEncryptConfig.js";
const STORAGE_KEY = "VUEPRESS_HOPE_GLOBAL_TOKEN";
export const useGlobalEncrypt = () => {
const encryptData = useEncryptConfig();
const storageToken = useStorage(STORAGE_KEY, "");
const sessionToken = useSessionStorage(STORAGE_KEY, "");
const status = computed(() => {
const { global = false, admin } = encryptData.value;
// Is globally encrypted
const isEncrypted = global && Boolean(admin?.tokens.length);
const isLocked =
// Valid token exists
isEncrypted
? storageToken.value
? // None of the token matches
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
encryptData.value.admin.tokens.every((hash) => !compareSync(storageToken.value, hash))
: // None of the token matches
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
encryptData.value.admin.tokens.every((hash) => !compareSync(sessionToken.value, hash))
: false;
return {
isEncrypted,
isLocked,
hint: admin?.hint ?? "",
};
});
const validate = (inputToken, keep = false) => {
(keep ? storageToken : sessionToken).value = inputToken;
};
return {
status,
validate,
};
};
//# sourceMappingURL=useGlobalEncrypt.js.map