mirror of
https://github.com/0rangebananaspy/authelia.git
synced 2024-09-14 22:47:21 +07:00
df016be29e
* fix(notification): incorrect date header format The date header in the email envelopes was incorrectly formatted missing a space between the `Date:` header and the value of this header. This also refactors the notification templates system allowing people to manually override the envelope itself. * test: fix tests and linting issues * fix: misc issues * refactor: misc refactoring * docs: add example for envelope with message id * refactor: organize smtp notifier * refactor: move subject interpolation * refactor: include additional placeholders * docs: fix missing link * docs: gravity * fix: rcpt to command * refactor: remove mid * refactor: apply suggestions Co-authored-by: Amir Zarrinkafsh <nightah@me.com> * refactor: include pid Co-authored-by: Amir Zarrinkafsh <nightah@me.com>
84 lines
2.3 KiB
Go
84 lines
2.3 KiB
Go
package authentication
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"net/mail"
|
|
|
|
"github.com/go-ldap/ldap/v3"
|
|
"golang.org/x/text/encoding/unicode"
|
|
)
|
|
|
|
// LDAPClientFactory an interface of factory of LDAP clients.
|
|
type LDAPClientFactory interface {
|
|
DialURL(addr string, opts ...ldap.DialOpt) (client LDAPClient, err error)
|
|
}
|
|
|
|
// LDAPClient is a cut down version of the ldap.Client interface with just the methods we use.
|
|
//
|
|
// Methods added to this interface that have a direct correlation with one from ldap.Client should have the same signature.
|
|
type LDAPClient interface {
|
|
Close()
|
|
StartTLS(config *tls.Config) (err error)
|
|
|
|
Bind(username, password string) (err error)
|
|
UnauthenticatedBind(username string) (err error)
|
|
|
|
Modify(modifyRequest *ldap.ModifyRequest) (err error)
|
|
PasswordModify(pwdModifyRequest *ldap.PasswordModifyRequest) (pwdModifyResult *ldap.PasswordModifyResult, err error)
|
|
|
|
Search(searchRequest *ldap.SearchRequest) (searchResult *ldap.SearchResult, err error)
|
|
}
|
|
|
|
// UserDetails represent the details retrieved for a given user.
|
|
type UserDetails struct {
|
|
Username string
|
|
DisplayName string
|
|
Emails []string
|
|
Groups []string
|
|
}
|
|
|
|
// Addresses returns the Emails []string as []mail.Address formatted with DisplayName as the Name attribute.
|
|
func (d UserDetails) Addresses() (addresses []mail.Address) {
|
|
if len(d.Emails) == 0 {
|
|
return nil
|
|
}
|
|
|
|
addresses = make([]mail.Address, len(d.Emails))
|
|
|
|
for i, email := range d.Emails {
|
|
addresses[i] = mail.Address{
|
|
Name: d.DisplayName,
|
|
Address: email,
|
|
}
|
|
}
|
|
|
|
return addresses
|
|
}
|
|
|
|
type ldapUserProfile struct {
|
|
DN string
|
|
Emails []string
|
|
DisplayName string
|
|
Username string
|
|
}
|
|
|
|
// LDAPSupportedFeatures represents features which a server may support which are implemented in code.
|
|
type LDAPSupportedFeatures struct {
|
|
Extensions LDAPSupportedExtensions
|
|
ControlTypes LDAPSupportedControlTypes
|
|
}
|
|
|
|
// LDAPSupportedExtensions represents extensions which a server may support which are implemented in code.
|
|
type LDAPSupportedExtensions struct {
|
|
TLS bool
|
|
PwdModifyExOp bool
|
|
}
|
|
|
|
// LDAPSupportedControlTypes represents control types which a server may support which are implemented in code.
|
|
type LDAPSupportedControlTypes struct {
|
|
MsftPwdPolHints bool
|
|
MsftPwdPolHintsDeprecated bool
|
|
}
|
|
|
|
var utf16LittleEndian = unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM)
|