fix: share URL respects scheme in OXICLOUD_SERVER_HOST (#103)
When OXICLOUD_SERVER_HOST contains a full URL with scheme (e.g. https://oxi.example.com), the share link no longer prepends http:// or appends :port, avoiding malformed URLs like http://https://host:8085/s/token. - Add AppConfig::base_url() helper with smart URL construction - Replace all 6 inline format!() calls in share_service.rs - Replace inline construction in di.rs (admin settings base URL) - Priority: OXICLOUD_BASE_URL > full-URL host > http://host:port
This commit is contained in:
@@ -580,6 +580,28 @@ impl AppConfig {
|
||||
pub fn auth_enabled(&self) -> bool {
|
||||
self.features.enable_auth
|
||||
}
|
||||
|
||||
/// Build the public base URL for generating share links and other external URLs.
|
||||
///
|
||||
/// Priority:
|
||||
/// 1. `OXICLOUD_BASE_URL` env var (used as-is)
|
||||
/// 2. If `server_host` already contains a scheme (`http://` or `https://`),
|
||||
/// treat it as a full origin and do **not** prepend a scheme or append a port.
|
||||
/// 3. Otherwise, fall back to `http://{server_host}:{server_port}`.
|
||||
pub fn base_url(&self) -> String {
|
||||
if let Ok(explicit) = std::env::var("OXICLOUD_BASE_URL") {
|
||||
return explicit.trim_end_matches('/').to_string();
|
||||
}
|
||||
|
||||
let host = self.server_host.trim_end_matches('/');
|
||||
|
||||
if host.starts_with("http://") || host.starts_with("https://") {
|
||||
// The user already provided a full origin — use it directly.
|
||||
host.to_string()
|
||||
} else {
|
||||
format!("http://{}:{}", host, self.server_port)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Gets a default global configuration
|
||||
|
||||
+1
-3
@@ -594,9 +594,7 @@ impl AppServiceFactory {
|
||||
let settings_repo = Arc::new(
|
||||
crate::infrastructure::repositories::pg::SettingsPgRepository::new(pool.clone())
|
||||
);
|
||||
let server_base_url = std::env::var("OXICLOUD_BASE_URL").unwrap_or_else(|_| {
|
||||
format!("http://{}:{}", self.config.server_host, self.config.server_port)
|
||||
});
|
||||
let server_base_url = self.config.base_url();
|
||||
|
||||
// Load OIDC config from env vars (the snapshot from startup)
|
||||
let env_oidc = crate::common::config::OidcConfig::from_env();
|
||||
|
||||
Reference in New Issue
Block a user