// Copyright 2014-2018 Grafana Labs
// Released under the Apache 2.0 license

// Modification notice:
// 1. All field names were changed from toml and snake case to yaml and kebab case,
//    matching the Oragono project conventions
// 2. Four fields were added:
//    2.1 `Enabled`
//    2.2 `Autocreate`
//    2.3 `Timeout`
//    2.4 `RequireGroups`

// XXX: none of AttributeMap does anything in oragono, except MemberOf,
// which can be used to retrieve group memberships

package ldap

import (
	"time"
)

type ServerConfig struct {
	Enabled    bool
	Autocreate bool

	Host          string
	Port          int
	Timeout       time.Duration
	UseSSL        bool   `yaml:"use-ssl"`
	StartTLS      bool   `yaml:"start-tls"`
	SkipVerifySSL bool   `yaml:"ssl-skip-verify"`
	RootCACert    string `yaml:"root-ca-cert"`
	ClientCert    string `yaml:"client-cert"`
	ClientKey     string `yaml:"client-key"`

	BindDN        string   `yaml:"bind-dn"`
	BindPassword  string   `yaml:"bind-password"`
	SearchFilter  string   `yaml:"search-filter"`
	SearchBaseDNs []string `yaml:"search-base-dns"`

	// user validation: require them to be in any one of these groups
	RequireGroups []string `yaml:"require-groups"`

	// two ways of testing group membership:
	// either by searching for groups that match the user's DN
	// and testing their names:
	GroupSearchFilter              string   `yaml:"group-search-filter"`
	GroupSearchFilterUserAttribute string   `yaml:"group-search-filter-user-attribute"`
	GroupSearchBaseDNs             []string `yaml:"group-search-base-dns"`

	// or by an attribute on the user's DN, typically named 'memberOf', but customizable:
	Attr AttributeMap `yaml:"attributes"`
}

// AttributeMap is a struct representation for LDAP "attributes" setting
type AttributeMap struct {
	Username string
	Name     string
	Surname  string
	Email    string
	MemberOf string `yaml:"member-of"`
}