@nextcloud/auth
Version:
Nextcloud helpers related to authentication and the current user
125 lines (124 loc) • 3.48 kB
JavaScript
;
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