handler.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package webapi
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "log/slog"
  7. "net/http"
  8. "github.com/mk6i/open-oscar-server/state"
  9. "github.com/mk6i/open-oscar-server/wire"
  10. )
  11. type Handler struct {
  12. AdminService AdminService
  13. AuthService AuthService
  14. BuddyListRegistry BuddyListRegistry
  15. BuddyService BuddyService
  16. ChatNavService ChatNavService
  17. ChatService ChatService
  18. CookieBaker CookieBaker
  19. DirSearchService DirSearchService
  20. ICBMService ICBMService
  21. LocateService LocateService
  22. Logger *slog.Logger
  23. OServiceService OServiceService
  24. PermitDenyService PermitDenyService
  25. TOCConfigStore TOCConfigStore
  26. SNACRateLimits wire.SNACRateLimits
  27. // New fields for WebAPI handlers
  28. SessionRetriever SessionRetriever
  29. // Phase 2 additions
  30. MessageRelayer MessageRelayer
  31. OfflineMessageManager OfflineMessageManager
  32. BuddyBroadcaster BuddyBroadcaster
  33. ProfileManager ProfileManager
  34. // Phase 3 additions
  35. PreferenceManager PreferenceManager
  36. // Phase 4 additions for OSCAR Bridge
  37. OSCARBridgeStore OSCARBridgeStore
  38. OSCARConfig OSCARConfig
  39. // Phase 5 additions for buddy list and messaging
  40. BuddyListManager interface{}
  41. RecalcWarning func(ctx context.Context, instance *state.SessionInstance) error
  42. LowerWarnLevel func(ctx context.Context, instance *state.SessionInstance)
  43. ChatSessionManager ChatSessionManager
  44. FeedbagService FeedbagService
  45. }
  46. func (h Handler) GetHelloWorldHandler(w http.ResponseWriter, r *http.Request) {
  47. h.Logger.Info("got a request to the root endpoint", "method", r.Method, "path", r.URL.Path)
  48. _, _ = fmt.Fprintf(w, "WebAPI Server Running\n")
  49. // Must return the same JSON envelope as other Web AIM APIs.
  50. h.Logger.Info("webapi root GET", "remote", r.RemoteAddr, "host", r.Host, "path", r.URL.Path)
  51. w.Header().Set("Content-Type", "application/json; charset=utf-8")
  52. resp := map[string]interface{}{
  53. "response": map[string]interface{}{
  54. "statusCode": 200,
  55. "statusText": "OK",
  56. "data": map[string]interface{}{},
  57. },
  58. }
  59. _ = json.NewEncoder(w).Encode(resp)
  60. }