101 lines
2.9 KiB
Go
101 lines
2.9 KiB
Go
// Package api provides the HTTP API for mosis-portal
|
|
package api
|
|
|
|
import (
|
|
"database/sql"
|
|
"net/http"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/go-chi/chi/v5/middleware"
|
|
"github.com/omixlab/mosis-portal/internal/api/handlers"
|
|
"github.com/omixlab/mosis-portal/internal/config"
|
|
)
|
|
|
|
// NewRouter creates and configures the HTTP router
|
|
func NewRouter(cfg *config.Config, db *sql.DB) http.Handler {
|
|
r := chi.NewRouter()
|
|
|
|
// Middleware
|
|
r.Use(middleware.Logger)
|
|
r.Use(middleware.Recoverer)
|
|
r.Use(middleware.RealIP)
|
|
r.Use(middleware.RequestID)
|
|
|
|
// Health check
|
|
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
w.Write([]byte("ok"))
|
|
})
|
|
|
|
// API v1
|
|
r.Route("/v1", func(r chi.Router) {
|
|
// Auth routes
|
|
r.Route("/auth", func(r chi.Router) {
|
|
r.Post("/oauth/github", handlers.NotImplemented)
|
|
r.Get("/oauth/github/callback", handlers.NotImplemented)
|
|
r.Post("/oauth/google", handlers.NotImplemented)
|
|
r.Get("/oauth/google/callback", handlers.NotImplemented)
|
|
r.Post("/refresh", handlers.NotImplemented)
|
|
r.Post("/logout", handlers.NotImplemented)
|
|
r.Get("/me", handlers.NotImplemented)
|
|
})
|
|
|
|
// Developer apps
|
|
r.Route("/apps", func(r chi.Router) {
|
|
r.Get("/", handlers.NotImplemented)
|
|
r.Post("/", handlers.NotImplemented)
|
|
r.Get("/{appID}", handlers.NotImplemented)
|
|
r.Patch("/{appID}", handlers.NotImplemented)
|
|
r.Delete("/{appID}", handlers.NotImplemented)
|
|
|
|
// Versions
|
|
r.Route("/{appID}/versions", func(r chi.Router) {
|
|
r.Get("/", handlers.NotImplemented)
|
|
r.Post("/", handlers.NotImplemented)
|
|
r.Get("/{versionID}", handlers.NotImplemented)
|
|
r.Post("/{versionID}/submit", handlers.NotImplemented)
|
|
r.Post("/{versionID}/publish", handlers.NotImplemented)
|
|
})
|
|
})
|
|
|
|
// API Keys
|
|
r.Route("/api-keys", func(r chi.Router) {
|
|
r.Get("/", handlers.NotImplemented)
|
|
r.Post("/", handlers.NotImplemented)
|
|
r.Delete("/{keyID}", handlers.NotImplemented)
|
|
})
|
|
|
|
// Signing Keys
|
|
r.Route("/signing-keys", func(r chi.Router) {
|
|
r.Get("/", handlers.NotImplemented)
|
|
r.Post("/", handlers.NotImplemented)
|
|
r.Delete("/{keyID}", handlers.NotImplemented)
|
|
})
|
|
|
|
// Public store endpoints
|
|
r.Route("/store", func(r chi.Router) {
|
|
r.Get("/apps", handlers.NotImplemented)
|
|
r.Get("/apps/{appID}", handlers.NotImplemented)
|
|
r.Get("/apps/{appID}/download", handlers.NotImplemented)
|
|
r.Get("/apps/updates", handlers.NotImplemented)
|
|
})
|
|
|
|
// Telemetry
|
|
r.Route("/telemetry", func(r chi.Router) {
|
|
r.Post("/events", handlers.NotImplemented)
|
|
r.Post("/crash", handlers.NotImplemented)
|
|
})
|
|
})
|
|
|
|
// Admin routes (htmx UI)
|
|
r.Route("/admin", func(r chi.Router) {
|
|
r.Get("/", handlers.NotImplemented)
|
|
r.Get("/review-queue", handlers.NotImplemented)
|
|
r.Get("/review/{versionID}", handlers.NotImplemented)
|
|
r.Post("/review/{versionID}/approve", handlers.NotImplemented)
|
|
r.Post("/review/{versionID}/reject", handlers.NotImplemented)
|
|
})
|
|
|
|
return r
|
|
}
|