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}