mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2025-12-18 21:22:51 +01:00
Add global settings (#40)
This commit is contained in:
@@ -8,19 +8,18 @@ import (
|
||||
"github.com/SecurityBrewery/catalyst/bus"
|
||||
"github.com/SecurityBrewery/catalyst/database"
|
||||
"github.com/SecurityBrewery/catalyst/database/busdb"
|
||||
"github.com/SecurityBrewery/catalyst/generated/model"
|
||||
"github.com/SecurityBrewery/catalyst/storage"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
bus *bus.Bus
|
||||
database *database.Database
|
||||
settings *model.Settings
|
||||
storage *storage.Storage
|
||||
version string
|
||||
}
|
||||
|
||||
func New(bus *bus.Bus, database *database.Database, storage *storage.Storage, settings *model.Settings) (*Service, error) {
|
||||
return &Service{database: database, bus: bus, settings: settings, storage: storage}, nil
|
||||
func New(bus *bus.Bus, database *database.Database, storage *storage.Storage, version string) (*Service, error) {
|
||||
return &Service{database: database, bus: bus, storage: storage, version: version}, nil
|
||||
}
|
||||
|
||||
func (s *Service) publishRequest(ctx context.Context, err error, function string, ids []driver.DocumentID) {
|
||||
|
||||
62
service/settings.go
Normal file
62
service/settings.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"sort"
|
||||
|
||||
"github.com/SecurityBrewery/catalyst/database/busdb"
|
||||
"github.com/SecurityBrewery/catalyst/generated/model"
|
||||
"github.com/SecurityBrewery/catalyst/role"
|
||||
)
|
||||
|
||||
func (s *Service) GetSettings(ctx context.Context) (*model.SettingsResponse, error) {
|
||||
globalSettings, err := s.database.Settings(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return s.settings(ctx, globalSettings)
|
||||
}
|
||||
|
||||
func (s *Service) SaveSettings(ctx context.Context, settings *model.Settings) (*model.SettingsResponse, error) {
|
||||
globalSettings, err := s.database.SaveSettings(ctx, settings)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return s.settings(ctx, globalSettings)
|
||||
}
|
||||
|
||||
func (s *Service) settings(ctx context.Context, globalSettings *model.Settings) (*model.SettingsResponse, error) {
|
||||
user, ok := busdb.UserFromContext(ctx)
|
||||
if !ok {
|
||||
return nil, errors.New("no user in context")
|
||||
}
|
||||
|
||||
userData, err := s.database.UserDataGet(ctx, user.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ticketTypeList, err := s.database.TicketTypeList(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if userData.Timeformat != nil {
|
||||
globalSettings.Timeformat = *userData.Timeformat
|
||||
}
|
||||
roles := role.Strings(role.List())
|
||||
sort.Strings(roles)
|
||||
|
||||
return &model.SettingsResponse{
|
||||
Tier: model.SettingsResponseTierCommunity,
|
||||
Version: s.version,
|
||||
Roles: roles,
|
||||
TicketTypes: ticketTypeList,
|
||||
ArtifactStates: globalSettings.ArtifactStates,
|
||||
ArtifactKinds: globalSettings.ArtifactKinds,
|
||||
Timeformat: globalSettings.Timeformat,
|
||||
}, nil
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"sort"
|
||||
|
||||
"github.com/SecurityBrewery/catalyst/database/busdb"
|
||||
"github.com/SecurityBrewery/catalyst/generated/model"
|
||||
"github.com/SecurityBrewery/catalyst/role"
|
||||
)
|
||||
|
||||
func (s *Service) GetSettings(ctx context.Context) (*model.Settings, error) {
|
||||
user, ok := busdb.UserFromContext(ctx)
|
||||
if !ok {
|
||||
return nil, errors.New("no user in context")
|
||||
}
|
||||
|
||||
setting, err := s.database.UserDataGet(ctx, user.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
settings := mergeSettings(s.settings, setting)
|
||||
|
||||
ticketTypeList, err := s.database.TicketTypeList(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
settings.TicketTypes = ticketTypeList
|
||||
|
||||
return settings, nil
|
||||
}
|
||||
|
||||
func mergeSettings(globalSettings *model.Settings, user *model.UserDataResponse) *model.Settings {
|
||||
if user.Timeformat != nil {
|
||||
globalSettings.Timeformat = *user.Timeformat
|
||||
}
|
||||
roles := role.Strings(role.List())
|
||||
sort.Strings(roles)
|
||||
globalSettings.Roles = roles
|
||||
|
||||
return globalSettings
|
||||
}
|
||||
Reference in New Issue
Block a user