Initial vibeproxy implementation
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
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user