types.go 5.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. // AuthService cracks auth cookies and registers the BOS sessions they name.
  15. type AuthService interface {
  16. CrackCookie(authCookie []byte) (state.ServerCookie, time.Time, error)
  17. FLAPLogin(ctx context.Context, inFrame wire.FLAPSignonFrame, endpointCfg config.Endpoint) (wire.TLVRestBlock, error)
  18. RegisterBOSSession(ctx context.Context, authCookie state.ServerCookie, conf func(sess *state.Session)) (*state.SessionInstance, error)
  19. Signout(ctx context.Context, session *state.Session)
  20. }
  21. // BARTService stores and retrieves BART (buddy art) assets by content hash.
  22. type BARTService interface {
  23. RetrieveItem(ctx context.Context, inFrame wire.SNACFrame, inBody wire.SNAC_0x10_0x04_BARTDownloadQuery) (wire.SNACMessage, error)
  24. UpsertItem(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x10_0x02_BARTUploadQuery) (wire.SNACMessage, error)
  25. }
  26. // BuddyBroadcaster announces a user's arrival and departure to their watchers.
  27. type BuddyBroadcaster interface {
  28. BroadcastBuddyArrived(ctx context.Context, screenName state.IdentScreenName, userInfo wire.TLVUserInfo) error
  29. BroadcastBuddyDeparted(ctx context.Context, screenName state.IdentScreenName) error
  30. }
  31. // BuddyService adds and removes buddies that live only for the duration of the
  32. // user's session.
  33. type BuddyService interface {
  34. AddTempBuddies(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x03_0x0F_BuddyAddTempBuddies) (*wire.SNACMessage, error)
  35. DelTempBuddies(ctx context.Context, instance *state.SessionInstance, inBody wire.SNAC_0x03_0x10_BuddyDelTempBuddies) error
  36. }
  37. // DirSearchService runs ODir member-directory searches.
  38. type DirSearchService interface {
  39. InfoQuery(ctx context.Context, inFrame wire.SNACFrame, inBody wire.SNAC_0x0F_0x02_InfoQuery) (wire.SNACMessage, error)
  40. }
  41. // FeedbagService reads and edits the server-stored buddy list.
  42. type FeedbagService interface {
  43. DeleteItem(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x13_0x0A_FeedbagDeleteItem) (*wire.SNACMessage, error)
  44. PreAuthorizeBuddy(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x13_0x14_FeedbagPreAuthorizeBuddy) (*wire.SNACMessage, error)
  45. Query(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame) (wire.SNACMessage, error)
  46. UpsertItem(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, items []wire.FeedbagItem) (*wire.SNACMessage, error)
  47. Use(ctx context.Context, instance *state.SessionInstance) error
  48. }
  49. // ICBMService sends instant messages and typing events and drains offline ones.
  50. type ICBMService interface {
  51. ChannelMsgToHost(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x04_0x06_ICBMChannelMsgToHost) (*wire.SNACMessage, error)
  52. ClientEvent(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x04_0x14_ICBMClientEvent) error
  53. OfflineRetrieve(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame) (wire.SNACMessage, error)
  54. }
  55. // LocateService reads and writes user profiles and directory info.
  56. type LocateService interface {
  57. SetDirInfo(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x02_0x09_LocateSetDirInfo) (wire.SNACMessage, error)
  58. SetInfo(ctx context.Context, instance *state.SessionInstance, inBody wire.SNAC_0x02_0x04_LocateSetInfo) error
  59. UserInfoQuery(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x02_0x05_LocateUserInfoQuery) (wire.SNACMessage, error)
  60. DirInfo(ctx context.Context, inFrame wire.SNACFrame, inBody wire.SNAC_0x02_0x0B_LocateGetDirInfo) (wire.SNACMessage, error)
  61. }
  62. // OServiceService completes sign-on and manages rate limit subscriptions.
  63. type OServiceService interface {
  64. ClientOnline(ctx context.Context, service uint16, inBody wire.SNAC_0x01_0x02_OServiceClientOnline, instance *state.SessionInstance) error
  65. MonitorRateLimits(ctx context.Context, session *state.Session)
  66. RateParamsSubAdd(ctx context.Context, instance *state.SessionInstance, inBody wire.SNAC_0x01_0x08_OServiceRateParamsSubAdd)
  67. }
  68. // BuddyIconRetriever resolves a user's icon reference from their feedbag, which
  69. // is where it lives, so it resolves for offline users too.
  70. type BuddyIconRetriever interface {
  71. BuddyIconMetadata(ctx context.Context, screenName state.IdentScreenName) (*wire.BARTID, error)
  72. }
  73. // BuddyListRegistry registers a user's buddy list, making them and the users on
  74. // it visible to each other.
  75. type BuddyListRegistry interface {
  76. RegisterBuddyList(ctx context.Context, user state.IdentScreenName) error
  77. UnregisterBuddyList(ctx context.Context, user state.IdentScreenName) error
  78. }
  79. // ChatSessionManager removes a departing user from every chat room they joined.
  80. type ChatSessionManager interface {
  81. RemoveUserFromAllChats(user state.IdentScreenName)
  82. }