980 B
docker.go
package controllers

import (
	"log"
	"net/http"
	"os"

	"github.com/readysite/readysite/pkg/application"
	"github.com/readysite/readysite/readysite.org/internal/sharing"
)

// DockerController handles docker registry distribution.
type DockerController struct {
	application.BaseController
}

// Docker returns the controller name and instance.
func Docker() (string, *DockerController) {
	return "docker", &DockerController{}
}

// Setup registers routes for the docker registry proxy.
func (c *DockerController) Setup(app *application.App) {
	c.BaseController.Setup(app)

	// Only run setup in production
	if os.Getenv("ENV") != "production" {
		return
	}

	// Register registry proxy for read-only Docker image access
	http.Handle("/v2/", sharing.NewRegistryProxy())
	log.Println("docker: registry proxy enabled")
}

// Handle returns a request-scoped controller instance.
func (c DockerController) Handle(r *http.Request) application.Controller {
	c.Request = r
	return &c
}
← Back