Self-contained HTTP/HTTPS/TCP/UDP reverse proxy manager written in Go, with SQLite storage, a Bootstrap 5 admin UI (Go templates, no JS framework), and a REST API under /api/v1. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QTXFrNP1imCW7jtfL5SZrw
71 lines
2.8 KiB
Go
71 lines
2.8 KiB
Go
package api
|
|
|
|
import (
|
|
"database/sql"
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"github.com/owen/vibeproxy/internal/auth"
|
|
"github.com/owen/vibeproxy/internal/certificates"
|
|
"github.com/owen/vibeproxy/internal/runtime"
|
|
"github.com/owen/vibeproxy/internal/streams"
|
|
)
|
|
|
|
type API struct {
|
|
db *sql.DB
|
|
store *runtime.Store
|
|
certs *certificates.Manager
|
|
streams *streams.Manager
|
|
log *slog.Logger
|
|
}
|
|
|
|
// NewRouter builds the full /api/v1 handler tree, protected by API token
|
|
// bearer auth.
|
|
func NewRouter(db *sql.DB, store *runtime.Store, certs *certificates.Manager, streamMgr *streams.Manager, log *slog.Logger) http.Handler {
|
|
a := &API{db: db, store: store, certs: certs, streams: streamMgr, log: log}
|
|
mux := http.NewServeMux()
|
|
|
|
mux.HandleFunc("GET /api/v1/proxy-hosts", a.listProxyHosts)
|
|
mux.HandleFunc("POST /api/v1/proxy-hosts", a.createProxyHost)
|
|
mux.HandleFunc("GET /api/v1/proxy-hosts/{id}", a.getProxyHost)
|
|
mux.HandleFunc("PUT /api/v1/proxy-hosts/{id}", a.updateProxyHost)
|
|
mux.HandleFunc("DELETE /api/v1/proxy-hosts/{id}", a.deleteProxyHost)
|
|
mux.HandleFunc("POST /api/v1/proxy-hosts/{id}/enable", a.enableProxyHost)
|
|
mux.HandleFunc("POST /api/v1/proxy-hosts/{id}/disable", a.disableProxyHost)
|
|
|
|
mux.HandleFunc("GET /api/v1/streams", a.listStreams)
|
|
mux.HandleFunc("POST /api/v1/streams", a.createStream)
|
|
mux.HandleFunc("GET /api/v1/streams/{id}", a.getStream)
|
|
mux.HandleFunc("PUT /api/v1/streams/{id}", a.updateStream)
|
|
mux.HandleFunc("DELETE /api/v1/streams/{id}", a.deleteStream)
|
|
mux.HandleFunc("POST /api/v1/streams/{id}/enable", a.enableStream)
|
|
mux.HandleFunc("POST /api/v1/streams/{id}/disable", a.disableStream)
|
|
|
|
mux.HandleFunc("GET /api/v1/certificates", a.listCertificates)
|
|
mux.HandleFunc("POST /api/v1/certificates/letsencrypt", a.issueCertificate)
|
|
mux.HandleFunc("POST /api/v1/certificates/custom", a.uploadCertificate)
|
|
mux.HandleFunc("GET /api/v1/certificates/{id}", a.getCertificate)
|
|
mux.HandleFunc("DELETE /api/v1/certificates/{id}", a.deleteCertificate)
|
|
mux.HandleFunc("POST /api/v1/certificates/{id}/renew", a.renewCertificate)
|
|
|
|
mux.HandleFunc("GET /api/v1/access-lists", a.listAccessLists)
|
|
mux.HandleFunc("POST /api/v1/access-lists", a.createAccessList)
|
|
mux.HandleFunc("GET /api/v1/access-lists/{id}", a.getAccessList)
|
|
mux.HandleFunc("PUT /api/v1/access-lists/{id}", a.updateAccessList)
|
|
mux.HandleFunc("DELETE /api/v1/access-lists/{id}", a.deleteAccessList)
|
|
|
|
mux.HandleFunc("GET /api/v1/settings", a.getSettings)
|
|
mux.HandleFunc("PUT /api/v1/settings", a.updateSettings)
|
|
|
|
mux.HandleFunc("GET /api/v1/tokens", a.listTokens)
|
|
mux.HandleFunc("POST /api/v1/tokens", a.createToken)
|
|
mux.HandleFunc("DELETE /api/v1/tokens/{id}", a.revokeToken)
|
|
|
|
mux.HandleFunc("GET /api/v1/logs/requests", a.listRequestLogs)
|
|
mux.HandleFunc("GET /api/v1/logs/audit", a.listAuditLogs)
|
|
|
|
mux.HandleFunc("GET /api/v1/stats", a.getStats)
|
|
|
|
return auth.APIToken(db)(mux)
|
|
}
|