2021-11-05 09:37:30 +00:00
|
|
|
package ldap
|
|
|
|
|
|
|
|
import (
|
|
|
|
"crypto/tls"
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
"github.com/go-openapi/strfmt"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
"goauthentik.io/api"
|
|
|
|
"goauthentik.io/internal/outpost/ldap/bind"
|
|
|
|
"goauthentik.io/internal/outpost/ldap/flags"
|
|
|
|
"goauthentik.io/internal/outpost/ldap/search"
|
|
|
|
)
|
|
|
|
|
|
|
|
type ProviderInstance struct {
|
|
|
|
BaseDN string
|
|
|
|
UserDN string
|
|
|
|
VirtualGroupDN string
|
|
|
|
GroupDN string
|
|
|
|
|
|
|
|
searcher search.Searcher
|
|
|
|
binder bind.Binder
|
|
|
|
|
|
|
|
appSlug string
|
|
|
|
flowSlug string
|
|
|
|
s *LDAPServer
|
|
|
|
log *log.Entry
|
|
|
|
|
|
|
|
tlsServerName *string
|
|
|
|
cert *tls.Certificate
|
|
|
|
outpostName string
|
2021-11-12 23:26:01 +00:00
|
|
|
outpostPk int32
|
2021-11-05 09:37:30 +00:00
|
|
|
searchAllowedGroups []*strfmt.UUID
|
|
|
|
boundUsersMutex sync.RWMutex
|
|
|
|
boundUsers map[string]flags.UserFlags
|
|
|
|
|
|
|
|
uidStartNumber int32
|
|
|
|
gidStartNumber int32
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pi *ProviderInstance) GetAPIClient() *api.APIClient {
|
|
|
|
return pi.s.ac.Client
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pi *ProviderInstance) GetBaseDN() string {
|
|
|
|
return pi.BaseDN
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pi *ProviderInstance) GetBaseGroupDN() string {
|
|
|
|
return pi.GroupDN
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pi *ProviderInstance) GetBaseUserDN() string {
|
|
|
|
return pi.UserDN
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pi *ProviderInstance) GetOutpostName() string {
|
|
|
|
return pi.outpostName
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pi *ProviderInstance) GetFlags(dn string) (flags.UserFlags, bool) {
|
|
|
|
pi.boundUsersMutex.RLock()
|
|
|
|
flags, ok := pi.boundUsers[dn]
|
|
|
|
pi.boundUsersMutex.RUnlock()
|
|
|
|
return flags, ok
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pi *ProviderInstance) SetFlags(dn string, flag flags.UserFlags) {
|
|
|
|
pi.boundUsersMutex.Lock()
|
|
|
|
pi.boundUsers[dn] = flag
|
|
|
|
pi.boundUsersMutex.Unlock()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pi *ProviderInstance) GetAppSlug() string {
|
|
|
|
return pi.appSlug
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pi *ProviderInstance) GetFlowSlug() string {
|
|
|
|
return pi.flowSlug
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pi *ProviderInstance) GetSearchAllowedGroups() []*strfmt.UUID {
|
|
|
|
return pi.searchAllowedGroups
|
|
|
|
}
|