UNPKG

@nextcloud/auth

Version:

Nextcloud helpers related to authentication and the current user

125 lines (124 loc) 3.48 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const eventBus = require("@nextcloud/event-bus"); const browserStorage$1 = require("@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); } eventBus.subscribe("csrf-token-update", (e) => { token = e.token; observers.forEach((observer) => { try { observer(token); } catch (error) { console.error("Error updating CSRF token observer", error); } }); }); function getCSPNonce() { const meta = document?.querySelector('meta[name="csp-nonce"]'); if (!meta) { const token2 = getRequestToken(); return token2 ? btoa(token2) : void 0; } return meta.nonce; } /*! * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: GPL-3.0-or-later */ const browserStorage = browserStorage$1.getBuilder("public").persist().build(); class GuestUser { _displayName; uid; isAdmin; constructor() { if (!browserStorage.getItem("guestUid")) { browserStorage.setItem("guestUid", randomUUID()); } this._displayName = browserStorage.getItem("guestNickname") || ""; this.uid = browserStorage.getItem("guestUid") || randomUUID(); this.isAdmin = false; eventBus.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); eventBus.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; } function randomUUID() { if (globalThis.crypto?.randomUUID) { return globalThis.crypto.randomUUID(); } return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => { const r = Math.random() * 16 | 0; const v = c === "x" ? r : r & 3 | 8; return v.toString(16); }); } let currentUser; function 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; } exports.getCSPNonce = getCSPNonce; exports.getCurrentUser = getCurrentUser; exports.getGuestNickname = getGuestNickname; exports.getGuestUser = getGuestUser; exports.getRequestToken = getRequestToken; exports.onRequestTokenUpdate = onRequestTokenUpdate; exports.setGuestNickname = setGuestNickname; //# sourceMappingURL=index.cjs.map