mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-17 04:10:04 +02:00
Lot 35 : routes de base de la façade aussi par le tunnel du relais
Les neuf routes que la façade sert toujours (ping, status, config, ligne de commande du moteur, couches du modèle, chemins, RAM, VRAM, journal du service) arrivent désormais à la façade par le tunnel du relais aussi : withFacadeChat les lui remet dès qu'elle tourne (facade_core.go). Les handlers du Go ne servent plus que sans façade (LOKI_FACADE=0). Côté Rust, une requête relayée par le Go (jeton interne) n'est pas réauthentifiée, comme pour les routes des lots. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
8 files changed
+186
-9
No files matched your search
+14
-4
@@ -136,11 +136,21 @@ pub fn handles(_method: &Method, path: &str) -> bool {
|
||||
)
|
||||
}
|
||||
|
||||
pub async fn serve(ctx: &Ctx, req: Request<Incoming>) -> Response<Body> {
|
||||
/// `from_go` : relayée par le Go (tunnel du relais), qui l'a déjà
|
||||
/// authentifiée.
|
||||
pub async fn serve(ctx: &Ctx, req: Request<Incoming>, from_go: bool) -> Response<Body> {
|
||||
let (parts, _body) = req.into_parts();
|
||||
let version = match ctx.guard(&parts.headers).await {
|
||||
Ok(v) => v,
|
||||
Err(refus) => return *refus,
|
||||
let version = if from_go {
|
||||
ctx.internal
|
||||
.auth()
|
||||
.await
|
||||
.map(|i| i.version)
|
||||
.unwrap_or_default()
|
||||
} else {
|
||||
match ctx.guard(&parts.headers).await {
|
||||
Ok(v) => v,
|
||||
Err(refus) => return *refus,
|
||||
}
|
||||
};
|
||||
match parts.uri.path() {
|
||||
// Vérifie la connectivité ET la clé (200 = bonne clé, 401 = mauvaise).
|
||||
|
||||
@@ -266,7 +266,7 @@ impl Proxy {
|
||||
return oai::serve(&self.ctx, &self.engine, req).await;
|
||||
}
|
||||
if api::handles(req.method(), path) {
|
||||
return api::serve(&self.ctx, req).await;
|
||||
return api::serve(&self.ctx, req, from_go).await;
|
||||
}
|
||||
if let Some(chat) = &self.ctx.chat
|
||||
&& crate::chatx::handles(path)
|
||||
|
||||
@@ -76,6 +76,12 @@ struct Banc {
|
||||
}
|
||||
|
||||
async fn banc(cle: Option<&str>) -> Banc {
|
||||
banc_avec(cle, false).await
|
||||
}
|
||||
|
||||
/// `tenu` : la façade tient au moins un groupe de routes (le Go lui en
|
||||
/// relaie alors par le tunnel du relais).
|
||||
async fn banc_avec(cle: Option<&str>, tenu: bool) -> Banc {
|
||||
let etat = Arc::new(FauxGo::default());
|
||||
*etat.cle.lock().unwrap() = cle.map(String::from);
|
||||
let backend = faux_go(etat.clone()).await;
|
||||
@@ -96,7 +102,7 @@ async fn banc(cle: Option<&str>) -> Banc {
|
||||
chat: None,
|
||||
models: None,
|
||||
dictate: None,
|
||||
settings: false,
|
||||
settings: tenu,
|
||||
files: None,
|
||||
push: None,
|
||||
mem: None,
|
||||
@@ -235,3 +241,39 @@ async fn ui_servie_par_rust() {
|
||||
"seule la police inconnue doit atteindre le Go : {vus:?}"
|
||||
);
|
||||
}
|
||||
|
||||
/// Lot 35 : les routes de base arrivent aussi par le tunnel du relais, que
|
||||
/// le Go a déjà authentifiées (jeton interne) : ni clé ni hôte local exigés.
|
||||
/// Sans le jeton, la règle de toujours.
|
||||
#[tokio::test]
|
||||
async fn routes_de_base_relayees_par_le_go() {
|
||||
let b = banc_avec(Some("secret"), true).await;
|
||||
let (code, _, body) = get(
|
||||
&b,
|
||||
"/api/ping",
|
||||
&[("host", "loki.distant.example"), ("x-loki-internal", JETON)],
|
||||
)
|
||||
.await;
|
||||
assert_eq!(code, StatusCode::OK, "{}", String::from_utf8_lossy(&body));
|
||||
assert!(
|
||||
b.etat
|
||||
.vus
|
||||
.lock()
|
||||
.unwrap()
|
||||
.iter()
|
||||
.all(|(p, _)| p != "/api/ping"),
|
||||
"servie par la façade, pas relayée au Go"
|
||||
);
|
||||
let (code, _, _) = get(&b, "/api/ping", &[("host", "loki.distant.example")]).await;
|
||||
assert_ne!(code, StatusCode::OK);
|
||||
let (code, _, _) = get(
|
||||
&b,
|
||||
"/api/ping",
|
||||
&[
|
||||
("host", "loki.distant.example"),
|
||||
("x-loki-internal", "faux"),
|
||||
],
|
||||
)
|
||||
.await;
|
||||
assert_ne!(code, StatusCode::OK);
|
||||
}
|
||||
Reference in new issue
Block a user