3
0
corteza/compose/importer/default.go
2020-01-18 07:05:34 +01:00

79 lines
1.9 KiB
Go

package importer
import (
"context"
"io"
"gopkg.in/yaml.v2"
"github.com/cortezaproject/corteza-server/compose/service"
"github.com/cortezaproject/corteza-server/compose/types"
"github.com/cortezaproject/corteza-server/pkg/permissions"
"github.com/cortezaproject/corteza-server/pkg/settings"
sysTypes "github.com/cortezaproject/corteza-server/system/types"
)
// Import performs standard import procedure with default services
func Import(ctx context.Context, ns *types.Namespace, ff ...io.Reader) (err error) {
var (
aux interface{}
imp = NewImporter(
service.DefaultNamespace.With(ctx),
service.DefaultModule.With(ctx),
service.DefaultChart.With(ctx),
service.DefaultPage.With(ctx),
permissions.NewImporter(service.DefaultAccessControl.Whitelist()),
settings.NewImporter(),
)
// At the moment, we can not load roles from system service
// so we'll just use static set of known roles
//
// Roles are use for resolving access control
roles = sysTypes.RoleSet{
&sysTypes.Role{ID: permissions.EveryoneRoleID, Handle: "everyone"},
&sysTypes.Role{ID: permissions.AdminsRoleID, Handle: "admins"},
}
)
for _, f := range ff {
if err = yaml.NewDecoder(f).Decode(&aux); err != nil {
return
}
if ns != nil {
if mp, ok := aux.(map[interface{}]interface{}); ok && mp["namespaces"] != nil {
err = imp.GetNamespaceImporter().Cast(ns.Slug, mp["namespaces"])
} else {
err = imp.GetNamespaceImporter().Cast(ns.Slug, aux)
}
} else {
err = imp.Cast(aux)
}
if err != nil {
return
}
}
// Get roles across the system
// roles, err := service.DefaultSystemRole.Find(ctx)
// if err != nil {
// return
// }
// Store all imported
return imp.Store(
ctx,
service.DefaultNamespace.With(ctx),
service.DefaultModule.With(ctx),
service.DefaultChart.With(ctx),
service.DefaultPage.With(ctx),
service.DefaultRecord.With(ctx),
service.DefaultAccessControl,
service.DefaultSettings,
roles,
)
}