types.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package toc
  2. import (
  3. "context"
  4. "github.com/google/uuid"
  5. "github.com/mk6i/retro-aim-server/state"
  6. "github.com/mk6i/retro-aim-server/wire"
  7. )
  8. type BuddyService interface {
  9. AddBuddies(ctx context.Context, sess *state.Session, inBody wire.SNAC_0x03_0x04_BuddyAddBuddies) error
  10. BroadcastBuddyDeparted(ctx context.Context, sess *state.Session) error
  11. DelBuddies(ctx context.Context, sess *state.Session, inBody wire.SNAC_0x03_0x05_BuddyDelBuddies) error
  12. RightsQuery(ctx context.Context, inFrame wire.SNACFrame) wire.SNACMessage
  13. }
  14. type ChatService interface {
  15. ChannelMsgToHost(ctx context.Context, sess *state.Session, inFrame wire.SNACFrame, inBody wire.SNAC_0x0E_0x05_ChatChannelMsgToHost) (*wire.SNACMessage, error)
  16. }
  17. type ChatNavService interface {
  18. CreateRoom(ctx context.Context, sess *state.Session, inFrame wire.SNACFrame, inBody wire.SNAC_0x0E_0x02_ChatRoomInfoUpdate) (wire.SNACMessage, error)
  19. ExchangeInfo(ctx context.Context, inFrame wire.SNACFrame, inBody wire.SNAC_0x0D_0x03_ChatNavRequestExchangeInfo) (wire.SNACMessage, error)
  20. RequestChatRights(ctx context.Context, inFrame wire.SNACFrame) wire.SNACMessage
  21. RequestRoomInfo(ctx context.Context, inFrame wire.SNACFrame, inBody wire.SNAC_0x0D_0x04_ChatNavRequestRoomInfo) (wire.SNACMessage, error)
  22. }
  23. type ICBMService interface {
  24. ChannelMsgToHost(ctx context.Context, sess *state.Session, inFrame wire.SNACFrame, inBody wire.SNAC_0x04_0x06_ICBMChannelMsgToHost) (*wire.SNACMessage, error)
  25. ClientEvent(ctx context.Context, sess *state.Session, inFrame wire.SNACFrame, inBody wire.SNAC_0x04_0x14_ICBMClientEvent) error
  26. EvilRequest(ctx context.Context, sess *state.Session, inFrame wire.SNACFrame, inBody wire.SNAC_0x04_0x08_ICBMEvilRequest) (wire.SNACMessage, error)
  27. ParameterQuery(ctx context.Context, inFrame wire.SNACFrame) wire.SNACMessage
  28. ClientErr(ctx context.Context, sess *state.Session, frame wire.SNACFrame, body wire.SNAC_0x04_0x0B_ICBMClientErr) error
  29. }
  30. type OServiceService interface {
  31. ClientOnline(ctx context.Context, _ wire.SNAC_0x01_0x02_OServiceClientOnline, sess *state.Session) error
  32. IdleNotification(ctx context.Context, sess *state.Session, bodyIn wire.SNAC_0x01_0x11_OServiceIdleNotification) error
  33. ServiceRequest(ctx context.Context, sess *state.Session, frame wire.SNACFrame, bodyIn wire.SNAC_0x01_0x04_OServiceServiceRequest) (wire.SNACMessage, error)
  34. }
  35. type AuthService interface {
  36. BUCPChallenge(ctx context.Context, bodyIn wire.SNAC_0x17_0x06_BUCPChallengeRequest, newUUID func() uuid.UUID) (wire.SNACMessage, error)
  37. BUCPLogin(ctx context.Context, bodyIn wire.SNAC_0x17_0x02_BUCPLoginRequest, newUserFn func(screenName state.DisplayScreenName) (state.User, error)) (wire.SNACMessage, error)
  38. FLAPLogin(ctx context.Context, frame wire.FLAPSignonFrame, newUserFn func(screenName state.DisplayScreenName) (state.User, error)) (wire.TLVRestBlock, error)
  39. RegisterBOSSession(ctx context.Context, authCookie []byte) (*state.Session, error)
  40. RetrieveBOSSession(ctx context.Context, authCookie []byte) (*state.Session, error)
  41. RegisterChatSession(ctx context.Context, authCookie []byte) (*state.Session, error)
  42. Signout(ctx context.Context, sess *state.Session)
  43. SignoutChat(ctx context.Context, sess *state.Session)
  44. }
  45. type LocateService interface {
  46. SetDirInfo(ctx context.Context, sess *state.Session, inFrame wire.SNACFrame, inBody wire.SNAC_0x02_0x09_LocateSetDirInfo) (wire.SNACMessage, error)
  47. SetInfo(ctx context.Context, sess *state.Session, inBody wire.SNAC_0x02_0x04_LocateSetInfo) error
  48. UserInfoQuery(ctx context.Context, sess *state.Session, inFrame wire.SNACFrame, inBody wire.SNAC_0x02_0x05_LocateUserInfoQuery) (wire.SNACMessage, error)
  49. DirInfo(ctx context.Context, inFrame wire.SNACFrame, body wire.SNAC_0x02_0x0B_LocateGetDirInfo) (wire.SNACMessage, error)
  50. }
  51. type DirSearchService interface {
  52. InfoQuery(_ context.Context, inFrame wire.SNACFrame, inBody wire.SNAC_0x0F_0x02_InfoQuery) (wire.SNACMessage, error)
  53. }
  54. type PermitDenyService interface {
  55. AddDenyListEntries(ctx context.Context, sess *state.Session, body wire.SNAC_0x09_0x07_PermitDenyAddDenyListEntries) error
  56. AddPermListEntries(ctx context.Context, sess *state.Session, body wire.SNAC_0x09_0x05_PermitDenyAddPermListEntries) error
  57. DelDenyListEntries(ctx context.Context, sess *state.Session, body wire.SNAC_0x09_0x08_PermitDenyDelDenyListEntries) error
  58. DelPermListEntries(ctx context.Context, sess *state.Session, body wire.SNAC_0x09_0x06_PermitDenyDelPermListEntries) error
  59. RightsQuery(_ context.Context, frame wire.SNACFrame) wire.SNACMessage
  60. }
  61. // BuddyListRegistry is the interface for keeping track of users with active
  62. // buddy lists. Once registered, a user becomes visible to other users' buddy
  63. // lists and vice versa.
  64. type BuddyListRegistry interface {
  65. RegisterBuddyList(ctx context.Context, user state.IdentScreenName) error
  66. UnregisterBuddyList(ctx context.Context, user state.IdentScreenName) error
  67. }
  68. type TOCConfigStore interface {
  69. // SetTOCConfig sets the user's TOC config. The TOC config is the server-side
  70. // buddy list functionality for TOC. This configuration is not available to
  71. // OSCAR clients.
  72. SetTOCConfig(ctx context.Context, user state.IdentScreenName, config string) error
  73. User(ctx context.Context, screenName state.IdentScreenName) (*state.User, error)
  74. }
  75. // CookieBaker defines methods for issuing and verifying AIM authentication tokens ("cookies").
  76. // These tokens are used for authenticating client sessions with AIM services.
  77. type CookieBaker interface {
  78. // Crack verifies and decodes a previously issued authentication token.
  79. // Returns the original payload if the token is valid.
  80. Crack(data []byte) ([]byte, error)
  81. // Issue creates a new authentication token from the given payload.
  82. // The resulting token can later be verified using Crack.
  83. Issue(data []byte) ([]byte, error)
  84. }
  85. type AdminService interface {
  86. InfoChangeRequest(ctx context.Context, sess *state.Session, frame wire.SNACFrame, body wire.SNAC_0x07_0x04_AdminInfoChangeRequest) (wire.SNACMessage, error)
  87. }