package syncgroups
import (
"fmt"
"gopkg.in/ldap.v2"
"github.com/openshift/origin/pkg/auth/ldaputil"
"github.com/openshift/origin/pkg/cmd/admin/groups/sync/interfaces"
)
// NewUserNameMapper returns a new DefaultLDAPGroupUserNameMapper
func NewUserNameMapper(nameAttributes []string) interfaces.LDAPUserNameMapper {
return &DefaultLDAPUserNameMapper{
nameAttributes: nameAttributes,
}
}
// DefaultLDAPUserNameMapper extracts the OpenShift User name of an LDAP entry representing
// a user in a deterministic manner
type DefaultLDAPUserNameMapper struct {
nameAttributes []string
}
func (m *DefaultLDAPUserNameMapper) UserNameFor(ldapUser *ldap.Entry) (string, error) {
openShiftUserName := ldaputil.GetAttributeValue(ldapUser, m.nameAttributes)
if len(openShiftUserName) == 0 {
return "", fmt.Errorf("the user entry (%v) does not map to a OpenShift User name with the given mapping",
ldapUser)
}
return openShiftUserName, nil
}