handler.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. RelationshipFetcher interface {
  35. Relationship(ctx context.Context, me state.IdentScreenName, them state.IdentScreenName) (state.Relationship, error)
  36. }
  37. // Phase 3 additions
  38. PreferenceManager PreferenceManager
  39. // Phase 4 additions for OSCAR Bridge
  40. OSCARBridgeStore OSCARBridgeStore
  41. OSCARConfig OSCARConfig
  42. // Phase 5 additions for buddy list and messaging
  43. BuddyListManager interface{}
  44. RecalcWarning func(ctx context.Context, instance *state.SessionInstance) error
  45. LowerWarnLevel func(ctx context.Context, instance *state.SessionInstance)
  46. ChatSessionManager ChatSessionManager
  47. FeedbagService FeedbagService
  48. }
  49. func (h Handler) GetHelloWorldHandler(w http.ResponseWriter, r *http.Request) {
  50. h.Logger.Info("got a request to the root endpoint", "method", r.Method, "path", r.URL.Path)
  51. _, _ = fmt.Fprintf(w, "WebAPI Server Running\n")
  52. // Must return the same JSON envelope as other Web AIM APIs.
  53. h.Logger.Info("webapi root GET", "remote", r.RemoteAddr, "host", r.Host, "path", r.URL.Path)
  54. w.Header().Set("Content-Type", "application/json; charset=utf-8")
  55. resp := map[string]interface{}{
  56. "response": map[string]interface{}{
  57. "statusCode": 200,
  58. "statusText": "OK",
  59. "data": map[string]interface{}{},
  60. },
  61. }
  62. _ = json.NewEncoder(w).Encode(resp)
  63. }