From 43f6f3bc61773b97e736c918bbcbb618d8e3a69d Mon Sep 17 00:00:00 2001 From: Bartosz Sypytkowski Date: Mon, 26 Aug 2024 15:03:18 +0200 Subject: [PATCH] chore: apply same change to other ws endpoint --- src/api/ws.rs | 4 ++++ src/config/config.rs | 15 ++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/api/ws.rs b/src/api/ws.rs index 3372d7aa..11249588 100644 --- a/src/api/ws.rs +++ b/src/api/ws.rs @@ -86,6 +86,10 @@ pub async fn establish_ws_connection_v1( }, }; + if client_version < state.config.websocket.min_client_version { + return Err(AppError::Connect("Client version is too low".to_string()).into()); + } + start_connect( &request, payload, diff --git a/src/config/config.rs b/src/config/config.rs index c0ad3fc1..349c8ec1 100644 --- a/src/config/config.rs +++ b/src/config/config.rs @@ -1,11 +1,14 @@ -use anyhow::Context; -use infra::env_util::get_env_var; -use secrecy::{ExposeSecret, Secret}; -use serde::Deserialize; -use sqlx::postgres::{PgConnectOptions, PgSslMode}; use std::fmt::Display; use std::str::FromStr; +use anyhow::Context; +use secrecy::{ExposeSecret, Secret}; +use semver::Version; +use serde::Deserialize; +use sqlx::postgres::{PgConnectOptions, PgSslMode}; + +use infra::env_util::get_env_var; + #[derive(Clone, Debug)] pub struct Config { pub app_env: Environment, @@ -166,6 +169,7 @@ pub fn get_configuration() -> Result { websocket: WebsocketSetting { heartbeat_interval: get_env_var("APPFLOWY_WEBSOCKET_HEARTBEAT_INTERVAL", "6").parse()?, client_timeout: get_env_var("APPFLOWY_WEBSOCKET_CLIENT_TIMEOUT", "60").parse()?, + min_client_version: get_env_var("APPFLOWY_WEBSOCKET_CLIENT_MIN_VERSION", "0.5.0").parse()?, }, redis_uri: get_env_var("APPFLOWY_REDIS_URI", "redis://localhost:6379").into(), s3: S3Setting { @@ -239,4 +243,5 @@ impl FromStr for Environment { pub struct WebsocketSetting { pub heartbeat_interval: u8, pub client_timeout: u8, + pub min_client_version: Version, }