mirror of
https://github.com/lukaszraczylo/traefikoidc.git
synced 2026-06-05 22:44:17 +00:00
6efb78b7a8
* Smarter approach to the cookies - Single maxCookieSize = 1400 constant with clear documentation - Combined cookie storage for ~40-45% size reduction - Backward compatible migration from legacy cookies * Tuneup the code.
204 lines
5.2 KiB
Go
204 lines
5.2 KiB
Go
package mocks
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"github.com/stretchr/testify/mock"
|
|
)
|
|
|
|
// JWKSet represents a JSON Web Key Set for testing
|
|
type JWKSet struct {
|
|
Keys []JWK `json:"keys"`
|
|
}
|
|
|
|
// JWK represents a JSON Web Key for testing
|
|
type JWK struct {
|
|
Kty string `json:"kty"`
|
|
Kid string `json:"kid"`
|
|
Use string `json:"use,omitempty"`
|
|
Alg string `json:"alg,omitempty"`
|
|
N string `json:"n,omitempty"`
|
|
E string `json:"e,omitempty"`
|
|
Crv string `json:"crv,omitempty"`
|
|
X string `json:"x,omitempty"`
|
|
Y string `json:"y,omitempty"`
|
|
}
|
|
|
|
// TokenResponse represents an OAuth token response for testing
|
|
type TokenResponse struct {
|
|
AccessToken string `json:"access_token"`
|
|
TokenType string `json:"token_type"`
|
|
RefreshToken string `json:"refresh_token,omitempty"`
|
|
IDToken string `json:"id_token,omitempty"`
|
|
Scope string `json:"scope,omitempty"`
|
|
ExpiresIn int `json:"expires_in"`
|
|
}
|
|
|
|
// IntrospectionResponse represents a token introspection response
|
|
type IntrospectionResponse struct {
|
|
Scope string `json:"scope,omitempty"`
|
|
ClientID string `json:"client_id,omitempty"`
|
|
Username string `json:"username,omitempty"`
|
|
TokenType string `json:"token_type,omitempty"`
|
|
Sub string `json:"sub,omitempty"`
|
|
Aud string `json:"aud,omitempty"`
|
|
Iss string `json:"iss,omitempty"`
|
|
Jti string `json:"jti,omitempty"`
|
|
Exp int64 `json:"exp,omitempty"`
|
|
Iat int64 `json:"iat,omitempty"`
|
|
Nbf int64 `json:"nbf,omitempty"`
|
|
Active bool `json:"active"`
|
|
}
|
|
|
|
// JWKCache is a testify mock for JWK caching operations
|
|
type JWKCache struct {
|
|
mock.Mock
|
|
}
|
|
|
|
// GetJWKS retrieves a JWKS from the cache or fetches it
|
|
func (m *JWKCache) GetJWKS(ctx context.Context, jwksURL string, httpClient *http.Client) (*JWKSet, error) {
|
|
args := m.Called(ctx, jwksURL, httpClient)
|
|
if args.Get(0) == nil {
|
|
return nil, args.Error(1)
|
|
}
|
|
return args.Get(0).(*JWKSet), args.Error(1)
|
|
}
|
|
|
|
// Close cleans up the cache
|
|
func (m *JWKCache) Close() {
|
|
m.Called()
|
|
}
|
|
|
|
// Cleanup performs periodic cleanup
|
|
func (m *JWKCache) Cleanup() {
|
|
m.Called()
|
|
}
|
|
|
|
// TokenExchanger is a testify mock for token exchange operations
|
|
type TokenExchanger struct {
|
|
mock.Mock
|
|
}
|
|
|
|
// ExchangeCodeForToken exchanges an authorization code for tokens
|
|
func (m *TokenExchanger) ExchangeCodeForToken(ctx context.Context, grantType, codeOrToken, redirectURL, codeVerifier string) (*TokenResponse, error) {
|
|
args := m.Called(ctx, grantType, codeOrToken, redirectURL, codeVerifier)
|
|
if args.Get(0) == nil {
|
|
return nil, args.Error(1)
|
|
}
|
|
return args.Get(0).(*TokenResponse), args.Error(1)
|
|
}
|
|
|
|
// GetNewTokenWithRefreshToken refreshes an access token
|
|
func (m *TokenExchanger) GetNewTokenWithRefreshToken(refreshToken string) (*TokenResponse, error) {
|
|
args := m.Called(refreshToken)
|
|
if args.Get(0) == nil {
|
|
return nil, args.Error(1)
|
|
}
|
|
return args.Get(0).(*TokenResponse), args.Error(1)
|
|
}
|
|
|
|
// RevokeTokenWithProvider revokes a token
|
|
func (m *TokenExchanger) RevokeTokenWithProvider(token, tokenType string) error {
|
|
args := m.Called(token, tokenType)
|
|
return args.Error(0)
|
|
}
|
|
|
|
// TokenVerifier is a testify mock for token verification
|
|
type TokenVerifier struct {
|
|
mock.Mock
|
|
}
|
|
|
|
// VerifyToken verifies a JWT token
|
|
func (m *TokenVerifier) VerifyToken(token string) error {
|
|
args := m.Called(token)
|
|
return args.Error(0)
|
|
}
|
|
|
|
// JWTVerifier is a testify mock for JWT verification
|
|
type JWTVerifier struct {
|
|
mock.Mock
|
|
}
|
|
|
|
// VerifyJWT verifies a JWT and returns claims
|
|
func (m *JWTVerifier) VerifyJWT(token string) (map[string]interface{}, error) {
|
|
args := m.Called(token)
|
|
if args.Get(0) == nil {
|
|
return nil, args.Error(1)
|
|
}
|
|
return args.Get(0).(map[string]interface{}), args.Error(1)
|
|
}
|
|
|
|
// HTTPClient is a testify mock for HTTP client operations
|
|
type HTTPClient struct {
|
|
mock.Mock
|
|
}
|
|
|
|
// Do executes an HTTP request
|
|
func (m *HTTPClient) Do(req *http.Request) (*http.Response, error) {
|
|
args := m.Called(req)
|
|
if args.Get(0) == nil {
|
|
return nil, args.Error(1)
|
|
}
|
|
return args.Get(0).(*http.Response), args.Error(1)
|
|
}
|
|
|
|
// RoundTripper is a testify mock for HTTP transport
|
|
type RoundTripper struct {
|
|
mock.Mock
|
|
}
|
|
|
|
// RoundTrip executes a single HTTP transaction
|
|
func (m *RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
|
|
args := m.Called(req)
|
|
if args.Get(0) == nil {
|
|
return nil, args.Error(1)
|
|
}
|
|
return args.Get(0).(*http.Response), args.Error(1)
|
|
}
|
|
|
|
// Logger is a testify mock for logging operations
|
|
type Logger struct {
|
|
mock.Mock
|
|
}
|
|
|
|
// Debug logs a debug message
|
|
func (m *Logger) Debug(msg string) {
|
|
m.Called(msg)
|
|
}
|
|
|
|
// Debugf logs a formatted debug message
|
|
func (m *Logger) Debugf(format string, args ...interface{}) {
|
|
m.Called(format, args)
|
|
}
|
|
|
|
// Info logs an info message
|
|
func (m *Logger) Info(msg string) {
|
|
m.Called(msg)
|
|
}
|
|
|
|
// Infof logs a formatted info message
|
|
func (m *Logger) Infof(format string, args ...interface{}) {
|
|
m.Called(format, args)
|
|
}
|
|
|
|
// Error logs an error message
|
|
func (m *Logger) Error(msg string) {
|
|
m.Called(msg)
|
|
}
|
|
|
|
// Errorf logs a formatted error message
|
|
func (m *Logger) Errorf(format string, args ...interface{}) {
|
|
m.Called(format, args)
|
|
}
|
|
|
|
// Warn logs a warning message
|
|
func (m *Logger) Warn(msg string) {
|
|
m.Called(msg)
|
|
}
|
|
|
|
// Warnf logs a formatted warning message
|
|
func (m *Logger) Warnf(format string, args ...interface{}) {
|
|
m.Called(format, args)
|
|
}
|