58 lines
1.6 KiB
Go
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())
|
|
}
|