types.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package http
  2. import (
  3. "context"
  4. "net/mail"
  5. "time"
  6. "github.com/mk6i/retro-aim-server/state"
  7. "github.com/mk6i/retro-aim-server/wire"
  8. )
  9. type ChatRoomRetriever interface {
  10. AllChatRooms(exchange uint16) ([]state.ChatRoom, error)
  11. }
  12. type ChatRoomCreator interface {
  13. CreateChatRoom(chatRoom *state.ChatRoom) error
  14. }
  15. type ChatSessionRetriever interface {
  16. AllSessions(cookie string) []*state.Session
  17. }
  18. type SessionRetriever interface {
  19. AllSessions() []*state.Session
  20. RetrieveSession(screenName state.IdentScreenName) *state.Session
  21. }
  22. type UserManager interface {
  23. AllUsers() ([]state.User, error)
  24. DeleteUser(screenName state.IdentScreenName) error
  25. InsertUser(u state.User) error
  26. SetUserPassword(screenName state.IdentScreenName, newPassword string) error
  27. User(screenName state.IdentScreenName) (*state.User, error)
  28. }
  29. type MessageRelayer interface {
  30. RelayToScreenName(ctx context.Context, screenName state.IdentScreenName, msg wire.SNACMessage)
  31. }
  32. type AccountManager interface {
  33. EmailAddressByName(screenName state.IdentScreenName) (*mail.Address, error)
  34. RegStatusByName(screenName state.IdentScreenName) (uint16, error)
  35. ConfirmStatusByName(screenName state.IdentScreenName) (bool, error)
  36. UpdateSuspendedStatus(suspendedStatus uint16, screenName state.IdentScreenName) error
  37. }
  38. type BARTRetriever interface {
  39. BARTRetrieve(itemHash []byte) ([]byte, error)
  40. }
  41. type FeedBagRetriever interface {
  42. BuddyIconRefByName(screenName state.IdentScreenName) (*wire.BARTID, error)
  43. }
  44. type ProfileRetriever interface {
  45. Profile(screenName state.IdentScreenName) (string, error)
  46. }
  47. type DirectoryManager interface {
  48. Categories() ([]state.Category, error)
  49. CreateCategory(name string) (state.Category, error)
  50. CreateKeyword(name string, categoryID uint8) (state.Keyword, error)
  51. DeleteCategory(categoryID uint8) error
  52. DeleteKeyword(id uint8) error
  53. KeywordsByCategory(categoryID uint8) ([]state.Keyword, error)
  54. }
  55. type userWithPassword struct {
  56. ScreenName string `json:"screen_name"`
  57. Password string `json:"password,omitempty"`
  58. }
  59. type onlineUsers struct {
  60. Count int `json:"count"`
  61. Sessions []sessionHandle `json:"sessions"`
  62. }
  63. type userHandle struct {
  64. ID string `json:"id"`
  65. ScreenName string `json:"screen_name"`
  66. IsICQ bool `json:"is_icq"`
  67. SuspendedStatus string `json:"suspended_status"`
  68. }
  69. type aimChatUserHandle struct {
  70. ID string `json:"id"`
  71. ScreenName string `json:"screen_name"`
  72. }
  73. type userAccountHandle struct {
  74. ID string `json:"id"`
  75. ScreenName string `json:"screen_name"`
  76. Profile string `json:"profile"`
  77. EmailAddress string `json:"email_address"`
  78. RegStatus uint16 `json:"reg_status"`
  79. Confirmed bool `json:"confirmed"`
  80. IsICQ bool `json:"is_icq"`
  81. SuspendedStatus string `json:"suspended_status"`
  82. }
  83. type userAccountPatch struct {
  84. SuspendedStatusText *string `json:"suspended_status"`
  85. }
  86. type sessionHandle struct {
  87. ID string `json:"id"`
  88. ScreenName string `json:"screen_name"`
  89. OnlineSeconds float64 `json:"online_seconds"`
  90. AwayMessage string `json:"away_message"`
  91. IdleSeconds float64 `json:"idle_seconds"`
  92. IsICQ bool `json:"is_icq"`
  93. RemoteAddr string `json:"remote_addr,omitempty"`
  94. RemotePort uint16 `json:"remote_port,omitempty"`
  95. }
  96. type chatRoomCreate struct {
  97. Name string `json:"name"`
  98. }
  99. type chatRoom struct {
  100. Name string `json:"name"`
  101. CreateTime time.Time `json:"create_time"`
  102. CreatorID string `json:"creator_id,omitempty"`
  103. URL string `json:"url"`
  104. Participants []aimChatUserHandle `json:"participants"`
  105. }
  106. type instantMessage struct {
  107. From string `json:"from"`
  108. To string `json:"to"`
  109. Text string `json:"text"`
  110. }
  111. type directoryKeyword struct {
  112. ID uint8 `json:"id"`
  113. Name string `json:"name"`
  114. }
  115. type directoryCategory struct {
  116. ID uint8 `json:"id"`
  117. Name string `json:"name"`
  118. }
  119. type directoryCategoryCreate struct {
  120. Name string `json:"name"`
  121. }
  122. type directoryKeywordCreate struct {
  123. CategoryID uint8 `json:"category_id"`
  124. Name string `json:"name"`
  125. }
  126. type messageBody struct {
  127. Message string `json:"message"`
  128. }