api

package
v0.28.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 5, 2025 License: Apache-2.0 Imports: 30 Imported by: 0

Documentation

Overview

internal/api/auth.go

Index

Constants

View Source
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 NewAuth

func NewAuth(db *sql.DB, logger *zap.Logger) *Auth

NewAuth creates a new Auth handler

func (*Auth) ValidatePresignedURL

func (a *Auth) ValidatePresignedURL(r *http.Request) (string, error)

ValidatePresignedURL validates a presigned URL request (simplified for MVP)

func (*Auth) ValidateRequest

func (a *Auth) ValidateRequest(r *http.Request) (string, error)

ValidateRequest validates an S3 request signature

type BucketInfo

type BucketInfo struct {
	Name         string    `xml:"Name"`
	CreationDate time.Time `xml:"CreationDate"`
}

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) Handler

func (m *Metrics) Handler() http.Handler

Handler returns the Prometheus metrics handler

func (*Metrics) IncrementRateLimitHit

func (m *Metrics) IncrementRateLimitHit(tenant string)

IncrementRateLimitHit increments rate limit hit counter

func (*Metrics) IncrementRequest

func (m *Metrics) IncrementRequest(tenant, method, path string, status int)

IncrementRequest increments the request counter

func (*Metrics) RecordLatency

func (m *Metrics) RecordLatency(tenant, method, path string, seconds float64)

RecordLatency records request latency

type Middleware

type Middleware func(http.Handler) http.Handler

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

func NewS3Parser(logger *zap.Logger) *S3Parser

NewS3Parser creates a new S3 request parser

func (*S3Parser) ParseRequest

func (p *S3Parser) ParseRequest(r *http.Request) (*S3Request, error)

ParseRequest parses an HTTP request into S3Request

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 NewServer

func NewServer(cfg *config.Config, logger *zap.Logger, eng *engine.CoreEngine) *Server

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

func (*Server) Shutdown

func (s *Server) Shutdown(ctx context.Context) error

func (*Server) Start

func (s *Server) Start() error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL