4 Commits

Author SHA1 Message Date
Ultradesu
754097f894 Fixed OIDC
All checks were successful
Build and Publish Deb Package / build-deb (push) Successful in 2m10s
Publish Server Image / build-and-push-image (push) Successful in 4m43s
2026-03-17 15:04:04 +00:00
Ultradesu
b761245fd0 Fixed OIDC 2026-03-17 15:03:36 +00:00
Ultradesu
0f49d8d079 Furumi: Added web ui with OIDC SSO
All checks were successful
Build and Publish Deb Package / build-deb (push) Successful in 59s
Publish Server Image / build-and-push-image (push) Successful in 4m28s
2026-03-17 14:53:16 +00:00
Ultradesu
a17ff322ad Added web ui with OIDC SSO
All checks were successful
Build and Publish Deb Package / build-deb (push) Successful in 1m3s
Publish Server Image / build-and-push-image (push) Successful in 11m44s
2026-03-17 14:25:58 +00:00
10 changed files with 21 additions and 14 deletions

10
Cargo.lock generated
View File

@@ -910,7 +910,7 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
[[package]] [[package]]
name = "furumi-client-core" name = "furumi-client-core"
version = "0.2.1" version = "0.3.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
@@ -932,7 +932,7 @@ dependencies = [
[[package]] [[package]]
name = "furumi-common" name = "furumi-common"
version = "0.2.1" version = "0.3.1"
dependencies = [ dependencies = [
"prost", "prost",
"protobuf-src", "protobuf-src",
@@ -942,7 +942,7 @@ dependencies = [
[[package]] [[package]]
name = "furumi-mount-linux" name = "furumi-mount-linux"
version = "0.2.1" version = "0.3.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"clap", "clap",
@@ -959,7 +959,7 @@ dependencies = [
[[package]] [[package]]
name = "furumi-mount-macos" name = "furumi-mount-macos"
version = "0.2.1" version = "0.3.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
@@ -977,7 +977,7 @@ dependencies = [
[[package]] [[package]]
name = "furumi-server" name = "furumi-server"
version = "0.2.1" version = "0.3.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-stream", "async-stream",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "furumi-client-core" name = "furumi-client-core"
version = "0.2.2" version = "0.3.2"
edition = "2024" edition = "2024"
[dependencies] [dependencies]

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "furumi-common" name = "furumi-common"
version = "0.2.2" version = "0.3.2"
edition = "2024" edition = "2024"
[dependencies] [dependencies]

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "furumi-mount-linux" name = "furumi-mount-linux"
version = "0.2.2" version = "0.3.2"
edition = "2024" edition = "2024"
[dependencies] [dependencies]

View File

@@ -75,7 +75,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
MountOption::NoExec, // Better security for media mount MountOption::NoExec, // Better security for media mount
]; ];
println!("Mounting Furumi-ng to {:?}", args.mount); println!("Mounting Furumi-ng v{} to {:?}", env!("CARGO_PKG_VERSION"), args.mount);
// Use Session + BackgroundSession for graceful unmount on exit // Use Session + BackgroundSession for graceful unmount on exit
let session = Session::new(fuse_fs, &args.mount, &options)?; let session = Session::new(fuse_fs, &args.mount, &options)?;

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "furumi-mount-macos" name = "furumi-mount-macos"
version = "0.2.2" version = "0.3.2"
edition = "2024" edition = "2024"
[dependencies] [dependencies]

View File

@@ -108,7 +108,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
std::process::exit(1); std::process::exit(1);
} }
println!("Mounted Furumi-ng to {:?}", mount_path); println!("Mounted Furumi-ng v{} to {:?}", env!("CARGO_PKG_VERSION"), mount_path);
// Wait for shutdown signal // Wait for shutdown signal
while running.load(Ordering::SeqCst) { while running.load(Ordering::SeqCst) {

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "furumi-server" name = "furumi-server"
version = "0.2.2" version = "0.3.2"
edition = "2024" edition = "2024"
[dependencies] [dependencies]

View File

@@ -104,7 +104,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let svc = RemoteFileSystemServer::with_interceptor(remote_fs, auth.clone()); let svc = RemoteFileSystemServer::with_interceptor(remote_fs, auth.clone());
// Print startup info // Print startup info
println!("Furumi-ng Server listening on {}", addr); println!("Furumi-ng Server v{} listening on {}", env!("CARGO_PKG_VERSION"), addr);
if args.no_tls { if args.no_tls {
println!("WARNING: TLS is DISABLED — traffic is unencrypted"); println!("WARNING: TLS is DISABLED — traffic is unencrypted");
} else { } else {

View File

@@ -180,6 +180,7 @@ pub async fn oidc_init(
ClientId::new(client_id), ClientId::new(client_id),
Some(ClientSecret::new(client_secret)), Some(ClientSecret::new(client_secret)),
) )
.set_auth_type(openidconnect::AuthType::RequestBody)
.set_redirect_uri(RedirectUrl::new(redirect)?); .set_redirect_uri(RedirectUrl::new(redirect)?);
let mut session_secret = vec![0u8; 32]; let mut session_secret = vec![0u8; 32];
@@ -295,7 +296,13 @@ pub async fn oidc_callback(
let token_response = match token_response { let token_response = match token_response {
Ok(tr) => tr, Ok(tr) => tr,
Err(e) => return (StatusCode::INTERNAL_SERVER_ERROR, format!("OIDC error: {}", e)).into_response(), Err(e) => {
tracing::error!("OIDC exchange code error: {:?}", e);
if let openidconnect::RequestTokenError::ServerResponse(err) = &e {
tracing::error!("OIDC Server returned error: {:?}", err);
}
return (StatusCode::INTERNAL_SERVER_ERROR, format!("OIDC error: {}", e)).into_response();
}
}; };
let id_token = match token_response.id_token() { let id_token = match token_response.id_token() {