* Add a History button under the DMs where an authenticated JWT user can page through the usernames they have stored history with, to bring up those DMs even if their chat partner is not currently online. * Try some fixes to the dark video detector to see if it reduces false positives: wait for the canplaythrough video event to fire before beginning the dark detection. Also, increase the threshold so dark frames need to be seen 5 times in a row instead of twice before cutting the camera.
77 lines
2.2 KiB
Go
77 lines
2.2 KiB
Go
package barertc
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
"sync"
|
|
|
|
"git.kirsle.net/apps/barertc/pkg/config"
|
|
"git.kirsle.net/apps/barertc/pkg/log"
|
|
"git.kirsle.net/apps/barertc/pkg/models"
|
|
)
|
|
|
|
// Server is the primary back-end server struct for BareRTC, see main.go
|
|
type Server struct {
|
|
// HTTP router.
|
|
mux *http.ServeMux
|
|
|
|
// Max number of messages we'll buffer for a subscriber
|
|
subscriberMessageBuffer int
|
|
|
|
// Connected WebSocket subscribers.
|
|
subscribersMu sync.RWMutex
|
|
subscribers map[*Subscriber]struct{}
|
|
|
|
// Cached filehandles for channel logging.
|
|
logfh map[string]io.WriteCloser
|
|
}
|
|
|
|
// NewServer initializes the Server.
|
|
func NewServer() *Server {
|
|
return &Server{
|
|
subscriberMessageBuffer: 32,
|
|
subscribers: make(map[*Subscriber]struct{}),
|
|
}
|
|
}
|
|
|
|
// Setup the server: configure HTTP routes, etc.
|
|
func (s *Server) Setup() error {
|
|
// Enable the SQLite database for DM history?
|
|
if config.Current.DirectMessageHistory.Enabled {
|
|
if err := models.Initialize(config.Current.DirectMessageHistory.SQLiteDatabase); err != nil {
|
|
log.Error("Error initializing SQLite database: %s", err)
|
|
}
|
|
}
|
|
|
|
var mux = http.NewServeMux()
|
|
|
|
mux.Handle("/", IndexPage())
|
|
mux.Handle("/about", AboutPage())
|
|
mux.Handle("/logout", LogoutPage())
|
|
mux.Handle("/ws", s.WebSocket())
|
|
mux.Handle("/poll", s.PollingAPI())
|
|
mux.Handle("/api/statistics", s.Statistics())
|
|
mux.Handle("/api/blocklist", s.BlockList())
|
|
mux.Handle("/api/block/now", s.BlockNow())
|
|
mux.Handle("/api/disconnect/now", s.DisconnectNow())
|
|
mux.Handle("/api/authenticate", s.Authenticate())
|
|
mux.Handle("/api/shutdown", s.ShutdownAPI())
|
|
mux.Handle("/api/profile", s.UserProfile())
|
|
mux.Handle("/api/message/history", s.MessageHistory())
|
|
mux.Handle("/api/message/usernames", s.MessageUsernameHistory())
|
|
mux.Handle("/api/message/clear", s.ClearMessages())
|
|
mux.Handle("/assets/", http.StripPrefix("/assets/", http.FileServer(http.Dir("dist/assets"))))
|
|
mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("dist/static"))))
|
|
|
|
s.mux = mux
|
|
|
|
return nil
|
|
}
|
|
|
|
// ListenAndServe starts the web server.
|
|
func (s *Server) ListenAndServe(address string) error {
|
|
// Run the polling user idle kicker.
|
|
go s.KickIdlePollUsers()
|
|
return http.ListenAndServe(address, s.mux)
|
|
}
|