user_lookup.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package foodgroup
  2. import (
  3. "context"
  4. "errors"
  5. "github.com/mk6i/open-oscar-server/state"
  6. "github.com/mk6i/open-oscar-server/wire"
  7. )
  8. // NewUserLookupService returns a new instance of UserLookupService.
  9. func NewUserLookupService(profileManager ProfileManager) UserLookupService {
  10. return UserLookupService{
  11. profileManager: profileManager,
  12. }
  13. }
  14. // UserLookupService implements the UserLookup food group.
  15. type UserLookupService struct {
  16. profileManager ProfileManager
  17. }
  18. // FindByEmail searches for a user by email address.
  19. func (s UserLookupService) FindByEmail(ctx context.Context, inFrame wire.SNACFrame, inBody wire.SNAC_0x0A_0x02_UserLookupFindByEmail) (wire.SNACMessage, error) {
  20. user, err := s.profileManager.FindByAIMEmail(ctx, string(inBody.Email))
  21. switch {
  22. case errors.Is(err, state.ErrNoUser):
  23. return wire.SNACMessage{
  24. Frame: wire.SNACFrame{
  25. FoodGroup: wire.UserLookup,
  26. SubGroup: wire.UserLookupErr,
  27. RequestID: inFrame.RequestID,
  28. },
  29. Body: wire.UserLookupErrNoUserFound,
  30. }, nil
  31. case err != nil:
  32. return wire.SNACMessage{}, err
  33. }
  34. return wire.SNACMessage{
  35. Frame: wire.SNACFrame{
  36. FoodGroup: wire.UserLookup,
  37. SubGroup: wire.UserLookupFindReply,
  38. RequestID: inFrame.RequestID,
  39. },
  40. Body: wire.SNAC_0x0A_0x03_UserLookupFindReply{
  41. TLVRestBlock: wire.TLVRestBlock{
  42. TLVList: wire.TLVList{
  43. wire.NewTLVBE(wire.UserLookupTLVEmailAddress, user.DisplayScreenName),
  44. },
  45. },
  46. },
  47. }, nil
  48. }