14 个版本 (4 个破坏性版本)
0.5.4 | 2024年3月15日 |
---|---|
0.5.3 | 2023年10月8日 |
0.5.2 | 2023年9月9日 |
0.4.1 | 2023年9月6日 |
0.1.1 | 2023年8月7日 |
#37 在 认证 中
每月下载量:23,947
用于 16 个 Crates (7 个直接使用)
51KB
773 行
auth-git2
为 git2
提供简单的认证。
使用 git2
进行认证可能相当困难。这个 crate 的目标是使其变得简单。
特性
- 具有小的依赖关系树。
- 可以查询 SSH agent 进行私钥认证。
- 可以从文件中获取 SSH 密钥。
- 可以提示用户为加密的 SSH 密钥输入密码。
- 仅支持 OpenSSH 私钥。
- 可以查询 git 凭据帮助程序以获取用户名和密码。
- 可以使用预先提供的明文用户名和密码。
- 可以作为最后手段提示用户输入凭据。
- 允许您完全自定义所有用户提示。
默认用户提示将
- 如果已配置,则使用 git
askpass
辅助程序。 - 如果没有配置
askpass
程序,则回退到终端上提示用户。 - 如果没有可用于此过程的终端,则跳过提示。
创建认证器和启用认证机制
您可以使用 GitAuthenticator::new()
(或 default()
) 创建一个可用的认证器。使用这些构造函数之一将启用所有支持的认证机制。您还可以添加更多来自非默认位置的私钥文件以尝试。
您还可以使用 GitAuthenticator::new_empty()
创建一个没有任何认证机制启用的认证器。然后您可以有选择地启用认证机制并添加自定义私钥文件。
使用认证器
为了获得最大的灵活性,您可以使用 git2::Credentials
回调函数,通过调用 GitAuthenticator::credentials()
方法。您可以使用它来执行任何需要身份验证的git操作。这样做可以完全控制设置其他选项和git操作的回调。
如果您不需要设置其他选项或回调,也可以使用 GitAuthenticator
上的便利函数。它们将git操作与设置好凭证回调的封装。
GitAuthenticator::clone_repo()
GitAuthenticator::fetch()
GitAuthenticator::download()
GitAuthenticator::push()
自定义用户提示
所有用户提示都可以通过调用 GitAuthenticator::set_prompter()
方法进行完全自定义。这允许您覆盖用户输入凭证或密码提示的方式。
如果您有一个花哨的用户界面,可以使用自定义提示器将提示与您的用户界面集成。
示例:克隆仓库
use auth_git2::GitAuthenticator;
use std::path::Path;
let url = "https://github.com/de-vri-es/auth-git2-rs";
let into = Path::new("/tmp/dyfhxoaj/auth-git2-rs");
let auth = GitAuthenticator::default();
let mut repo = auth.clone_repo(url, into);
示例:使用完全控制fetch选项克隆仓库
use auth_git2::GitAuthenticator;
use std::path::Path;
let auth = GitAuthenticator::default();
let git_config = git2::Config::open_default()?;
let mut repo_builder = git2::build::RepoBuilder::new();
let mut fetch_options = git2::FetchOptions::new();
let mut remote_callbacks = git2::RemoteCallbacks::new();
remote_callbacks.credentials(auth.credentials(&git_config));
fetch_options.remote_callbacks(remote_callbacks);
repo_builder.fetch_options(fetch_options);
let url = "https://github.com/de-vri-es/auth-git2-rs";
let into = Path::new("/tmp/dyfhxoaj/auth-git2-rs");
let mut repo = repo_builder.clone(url, into);
依赖关系
~8–19MB
~298K SLoC