use actix_web::web;
use actix_web::web::{scope, ServiceConfig};
use crate::common::AppSysConfig;
use crate::openapi::auth::login;
use crate::openapi::config::config_v1_route;
use crate::openapi::constant::NACOS_PREFIX;
use crate::openapi::naming::naming_v1_route;
pub(crate) mod auth;
pub(crate) mod backup;
pub(crate) mod config;
mod constant;
pub(crate) mod health;
pub(crate) mod metrics;
pub mod middle;
pub(crate) mod naming;
pub(crate) mod v1;
pub(crate) mod v2;
#[cfg(feature = "debug")]
pub(crate) mod debug;
pub mod mcp;
pub(crate) mod mcp_api;
#[derive(Debug, Default, Clone)]
pub struct RouteConf {
pub enable_auth: bool,
pub auth_key: Option<String>,
}
impl From<AppSysConfig> for RouteConf {
fn from(val: AppSysConfig) -> Self {
RouteConf {
enable_auth: !val.enable_no_auth_console || !val.openapi_enable_auth,
auth_key: None,
}
}
}
#[deprecated]
pub fn openapi_config<T>(conf: T) -> impl FnOnce(&mut ServiceConfig)
where
T: Into<RouteConf>,
{
let conf = conf.into();
move |config: &mut ServiceConfig| {
let server = scope(NACOS_PREFIX);
let scope = server.configure(openapi_service(conf));
config.service(scope);
}
}
fn openapi_service(conf: RouteConf) -> impl FnOnce(&mut ServiceConfig) {
move |config: &mut ServiceConfig| {
config
.service(config::openapi_service(conf.clone()))
.service(naming::openapi_service(conf.clone()));
}
}
pub fn openapi_route_config(config: &mut ServiceConfig) {
config_v1_route(config);
naming_v1_route(config);
}
pub fn rnacos_openapi_config(config: &mut ServiceConfig) {
config.service(
web::resource("/rnacos/v1/auth/user/login")
.route(web::post().to(login))
.route(web::get().to(login)),
);
mcp_api::mcp_route_config(config);
}