libgit2sharp icon indicating copy to clipboard operation
libgit2sharp copied to clipboard

How can we commit changes using the access token key that gets generated using oauth support in gitHub

Open sunandaVarma opened this issue 3 years ago • 1 comments

How can we commit changes to github using the access token generated using github Oauth.

I have got the access token and able to clone the repository using the code below CloneOptions options = new CloneOptions();
var creds = new UsernamePasswordCredentials() { Username = "access token" Password = string.Empty }; CredentialsHandler credHandler = (_url, _user, _cred) => creds; options.CredentialsProvider = credHandler; string clonedRepoPath = Repository.Clone("repository", repoLocation, options); repo = new Repository(repoLocation);

But unbale to commit the changes using the access token. below code fails with the error "'request failed with status code: 403"

Commands.Stage(repo, "abc.txt"); Signature sig = new Signature(new Identity("name", "email"), DateTimeOffset.Now); Commit commit = repo.Commit("", sig, sig);

        // Push to remote repository
        var creds = new UsernamePasswordCredentials()
        {
            Username = "access token",
            Password = ""
        };
        CredentialsHandler credHandler = (_url, _user, _cred) => creds;
       
        var fetchOpts = new PushOptions { CredentialsProvider = credHandler };
        repo.Network.Push(repo.Network.Remotes["origin"], "HEAD", @"refs/heads/master", fetchOpts);

Expected: Should be able to commit changes using access token.

Version of LibGit2Sharp (release number or SHA1) LibGit2Sharp.0.26.2

Operating system(s) tested; .NET runtime tested OSx, .net core 5.0

sunandaVarma avatar Mar 11 '21 14:03 sunandaVarma

There doesn't seem to be a separate cred type for this yet. https://github.com/libgit2/libgit2sharp/blob/master/LibGit2Sharp/SupportedCredentialTypes.cs#L10

However, I have tried it with UsernamePasswordCredentials and it works perfectly.

try it like,

options.CredentialsProvider = new CredentialsHandler(
  (url, usernameFromUrl, types) => new UsernamePasswordCredentials()
  {
    Username = "GH_USERNAME",
    Password = "GH_TOKEN"
  });

atiq-cs avatar Oct 30 '21 01:10 atiq-cs