types.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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 AccountRetriever interface {
  33. EmailAddressByName(screenName state.IdentScreenName) (*mail.Address, error)
  34. RegStatusByName(screenName state.IdentScreenName) (uint16, error)
  35. ConfirmStatusByName(screnName state.IdentScreenName) (bool, error)
  36. }
  37. type BARTRetriever interface {
  38. BARTRetrieve(itemHash []byte) ([]byte, error)
  39. }
  40. type FeedBagRetriever interface {
  41. BuddyIconRefByName(screenName state.IdentScreenName) (*wire.BARTID, error)
  42. }
  43. type ProfileRetriever interface {
  44. Profile(screenName state.IdentScreenName) (string, error)
  45. }
  46. type DirectoryManager interface {
  47. Categories() ([]state.Category, error)
  48. CreateCategory(name string) (state.Category, error)
  49. CreateKeyword(name string, categoryID uint8) (state.Keyword, error)
  50. DeleteCategory(categoryID uint8) error
  51. DeleteKeyword(id uint8) error
  52. KeywordsByCategory(categoryID uint8) ([]state.Keyword, error)
  53. }
  54. type userWithPassword struct {
  55. ScreenName string `json:"screen_name"`
  56. Password string `json:"password,omitempty"`
  57. }
  58. type onlineUsers struct {
  59. Count int `json:"count"`
  60. Sessions []sessionHandle `json:"sessions"`
  61. }
  62. type userHandle struct {
  63. ID string `json:"id"`
  64. ScreenName string `json:"screen_name"`
  65. IsICQ bool `json:"is_icq"`
  66. }
  67. type aimChatUserHandle struct {
  68. ID string `json:"id"`
  69. ScreenName string `json:"screen_name"`
  70. }
  71. type userAccountHandle struct {
  72. ID string `json:"id"`
  73. ScreenName string `json:"screen_name"`
  74. Profile string `json:"profile"`
  75. EmailAddress string `json:"email_address"`
  76. RegStatus uint16 `json:"reg_status"`
  77. Confirmed bool `json:"confirmed"`
  78. IsICQ bool `json:"is_icq"`
  79. }
  80. type sessionHandle struct {
  81. ID string `json:"id"`
  82. ScreenName string `json:"screen_name"`
  83. OnlineSeconds float64 `json:"online_seconds"`
  84. AwayMessage string `json:"away_message"`
  85. IdleSeconds float64 `json:"idle_seconds"`
  86. IsICQ bool `json:"is_icq"`
  87. }
  88. type chatRoomCreate struct {
  89. Name string `json:"name"`
  90. }
  91. type chatRoom struct {
  92. Name string `json:"name"`
  93. CreateTime time.Time `json:"create_time"`
  94. CreatorID string `json:"creator_id,omitempty"`
  95. URL string `json:"url"`
  96. Participants []aimChatUserHandle `json:"participants"`
  97. }
  98. type instantMessage struct {
  99. From string `json:"from"`
  100. To string `json:"to"`
  101. Text string `json:"text"`
  102. }
  103. type directoryKeyword struct {
  104. ID uint8 `json:"id"`
  105. Name string `json:"name"`
  106. }
  107. type directoryCategory struct {
  108. ID uint8 `json:"id"`
  109. Name string `json:"name"`
  110. }
  111. type directoryCategoryCreate struct {
  112. Name string `json:"name"`
  113. }
  114. type directoryKeywordCreate struct {
  115. CategoryID uint8 `json:"category_id"`
  116. Name string `json:"name"`
  117. }
  118. type messageBody struct {
  119. Message string `json:"message"`
  120. }