Skip to main content

rskit_git/auth/
transport.rs

1//! Transport authentication types.
2
3use std::path::PathBuf;
4
5use rskit_util::SecretString;
6
7/// Supported repository transport authentication strategies.
8///
9/// Credential-bearing fields are wrapped in [`SecretString`] so tokens and
10/// passwords never leak through `Debug`, `Display`, or serialization; access the
11/// plaintext intentionally with [`SecretString::expose`] only at the point it is
12/// handed to `git2`.
13#[derive(Debug, Clone, Default, PartialEq, Eq)]
14#[non_exhaustive]
15pub enum TransportAuth {
16    /// Use default environment-driven authentication.
17    #[default]
18    Default,
19    /// Use a username/password combination.
20    UsernamePassword {
21        /// Login username.
22        username: String,
23        /// Login password.
24        password: SecretString,
25    },
26    /// Use an HTTP token.
27    Token {
28        /// Optional username override; defaults to [`DEFAULT_TOKEN_USERNAME`](super::DEFAULT_TOKEN_USERNAME) when `None`.
29        username: Option<String>,
30        /// Token or password value.
31        token: SecretString,
32    },
33    /// Use explicit SSH key material.
34    SshKey {
35        /// SSH username.
36        username: String,
37        /// Optional public key path.
38        public_key: Option<PathBuf>,
39        /// Private key path.
40        private_key: PathBuf,
41        /// Optional passphrase.
42        passphrase: Option<SecretString>,
43    },
44    /// Use the local SSH agent.
45    SshAgent {
46        /// SSH username.
47        username: String,
48    },
49}