Implement --token and MCP_GITHUB_TOKEN login support (#705)
<!-- Provide a brief summary of your changes --> ## Motivation and Context <!-- Why is this change needed? What problem does it solve? --> The following PR implements the missing support for logging in via `--token` or `MCP_GITHUB_TOKEN` ## How Has This Been Tested? <!-- Have you tested this in a real application? Which scenarios were tested? --> ## Breaking Changes <!-- Will users need to update their code or configurations? --> ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update ## Checklist <!-- Go over all the following points, and put an `x` in all the boxes that apply. --> - [ ] I have read the [MCP Documentation](https://modelcontextprotocol.io) - [ ] My code follows the repository's style guidelines - [ ] New and existing tests pass locally - [ ] I have added appropriate error handling - [ ] I have added or updated documentation as needed ## Additional context <!-- Add any other context, implementation notes, or design decisions --> Fixes: #698 --------- Signed-off-by: Radoslav Dimitrov <radoslav@stacklok.com>
This commit is contained in:
parent
b0a79c110c
commit
f5f08bc92d
1 changed files with 69 additions and 19 deletions
|
|
@ -50,9 +50,10 @@ type StoredRegistryToken struct {
|
|||
|
||||
// GitHubATProvider implements the Provider interface using GitHub's device flow
|
||||
type GitHubATProvider struct {
|
||||
clientID string
|
||||
forceLogin bool
|
||||
registryURL string
|
||||
clientID string
|
||||
forceLogin bool
|
||||
registryURL string
|
||||
providedToken string // Token provided via --token flag or MCP_GITHUB_TOKEN env var
|
||||
}
|
||||
|
||||
// ServerHealthResponse represents the response from the health endpoint
|
||||
|
|
@ -62,10 +63,16 @@ type ServerHealthResponse struct {
|
|||
}
|
||||
|
||||
// NewGitHubATProvider creates a new GitHub OAuth provider
|
||||
func NewGitHubATProvider(forceLogin bool, registryURL string) Provider {
|
||||
func NewGitHubATProvider(forceLogin bool, registryURL, token string) Provider {
|
||||
// Check for token from flag or environment variable
|
||||
if token == "" {
|
||||
token = os.Getenv("MCP_GITHUB_TOKEN")
|
||||
}
|
||||
|
||||
return &GitHubATProvider{
|
||||
forceLogin: forceLogin,
|
||||
registryURL: registryURL,
|
||||
forceLogin: forceLogin,
|
||||
registryURL: registryURL,
|
||||
providedToken: token,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -100,6 +107,11 @@ func (g *GitHubATProvider) GetToken(ctx context.Context) (string, error) {
|
|||
|
||||
// NeedsLogin checks if a new login is required
|
||||
func (g *GitHubATProvider) NeedsLogin() bool {
|
||||
// If a token was provided via --token or MCP_GITHUB_TOKEN, no login needed
|
||||
if g.providedToken != "" {
|
||||
return false
|
||||
}
|
||||
|
||||
if g.forceLogin {
|
||||
return true
|
||||
}
|
||||
|
|
@ -123,6 +135,15 @@ func (g *GitHubATProvider) NeedsLogin() bool {
|
|||
|
||||
// Login performs the GitHub device flow authentication
|
||||
func (g *GitHubATProvider) Login(ctx context.Context) error {
|
||||
// If a token was provided via --token or MCP_GITHUB_TOKEN, save it and skip device flow
|
||||
if g.providedToken != "" {
|
||||
err := saveToken(g.providedToken)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error saving provided token: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// If clientID is not set, try to retrieve it from the server's health endpoint
|
||||
if g.clientID == "" {
|
||||
clientID, err := getClientID(ctx, g.registryURL)
|
||||
|
|
|
|||
Loading…
Reference in a new issue