// Private regular-file validation guards symlink and permissions attacks on MCP credentials.
import gleam/dynamic
import gleeunit/should
@external(erlang, "albedo_skills_test_support", "fixture")
fn fixture() -> #(String, String, String)
@external(erlang, "albedo_skills_test_support", "write")
fn write(base: String, path: String, contents: String) -> String
@external(erlang, "albedo_skills_test_support", "chmod")
fn chmod(base: String, path: String, mode: Int) -> Nil
@external(erlang, "albedo_skills_test_support", "replace_with_symlink")
fn link(base: String, source: String, path: String) -> Nil
@external(erlang, "albedo_skills_test_support", "cleanup")
fn cleanup(root: String) -> Nil
@external(erlang, "albedo_mcp_credentials", "server_at")
fn secret(home: String, name: String) -> Result(dynamic.Dynamic, String)
pub fn credentials_require_private_regular_file_test() -> Nil {
let #(root, _, home) = fixture()
secret(home, "docs") |> should.be_ok
let _ =
write(
home,
"creds.json",
"{\"mcp\":{\"docs\":{\"bearerToken\":\"never-log\"}}}",
)
chmod(home, "creds.json", 420)
secret(home, "docs") |> should.be_error
chmod(home, "creds.json", 384)
secret(home, "docs") |> should.be_ok
let _ = write(home, "replacement", "{}")
link(home, "replacement", "creds.json")
secret(home, "docs") |> should.be_error
cleanup(root)
}