4

我正在开发一个小型 WPF 应用程序,它将位于本地 Git 存储库之上。

这是一个业务线应用程序,允许一些业务用户通过 GUI 编辑一些文件,然后将它们推送回 GitHub

我正在使用 LibGit2Sharp 库来处理所有 git 命令,但我还想强制用户在每次加载应用程序时使用他们的 GitHub 凭据登录到应用程序。

我一直在查看 OAuth2 库和一些现有的 nuget 包(http://johnnycode.com/GitHubOAuth2Client/),但它们似乎都围绕基于 Web 的应用程序展开,并且需要客户端 ID 和密钥。

任何人都可以指出一个简单的 API 的方向吗

4

1 回答 1

1

我最终通过对旧 v2 API 的简单 REST 调用解决了这个问题,在请求特定 repo 时在 auth 标头中传递用户名和密码。然后检查在请求的 Repo 上返回的权限。

private class Permissions
{
     public bool Admin { get; set; }
     public bool Push { get; set; }
     public bool Pull { get; set; }
}

private class GitHubRepo
{
     public Permissions Permissions { get; set; }
     public string Name { get; set; }
}

public bool Authenticate(string userName, string password)
{
    try
    {
        var apiUrl = "https://api.github.com/";
        var resource = "repos/myAccount/";
        var repoName = "myRepo";

        var client = new RestClient
            {
                BaseUrl = apiUrl,
                Authenticator = new HttpBasicAuthenticator(userName, password)
            };

        var request = new RestRequest {Resource = string.Join("", resource, repoName)};

        var response = client.Execute<List<GitHubRepo>>(request);
        if ((int) response.StatusCode >= 200 && (int) response.StatusCode < 209)
        {
            if (response.Data.Any(r => r.Name == repoName))
            {
                var repo = response.Data.Single(r => r.Name == repoName);

                if (repo.Permissions.Admin || (repo.Permissions.Pull && repo.Permissions.Push))
                {
                    return true;
                }
            }
        }

        return false;
    }
    catch
    {
        return false;
    }
}
于 2013-10-29T14:17:29.127 回答