types.go 4.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package webapi
  2. import (
  3. "context"
  4. "time"
  5. "github.com/mk6i/open-oscar-server/config"
  6. "github.com/mk6i/open-oscar-server/state"
  7. "github.com/mk6i/open-oscar-server/wire"
  8. )
  9. // SessionResolver resolves and refreshes Web API sessions by aimsid.
  10. type SessionResolver interface {
  11. GetSession(ctx context.Context, aimsid string) (*Session, error)
  12. TouchSession(ctx context.Context, aimsid string) error
  13. }
  14. // APIKeyValidator validates the dev_key a client sends as its "k" parameter.
  15. type APIKeyValidator interface {
  16. GetAPIKeyByDevKey(ctx context.Context, devKey string) (*state.WebAPIKey, error)
  17. }
  18. // AuthService cracks auth cookies and registers the BOS sessions they name.
  19. type AuthService interface {
  20. CrackCookie(authCookie []byte) (state.ServerCookie, time.Time, error)
  21. FLAPLogin(ctx context.Context, inFrame wire.FLAPSignonFrame, endpointCfg config.Endpoint) (wire.TLVRestBlock, error)
  22. RegisterBOSSession(ctx context.Context, authCookie state.ServerCookie, conf func(sess *state.Session)) (*state.SessionInstance, error)
  23. Signout(ctx context.Context, session *state.Session)
  24. }
  25. // BARTService stores and retrieves BART (buddy art) assets by content hash.
  26. type BARTService interface {
  27. RetrieveItem(ctx context.Context, inFrame wire.SNACFrame, inBody wire.SNAC_0x10_0x04_BARTDownloadQuery) (wire.SNACMessage, error)
  28. UpsertItem(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x10_0x02_BARTUploadQuery) (wire.SNACMessage, error)
  29. }
  30. // BuddyBroadcaster announces a user's arrival and departure to their watchers.
  31. type BuddyBroadcaster interface {
  32. BroadcastBuddyArrived(ctx context.Context, screenName state.IdentScreenName, userInfo wire.TLVUserInfo) error
  33. BroadcastBuddyDeparted(ctx context.Context, screenName state.IdentScreenName) error
  34. }
  35. // DirSearchService runs ODir member-directory searches.
  36. type DirSearchService interface {
  37. InfoQuery(ctx context.Context, inFrame wire.SNACFrame, inBody wire.SNAC_0x0F_0x02_InfoQuery) (wire.SNACMessage, error)
  38. }
  39. // FeedbagService reads and edits the server-stored buddy list.
  40. type FeedbagService interface {
  41. DeleteItem(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x13_0x0A_FeedbagDeleteItem) (*wire.SNACMessage, error)
  42. Query(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame) (wire.SNACMessage, error)
  43. UpsertItem(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, items []wire.FeedbagItem) (*wire.SNACMessage, error)
  44. Use(ctx context.Context, instance *state.SessionInstance) error
  45. }
  46. // ICBMService sends instant messages and typing events and drains offline ones.
  47. type ICBMService interface {
  48. ChannelMsgToHost(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x04_0x06_ICBMChannelMsgToHost) (*wire.SNACMessage, error)
  49. ClientEvent(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x04_0x14_ICBMClientEvent) error
  50. OfflineRetrieve(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame) (wire.SNACMessage, error)
  51. }
  52. // LocateService reads and writes user profiles and directory info.
  53. type LocateService interface {
  54. SetDirInfo(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x02_0x09_LocateSetDirInfo) (wire.SNACMessage, error)
  55. SetInfo(ctx context.Context, instance *state.SessionInstance, inBody wire.SNAC_0x02_0x04_LocateSetInfo) error
  56. UserInfoQuery(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x02_0x05_LocateUserInfoQuery) (wire.SNACMessage, error)
  57. DirInfo(ctx context.Context, inFrame wire.SNACFrame, inBody wire.SNAC_0x02_0x0B_LocateGetDirInfo) (wire.SNACMessage, error)
  58. }
  59. // OServiceService completes sign-on and manages rate limit subscriptions.
  60. type OServiceService interface {
  61. ClientOnline(ctx context.Context, service uint16, inBody wire.SNAC_0x01_0x02_OServiceClientOnline, instance *state.SessionInstance) error
  62. MonitorRateLimits(ctx context.Context, session *state.Session)
  63. RateParamsSubAdd(ctx context.Context, instance *state.SessionInstance, inBody wire.SNAC_0x01_0x08_OServiceRateParamsSubAdd)
  64. }
  65. // BuddyIconRetriever resolves a user's icon reference from their feedbag, which
  66. // is where it lives, so it resolves for offline users too.
  67. type BuddyIconRetriever interface {
  68. BuddyIconMetadata(ctx context.Context, screenName state.IdentScreenName) (*wire.BARTID, error)
  69. }
  70. // BuddyListRegistry registers a user's buddy list, making them and the users on
  71. // it visible to each other.
  72. type BuddyListRegistry interface {
  73. RegisterBuddyList(ctx context.Context, user state.IdentScreenName) error
  74. UnregisterBuddyList(ctx context.Context, user state.IdentScreenName) error
  75. }
  76. // ChatSessionManager removes a departing user from every chat room they joined.
  77. type ChatSessionManager interface {
  78. RemoveUserFromAllChats(user state.IdentScreenName)
  79. }