diff --git a/frontend/index.html b/frontend/index.html
index c09f3df..4d57f01 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -26,6 +26,7 @@
type="text"
id="join-session-nickname"
placeholder="Nickname"
+ maxlength="50"
required
/>
diff --git a/src/main.rs b/src/main.rs
index 9d570d1..77a0eec 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -8,6 +8,7 @@ use warp as warb; // i think it's funny
mod events;
mod viewer_connection;
mod watch_session;
+mod utils;
use serde::Deserialize;
diff --git a/src/utils.rs b/src/utils.rs
new file mode 100644
index 0000000..789e315
--- /dev/null
+++ b/src/utils.rs
@@ -0,0 +1,6 @@
+pub fn truncate_str(s: &str, max_chars: usize) -> &str {
+ match s.char_indices().nth(max_chars) {
+ None => s,
+ Some((idx, _)) => &s[..idx],
+ }
+}
diff --git a/src/viewer_connection.rs b/src/viewer_connection.rs
index 4dc903e..30fa9ed 100644
--- a/src/viewer_connection.rs
+++ b/src/viewer_connection.rs
@@ -16,6 +16,7 @@ use warp::ws::{Message, WebSocket};
use crate::{
events::{WatchEvent, WatchEventData},
+ utils::truncate_str,
watch_session::{get_session, handle_watch_event_data},
};
@@ -53,6 +54,7 @@ pub async fn ws_subscribe(session_uuid: Uuid, nickname: String, colour: String,
if !colour.len() == 6 || !colour.chars().all(|x| x.is_ascii_hexdigit()) {
colour = String::from("7ed0ff");
}
+ let nickname = truncate_str(&nickname, 50).to_string();
CONNECTED_VIEWERS.write().await.insert(
viewer_id,