UNPKG

@nextcloud/auth

Version:

Nextcloud helpers related to authentication and the current user

111 lines (110 loc) 2.79 kB
import { subscribe, emit } from "@nextcloud/event-bus"; import { getBuilder } from "@nextcloud/browser-storage"; let token; const observers = []; function getRequestToken() { if (token === void 0) { token = document.head.dataset.requesttoken ?? null; } return token; } function onRequestTokenUpdate(observer) { observers.push(observer); } subscribe("csrf-token-update", (e) => { token = e.token; observers.forEach((observer) => { try { observer(token); } catch (e2) { console.error("Error updating CSRF token observer", e2); } }); }); function getCSPNonce() { const meta = document?.querySelector('meta[name="csp-nonce"]'); if (!meta) { const token2 = getRequestToken(); return token2 ? btoa(token2) : void 0; } return meta.nonce; } const browserStorage = getBuilder("public").persist().build(); class GuestUser { _displayName; uid; isAdmin; constructor() { if (!browserStorage.getItem("guestUid")) { browserStorage.setItem("guestUid", self.crypto.randomUUID()); } this._displayName = browserStorage.getItem("guestNickname") || ""; this.uid = browserStorage.getItem("guestUid") || self.crypto.randomUUID(); this.isAdmin = false; subscribe("user:info:changed", (guest) => { this._displayName = guest.displayName; browserStorage.setItem("guestNickname", guest.displayName || ""); }); } get displayName() { return this._displayName; } set displayName(displayName) { this._displayName = displayName; browserStorage.setItem("guestNickname", displayName); emit("user:info:changed", this); } } let currentUser$1; function getGuestUser() { if (!currentUser$1) { currentUser$1 = new GuestUser(); } return currentUser$1; } function getGuestNickname() { return getGuestUser()?.displayName || null; } function setGuestNickname(nickname) { if (!nickname || nickname.trim().length === 0) { throw new Error("Nickname cannot be empty"); } getGuestUser().displayName = nickname; } let currentUser; const getAttribute = (el, attribute) => { if (el) { return el.getAttribute(attribute); } return null; }; function getCurrentUser() { if (currentUser !== void 0) { return currentUser; } const head = document?.getElementsByTagName("head")[0]; if (!head) { return null; } const uid = getAttribute(head, "data-user"); if (uid === null) { currentUser = null; return currentUser; } currentUser = { uid, displayName: getAttribute(head, "data-user-displayname"), isAdmin: !!window._oc_isadmin }; return currentUser; } export { getCSPNonce, getCurrentUser, getGuestNickname, getGuestUser, getRequestToken, onRequestTokenUpdate, setGuestNickname }; //# sourceMappingURL=index.mjs.map