4

ローカル Git リポジトリの上に配置される小さな WPF アプリケーションを開発しています。

一部のビジネス ユーザーが GUI を介していくつかのファイルを編集し、それらを GitHub にプッシュできるようにする基幹業務アプリです。

私は LibGit2Sharp ライブラリを使用してすべての git コマンドを処理していますが、アプリケーションが読み込まれるたびに GitHub 資格情報を使用してアプリケーションにログインするようユーザーに強制したいと考えています。

OAuth2 ライブラリといくつかの既存の nuget パッケージ ( http://johnnycode.com/GitHubOAuth2Client/ ) を見てきましたが、それらはすべて Web ベースのアプリを中心に展開しているようで、クライアント ID と秘密鍵が必要です。

ユーザー名とパスワードを取得し、ログイン試行の単純な成功/失敗を返す単純な API の方向に誰かが私を向けることができますか、または GitHub API の周りに独自のラッパーを書くのに行き詰まっていますか?

4

1 に答える 1

1

特定のレポを要求する際に、認証ヘッダーで UserName と Password を渡す古い v2 API への単純な REST 呼び出しでこれを解決することになりました。次に、要求されたリポジトリに返されたアクセス許可を確認します。

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 に答える