Skip to content

Commit ef89a48

Browse files
committed
Commit local changes that have been building up for a while
1 parent 0519932 commit ef89a48

14 files changed

+3231
-2159
lines changed

.eslintrc.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"SharedArrayBuffer": "readonly"
1111
},
1212
"parserOptions": {
13-
"ecmaVersion": 2020,
13+
"ecmaVersion": "latest",
1414
"sourceType": "module"
1515
},
1616
"rules": {

Server.js

+30-7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import handleRequestMoreMessages from './server/socket/event_handlers/RequestMor
1818
import handleAddServer from './server/socket/event_handlers/AddServer.js';
1919
import handleRemoveServer from './server/socket/event_handlers/RemoveServer.js';
2020
import handleRequestLinkPreview from './server/socket/event_handlers/RequestLinkPreview.js';
21+
import handleAddReaction from './server/socket/event_handlers/AddReaction.js';
2122
import ArrayMap from './server/util/ArrayMap.js';
2223

2324
// Finish importing rate-limiter flexible
@@ -55,6 +56,12 @@ global.mutedList = [];
5556
// Setup the muted ip list as a shared global variable
5657
global.mutedIpList = [];
5758

59+
// Setup the muted list as a shared global variable
60+
global.bannedList = [];
61+
62+
// Setup the muted ip list as a shared global variable
63+
global.bannedIpList = [];
64+
5865
// Setup the user list contents as a shared global variable
5966
global.userListContents = [];
6067

@@ -94,7 +101,8 @@ const messageSchema = new Schema({
94101
badge: String,
95102
special: {type: Boolean, required: false},
96103
usernameColor: {type: String, required: false},
97-
badgeColor: {type: String, required: false}
104+
badgeColor: {type: String, required: false},
105+
reactions: {type: Array, default: []}
98106
});
99107

100108
// Create a new schema for servers
@@ -115,28 +123,33 @@ global.serverModel = mongoose.model('serverModel', serverSchema, 'servers');
115123

116124
// Setup rate limiters
117125
const messageRateLimiter = new RateLimiterMemory({
118-
points: 2, // 2 points
119-
duration: 3 // per 3 seconds
126+
points: 3, // 2 points
127+
duration: 5 // per 3 seconds
120128
});
121129

122130
const loginRateLimiter = new RateLimiterMemory({
123131
points: 3, // 3 points
124132
duration: 5 // per 5 seconds
125133
});
126134

135+
// Define a new array of strings of admin usernames
136+
export const admins = ["justsnoopy30", "nolski", "pixxi"];
137+
127138
// And everything starts here where a user makes a connection to the socket.io server...
128139
io.on('connection', (socket) => {
129140
socket.authenticated = false;
130141

131142
// When the client emits 'login', this listens and executes
132143
socket.on('login', ({ username, password, server }) => {
133-
loginRateLimiter.consume(socket.handshake.headers['cf-connecting-ip'] || socket.handshake.address)
144+
// loginRateLimiter.consume(socket.handshake.headers['cf-connecting-ip'] || socket.handshake.address)
145+
loginRateLimiter.consume(username)
134146
.then(rateLimiterRes => {
135147
handleLogin({io, socket, username, password, server});
136148
})
137149
.catch(rej => {
138-
console.log(rej);
139-
socket.emit('loginDenied', {loginDeniedReason: 'You are logging in too fast! Try again in a few seconds.'});
150+
console.log(`Rejected login for ${username} due to rate limiting: ${rej}`);
151+
handleLogin({io, socket, username, password, server});
152+
socket.emit('login denied', {loginDeniedReason: 'You are logging in too fast! Try again in a few seconds.'});
140153
socket.disconnect();
141154
});
142155
});
@@ -203,12 +216,22 @@ io.on('connection', (socket) => {
203216
handleRemoveServer({io, socket, serverName});
204217
});
205218

206-
// When the client emits 'request limit preview', fetch a link preview for the link and send it back
219+
// When the client emits 'request link preview', fetch a link preview for the link and send it back
207220
socket.on('request link preview', (messageId, link) => {
208221
if (!socket.authenticated) return;
209222
handleRequestLinkPreview({io, socket, messageId, link});
210223
});
211224

225+
// When the client emits 'add reaction', add a reaction to the message denoted by the messageId provided
226+
socket.on('add reaction', ({ url, name, messageId }) => {
227+
if (!socket.authenticated) return;
228+
handleAddReaction({io, socket, url, name, messageId});
229+
});
230+
231+
socket.on('drawing', (data) => {
232+
socket.broadcast.emit('drawing', data);
233+
});
234+
212235
// When the user disconnects, perform this
213236
socket.on('disconnect', () => {
214237
handleDisconnect({io, socket});
Loading

client/resources/chat.html

+16-4
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
1414
<link rel="stylesheet" href="/resources/stylesheets/reconnecting-screen.css">
1515
<!-- Load extra styles asyncronously -->
1616
<link rel="preload" href="/resources/node_modules/bootstrap/dist/css/bootstrap.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
17-
<link rel="preload" href="/resources/node_modules/@highlightjs/cdn-assets/styles/solarized-dark.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
17+
<!-- <link rel="preload" href="/resources/node_modules/@highlightjs/cdn-assets/styles/solarized-dark.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'"> -->
1818
<!-- App logos for different browsers and devices -->
1919
<link rel="apple-touch-icon" sizes="180x180" href="/resources/assets/apple-touch-icon.png">
20-
<link rel="icon" type="image/png" sizes="32x32" href="/resources/assets/favicon-32x32.png">
21-
<link rel="icon" type="image/png" sizes="16x16" href="/resources/assets/favicon-16x16.png">
20+
<!-- <link rel="icon" type="image/png" sizes="32x32" href="/resources/assets/favicon-32x32.png">
21+
<link rel="icon" type="image/png" sizes="16x16" href="/resources/assets/favicon-16x16.png"> -->
2222
<link rel="mask-icon" href="/resources/assets/safari-pinned-tab.svg" color="#00adff">
23-
<link rel="shortcut icon" href="/resources/assets/favicon.ico">
23+
<link id="favicon" rel="shortcut icon" href="/resources/assets/favicon.ico">
2424
<meta name="msapplication-TileColor" content="#00adff">
2525
<meta name="theme-color" content="#00adff">
2626
<!-- Preload Assets -->
@@ -37,6 +37,14 @@
3737
<link rel="preload" href="/resources/assets/LostConnection.webm" as="audio">
3838
<link rel="preload" href="/resources/assets/RegainedConnection.webm" as="audio">
3939
<link rel="preload" href="/resources/assets/Stun.webm" as="audio">
40+
<!-- Script error handling -->
41+
<script>
42+
window.addEventListener('error', function(e) {
43+
alert("Error executing JS (report this): " + e.message);
44+
45+
// console.error(e.message, e.filename, e.lineno, e.colno, e.error);
46+
});
47+
</script>
4048
<!-- Fix Electron Support (before scripts) -->
4149
<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
4250
<!-- Load scripts -->
@@ -72,6 +80,9 @@ <h3 id="loginTitle">Login or Register - HyperChat by Justsnoopy30</h3>
7280
<div id="notificationBellWrapper">
7381
<img id="notificationBell" src="/resources/assets/NotificationBell.svg" title="Notification Bell" alt="Notification Bell" draggable="false" onload="window.addEventListener('load', () => SVGInject(this));">
7482
</div>
83+
<div id="whiteboardIconWrapper">
84+
<img id="whiteboardIcon" src="/resources/assets/WhiteboardIcon.svg" title="Whiteboard Icon" alt="Whiteboard Icon" draggable="false" onload="window.addEventListener('load', () => SVGInject(this));">
85+
</div>
7586
<div class="settingsIconWrapper" id="settingsIconWrapperInChat">
7687
<img class="settingsIcon" src="/resources/assets/SettingsIcon.svg" title="Settings Icon" alt="Settings Icon" draggable="false" onload="window.addEventListener('load', () => SVGInject(this));">
7788
</div>
@@ -84,6 +95,7 @@ <h3 id="loginTitle">Login or Register - HyperChat by Justsnoopy30</h3>
8495
<input id="Add-Server-Name-Input" placeholder="Enter server..." maxlength="16"></input>
8596
</div>
8697
<div id="Chat-Area">
98+
<canvas id="Server-Whiteboard"></canvas>
8799
<ul id="messages"></ul>
88100
<div id="Bottom-Area">
89101
<div id="User-Is-Typing-Area"></div>

0 commit comments

Comments
 (0)