63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package session
|
|
|
|
import (
|
|
"crypto/x509"
|
|
"fmt"
|
|
|
|
"github.com/fasthttp/session/v2"
|
|
|
|
"github.com/authelia/authelia/v4/internal/configuration/schema"
|
|
"github.com/authelia/authelia/v4/internal/logging"
|
|
)
|
|
|
|
// Provider contains a list of domain sessions.
|
|
type Provider struct {
|
|
sessions map[string]*Session
|
|
}
|
|
|
|
// NewProvider instantiate a session provider given a configuration.
|
|
func NewProvider(config schema.SessionConfiguration, certPool *x509.CertPool) *Provider {
|
|
log := logging.Logger()
|
|
|
|
name, p, s, err := NewSessionProvider(config, certPool)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
provider := &Provider{
|
|
sessions: map[string]*Session{},
|
|
}
|
|
|
|
var (
|
|
holder *session.Session
|
|
)
|
|
|
|
for _, dconfig := range config.Cookies {
|
|
if _, holder, err = NewProviderConfigAndSession(dconfig, name, s, p); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
provider.sessions[dconfig.Domain] = &Session{
|
|
Config: dconfig,
|
|
sessionHolder: holder,
|
|
}
|
|
}
|
|
|
|
return provider
|
|
}
|
|
|
|
// Get returns session information for specified domain.
|
|
func (p *Provider) Get(domain string) (*Session, error) {
|
|
if domain == "" {
|
|
return nil, fmt.Errorf("can not get session from an undefined domain")
|
|
}
|
|
|
|
s, found := p.sessions[domain]
|
|
|
|
if !found {
|
|
return nil, fmt.Errorf("no session found for domain '%s'", domain)
|
|
}
|
|
|
|
return s, nil
|
|
}
|