grpc.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package usermanager
  2. import (
  3. "context"
  4. "errors"
  5. "math/rand"
  6. "github.com/getlantern/deepcopy"
  7. gamelangpb "git.alfi.li/gamelang/protobuf/gamelang"
  8. )
  9. type UserServer struct {
  10. gamelangpb.UnimplementedUserServiceServer
  11. usermanager *UserManager
  12. }
  13. func NewUserServer(um *UserManager) *UserServer {
  14. return &UserServer{usermanager: um}
  15. }
  16. func (us UserServer) CreateUser(ctx context.Context, user *gamelangpb.User) (*gamelangpb.User, error) {
  17. id := rand.Uint32()
  18. name := user.GetName()
  19. password := string(user.GetPassword())
  20. _, err := us.usermanager.Create(id, name, password)
  21. if err != nil {
  22. return &gamelangpb.User{}, err
  23. }
  24. return user, nil
  25. }
  26. func (us UserServer) DeleteUser(ctx context.Context, user *gamelangpb.User) (*gamelangpb.User, error) {
  27. us.usermanager.Remove(user.GetName())
  28. return user, nil
  29. }
  30. func (us UserServer) GetUser(ctx context.Context, user *gamelangpb.User) (*gamelangpb.User, error) {
  31. users := us.usermanager.List()
  32. for _, userB := range users {
  33. if user.GetName() == userB.GetName() {
  34. returnUser := &gamelangpb.User{}
  35. deepcopy.Copy(userB, returnUser)
  36. returnUser.Password = []byte{}
  37. return returnUser, nil
  38. }
  39. }
  40. return &gamelangpb.User{}, errors.New("User not found")
  41. }
  42. func (us UserServer) ListUser(user *gamelangpb.User, stream gamelangpb.UserService_ListUserServer) error {
  43. users := us.usermanager.List()
  44. for _, user := range users {
  45. stream.Send(&user)
  46. }
  47. return nil
  48. }
  49. func (us UserServer) CheckUser(ctx context.Context, user *gamelangpb.User) (*gamelangpb.User, error) {
  50. if _, ok := us.usermanager.CheckUser(user.GetName(), string(user.GetPassword())); ok {
  51. return user, nil
  52. }
  53. return &gamelangpb.User{}, errors.New("user not found or password missmatch")
  54. }