diff --git a/src/api/authenticator.js b/src/api/authenticator.js index 62a2e97..b118ae9 100644 --- a/src/api/authenticator.js +++ b/src/api/authenticator.js @@ -1,6 +1,6 @@ +import { getValue, getJsonValue } from '../common/environmentmanager'; import Logger from '../common/util/logger'; import gateway from "./gateway/globalGatewayConnection"; -import { getToken } from "./tokenManager"; const { log: authLog } = Logger([ 'Authenticator' ]); @@ -10,5 +10,5 @@ export function login() { authLog("Gateway connection already exists, tearing down existing one..."); gateway.ws.close(); } - return gateway.connect(getToken()); + return gateway.connect(getValue("token"), getJsonValue("gatewayConnectionAttributes")); }; diff --git a/src/api/gateway/GatewayConnection.js b/src/api/gateway/GatewayConnection.js index d239d9d..904f829 100644 --- a/src/api/gateway/GatewayConnection.js +++ b/src/api/gateway/GatewayConnection.js @@ -55,12 +55,13 @@ const getOpcodeByName = (name) => { class GatewayConnection { - constructor(gatewayUrl) { + constructor(gatewayUrl, attributes) { + this.attributes = attributes; this.gatewayUrl = gatewayUrl; } } -GatewayConnection.prototype.connect = function(token, attributes=["PRESENCE_UPDATES"]) { +GatewayConnection.prototype.connect = function(token) { if (token) this.token = token; if (this.token) token = this.token; @@ -90,7 +91,7 @@ GatewayConnection.prototype.connect = function(token, attributes=["PRESENCE_UPDA logGateway("Got HELLO", packet.data); this.helloData = packet.data; logGateway("Sending YOO"); - this.ws.send(this.packet("YOO", { token, attributes })); + this.ws.send(this.packet("YOO", { token, attributes: this.attributes })); break; } case "EVENT_CHANNEL_MEMBERS": { diff --git a/src/api/gateway/globalGatewayConnection.js b/src/api/gateway/globalGatewayConnection.js index 44331be..fdb0695 100644 --- a/src/api/gateway/globalGatewayConnection.js +++ b/src/api/gateway/globalGatewayConnection.js @@ -1,12 +1,12 @@ import GatewayConnection from './GatewayConnection'; -import config from '../../config'; import store from '../../common/store'; import logger from '../../common/util/logger'; +import { getValue, getJsonValue } from '../../common/environmentmanager'; const { log } = logger(["globalGatewayConnection"]); const { warn: experimentsWarn } = logger(["globalGatewayConnection", "Experiments"]); -const globalGatewayConnection = new GatewayConnection(config.gatewayUrl); +const globalGatewayConnection = new GatewayConnection(getValue("gatewayUrl"), getJsonValue("gatewayConnectionAttributes")); let currentlyReconnecting = false; const wsCloseCodes = { @@ -39,9 +39,9 @@ globalGatewayConnection.onopen = (sessionData) => { store.dispatch({ type: 'authenticator/updatelocaluserobject', user: sessionData.user }); store.dispatch({ type: 'channels/updatechannellist', channels: sessionData.channels }); - if (localStorage.getItem("enableExperimentOverrides")) { + if (getValue("enableExperimentOverrides")) { experimentsWarn("Experiment overrides are enabled"); - const experimentModifiers = JSON.parse(localStorage.getItem("experimentOverrides")); + const experimentModifiers = JSON.parse(getValue("experimentOverrides")); const experiments = { ...sessionData.__global_experiments || {}, ...experimentModifiers || {} diff --git a/src/api/request.js b/src/api/request.js index 208cb0c..8da8cc9 100644 --- a/src/api/request.js +++ b/src/api/request.js @@ -1,5 +1,4 @@ -import config from '../config'; -import { getToken } from "./tokenManager"; +import { getValue } from '../common/environmentmanager'; export async function unauthenticated(endpoint, options) { let res; @@ -11,7 +10,7 @@ export async function unauthenticated(endpoint, options) { if (!options.headers) options.headers = {}; try { - res = await fetch(`${config.apiUrl}${endpoint}`, options); + res = await fetch(`${getValue("apiUrl")}${endpoint}`, options); json = await res.json(); isOK = true; } catch(e) { @@ -38,12 +37,12 @@ export async function authenticated(endpoint, options) { if (!options.headers) options.headers = {}; options.headers = { - "Authorization": getToken(), + "Authorization": getValue("token"), ...options.headers }; try { - res = await fetch(`${config.apiUrl}${endpoint}`, options); + res = await fetch(`${getValue("apiUrl")}${endpoint}`, options); json = await res.json(); isOK = true; } catch(e) { diff --git a/src/api/tokenManager.js b/src/api/tokenManager.js deleted file mode 100644 index b552dff..0000000 --- a/src/api/tokenManager.js +++ /dev/null @@ -1,7 +0,0 @@ -export function getToken() { - return localStorage.getItem("token"); -}; - -export function setToken(token) { - localStorage.setItem("token", token); -}; diff --git a/src/common/environmentmanager.js b/src/common/environmentmanager.js new file mode 100644 index 0000000..1d81bee --- /dev/null +++ b/src/common/environmentmanager.js @@ -0,0 +1,26 @@ +export function getValue(key) { + return localStorage.getItem(key); +}; + +export function setValue(key, value) { + if (typeof value === "object") { + value = JSON.stringify(value); + } + return localStorage.setItem(key, value); +}; + +export function getJsonValue(key) { + return JSON.parse(getValue(key)); +} + +export function setValueIfNull(key, value) { + if (getValue(key)) return false; + setValue(key, value); + return true; +}; + +export default function applyDefaultsObject(defaultsObject) { + for (const [key, value] of Object.entries(defaultsObject)) { + setValueIfNull(key, value); + } +}; diff --git a/src/components/Message.js b/src/components/Message.js index 2b8b46f..982488d 100644 --- a/src/components/Message.js +++ b/src/components/Message.js @@ -3,7 +3,7 @@ import UserProfileLink from './user/UserProfileLink'; export default function Message({ message, hideUsername }) { return (