123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package usermanager
- import (
- "context"
- "errors"
- "math/rand"
- "github.com/getlantern/deepcopy"
- gamelangpb "git.alfi.li/gamelang/protobuf/gamelang"
- )
- type UserServer struct {
- gamelangpb.UnimplementedUserServiceServer
- usermanager *UserManager
- }
- func NewUserServer(um *UserManager) *UserServer {
- return &UserServer{usermanager: um}
- }
- func (us UserServer) CreateUser(ctx context.Context, user *gamelangpb.User) (*gamelangpb.User, error) {
- id := rand.Uint32()
- name := user.GetName()
- password := string(user.GetPassword())
- _, err := us.usermanager.Create(id, name, password)
- if err != nil {
- return &gamelangpb.User{}, err
- }
- return user, nil
- }
- func (us UserServer) DeleteUser(ctx context.Context, user *gamelangpb.User) (*gamelangpb.User, error) {
- us.usermanager.Remove(user.GetName())
- return user, nil
- }
- func (us UserServer) GetUser(ctx context.Context, user *gamelangpb.User) (*gamelangpb.User, error) {
- users := us.usermanager.List()
- for _, userB := range users {
- if user.GetName() == userB.GetName() {
- returnUser := &gamelangpb.User{}
- deepcopy.Copy(userB, returnUser)
- returnUser.Password = []byte{}
- return returnUser, nil
- }
- }
- return &gamelangpb.User{}, errors.New("User not found")
- }
- func (us UserServer) ListUser(user *gamelangpb.User, stream gamelangpb.UserService_ListUserServer) error {
- users := us.usermanager.List()
- for _, user := range users {
- stream.Send(&user)
- }
- return nil
- }
- func (us UserServer) CheckUser(ctx context.Context, user *gamelangpb.User) (*gamelangpb.User, error) {
- if _, ok := us.usermanager.CheckUser(user.GetName(), string(user.GetPassword())); ok {
- return user, nil
- }
- return &gamelangpb.User{}, errors.New("user not found or password missmatch")
- }
|