delay creation of default roles
Signed-off-by: jkoberg <jkoberg@owncloud.com>
This commit is contained in:
@@ -32,12 +32,11 @@ type Service struct {
|
||||
// NewService returns a service implementation for Service.
|
||||
func NewService(cfg *config.Config, logger log.Logger) Service {
|
||||
service := Service{
|
||||
id: "ocis-settings",
|
||||
config: cfg,
|
||||
logger: logger,
|
||||
manager: store.New(cfg),
|
||||
id: "ocis-settings",
|
||||
config: cfg,
|
||||
logger: logger,
|
||||
}
|
||||
service.RegisterDefaultRoles()
|
||||
service.manager = store.New(cfg, service.RegisterDefaultRoles)
|
||||
return service
|
||||
}
|
||||
|
||||
@@ -87,23 +86,20 @@ func (g Service) CheckPermission(ctx context.Context, req *permissions.CheckPerm
|
||||
}
|
||||
|
||||
// RegisterDefaultRoles composes default roles and saves them. Skipped if the roles already exist.
|
||||
func (g Service) RegisterDefaultRoles() {
|
||||
// TODO: we can't register on service start any more because metadata might not be up yet
|
||||
// we need to lazy initialize
|
||||
if true {
|
||||
return
|
||||
}
|
||||
// NOTE: we can't register on service start any more because metadata might not be up yet
|
||||
// we need to lazy initialize
|
||||
func (g Service) RegisterDefaultRoles(m settings.Manager) {
|
||||
// FIXME: we're writing default roles per service start (i.e. twice at the moment, for http and grpc server). has to happen only once.
|
||||
for _, role := range generateBundlesDefaultRoles() {
|
||||
bundleID := role.Extension + "." + role.Id
|
||||
// check if the role already exists
|
||||
bundle, _ := g.manager.ReadBundle(role.Id)
|
||||
bundle, _ := m.ReadBundle(role.Id)
|
||||
if bundle != nil {
|
||||
g.logger.Debug().Str("bundleID", bundleID).Msg("bundle already exists. skipping.")
|
||||
continue
|
||||
}
|
||||
// create the role
|
||||
_, err := g.manager.WriteBundle(role)
|
||||
_, err := m.WriteBundle(role)
|
||||
if err != nil {
|
||||
g.logger.Error().Err(err).Str("bundleID", bundleID).Msg("failed to register bundle")
|
||||
}
|
||||
@@ -111,7 +107,7 @@ func (g Service) RegisterDefaultRoles() {
|
||||
}
|
||||
|
||||
for _, req := range generatePermissionRequests() {
|
||||
_, err := g.manager.AddSettingToBundle(req.GetBundleId(), req.GetSetting())
|
||||
_, err := m.AddSettingToBundle(req.GetBundleId(), req.GetSetting())
|
||||
if err != nil {
|
||||
g.logger.Error().
|
||||
Err(err).
|
||||
@@ -122,7 +118,7 @@ func (g Service) RegisterDefaultRoles() {
|
||||
}
|
||||
|
||||
for _, req := range defaultRoleAssignments() {
|
||||
if _, err := g.manager.WriteRoleAssignment(req.AccountUuid, req.RoleId); err != nil {
|
||||
if _, err := m.WriteRoleAssignment(req.AccountUuid, req.RoleId); err != nil {
|
||||
g.logger.Error().Err(err).Msg("failed to register role assignment")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ var (
|
||||
)
|
||||
|
||||
// RegisterFunc stores store constructors
|
||||
type RegisterFunc func(*config.Config) Manager
|
||||
type RegisterFunc func(*config.Config, func(Manager)) Manager
|
||||
|
||||
// Manager combines service interfaces for abstraction of storage implementations
|
||||
type Manager interface {
|
||||
|
||||
@@ -22,7 +22,7 @@ type Store struct {
|
||||
}
|
||||
|
||||
// New creates a new store
|
||||
func New(cfg *config.Config) settings.Manager {
|
||||
func New(cfg *config.Config, initStore func(settings.Manager)) settings.Manager {
|
||||
s := Store{
|
||||
//Logger: olog.NewLogger(
|
||||
// olog.Color(cfg.Log.Color),
|
||||
@@ -42,6 +42,7 @@ func New(cfg *config.Config) settings.Manager {
|
||||
}
|
||||
|
||||
s.dataPath = cfg.DataPath
|
||||
initStore(&s)
|
||||
return &s
|
||||
}
|
||||
|
||||
|
||||
@@ -37,8 +37,9 @@ type MetadataClient interface {
|
||||
type Store struct {
|
||||
Logger olog.Logger
|
||||
|
||||
mdc MetadataClient
|
||||
cfg *config.Config
|
||||
mdc MetadataClient
|
||||
cfg *config.Config
|
||||
initStore func(settings.Manager)
|
||||
|
||||
init *sync.Once
|
||||
l *sync.Mutex
|
||||
@@ -69,16 +70,17 @@ func (s Store) Init() {
|
||||
}
|
||||
|
||||
// New creates a new store
|
||||
func New(cfg *config.Config) settings.Manager {
|
||||
func New(cfg *config.Config, initstore func(settings.Manager)) settings.Manager {
|
||||
s := Store{
|
||||
//Logger: olog.NewLogger(
|
||||
//olog.Color(cfg.Log.Color),
|
||||
//olog.Pretty(cfg.Log.Pretty),
|
||||
//olog.Level(cfg.Log.Level),
|
||||
//olog.File(cfg.Log.File),
|
||||
//),
|
||||
l: &sync.Mutex{},
|
||||
init: &sync.Once{},
|
||||
Logger: olog.NewLogger(
|
||||
olog.Color(cfg.Log.Color),
|
||||
olog.Pretty(cfg.Log.Pretty),
|
||||
olog.Level(cfg.Log.Level),
|
||||
olog.File(cfg.Log.File),
|
||||
),
|
||||
initStore: initstore,
|
||||
l: &sync.Mutex{},
|
||||
init: &sync.Once{},
|
||||
}
|
||||
|
||||
return &s
|
||||
@@ -98,6 +100,7 @@ func NewMetadataClient(cfg *config.Config) MetadataClient {
|
||||
func (s Store) initMetadataClient() error {
|
||||
s.mdc = NewMetadataClient(s.cfg)
|
||||
|
||||
// TODO: this fails because of authentication issues
|
||||
err := s.mdc.Init(nil, settingsSpaceID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -114,6 +117,8 @@ func (s Store) initMetadataClient() error {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
s.initStore(s)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user