go-githubauth
is a Go package that provides utilities for GitHub authentication, including generating and using GitHub App tokens and installation tokens.
go-githubauth
package provides implementations of the TokenSource
interface from the golang.org/x/oauth2
package. This interface has a single method, Token, which returns an *oauth2.Token.
This package is designed to be used with the golang.org/x/oauth2
package, which provides support for OAuth2 authentication.
To use go-githubauth
in your project, you need to have Go installed. You can get the package via:
go get -u github.com/jferrl/go-githubauth
package main import ( "context" "fmt" "os" "strconv" "github.com/google/go-github/v62/github" "github.com/jferrl/go-githubauth" "golang.org/x/oauth2" ) func main() { privateKey := []byte(os.Getenv("GITHUB_APP_PRIVATE_KEY")) appID, _ := strconv.ParseInt(os.Getenv("GITHUB_APP_ID"), 10, 64) installationID, _ := strconv.ParseInt(os.Getenv("GITHUB_INSTALLATION_ID"), 10, 64) appTokenSource, err := githubauth.NewApplicationTokenSource(appID, privateKey) if err != nil { fmt.Println("Error creating application token source:", err) return } installationTokenSource := githubauth.NewInstallationTokenSource(installationID, appTokenSource) // oauth2.NewClient create a new http.Client that adds an Authorization header with the token. // Transport src use oauth2.ReuseTokenSource to reuse the token. // The token will be reused until it expires. // The token will be refreshed if it's expired. httpClient := oauth2.NewClient(context.Background(), installationTokenSource) githubClient := github.NewClient(httpClient) _, _, err = githubClient.PullRequests.CreateComment(context.Background(), "owner", "repo", 1, &github.PullRequestComment{ Body: github.String("Awesome comment!"), }) if err != nil { fmt.Println("Error creating comment:", err) return } }Generate GitHub Application Token
First of all you need to create a GitHub App and generate a private key.
To authenticate as a GitHub App, you need to generate a JWT. Generating a jwt for a github app
package main import ( "fmt" "os" "time" "github.com/jferrl/go-githubauth" ) func main() { privateKey := []byte(os.Getenv("GITHUB_APP_PRIVATE_KEY")) appID, _ := strconv.ParseInt(os.Getenv("GITHUB_APP_ID"), 10, 64) tokenSource, err := githubauth.NewApplicationTokenSource(appID, privateKey, githubauth.WithApplicationTokenExpiration(5*time.Minute)) if err != nil { fmt.Println("Error creating token source:", err) return } token, err := tokenSource.Token() if err != nil { fmt.Println("Error generating token:", err) return } fmt.Println("Generated token:", token.AccessToken) }Generate GitHub App Installation Token
To authenticate as a GitHub App installation, you need to obtain an installation token.
package main import ( "fmt" "os" "strconv" "github.com/jferrl/go-githubauth" ) func main() { privateKey := []byte(os.Getenv("GITHUB_APP_PRIVATE_KEY")) appID, _ := strconv.ParseInt(os.Getenv("GITHUB_APP_ID"), 10, 64) installationID, _ := strconv.ParseInt(os.Getenv("GITHUB_INSTALLATION_ID"), 10, 64) appTokenSource, err := githubauth.NewApplicationTokenSource(appID, privateKey) if err != nil { fmt.Println("Error creating application token source:", err) return } installationTokenSource := githubauth.NewInstallationTokenSource(installationID, appTokenSource) token, err := installationTokenSource.Token() if err != nil { fmt.Println("Error generating installation token:", err) return } fmt.Println("Generated installation token:", token.AccessToken) }
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
This project is licensed under the MIT License. See the LICENSE file for details.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4