[package]
edition = "2021"
rust-version = "1.85"
name = "gunnar-server"
version = "3.0.0"
authors = [
"Ignalina ApS",
"Vetra Automation AB",
]
build = "build.rs"
publish = true
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "The gunnar git server: SSH and smart-HTTP git transports and the gRPC control plane. The appliance half, extracted from gunnar-cli so the server code lives in its own crate."
readme = "README.md"
license = "AGPL-3.0-only"
repository = "https://git.gunnar.rs/nordisk/gunnar"
[features]
admit-share = [
"gunnar-ssh/admit-share",
"gunnar-common/admit-share",
]
client = [
"replication",
"gunnar-client/porcelain",
"nornir-git/porcelain",
]
clock-fetch = ["estate-clock/fetch"]
container-robot = [
"wg-client",
"wg-appliance-core/robot",
]
default = [
"server",
"engine-znippy",
"mimalloc",
]
dev-narrate = [
"wg-client",
"dep:nordisk-narrate",
"nordisk-narrate/dev-narrate",
"nordisk-narrate/bootlog",
]
dhcp-client = ["appliance-pid1/dhcp"]
engine-gix = ["dep:storage-git-gix"]
engine-znippy = ["dep:znippy-plugin-git"]
fleet-pull = [
"replication",
"gunnar-repair/fleet",
"dep:lettre",
]
grow-runtime = [
"dep:korp-installer",
"dep:nix",
"replication",
]
http = [
"dep:gunnar-http",
"gunnar-common/http",
]
live-app = [
"dep:korp-installer",
"dep:nix",
"wg-client",
"nix/signal",
]
metered = [
"dep:monetize-embed",
"gunnar-core/metered",
"gunnar-common/metered",
"gunnar-grpc/metered",
"gunnar-ssh/metered",
]
mimalloc = ["dep:mimalloc"]
mirror-http = ["dep:ureq"]
replication = [
"dep:gunnar-client",
"dep:nornir-git",
"dep:gunnar-pktline",
"dep:tonic",
"dep:gunnar-repair",
]
resolver-probe = []
server = []
sso = ["gunnar-grpc/sso"]
sso-egress = [
"server",
"sso",
"dep:ureq",
"dep:webpki-root-certs",
]
testmatrix = [
"dep:nornir-testmatrix",
"nornir-testmatrix/testmatrix",
]
webhooks = [
"hyper/client",
"hyper/http1",
"dep:tokio-rustls",
"dep:rustls-native-certs",
]
wg-client = [
"nordisk-pairing/wireguard",
"dep:wg-appliance-core",
"dep:gunnar-pairing-door",
]
[lib]
name = "gunnar_server"
path = "src/lib.rs"
[[bin]]
name = "gunnar-server"
path = "src/main.rs"
[[example]]
name = "fake_idp"
path = "examples/fake_idp.rs"
[[example]]
name = "git-store-serve"
path = "examples/git-store-serve.rs"
[[test]]
name = "account_purge"
path = "tests/account_purge.rs"
[[test]]
name = "account_purge_rpc"
path = "tests/account_purge_rpc.rs"
[[test]]
name = "actor_ticket"
path = "tests/actor_ticket.rs"
required-features = ["metered"]
[[test]]
name = "add_principal"
path = "tests/add_principal.rs"
[[test]]
name = "add_users"
path = "tests/add_users.rs"
[[test]]
name = "admin_docs_head_their_fn"
path = "tests/admin_docs_head_their_fn.rs"
[[test]]
name = "admit_plan"
path = "tests/admit_plan.rs"
[[test]]
name = "airgap_runtime"
path = "tests/airgap_runtime.rs"
[[test]]
name = "appliance_container_robot"
path = "tests/appliance_container_robot.rs"
required-features = ["container-robot"]
[[test]]
name = "appliance_matrix_rows"
path = "tests/appliance_matrix_rows.rs"
required-features = ["wg-client"]
[[test]]
name = "appliance_powercut_recovery"
path = "tests/appliance_powercut_recovery.rs"
[[test]]
name = "audit_read_io"
path = "tests/audit_read_io.rs"
[[test]]
name = "become_twin_said_once"
path = "tests/become_twin_said_once.rs"
[[test]]
name = "blame_search_live"
path = "tests/blame_search_live.rs"
[[test]]
name = "boot_check"
path = "tests/boot_check.rs"
[[test]]
name = "bootstrap_credential"
path = "tests/bootstrap_credential.rs"
[[test]]
name = "capacity"
path = "tests/capacity.rs"
[[test]]
name = "clans"
path = "tests/clans.rs"
[[test]]
name = "clans_r2"
path = "tests/clans_r2.rs"
[[test]]
name = "dashboard_render"
path = "tests/dashboard_render.rs"
[[test]]
name = "dashboard_seam"
path = "tests/dashboard_seam.rs"
[[test]]
name = "delete_retention_is_said"
path = "tests/delete_retention_is_said.rs"
[[test]]
name = "disk_headroom"
path = "tests/disk_headroom.rs"
[[test]]
name = "ed25519_kat"
path = "tests/ed25519_kat.rs"
[[test]]
name = "encryption_key_rpc"
path = "tests/encryption_key_rpc.rs"
[[test]]
name = "enterprise"
path = "tests/enterprise.rs"
[[test]]
name = "entitlement"
path = "tests/entitlement.rs"
required-features = ["metered"]
[[test]]
name = "fake_idp_https"
path = "tests/fake_idp_https.rs"
[[test]]
name = "fd_budget"
path = "tests/fd_budget.rs"
[[test]]
name = "fed_clock_does_not_hold_the_feed"
path = "tests/fed_clock_does_not_hold_the_feed.rs"
[[test]]
name = "fence_before_recharge"
path = "tests/fence_before_recharge.rs"
[[test]]
name = "first_commit"
path = "tests/first_commit.rs"
[[test]]
name = "fleet_order"
path = "tests/fleet_order.rs"
[[test]]
name = "flow_meters"
path = "tests/flow_meters.rs"
[[test]]
name = "gc_queue"
path = "tests/gc_queue.rs"
[[test]]
name = "gc_rpc"
path = "tests/gc_rpc.rs"
[[test]]
name = "grpc_admission"
path = "tests/grpc_admission.rs"
[[test]]
name = "invites"
path = "tests/invites.rs"
[[test]]
name = "job_queue_third_kind"
path = "tests/job_queue_third_kind.rs"
[[test]]
name = "last_seen"
path = "tests/last_seen.rs"
[[test]]
name = "lean_egress"
path = "tests/lean_egress.rs"
[[test]]
name = "lfs_read_rpc"
path = "tests/lfs_read_rpc.rs"
[[test]]
name = "log_all_refs"
path = "tests/log_all_refs.rs"
[[test]]
name = "login_during_grow"
path = "tests/login_during_grow.rs"
[[test]]
name = "main_doc_write_io"
path = "tests/main_doc_write_io.rs"
[[test]]
name = "main_rebuild_auto"
path = "tests/main_rebuild_auto.rs"
[[test]]
name = "members_never_buy"
path = "tests/members_never_buy.rs"
required-features = ["metered"]
[[test]]
name = "mirror_import"
path = "tests/mirror_import.rs"
[[test]]
name = "mirror_sync"
path = "tests/mirror_sync.rs"
[[test]]
name = "new_repo_account_admin"
path = "tests/new_repo_account_admin.rs"
[[test]]
name = "old_layout_store"
path = "tests/old_layout_store.rs"
[[test]]
name = "open_build_speaks_no_money"
path = "tests/open_build_speaks_no_money.rs"
[[test]]
name = "orphan_store_recovery"
path = "tests/orphan_store_recovery.rs"
[[test]]
name = "pack_ceiling_store"
path = "tests/pack_ceiling_store.rs"
[[test]]
name = "pid1_edda_netns"
path = "tests/pid1_edda_netns.rs"
[[test]]
name = "product_report"
path = "tests/product_report.rs"
[[test]]
name = "purge_queue"
path = "tests/purge_queue.rs"
[[test]]
name = "purge_tenant"
path = "tests/purge_tenant.rs"
[[test]]
name = "push_spool_sweep"
path = "tests/push_spool_sweep.rs"
[[test]]
name = "re_enrol_same_key"
path = "tests/re_enrol_same_key.rs"
[[test]]
name = "recharge"
path = "tests/recharge.rs"
[[test]]
name = "repair_key_is_narrow"
path = "tests/repair_key_is_narrow.rs"
[[test]]
name = "replication_follows_wg0"
path = "tests/replication_follows_wg0.rs"
[[test]]
name = "repo_create_transactional"
path = "tests/repo_create_transactional.rs"
[[test]]
name = "repo_overhead"
path = "tests/repo_overhead.rs"
[[test]]
name = "repo_purge"
path = "tests/repo_purge.rs"
[[test]]
name = "repos_list_parallel"
path = "tests/repos_list_parallel.rs"
[[test]]
name = "restate"
path = "tests/restate.rs"
[[test]]
name = "restore_after_snapshot"
path = "tests/restore_after_snapshot.rs"
[[test]]
name = "restore_credential"
path = "tests/restore_credential.rs"
[[test]]
name = "restore_large_entry"
path = "tests/restore_large_entry.rs"
[[test]]
name = "retention_guard"
path = "tests/retention_guard.rs"
[[test]]
name = "server_settings"
path = "tests/server_settings.rs"
[[test]]
name = "setting_change_audited"
path = "tests/setting_change_audited.rs"
[[test]]
name = "setting_change_audited_rpc"
path = "tests/setting_change_audited_rpc.rs"
[[test]]
name = "sign_in_again"
path = "tests/sign_in_again.rs"
[[test]]
name = "slow_disk_placement"
path = "tests/slow_disk_placement.rs"
[[test]]
name = "sso"
path = "tests/sso.rs"
[[test]]
name = "sso_directory_rpc"
path = "tests/sso_directory_rpc.rs"
[[test]]
name = "sso_egress"
path = "tests/sso_egress.rs"
[[test]]
name = "sso_egress_private"
path = "tests/sso_egress_private.rs"
[[test]]
name = "sso_idp_ca"
path = "tests/sso_idp_ca.rs"
[[test]]
name = "sso_keycloak"
path = "tests/sso_keycloak.rs"
[[test]]
name = "sso_per_client"
path = "tests/sso_per_client.rs"
[[test]]
name = "sso_signin_rpc"
path = "tests/sso_signin_rpc.rs"
[[test]]
name = "sso_without_an_idp_dials_nothing"
path = "tests/sso_without_an_idp_dials_nothing.rs"
[[test]]
name = "storage_engine_report"
path = "tests/storage_engine_report.rs"
[[test]]
name = "the_pairing_loop_keeps_the_latest_feed"
path = "tests/the_pairing_loop_keeps_the_latest_feed.rs"
[[test]]
name = "tls_transition"
path = "tests/tls_transition.rs"
[[test]]
name = "twin_apply_io"
path = "tests/twin_apply_io.rs"
[[test]]
name = "twin_crash_mid_group"
path = "tests/twin_crash_mid_group.rs"
[[test]]
name = "twin_follows_restored"
path = "tests/twin_follows_restored.rs"
[[test]]
name = "twin_heartbeat"
path = "tests/twin_heartbeat.rs"
[[test]]
name = "twin_mtls_pairing"
path = "tests/twin_mtls_pairing.rs"
[[test]]
name = "twin_promotion_rpc"
path = "tests/twin_promotion_rpc.rs"
[[test]]
name = "twin_reborn"
path = "tests/twin_reborn.rs"
[[test]]
name = "twin_snapshot_memory"
path = "tests/twin_snapshot_memory.rs"
[[test]]
name = "twin_snapshot_slow"
path = "tests/twin_snapshot_slow.rs"
[[test]]
name = "twin_snapshot_stall"
path = "tests/twin_snapshot_stall.rs"
[[test]]
name = "twin_stream_memory"
path = "tests/twin_stream_memory.rs"
[[test]]
name = "txlog_retention"
path = "tests/txlog_retention.rs"
[[test]]
name = "txlog_size_alarm"
path = "tests/txlog_size_alarm.rs"
[[test]]
name = "unverified_refusal_said_once"
path = "tests/unverified_refusal_said_once.rs"
[[test]]
name = "usage_batch"
path = "tests/usage_batch.rs"
[[test]]
name = "usage_meters"
path = "tests/usage_meters.rs"
[[test]]
name = "usage_poll_scale"
path = "tests/usage_poll_scale.rs"
[[test]]
name = "web_credentials"
path = "tests/web_credentials.rs"
[[test]]
name = "webhooks"
path = "tests/webhooks.rs"
[[test]]
name = "wg_only_refuses_plain_ip"
path = "tests/wg_only_refuses_plain_ip.rs"
[dependencies.anyhow]
version = "1"
[dependencies.appliance-pid1]
version = "0.1.5"
features = [
"runtime",
"net",
]
[dependencies.blake3]
version = "1"
[dependencies.bytes]
version = "1"
features = ["std"]
default-features = false
[dependencies.clap]
version = "4"
features = [
"derive",
"env",
]
[dependencies.disk-snapshot]
version = "0.1.0"
[dependencies.ed25519-dalek]
version = "3"
[dependencies.estate-clock]
version = "0.1.1"
features = [
"peer",
"adjust",
]
default-features = false
[dependencies.flate2]
version = "1"
features = ["zlib-rs"]
default-features = false
[dependencies.git-storage-trait]
version = "0.1.2"
[dependencies.gix-error]
version = "0.4"
[dependencies.gix-hash]
version = "0.27"
features = [
"sha1",
"sha256",
]
[dependencies.gunnar-client]
version = "1.1.0"
optional = true
default-features = false
[dependencies.gunnar-common]
version = "3.0.0"
features = [
"server",
"jobs",
]
default-features = false
[dependencies.gunnar-core]
version = "3.0.0"
[dependencies.gunnar-grpc]
version = "3.0.0"
[dependencies.gunnar-http]
version = "1.1.0"
optional = true
[dependencies.gunnar-lfs]
version = "1.1.0"
features = ["fs"]
[dependencies.gunnar-pairing-door]
version = "1.6.0"
optional = true
[dependencies.gunnar-pktline]
version = "1.1.0"
optional = true
[dependencies.gunnar-policy]
version = "1.1.0"
[dependencies.gunnar-proto]
version = "3.0.0"
[dependencies.gunnar-repair]
version = "3.0.0"
features = ["proto"]
optional = true
default-features = false
[dependencies.gunnar-ssh]
version = "3.0.0"
[dependencies.gunnar-store]
version = "1.1.0"
[dependencies.gunnar-wire]
version = "1.1.0"
[dependencies.hex]
version = "0.4"
[dependencies.http-body-util]
version = "0.1"
default-features = false
[dependencies.hyper]
version = "1"
features = [
"server",
"http1",
]
default-features = false
[dependencies.hyper-util]
version = "0.1"
features = [
"server",
"tokio",
]
default-features = false
[dependencies.jera]
version = "0.2.1"
default-features = false
[dependencies.korp-installer]
version = "0.2.0"
optional = true
default-features = false
[dependencies.lettre]
version = "0.11"
features = [
"builder",
"smtp-transport",
"tokio1",
"tokio1-rustls-tls",
"ring",
"webpki-roots",
]
optional = true
default-features = false
[dependencies.memmap2]
version = "0.9"
[dependencies.mimalloc]
version = "0.1"
optional = true
[dependencies.monetize-embed]
version = "0.3.0"
optional = true
[dependencies.nix]
version = "0.31"
features = ["mount"]
optional = true
default-features = false
[dependencies.nordisk-narrate]
version = "0.1.0"
optional = true
[dependencies.nordisk-pairing]
version = "0.5.27"
[dependencies.nornir-git]
version = "0.2.0"
optional = true
default-features = false
[dependencies.nornir-identity]
version = "0.2.0"
[dependencies.nornir-testmatrix]
version = "0.2"
optional = true
[dependencies.rustix]
version = "1"
features = [
"std",
"process",
"net",
"fs",
"thread",
"termios",
"time",
"mount",
"system",
]
default-features = false
[dependencies.rustls-native-certs]
version = "0.8"
optional = true
[dependencies.serde]
version = "1"
features = ["derive"]
[dependencies.serde_json]
version = "1"
[dependencies.socket2]
version = "0.6"
features = ["all"]
default-features = false
[dependencies.storage-git-gix]
version = "0.2.0"
optional = true
[dependencies.tempfile]
version = "3"
[dependencies.thiserror]
version = "2"
[dependencies.tokio]
version = "1"
features = [
"macros",
"rt-multi-thread",
"io-util",
"net",
"sync",
"fs",
"time",
"signal",
]
[dependencies.tokio-rustls]
version = "0.26"
features = ["ring"]
optional = true
default-features = false
[dependencies.tokio-stream]
version = "0.1"
[dependencies.tokio-util]
version = "0.7"
features = ["io-util"]
[dependencies.tonic]
version = "0.14"
features = [
"router",
"transport",
"codegen",
"tls-ring",
"tls-webpki-roots",
]
optional = true
default-features = false
[dependencies.tracing]
version = "0.1"
[dependencies.ureq]
version = "3"
features = ["rustls"]
optional = true
default-features = false
[dependencies.webpki-root-certs]
version = "1"
optional = true
[dependencies.wg-appliance-core]
version = "0.1.7"
optional = true
[dependencies.znippy-plugin-git]
version = "0.2.2"
optional = true
default-features = false
[dev-dependencies.ed25519-dalek]
version = "3"
[dev-dependencies.gix-object]
version = "0.65"
[dev-dependencies.gunnar-core]
version = "3.0.0"
features = ["test-hooks"]
[dev-dependencies.gunnar-store]
version = "1.1.0"
features = ["conformance"]
[dev-dependencies.monetize-embed]
version = "0.3.0"
[dev-dependencies.nornir-auth-oidc]
version = "0.2.0"
features = ["test-support"]
default-features = false
[dev-dependencies.nornir-auth-saml]
version = "0.1.2"
features = ["test-support"]
default-features = false
[dev-dependencies.nornir-build-thing]
version = "0.2.6"
default-features = false
[dev-dependencies.nornir-identity]
version = "0.2.0"
features = ["test-support"]
[dev-dependencies.p256]
version = "0.14"
features = ["ecdsa"]
default-features = false
[dev-dependencies.prost]
version = "0.14"
[dev-dependencies.rcgen]
version = "0.14"
features = [
"crypto",
"pem",
"aws_lc_rs",
"x509-parser",
]
default-features = false
[dev-dependencies.rustls]
version = "0.23"
features = [
"ring",
"std",
"tls12",
]
default-features = false
[dev-dependencies.sha2]
version = "0.11"
[dev-dependencies.tempfile]
version = "3"
[dev-dependencies.tonic]
version = "0.14"
features = [
"router",
"transport",
"codegen",
"tls-ring",
]
default-features = false
[dev-dependencies.tracing-subscriber]
version = "0.3"
features = ["env-filter"]
[build-dependencies.gunnar-recipe]
version = "0.2.0"