Files
catalyst/service/user.go
Jonas Plum f73e91d142 Add maut (#468)
Co-authored-by: Jonas Plum <git@jonasplum.de>
2022-10-01 21:38:13 +02:00

75 lines
1.9 KiB
Go

package service
import (
"context"
"errors"
"fmt"
"github.com/arangodb/go-driver"
maut "github.com/jonas-plum/maut/auth"
"github.com/SecurityBrewery/catalyst/database"
"github.com/SecurityBrewery/catalyst/generated/model"
)
func newUserResponseID(user *model.NewUserResponse) []driver.DocumentID {
if user == nil {
return nil
}
return userID(user.ID)
}
func userResponseID(user *model.UserResponse) []driver.DocumentID {
if user == nil {
return nil
}
return userID(user.ID)
}
func userID(id string) []driver.DocumentID {
return []driver.DocumentID{driver.DocumentID(fmt.Sprintf("%s/%s", database.UserCollectionName, id))}
}
func (s *Service) ListUsers(ctx context.Context) ([]*model.UserResponse, error) {
return s.database.UserList(ctx)
}
func (s *Service) CreateUser(ctx context.Context, form *model.UserForm) (doc *model.NewUserResponse, err error) {
defer s.publishRequest(ctx, err, "CreateUser", newUserResponseID(doc))
return s.database.UserCreate(ctx, form)
}
func (s *Service) GetUser(ctx context.Context, s2 string) (*model.UserResponse, error) {
return s.database.UserGet(ctx, s2)
}
func (s *Service) UpdateUser(ctx context.Context, s2 string, form *model.UserForm) (doc *model.UserResponse, err error) {
defer s.publishRequest(ctx, err, "UpdateUser", userID(s2))
return s.database.UserUpdate(ctx, s2, form)
}
func (s *Service) DeleteUser(ctx context.Context, s2 string) (err error) {
defer s.publishRequest(ctx, err, "DeleteUser", userID(s2))
return s.database.UserDelete(ctx, s2)
}
func (s *Service) CurrentUser(ctx context.Context) (*model.UserResponse, error) {
user, _, ok := maut.UserFromContext(ctx)
if !ok {
return nil, errors.New("no user in context")
}
s.publishRequest(ctx, nil, "CurrentUser", userID(user.ID))
return &model.UserResponse{
ID: user.ID,
Apikey: user.APIKey,
Blocked: user.Blocked,
Roles: user.Roles,
}, nil
}