From d969fbe6478d1a0bf04231808c3793390ddb5e93 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Sun, 5 Nov 2023 18:41:17 +0100
Subject: [PATCH] LEKTORD: Set the content type when we return hand-crafter
 json things

---
 lektord/src/app/routes.rs | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/lektord/src/app/routes.rs b/lektord/src/app/routes.rs
index 694ce5d3..a3149088 100644
--- a/lektord/src/app/routes.rs
+++ b/lektord/src/app/routes.rs
@@ -9,9 +9,11 @@ use crate::*;
 use anyhow::{anyhow, Error};
 use axum::{
     extract::{Path, State},
-    http::StatusCode,
+    http::{HeaderValue, StatusCode},
+    response::{IntoResponse, Response},
     Json,
 };
+use hyper::header::CONTENT_TYPE;
 use lektor_nkdb::*;
 use lektor_payloads::*;
 use lektor_utils::{decode_base64_json, log};
@@ -105,11 +107,13 @@ pub(crate) async fn toggle_play_state() -> Result<(), LektordError> {
 pub(crate) async fn get_kara_by_id(
     State(state): State<LektorStatePtr>,
     Path(id): Path<u64>,
-) -> Result<String, LektordError> {
-    Ok(
-        serde_json::to_string(state.database.get_kara_by_id(id).await?)
-            .map_err(|err| anyhow!("{err}"))?,
-    )
+) -> Result<Response, LektordError> {
+    let mut kara = serde_json::to_string(state.database.get_kara_by_id(id).await?)
+        .map_err(|err| anyhow!("{err}"))?
+        .into_response();
+    kara.headers_mut()
+        .insert(CONTENT_TYPE, HeaderValue::from_static("application/json"));
+    Ok(kara)
 }
 
 /// Get all the informations about a kara by its id. Returns the kara as a json object to avoid
@@ -118,14 +122,18 @@ pub(crate) async fn get_kara_by_id(
 pub(crate) async fn get_kara_by_kid(
     State(state): State<LektorStatePtr>,
     Path(id): Path<String>,
-) -> Result<String, LektordError> {
-    match state.database.get_kid_from_str(&decode_base64(&id)?).await {
-        Some(id) => Ok(
-            serde_json::to_string(state.database.get_kara_by_kid(id).await?)
-                .map_err(|err| anyhow!("{err}"))?,
-        ),
-        None => Err(anyhow!("no kara found with id {id}").into()),
-    }
+) -> Result<Response, LektordError> {
+    let id = state
+        .database
+        .get_kid_from_str(&decode_base64(&id)?)
+        .await
+        .ok_or_else(|| anyhow!("no kara found with id {id}"))?;
+    let mut kara = serde_json::to_string(state.database.get_kara_by_kid(id).await?)
+        .map_err(|err| anyhow!("{err}"))?
+        .into_response();
+    kara.headers_mut()
+        .insert(CONTENT_TYPE, HeaderValue::from_static("application/json"));
+    Ok(kara)
 }
 
 /// Search some karas from a search set with a regex. We take the json argument as base64 encoded
-- 
GitLab