Unify LDAP config settings accross services
This adapts the storage service to the recent changes of the LDAP settings in reva. Also we define a new set of LDAP env variables that can be shared between all LDAP related ocis services (graph, idp, storage-auth-basic, storage-userprovider, storage-groupprovider, idm). This should simplify the most LDAP based configurations considerably.
This commit is contained in:
@@ -50,6 +50,13 @@ func AuthBasic(cfg *config.Config) *cli.Command {
|
||||
Interface("reva-config", rcfg).
|
||||
Msg("config")
|
||||
|
||||
if cfg.Reva.AuthProvider.Driver == "ldap" {
|
||||
if err := waitForLDAPCA(logger, &cfg.Reva.LDAP); err != nil {
|
||||
logger.Error().Err(err).Msg("The configured LDAP CA cert does not exist")
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
gr.Add(func() error {
|
||||
runtime.RunWithOptions(rcfg, pidFile, runtime.WithLogger(&logger.Logger))
|
||||
return nil
|
||||
@@ -113,25 +120,7 @@ func authBasicConfigFromStruct(c *cli.Context, cfg *config.Config) map[string]in
|
||||
"json": map[string]interface{}{
|
||||
"users": cfg.Reva.AuthProvider.JSON,
|
||||
},
|
||||
"ldap": map[string]interface{}{
|
||||
"hostname": cfg.Reva.LDAP.Hostname,
|
||||
"port": cfg.Reva.LDAP.Port,
|
||||
"cacert": cfg.Reva.LDAP.CACert,
|
||||
"insecure": cfg.Reva.LDAP.Insecure,
|
||||
"base_dn": cfg.Reva.LDAP.BaseDN,
|
||||
"loginfilter": cfg.Reva.LDAP.LoginFilter,
|
||||
"bind_username": cfg.Reva.LDAP.BindDN,
|
||||
"bind_password": cfg.Reva.LDAP.BindPassword,
|
||||
"idp": cfg.Reva.LDAP.IDP,
|
||||
"gatewaysvc": cfg.Reva.Gateway.Endpoint,
|
||||
"schema": map[string]interface{}{
|
||||
"dn": "dn",
|
||||
"uid": cfg.Reva.LDAP.UserSchema.UID,
|
||||
"mail": cfg.Reva.LDAP.UserSchema.Mail,
|
||||
"displayName": cfg.Reva.LDAP.UserSchema.DisplayName,
|
||||
"cn": cfg.Reva.LDAP.UserSchema.CN,
|
||||
},
|
||||
},
|
||||
"ldap": ldapConfigFromString(cfg),
|
||||
"owncloudsql": map[string]interface{}{
|
||||
"dbusername": cfg.Reva.UserOwnCloudSQL.DBUsername,
|
||||
"dbpassword": cfg.Reva.UserOwnCloudSQL.DBPassword,
|
||||
|
||||
@@ -46,6 +46,13 @@ func Groups(cfg *config.Config) *cli.Command {
|
||||
|
||||
rcfg := groupsConfigFromStruct(c, cfg)
|
||||
|
||||
if cfg.Reva.Groups.Driver == "ldap" {
|
||||
if err := waitForLDAPCA(logger, &cfg.Reva.LDAP); err != nil {
|
||||
logger.Error().Err(err).Msg("The configured LDAP CA cert does not exist")
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
gr.Add(func() error {
|
||||
runtime.RunWithOptions(
|
||||
rcfg,
|
||||
@@ -113,28 +120,7 @@ func groupsConfigFromStruct(c *cli.Context, cfg *config.Config) map[string]inter
|
||||
"json": map[string]interface{}{
|
||||
"groups": cfg.Reva.Groups.JSON,
|
||||
},
|
||||
"ldap": map[string]interface{}{
|
||||
"hostname": cfg.Reva.LDAP.Hostname,
|
||||
"port": cfg.Reva.LDAP.Port,
|
||||
"cacert": cfg.Reva.LDAP.CACert,
|
||||
"insecure": cfg.Reva.LDAP.Insecure,
|
||||
"base_dn": cfg.Reva.LDAP.BaseDN,
|
||||
"groupfilter": cfg.Reva.LDAP.GroupFilter,
|
||||
"attributefilter": cfg.Reva.LDAP.GroupAttributeFilter,
|
||||
"findfilter": cfg.Reva.LDAP.GroupFindFilter,
|
||||
"memberfilter": cfg.Reva.LDAP.GroupMemberFilter,
|
||||
"bind_username": cfg.Reva.LDAP.BindDN,
|
||||
"bind_password": cfg.Reva.LDAP.BindPassword,
|
||||
"idp": cfg.Reva.LDAP.IDP,
|
||||
"schema": map[string]interface{}{
|
||||
"dn": "dn",
|
||||
"gid": cfg.Reva.LDAP.GroupSchema.GID,
|
||||
"mail": cfg.Reva.LDAP.GroupSchema.Mail,
|
||||
"displayName": cfg.Reva.LDAP.GroupSchema.DisplayName,
|
||||
"cn": cfg.Reva.LDAP.GroupSchema.CN,
|
||||
"gidNumber": cfg.Reva.LDAP.GroupSchema.GIDNumber,
|
||||
},
|
||||
},
|
||||
"ldap": ldapConfigFromString(cfg),
|
||||
"rest": map[string]interface{}{
|
||||
"client_id": cfg.Reva.UserGroupRest.ClientID,
|
||||
"client_secret": cfg.Reva.UserGroupRest.ClientSecret,
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/owncloud/ocis/ocis-pkg/log"
|
||||
"github.com/owncloud/ocis/storage/pkg/config"
|
||||
)
|
||||
|
||||
const caTimeout = 5
|
||||
|
||||
func ldapConfigFromString(cfg *config.Config) map[string]interface{} {
|
||||
return map[string]interface{}{
|
||||
"uri": cfg.Reva.LDAP.URI,
|
||||
"cacert": cfg.Reva.LDAP.CACert,
|
||||
"insecure": cfg.Reva.LDAP.Insecure,
|
||||
"bind_username": cfg.Reva.LDAP.BindDN,
|
||||
"bind_password": cfg.Reva.LDAP.BindPassword,
|
||||
"user_base_dn": cfg.Reva.LDAP.UserBaseDN,
|
||||
"group_base_dn": cfg.Reva.LDAP.GroupBaseDN,
|
||||
"user_filter": cfg.Reva.LDAP.UserFilter,
|
||||
"group_filter": cfg.Reva.LDAP.GroupFilter,
|
||||
"user_objectclass": cfg.Reva.LDAP.UserObjectClass,
|
||||
"group_objectclass": cfg.Reva.LDAP.GroupObjectClass,
|
||||
"login_attributes": cfg.Reva.LDAP.LoginAttributes,
|
||||
"idp": cfg.Reva.LDAP.IDP,
|
||||
"gatewaysvc": cfg.Reva.Gateway.Endpoint,
|
||||
"user_schema": map[string]interface{}{
|
||||
"id": cfg.Reva.LDAP.UserSchema.ID,
|
||||
"idIsOctetString": cfg.Reva.LDAP.UserSchema.IDIsOctetString,
|
||||
"mail": cfg.Reva.LDAP.UserSchema.Mail,
|
||||
"displayName": cfg.Reva.LDAP.UserSchema.DisplayName,
|
||||
"userName": cfg.Reva.LDAP.UserSchema.Username,
|
||||
},
|
||||
"group_schema": map[string]interface{}{
|
||||
"id": cfg.Reva.LDAP.GroupSchema.ID,
|
||||
"idIsOctetString": cfg.Reva.LDAP.GroupSchema.IDIsOctetString,
|
||||
"mail": cfg.Reva.LDAP.GroupSchema.Mail,
|
||||
"displayName": cfg.Reva.LDAP.GroupSchema.DisplayName,
|
||||
"groupName": cfg.Reva.LDAP.GroupSchema.Groupname,
|
||||
"member": cfg.Reva.LDAP.GroupSchema.Member,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func waitForLDAPCA(log log.Logger, cfg *config.LDAP) error {
|
||||
if !cfg.Insecure && cfg.CACert != "" {
|
||||
if _, err := os.Stat(cfg.CACert); errors.Is(err, os.ErrNotExist) {
|
||||
log.Warn().Str("LDAP CACert", cfg.CACert).Msgf("File does not exist. Waiting %d seconds for it to appear.", caTimeout)
|
||||
time.Sleep(caTimeout * time.Second)
|
||||
if _, err := os.Stat(cfg.CACert); errors.Is(err, os.ErrNotExist) {
|
||||
log.Warn().Str("LDAP CACert", cfg.CACert).Msgf("File does still not exist after Timeout")
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -48,11 +48,19 @@ func Users(cfg *config.Config) *cli.Command {
|
||||
pidFile := path.Join(os.TempDir(), "revad-"+c.Command.Name+"-"+uuid.String()+".pid")
|
||||
|
||||
rcfg := usersConfigFromStruct(c, cfg)
|
||||
|
||||
logger.Debug().
|
||||
Str("server", "users").
|
||||
Interface("reva-config", rcfg).
|
||||
Msg("config")
|
||||
|
||||
if cfg.Reva.Users.Driver == "ldap" {
|
||||
if err := waitForLDAPCA(logger, &cfg.Reva.LDAP); err != nil {
|
||||
logger.Error().Err(err).Msg("The configured LDAP CA cert does not exist")
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
gr.Add(func() error {
|
||||
runtime.RunWithOptions(
|
||||
rcfg,
|
||||
@@ -120,29 +128,7 @@ func usersConfigFromStruct(c *cli.Context, cfg *config.Config) map[string]interf
|
||||
"json": map[string]interface{}{
|
||||
"users": cfg.Reva.Users.JSON,
|
||||
},
|
||||
"ldap": map[string]interface{}{
|
||||
"hostname": cfg.Reva.LDAP.Hostname,
|
||||
"port": cfg.Reva.LDAP.Port,
|
||||
"cacert": cfg.Reva.LDAP.CACert,
|
||||
"insecure": cfg.Reva.LDAP.Insecure,
|
||||
"base_dn": cfg.Reva.LDAP.BaseDN,
|
||||
"userfilter": cfg.Reva.LDAP.UserFilter,
|
||||
"attributefilter": cfg.Reva.LDAP.UserAttributeFilter,
|
||||
"findfilter": cfg.Reva.LDAP.UserFindFilter,
|
||||
"groupfilter": cfg.Reva.LDAP.UserGroupFilter,
|
||||
"bind_username": cfg.Reva.LDAP.BindDN,
|
||||
"bind_password": cfg.Reva.LDAP.BindPassword,
|
||||
"idp": cfg.Reva.LDAP.IDP,
|
||||
"schema": map[string]interface{}{
|
||||
"dn": "dn",
|
||||
"uid": cfg.Reva.LDAP.UserSchema.UID,
|
||||
"mail": cfg.Reva.LDAP.UserSchema.Mail,
|
||||
"displayName": cfg.Reva.LDAP.UserSchema.DisplayName,
|
||||
"cn": cfg.Reva.LDAP.UserSchema.CN,
|
||||
"uidNumber": cfg.Reva.LDAP.UserSchema.UIDNumber,
|
||||
"gidNumber": cfg.Reva.LDAP.UserSchema.GIDNumber,
|
||||
},
|
||||
},
|
||||
"ldap": ldapConfigFromString(cfg),
|
||||
"rest": map[string]interface{}{
|
||||
"client_id": cfg.Reva.UserGroupRest.ClientID,
|
||||
"client_secret": cfg.Reva.UserGroupRest.ClientSecret,
|
||||
|
||||
Reference in New Issue
Block a user