From 7a8cca8fe75b4bd458a2c3c62f53f4daaed87c82 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Thu, 12 Dec 2024 21:32:41 +0000 Subject: [PATCH] Show auth success --- backend/sync_server/src/database/models.rs | 1 + backend/sync_server/src/server/ping.rs | 19 ++++++++++++++++--- plugin/src/services/sync_service.ts | 9 ++++++++- plugin/src/views/settings-tab.ts | 12 +++++++++--- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/backend/sync_server/src/database/models.rs b/backend/sync_server/src/database/models.rs index 6a0ea56..71e431e 100644 --- a/backend/sync_server/src/database/models.rs +++ b/backend/sync_server/src/database/models.rs @@ -56,6 +56,7 @@ impl From for DocumentVersionWithoutContent { #[serde(rename_all = "camelCase")] pub struct PingResponse { pub server_version: String, + pub is_authenticated: bool, } #[derive(Debug, Clone, Serialize, JsonSchema)] diff --git a/backend/sync_server/src/server/ping.rs b/backend/sync_server/src/server/ping.rs index 44c24a5..bf6c843 100644 --- a/backend/sync_server/src/server/ping.rs +++ b/backend/sync_server/src/server/ping.rs @@ -1,10 +1,23 @@ -use axum::Json; +use axum::{extract::State, Json}; +use axum_extra::{ + headers::{authorization::Bearer, Authorization}, + TypedHeader, +}; -use crate::{database::models::PingResponse, errors::SyncServerError}; +use super::auth::{self, auth}; +use crate::{app_state::AppState, database::models::PingResponse, errors::SyncServerError}; #[axum::debug_handler] -pub async fn ping() -> Result, SyncServerError> { +pub async fn ping( + maybe_auth_header: Option>>, + State(state): State, +) -> Result, SyncServerError> { + let is_authenticated = maybe_auth_header + .map(|auth_header| auth(&state, auth_header.token()).is_ok()) + .unwrap_or(false); + Ok(Json(PingResponse { server_version: env!("CARGO_PKG_VERSION").to_string(), + is_authenticated, })) } diff --git a/plugin/src/services/sync_service.ts b/plugin/src/services/sync_service.ts index 1fffa36..fc4c808 100644 --- a/plugin/src/services/sync_service.ts +++ b/plugin/src/services/sync_service.ts @@ -26,7 +26,14 @@ export class SyncServer { } public async ping(): Promise { - const response = await this.client.GET("/ping"); + const response = await this.client.GET("/ping", { + params: { + header: { + authorization: + "Bearer " + this.database.getSettings().token, + }, + }, + }); Logger.getInstance().info( "Ping response: " + JSON.stringify(response.data) diff --git a/plugin/src/views/settings-tab.ts b/plugin/src/views/settings-tab.ts index 9f8f806..bc2293a 100644 --- a/plugin/src/views/settings-tab.ts +++ b/plugin/src/views/settings-tab.ts @@ -46,9 +46,15 @@ export class SyncSettingsTab extends PluginSettingTab { button.setButtonText("Test Connection").onClick(async () => { try { const result = await this.syncServer.ping(); - new Notice( - `Successfully connected to server! (server version: ${result.serverVersion})` - ); + if (result.isAuthenticated) { + new Notice( + `Successfully authenticated with the server (version: ${result.serverVersion})!` + ); + } else { + new Notice( + `Successfully connected to server (version: ${result.serverVersion}) but failed to authenticate.` + ); + } } catch (e) { new Notice("Failed to connect to server: " + e); }