add environment system and change default font
This commit is contained in:
parent
21e7fbf011
commit
3664b4e57b
14 changed files with 59 additions and 40 deletions
|
@ -1,6 +1,6 @@
|
||||||
|
import { getValue, getJsonValue } from '../common/environmentmanager';
|
||||||
import Logger from '../common/util/logger';
|
import Logger from '../common/util/logger';
|
||||||
import gateway from "./gateway/globalGatewayConnection";
|
import gateway from "./gateway/globalGatewayConnection";
|
||||||
import { getToken } from "./tokenManager";
|
|
||||||
|
|
||||||
const { log: authLog } = Logger([ 'Authenticator' ]);
|
const { log: authLog } = Logger([ 'Authenticator' ]);
|
||||||
|
|
||||||
|
@ -10,5 +10,5 @@ export function login() {
|
||||||
authLog("Gateway connection already exists, tearing down existing one...");
|
authLog("Gateway connection already exists, tearing down existing one...");
|
||||||
gateway.ws.close();
|
gateway.ws.close();
|
||||||
}
|
}
|
||||||
return gateway.connect(getToken());
|
return gateway.connect(getValue("token"), getJsonValue("gatewayConnectionAttributes"));
|
||||||
};
|
};
|
||||||
|
|
|
@ -55,12 +55,13 @@ const getOpcodeByName = (name) => {
|
||||||
|
|
||||||
|
|
||||||
class GatewayConnection {
|
class GatewayConnection {
|
||||||
constructor(gatewayUrl) {
|
constructor(gatewayUrl, attributes) {
|
||||||
|
this.attributes = attributes;
|
||||||
this.gatewayUrl = gatewayUrl;
|
this.gatewayUrl = gatewayUrl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GatewayConnection.prototype.connect = function(token, attributes=["PRESENCE_UPDATES"]) {
|
GatewayConnection.prototype.connect = function(token) {
|
||||||
if (token) this.token = token;
|
if (token) this.token = token;
|
||||||
if (this.token) token = this.token;
|
if (this.token) token = this.token;
|
||||||
|
|
||||||
|
@ -90,7 +91,7 @@ GatewayConnection.prototype.connect = function(token, attributes=["PRESENCE_UPDA
|
||||||
logGateway("Got HELLO", packet.data);
|
logGateway("Got HELLO", packet.data);
|
||||||
this.helloData = packet.data;
|
this.helloData = packet.data;
|
||||||
logGateway("Sending YOO");
|
logGateway("Sending YOO");
|
||||||
this.ws.send(this.packet("YOO", { token, attributes }));
|
this.ws.send(this.packet("YOO", { token, attributes: this.attributes }));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "EVENT_CHANNEL_MEMBERS": {
|
case "EVENT_CHANNEL_MEMBERS": {
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
import GatewayConnection from './GatewayConnection';
|
import GatewayConnection from './GatewayConnection';
|
||||||
import config from '../../config';
|
|
||||||
import store from '../../common/store';
|
import store from '../../common/store';
|
||||||
import logger from '../../common/util/logger';
|
import logger from '../../common/util/logger';
|
||||||
|
import { getValue, getJsonValue } from '../../common/environmentmanager';
|
||||||
|
|
||||||
const { log } = logger(["globalGatewayConnection"]);
|
const { log } = logger(["globalGatewayConnection"]);
|
||||||
const { warn: experimentsWarn } = logger(["globalGatewayConnection", "Experiments"]);
|
const { warn: experimentsWarn } = logger(["globalGatewayConnection", "Experiments"]);
|
||||||
|
|
||||||
const globalGatewayConnection = new GatewayConnection(config.gatewayUrl);
|
const globalGatewayConnection = new GatewayConnection(getValue("gatewayUrl"), getJsonValue("gatewayConnectionAttributes"));
|
||||||
let currentlyReconnecting = false;
|
let currentlyReconnecting = false;
|
||||||
|
|
||||||
const wsCloseCodes = {
|
const wsCloseCodes = {
|
||||||
|
@ -39,9 +39,9 @@ globalGatewayConnection.onopen = (sessionData) => {
|
||||||
store.dispatch({ type: 'authenticator/updatelocaluserobject', user: sessionData.user });
|
store.dispatch({ type: 'authenticator/updatelocaluserobject', user: sessionData.user });
|
||||||
store.dispatch({ type: 'channels/updatechannellist', channels: sessionData.channels });
|
store.dispatch({ type: 'channels/updatechannellist', channels: sessionData.channels });
|
||||||
|
|
||||||
if (localStorage.getItem("enableExperimentOverrides")) {
|
if (getValue("enableExperimentOverrides")) {
|
||||||
experimentsWarn("Experiment overrides are enabled");
|
experimentsWarn("Experiment overrides are enabled");
|
||||||
const experimentModifiers = JSON.parse(localStorage.getItem("experimentOverrides"));
|
const experimentModifiers = JSON.parse(getValue("experimentOverrides"));
|
||||||
const experiments = {
|
const experiments = {
|
||||||
...sessionData.__global_experiments || {},
|
...sessionData.__global_experiments || {},
|
||||||
...experimentModifiers || {}
|
...experimentModifiers || {}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import config from '../config';
|
import { getValue } from '../common/environmentmanager';
|
||||||
import { getToken } from "./tokenManager";
|
|
||||||
|
|
||||||
export async function unauthenticated(endpoint, options) {
|
export async function unauthenticated(endpoint, options) {
|
||||||
let res;
|
let res;
|
||||||
|
@ -11,7 +10,7 @@ export async function unauthenticated(endpoint, options) {
|
||||||
if (!options.headers) options.headers = {};
|
if (!options.headers) options.headers = {};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
res = await fetch(`${config.apiUrl}${endpoint}`, options);
|
res = await fetch(`${getValue("apiUrl")}${endpoint}`, options);
|
||||||
json = await res.json();
|
json = await res.json();
|
||||||
isOK = true;
|
isOK = true;
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
|
@ -38,12 +37,12 @@ export async function authenticated(endpoint, options) {
|
||||||
if (!options.headers) options.headers = {};
|
if (!options.headers) options.headers = {};
|
||||||
|
|
||||||
options.headers = {
|
options.headers = {
|
||||||
"Authorization": getToken(),
|
"Authorization": getValue("token"),
|
||||||
...options.headers
|
...options.headers
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
res = await fetch(`${config.apiUrl}${endpoint}`, options);
|
res = await fetch(`${getValue("apiUrl")}${endpoint}`, options);
|
||||||
json = await res.json();
|
json = await res.json();
|
||||||
isOK = true;
|
isOK = true;
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
export function getToken() {
|
|
||||||
return localStorage.getItem("token");
|
|
||||||
};
|
|
||||||
|
|
||||||
export function setToken(token) {
|
|
||||||
localStorage.setItem("token", token);
|
|
||||||
};
|
|
26
src/common/environmentmanager.js
Normal file
26
src/common/environmentmanager.js
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
};
|
|
@ -3,7 +3,7 @@ import UserProfileLink from './user/UserProfileLink';
|
||||||
export default function Message({ message, hideUsername }) {
|
export default function Message({ message, hideUsername }) {
|
||||||
return (
|
return (
|
||||||
<div className="message">
|
<div className="message">
|
||||||
<UserProfileLink size="0" user={ message.author } hideName={ hideUsername } />
|
<UserProfileLink bold={true} size="0" user={ message.author } hideName={ hideUsername } />
|
||||||
<span className="message-content">{ message.content }</span>
|
<span className="message-content">{ message.content }</span>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,8 +4,8 @@ import { useHistory } from 'react-router-dom';
|
||||||
import Notification from '../Notification';
|
import Notification from '../Notification';
|
||||||
import { unauthenticated } from '../../api/request';
|
import { unauthenticated } from '../../api/request';
|
||||||
import { login } from '../../api/authenticator';
|
import { login } from '../../api/authenticator';
|
||||||
import { setToken } from "../../api/tokenManager";
|
|
||||||
import { getLoginMessageFromError } from '../../common/util/errors'
|
import { getLoginMessageFromError } from '../../common/util/errors'
|
||||||
|
import { setValue } from '../../common/environmentmanager';
|
||||||
|
|
||||||
export default function Login() {
|
export default function Login() {
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
|
@ -42,7 +42,7 @@ export default function Login() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
setToken(json.token);
|
setValue("token", json.token);
|
||||||
await login();
|
await login();
|
||||||
|
|
||||||
history.push('/');
|
history.push('/');
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export default function UserProfileLink({ user, size }) {
|
export default function UserProfileLink({ user, size, bold }) {
|
||||||
let picture = null;
|
let picture = null;
|
||||||
|
|
||||||
if (size !== "0") {
|
if (size !== "0") {
|
||||||
|
@ -11,7 +11,7 @@ export default function UserProfileLink({ user, size }) {
|
||||||
return (
|
return (
|
||||||
<div className="profile-link">
|
<div className="profile-link">
|
||||||
{ picture }
|
{ picture }
|
||||||
<span className="profile-username">{ user.username }</span>
|
<span className={`profile-username${bold ? "-bold" : ""}`}>{ user.username }</span>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
const config = {
|
const config = {
|
||||||
apiUrl: 'http://localhost:3000',
|
apiUrl: "http://localhost:3000",
|
||||||
gatewayUrl: 'ws://localhost:3005/gateway'
|
gatewayUrl: "ws://localhost:3005/gateway",
|
||||||
|
gatewayConnectionAttributes: ["PRESENCE_UPDATES"]
|
||||||
};
|
};
|
||||||
|
|
||||||
export default config;
|
export default config;
|
|
@ -1,10 +1,14 @@
|
||||||
import store from './common/store';
|
import store from './common/store';
|
||||||
|
import config from "./config";
|
||||||
import App from './components/main/App';
|
import App from './components/main/App';
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
import { Provider } from 'react-redux';
|
import { Provider } from 'react-redux';
|
||||||
import { LazyMotion, domAnimation } from "framer-motion"
|
import { LazyMotion, domAnimation } from "framer-motion"
|
||||||
|
import applyDefaultsObject from './common/environmentmanager';
|
||||||
|
|
||||||
|
applyDefaultsObject(config);
|
||||||
|
|
||||||
ReactDOM.render(
|
ReactDOM.render(
|
||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
|
@ -15,4 +19,4 @@ ReactDOM.render(
|
||||||
</Provider>
|
</Provider>
|
||||||
</React.StrictMode>,
|
</React.StrictMode>,
|
||||||
document.getElementById('root')
|
document.getElementById('root')
|
||||||
);
|
);
|
||||||
|
|
|
@ -19,14 +19,6 @@
|
||||||
background: var(--default-scrollbar-color);
|
background: var(--default-scrollbar-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'JetBrains Mono';
|
|
||||||
src: url('https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/webfonts/JetBrainsMono-Regular.woff2') format('woff2'),
|
|
||||||
url('https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/ttf/JetBrainsMono-Regular.ttf') format('truetype');
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
body {
|
||||||
color: var(--default-text-color);
|
color: var(--default-text-color);
|
||||||
background-color: var(--background-color);
|
background-color: var(--background-color);
|
||||||
|
|
|
@ -72,11 +72,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.profile-username {
|
.profile-username {
|
||||||
font-weight: 600;
|
|
||||||
font-size: 1rem;
|
|
||||||
line-height: 1.256rem;
|
line-height: 1.256rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.profile-username-bold {
|
||||||
|
@extend .profile-username;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
.darker-text {
|
.darker-text {
|
||||||
color: var(--darker-text-color);
|
color: var(--darker-text-color);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
--default-text-color: hsl(0, 0%, 80%);
|
--default-text-color: hsl(0, 0%, 80%);
|
||||||
--darker-text-color: hsl(0, 0%, 65%);
|
--darker-text-color: hsl(0, 0%, 65%);
|
||||||
|
|
||||||
--default-font-family: JetBrains Mono;
|
--default-font-family: "Noto Sans", "Liberation Sans", sans-serif;
|
||||||
--glyph-font-family: Noto Sans,-apple-system,BlinkMacSystemFont,sans-serif;
|
--glyph-font-family: Noto Sans,-apple-system,BlinkMacSystemFont,sans-serif;
|
||||||
|
|
||||||
--default-user-background: linear-gradient(
|
--default-user-background: linear-gradient(
|
||||||
|
|
Loading…
Reference in a new issue