Documentation
¶
Overview ¶
internal/api/auth.go
Index ¶
- Constants
- func ResetMetricsForTesting()
- func WriteS3Error(w http.ResponseWriter, code string, resource string, requestID string)
- type Auth
- type BucketInfo
- type Event
- type ListBucketsResponse
- type Metrics
- type Middleware
- type RateLimiter
- type S3Error
- type S3Parser
- type S3Request
- type S3ToEngine
- func (a *S3ToEngine) HandleDelete(w http.ResponseWriter, r *http.Request, bucket, object string)
- func (a *S3ToEngine) HandleGet(w http.ResponseWriter, r *http.Request, bucket, object string)
- func (a *S3ToEngine) HandleList(w http.ResponseWriter, r *http.Request, bucket, prefix string)
- func (a *S3ToEngine) HandlePut(w http.ResponseWriter, r *http.Request, bucket, object string)
- func (a *S3ToEngine) TranslateRequest(req *S3Request) engine.Operation
- type Server
Constants ¶
const ( ErrNoSuchBucket = "NoSuchBucket" ErrNoSuchKey = "NoSuchKey" ErrBucketAlreadyExists = "BucketAlreadyExists" ErrBucketNotEmpty = "BucketNotEmpty" ErrInvalidBucketName = "InvalidBucketName" ErrInvalidObjectName = "InvalidObjectName" ErrAccessDenied = "AccessDenied" ErrInvalidRequest = "InvalidRequest" ErrIncompleteBody = "IncompleteBody" ErrInternalError = "InternalError" ErrNotImplemented = "NotImplemented" ErrMissingContentLength = "MissingContentLength" ErrRequestTimeout = "RequestTimeout" ErrBadDigest = "BadDigest" ErrEntityTooLarge = "EntityTooLarge" ErrMalformedXML = "MalformedXML" ErrMethodNotAllowed = "MethodNotAllowed" ErrSignatureDoesNotMatch = "SignatureDoesNotMatch" )
S3 Error codes
Variables ¶
This section is empty.
Functions ¶
func ResetMetricsForTesting ¶
func ResetMetricsForTesting()
ResetForTesting resets the singleton for testing
func WriteS3Error ¶
func WriteS3Error(w http.ResponseWriter, code string, resource string, requestID string)
WriteS3Error writes an S3-compatible error response
Types ¶
type Auth ¶
type Auth struct {
// contains filtered or unexported fields
}
Auth handles S3 signature validation
func (*Auth) ValidatePresignedURL ¶
ValidatePresignedURL validates a presigned URL request (simplified for MVP)
type BucketInfo ¶
type Event ¶
type Event struct {
Type string `json:"type"`
Container string `json:"container"`
Artifact string `json:"artifact"`
Operation string `json:"operation"`
TenantID string `json:"tenant_id"`
Data map[string]interface{} `json:"data"`
}
Event represents an event in the system
type ListBucketsResponse ¶
type ListBucketsResponse struct {
XMLName xml.Name `xml:"ListAllMyBucketsResult"`
Owner struct {
ID string `xml:"ID"`
DisplayName string `xml:"DisplayName"`
} `xml:"Owner"`
Buckets struct {
Bucket []BucketInfo `xml:"Bucket"`
} `xml:"Buckets"`
}
ListBucketsResponse for S3 API
type Metrics ¶
type Metrics struct {
RequestCounter *prometheus.CounterVec
LatencyHistogram *prometheus.HistogramVec
RateLimitHits *prometheus.CounterVec
// contains filtered or unexported fields
}
Metrics holds all Prometheus metrics for the API
func NewMetrics ¶
func NewMetrics() *Metrics
NewMetrics creates and registers all metrics (singleton pattern for tests)
func (*Metrics) IncrementRateLimitHit ¶
IncrementRateLimitHit increments rate limit hit counter
func (*Metrics) IncrementRequest ¶
IncrementRequest increments the request counter
func (*Metrics) RecordLatency ¶
RecordLatency records request latency
type Middleware ¶
Middleware is a function that wraps an HTTP handler
func RateLimitMiddleware ¶
func RateLimitMiddleware(limiter *RateLimiter) Middleware
RateLimitMiddleware creates middleware that enforces rate limits
type RateLimiter ¶
type RateLimiter struct {
// contains filtered or unexported fields
}
func NewRateLimiter ¶
func NewRateLimiter() *RateLimiter
func (*RateLimiter) Allow ¶
func (rl *RateLimiter) Allow(tenant string) bool
type S3Error ¶
type S3Error struct {
XMLName xml.Name `xml:"Error"`
Code string `xml:"Code"`
Message string `xml:"Message"`
Resource string `xml:"Resource,omitempty"`
RequestID string `xml:"RequestId,omitempty"`
}
S3Error represents an S3 error response
type S3Parser ¶
type S3Parser struct {
// contains filtered or unexported fields
}
S3Parser parses S3-compatible API requests
func NewS3Parser ¶
NewS3Parser creates a new S3 request parser
type S3Request ¶
type S3Request struct {
Bucket string
Object string
Operation string
Query map[string]string
Headers map[string]string
TenantID string
// Request metadata
Method string
Path string
Timestamp time.Time
}
S3Request represents a parsed S3 API request
type S3ToEngine ¶
type S3ToEngine struct {
// contains filtered or unexported fields
}
S3ToEngine adapts S3 requests to engine operations
func NewS3ToEngine ¶
func NewS3ToEngine(e engine.Engine, logger *zap.Logger) *S3ToEngine
NewS3ToEngine creates a new adapter
func (*S3ToEngine) HandleDelete ¶
func (a *S3ToEngine) HandleDelete(w http.ResponseWriter, r *http.Request, bucket, object string)
HandleDelete processes S3 DELETE requests
func (*S3ToEngine) HandleGet ¶
func (a *S3ToEngine) HandleGet(w http.ResponseWriter, r *http.Request, bucket, object string)
HandleGet processes S3 GET requests using the engine
func (*S3ToEngine) HandleList ¶
func (a *S3ToEngine) HandleList(w http.ResponseWriter, r *http.Request, bucket, prefix string)
HandleList processes S3 LIST requests
func (*S3ToEngine) HandlePut ¶
func (a *S3ToEngine) HandlePut(w http.ResponseWriter, r *http.Request, bucket, object string)
HandlePut processes S3 PUT requests using the engine
func (*S3ToEngine) TranslateRequest ¶
func (a *S3ToEngine) TranslateRequest(req *S3Request) engine.Operation
TranslateRequest converts S3 terminology to engine terminology
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
func (*Server) CreateBucket ¶
func (s *Server) CreateBucket(w http.ResponseWriter, r *http.Request)
CreateBucket handles S3 CreateBucket operation
func (*Server) DeleteBucket ¶
func (s *Server) DeleteBucket(w http.ResponseWriter, r *http.Request)
DeleteBucket handles S3 DeleteBucket operation
func (*Server) ListBuckets ¶
func (s *Server) ListBuckets(w http.ResponseWriter, r *http.Request)
ListBuckets handles S3 ListBuckets operation