Refactor browserID handling. Force retaining browserID on logout
This commit is contained in:
47
js/plugin/browserID.ts
Normal file
47
js/plugin/browserID.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
const ID_STORAGE_KEY = "browser_mod-browser-id";
|
||||
|
||||
export const BrowserIDMixin = (SuperClass) => {
|
||||
return class BrowserIDMixinClass extends SuperClass {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
if (Storage) {
|
||||
if (!Storage.prototype.browser_mod_patched) {
|
||||
const _clear = Storage.prototype.clear;
|
||||
Storage.prototype.clear = function () {
|
||||
const browserId = this.getItem(ID_STORAGE_KEY);
|
||||
const suspendWhenHidden = this.getItem("suspendWhenHidden");
|
||||
_clear.apply(this);
|
||||
this.setItem(ID_STORAGE_KEY, browserId);
|
||||
this.setItem("suspendWhenHidden", suspendWhenHidden);
|
||||
};
|
||||
Storage.prototype.browser_mod_patched = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
get browserID() {
|
||||
if (localStorage[ID_STORAGE_KEY]) return localStorage[ID_STORAGE_KEY];
|
||||
this.browserID = "";
|
||||
return this.browserID;
|
||||
}
|
||||
set browserID(id) {
|
||||
function _createBrowserID() {
|
||||
const s4 = () => {
|
||||
return Math.floor((1 + Math.random()) * 100000)
|
||||
.toString(16)
|
||||
.substring(1);
|
||||
};
|
||||
return window.fully?.getDeviceId() ?? `${s4()}${s4()}-${s4()}${s4()}`;
|
||||
}
|
||||
|
||||
if (id === "") id = _createBrowserID();
|
||||
const oldID = localStorage[ID_STORAGE_KEY];
|
||||
localStorage[ID_STORAGE_KEY] = id;
|
||||
|
||||
this.browserIDChanged(oldID, id);
|
||||
}
|
||||
|
||||
protected browserIDChanged(oldID, newID) {}
|
||||
};
|
||||
};
|
||||
@@ -1,7 +1,5 @@
|
||||
import { hass, provideHass } from "../helpers";
|
||||
|
||||
const ID_STORAGE_KEY = "browser_mod-browser-id";
|
||||
|
||||
export const ConnectionMixin = (SuperClass) => {
|
||||
class BrowserModConnection extends SuperClass {
|
||||
public hass;
|
||||
@@ -202,25 +200,7 @@ export const ConnectionMixin = (SuperClass) => {
|
||||
});
|
||||
}
|
||||
|
||||
get browserID() {
|
||||
if (localStorage[ID_STORAGE_KEY]) return localStorage[ID_STORAGE_KEY];
|
||||
this.browserID = "";
|
||||
return this.browserID;
|
||||
}
|
||||
set browserID(id) {
|
||||
function _createBrowserID() {
|
||||
const s4 = () => {
|
||||
return Math.floor((1 + Math.random()) * 100000)
|
||||
.toString(16)
|
||||
.substring(1);
|
||||
};
|
||||
return window.fully?.getDeviceId() ?? `${s4()}${s4()}-${s4()}${s4()}`;
|
||||
}
|
||||
|
||||
if (id === "") id = _createBrowserID();
|
||||
const oldID = localStorage[ID_STORAGE_KEY];
|
||||
localStorage[ID_STORAGE_KEY] = id;
|
||||
|
||||
browserIDChanged(oldID, newID) {
|
||||
this.fireEvent("browser-mod-config-update");
|
||||
|
||||
if (
|
||||
|
||||
@@ -15,6 +15,7 @@ import { PopupMixin } from "./popups";
|
||||
import pjson from "../../package.json";
|
||||
import "./popup-card";
|
||||
import { AutoSettingsMixin } from "./frontend-settings";
|
||||
import { BrowserIDMixin } from "./browserID";
|
||||
|
||||
/*
|
||||
TODO:
|
||||
@@ -72,7 +73,11 @@ export class BrowserMod extends ServicesMixin(
|
||||
MediaPlayerMixin(
|
||||
ScreenSaverMixin(
|
||||
AutoSettingsMixin(
|
||||
FullyMixin(RequireInteractMixin(ConnectionMixin(EventTarget)))
|
||||
FullyMixin(
|
||||
RequireInteractMixin(
|
||||
ConnectionMixin(BrowserIDMixin(EventTarget))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user