types.go 5.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. PreAuthorizeBuddy(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x13_0x14_FeedbagPreAuthorizeBuddy) (*wire.SNACMessage, error)
  43. Query(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame) (wire.SNACMessage, error)
  44. UpsertItem(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, items []wire.FeedbagItem) (*wire.SNACMessage, error)
  45. Use(ctx context.Context, instance *state.SessionInstance) error
  46. }
  47. // ICBMService sends instant messages and typing events and drains offline ones.
  48. type ICBMService interface {
  49. ChannelMsgToHost(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x04_0x06_ICBMChannelMsgToHost) (*wire.SNACMessage, error)
  50. ClientEvent(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x04_0x14_ICBMClientEvent) error
  51. OfflineRetrieve(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame) (wire.SNACMessage, error)
  52. }
  53. // LocateService reads and writes user profiles and directory info.
  54. type LocateService interface {
  55. SetDirInfo(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x02_0x09_LocateSetDirInfo) (wire.SNACMessage, error)
  56. SetInfo(ctx context.Context, instance *state.SessionInstance, inBody wire.SNAC_0x02_0x04_LocateSetInfo) error
  57. UserInfoQuery(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x02_0x05_LocateUserInfoQuery) (wire.SNACMessage, error)
  58. DirInfo(ctx context.Context, inFrame wire.SNACFrame, inBody wire.SNAC_0x02_0x0B_LocateGetDirInfo) (wire.SNACMessage, error)
  59. }
  60. // OServiceService completes sign-on and manages rate limit subscriptions.
  61. type OServiceService interface {
  62. ClientOnline(ctx context.Context, service uint16, inBody wire.SNAC_0x01_0x02_OServiceClientOnline, instance *state.SessionInstance) error
  63. MonitorRateLimits(ctx context.Context, session *state.Session)
  64. RateParamsSubAdd(ctx context.Context, instance *state.SessionInstance, inBody wire.SNAC_0x01_0x08_OServiceRateParamsSubAdd)
  65. }
  66. // BuddyIconRetriever resolves a user's icon reference from their feedbag, which
  67. // is where it lives, so it resolves for offline users too.
  68. type BuddyIconRetriever interface {
  69. BuddyIconMetadata(ctx context.Context, screenName state.IdentScreenName) (*wire.BARTID, error)
  70. }
  71. // BuddyListRegistry registers a user's buddy list, making them and the users on
  72. // it visible to each other.
  73. type BuddyListRegistry interface {
  74. RegisterBuddyList(ctx context.Context, user state.IdentScreenName) error
  75. UnregisterBuddyList(ctx context.Context, user state.IdentScreenName) error
  76. }
  77. // ChatSessionManager removes a departing user from every chat room they joined.
  78. type ChatSessionManager interface {
  79. RemoveUserFromAllChats(user state.IdentScreenName)
  80. }