mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-02-25 23:19:13 -06:00
@@ -15,7 +15,8 @@ import (
|
||||
settingssvc "github.com/owncloud/ocis/protogen/gen/ocis/services/settings/v0"
|
||||
"github.com/owncloud/ocis/settings/pkg/config"
|
||||
"github.com/owncloud/ocis/settings/pkg/settings"
|
||||
store "github.com/owncloud/ocis/settings/pkg/store/metadata"
|
||||
filestore "github.com/owncloud/ocis/settings/pkg/store/filesystem"
|
||||
metastore "github.com/owncloud/ocis/settings/pkg/store/metadata"
|
||||
merrors "go-micro.dev/v4/errors"
|
||||
"go-micro.dev/v4/metadata"
|
||||
"google.golang.org/protobuf/types/known/emptypb"
|
||||
@@ -36,7 +37,17 @@ func NewService(cfg *config.Config, logger log.Logger) Service {
|
||||
config: cfg,
|
||||
logger: logger,
|
||||
}
|
||||
service.manager = store.New(cfg, service.RegisterDefaultRoles)
|
||||
|
||||
switch cfg.StoreType {
|
||||
default:
|
||||
fallthrough
|
||||
case "metadata":
|
||||
service.manager = metastore.New(cfg)
|
||||
case "filesystem":
|
||||
service.manager = filestore.New(cfg)
|
||||
// TODO: if we want to further support filesystem store it should use default permissions from store/defaults.go instead using this duplicate
|
||||
service.RegisterDefaultRoles()
|
||||
}
|
||||
return service
|
||||
}
|
||||
|
||||
@@ -86,20 +97,18 @@ func (g Service) CheckPermission(ctx context.Context, req *permissions.CheckPerm
|
||||
}
|
||||
|
||||
// RegisterDefaultRoles composes default roles and saves them. Skipped if the roles already exist.
|
||||
// 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) {
|
||||
func (g Service) RegisterDefaultRoles() {
|
||||
// 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, _ := m.ReadBundle(role.Id)
|
||||
bundle, _ := g.manager.ReadBundle(role.Id)
|
||||
if bundle != nil {
|
||||
g.logger.Debug().Str("bundleID", bundleID).Msg("bundle already exists. skipping.")
|
||||
continue
|
||||
}
|
||||
// create the role
|
||||
_, err := m.WriteBundle(role)
|
||||
_, err := g.manager.WriteBundle(role)
|
||||
if err != nil {
|
||||
g.logger.Error().Err(err).Str("bundleID", bundleID).Msg("failed to register bundle")
|
||||
}
|
||||
@@ -107,7 +116,7 @@ func (g Service) RegisterDefaultRoles(m settings.Manager) {
|
||||
}
|
||||
|
||||
for _, req := range generatePermissionRequests() {
|
||||
_, err := m.AddSettingToBundle(req.GetBundleId(), req.GetSetting())
|
||||
_, err := g.manager.AddSettingToBundle(req.GetBundleId(), req.GetSetting())
|
||||
if err != nil {
|
||||
g.logger.Error().
|
||||
Err(err).
|
||||
@@ -118,7 +127,7 @@ func (g Service) RegisterDefaultRoles(m settings.Manager) {
|
||||
}
|
||||
|
||||
for _, req := range defaultRoleAssignments() {
|
||||
if _, err := m.WriteRoleAssignment(req.AccountUuid, req.RoleId); err != nil {
|
||||
if _, err := g.manager.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, func(Manager)) Manager
|
||||
type RegisterFunc func(*config.Config) 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, initStore func(settings.Manager)) settings.Manager {
|
||||
func New(cfg *config.Config) settings.Manager {
|
||||
s := Store{
|
||||
//Logger: olog.NewLogger(
|
||||
// olog.Color(cfg.Log.Color),
|
||||
@@ -42,7 +42,6 @@ func New(cfg *config.Config, initStore func(settings.Manager)) settings.Manager
|
||||
}
|
||||
|
||||
s.dataPath = cfg.DataPath
|
||||
initStore(&s)
|
||||
return &s
|
||||
}
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ func (c *CachedMDC) SimpleDownload(ctx context.Context, id string) ([]byte, erro
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c.files.Set(id, b)
|
||||
_ = c.files.Set(id, b)
|
||||
return b, nil
|
||||
}
|
||||
|
||||
@@ -54,15 +54,14 @@ func (c *CachedMDC) SimpleUpload(ctx context.Context, id string, content []byte)
|
||||
}
|
||||
|
||||
// invalidate caches
|
||||
err = c.dirs.Remove(path.Dir(id))
|
||||
err = c.files.Set(id, content)
|
||||
_ = c.dirs.Remove(path.Dir(id))
|
||||
_ = c.files.Set(id, content)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete invalidates the cache when operation was successful
|
||||
func (c *CachedMDC) Delete(ctx context.Context, id string) error {
|
||||
err := c.next.Delete(ctx, id)
|
||||
if err != nil {
|
||||
if err := c.next.Delete(ctx, id); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -43,10 +43,8 @@ type Store struct {
|
||||
|
||||
mdc MetadataClient
|
||||
cfg *config.Config
|
||||
//initStore func(settings.Manager)
|
||||
|
||||
init *sync.Once
|
||||
l *sync.Mutex
|
||||
l *sync.Mutex
|
||||
}
|
||||
|
||||
// Init initialize the store once, later calls are noops
|
||||
@@ -62,26 +60,23 @@ func (s *Store) Init() {
|
||||
return
|
||||
}
|
||||
|
||||
//s.init.Do(func() {
|
||||
mdc := &CachedMDC{next: NewMetadataClient(s.cfg.Metadata)}
|
||||
if err := s.initMetadataClient(mdc); err != nil {
|
||||
s.Logger.Error().Err(err).Msg("error initializing metadata client")
|
||||
}
|
||||
//})
|
||||
}
|
||||
|
||||
// New creates a new store
|
||||
func New(cfg *config.Config, initstore func(settings.Manager)) settings.Manager {
|
||||
func New(cfg *config.Config) 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),
|
||||
//),
|
||||
cfg: cfg,
|
||||
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),
|
||||
),
|
||||
cfg: cfg,
|
||||
l: &sync.Mutex{},
|
||||
}
|
||||
|
||||
return &s
|
||||
|
||||
Reference in New Issue
Block a user