efe9d40b58
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
Build and Test Go Project / build (macos-latest) (push) Has been cancelled
Build and Test Go Project / build (ubuntu-latest) (push) Has been cancelled
Build and Test Go Project / build (windows-latest) (push) Has been cancelled
* Move scope storage into its own context key, separately from token info. This allows us to provide scopes seperately in the remote server, where we have scopes before we do the auth. * Skip token extraction if token info already exists in context. This is to avoid redundant token extraction in remote setup where token info may have already been extracted earlier in the request lifecycle. * Check for existing scopes in context before fetching from GitHub API in scope challenge middleware * Return error type for unknown tools in inventory builder and handle it in HTTP handler
43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
package context
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/github/github-mcp-server/pkg/utils"
|
|
)
|
|
|
|
type tokenCtxKey struct{}
|
|
|
|
type TokenInfo struct {
|
|
Token string
|
|
TokenType utils.TokenType
|
|
}
|
|
|
|
// WithTokenInfo adds TokenInfo to the context
|
|
func WithTokenInfo(ctx context.Context, tokenInfo *TokenInfo) context.Context {
|
|
return context.WithValue(ctx, tokenCtxKey{}, tokenInfo)
|
|
}
|
|
|
|
// GetTokenInfo retrieves the authentication token from the context
|
|
func GetTokenInfo(ctx context.Context) (*TokenInfo, bool) {
|
|
if tokenInfo, ok := ctx.Value(tokenCtxKey{}).(*TokenInfo); ok {
|
|
return tokenInfo, true
|
|
}
|
|
return nil, false
|
|
}
|
|
|
|
type tokenScopesKey struct{}
|
|
|
|
// WithTokenScopes adds token scopes to the context
|
|
func WithTokenScopes(ctx context.Context, scopes []string) context.Context {
|
|
return context.WithValue(ctx, tokenScopesKey{}, scopes)
|
|
}
|
|
|
|
// GetTokenScopes retrieves token scopes from the context
|
|
func GetTokenScopes(ctx context.Context) ([]string, bool) {
|
|
if scopes, ok := ctx.Value(tokenScopesKey{}).([]string); ok {
|
|
return scopes, true
|
|
}
|
|
return nil, false
|
|
}
|