linstrom/web/public/server.go
mstar 98191fd098
Some checks are pending
/ test (push) Waiting to run
Add proper logfile support
2025-04-08 17:29:28 +02:00

58 lines
1.6 KiB
Go

// Package webpublic contains the public webserver
// which provides the primary and only intended access point
// for interacting with the system.
//
// # Sections
//
// - Frontend: Serves the various web frontend versions
// - Main: The original Linstrom specific frontend
// - NoJs: An entirely serverside rendered frontend, no JS included
// - Custom: Custom frontend files will be served here
//
// - API: Endpoints for the actual interactions
// - Frontend: The API used by the main frontend
// - Masto: Mastodon compatible adapter for internal structures
// - ActivityPub: For integration with the Fediverse via ActivityPub
// - Linstrom-RPC: For Linstrom to Linstrom server communication
//
// # Guarantees
//
// - The Masto and ActivityPub API will remain stable
// - Frontend API might change, but the intended consumer (Main frontend)
// will always be up to date with the changes
// - Linstrom-RPC API is versioned and will keep
// a few versions of backwards compatibility
//
// TODO: Decide how long the Linstrom-RPC API will remain backwards compatible
package webpublic
import (
"context"
"fmt"
"net/http"
)
type Server struct {
server *http.Server
}
func New(addr string) *Server {
handler := http.NewServeMux()
handler.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(500)
fmt.Fprint(w, "not implemented")
})
server := http.Server{
Handler: handler,
Addr: addr,
}
return &Server{&server}
}
func (s *Server) Start() error {
return s.server.ListenAndServe()
}
func (s *Server) Stop() error {
return s.server.Shutdown(context.Background())
}