2019-04-25 04:52:08 +07:00
|
|
|
package schema
|
|
|
|
|
feat(session): add redis sentinel provider (#1768)
* feat(session): add redis sentinel provider
* refactor(session): use int for ports as per go standards
* refactor(configuration): adjust tests and validation
* refactor(configuration): add err format consts
* refactor(configuration): explicitly map redis structs
* refactor(session): merge redis/redis sentinel providers
* refactor(session): add additional checks to redis providers
* feat(session): add redis cluster provider
* fix: update config for new values
* fix: provide nil certpool to affected tests/mocks
* test: add additional tests to cover uncovered code
* docs: expand explanation of host and nodes relation for redis
* ci: add redis-sentinel to suite highavailability, add redis-sentinel quorum
* fix(session): sentinel password
* test: use redis alpine library image for redis sentinel, use expose instead of ports, use redis ip, adjust redis ip range, adjust redis config
* test: make entrypoint.sh executable, fix entrypoint.sh if/elif
* test: add redis failover tests
* test: defer docker start, adjust sleep, attempt logout before login, attempt visit before login and tune timeouts, add additional logging
* test: add sentinel integration test
* test: add secondary node failure to tests, fix password usage, bump test timeout, add sleep
* feat: use sentinel failover cluster
* fix: renamed addrs to sentineladdrs upstream
* test(session): sentinel failover
* test: add redis standard back into testing
* test: move redis standalone test to traefik2
* fix/docs: apply suggestions from code review
2021-03-10 06:03:05 +07:00
|
|
|
// RedisNode Represents a Node.
|
|
|
|
type RedisNode struct {
|
|
|
|
Host string `mapstructure:"host"`
|
|
|
|
Port int `mapstructure:"port"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// RedisHighAvailabilityConfiguration holds configuration variables for Redis Cluster/Sentinel.
|
|
|
|
type RedisHighAvailabilityConfiguration struct {
|
|
|
|
SentinelName string `mapstructure:"sentinel_name"`
|
|
|
|
SentinelPassword string `mapstructure:"sentinel_password"`
|
|
|
|
Nodes []RedisNode `mapstructure:"nodes"`
|
|
|
|
RouteByLatency bool `mapstructure:"route_by_latency"`
|
|
|
|
RouteRandomly bool `mapstructure:"route_randomly"`
|
|
|
|
}
|
|
|
|
|
2019-04-25 04:52:08 +07:00
|
|
|
// RedisSessionConfiguration represents the configuration related to redis session store.
|
|
|
|
type RedisSessionConfiguration struct {
|
feat(session): add redis sentinel provider (#1768)
* feat(session): add redis sentinel provider
* refactor(session): use int for ports as per go standards
* refactor(configuration): adjust tests and validation
* refactor(configuration): add err format consts
* refactor(configuration): explicitly map redis structs
* refactor(session): merge redis/redis sentinel providers
* refactor(session): add additional checks to redis providers
* feat(session): add redis cluster provider
* fix: update config for new values
* fix: provide nil certpool to affected tests/mocks
* test: add additional tests to cover uncovered code
* docs: expand explanation of host and nodes relation for redis
* ci: add redis-sentinel to suite highavailability, add redis-sentinel quorum
* fix(session): sentinel password
* test: use redis alpine library image for redis sentinel, use expose instead of ports, use redis ip, adjust redis ip range, adjust redis config
* test: make entrypoint.sh executable, fix entrypoint.sh if/elif
* test: add redis failover tests
* test: defer docker start, adjust sleep, attempt logout before login, attempt visit before login and tune timeouts, add additional logging
* test: add sentinel integration test
* test: add secondary node failure to tests, fix password usage, bump test timeout, add sleep
* feat: use sentinel failover cluster
* fix: renamed addrs to sentineladdrs upstream
* test(session): sentinel failover
* test: add redis standard back into testing
* test: move redis standalone test to traefik2
* fix/docs: apply suggestions from code review
2021-03-10 06:03:05 +07:00
|
|
|
Host string `mapstructure:"host"`
|
|
|
|
Port int `mapstructure:"port"`
|
|
|
|
Username string `mapstructure:"username"`
|
|
|
|
Password string `mapstructure:"password"`
|
|
|
|
DatabaseIndex int `mapstructure:"database_index"`
|
|
|
|
MaximumActiveConnections int `mapstructure:"maximum_active_connections"`
|
|
|
|
MinimumIdleConnections int `mapstructure:"minimum_idle_connections"`
|
|
|
|
TLS *TLSConfig `mapstructure:"tls"`
|
|
|
|
HighAvailability *RedisHighAvailabilityConfiguration `mapstructure:"high_availability"`
|
2019-04-25 04:52:08 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
// SessionConfiguration represents the configuration related to user sessions.
|
|
|
|
type SessionConfiguration struct {
|
2020-04-04 06:11:33 +07:00
|
|
|
Name string `mapstructure:"name"`
|
|
|
|
Secret string `mapstructure:"secret"`
|
2020-04-05 19:37:21 +07:00
|
|
|
Expiration string `mapstructure:"expiration"`
|
|
|
|
Inactivity string `mapstructure:"inactivity"`
|
2020-04-04 06:11:33 +07:00
|
|
|
RememberMeDuration string `mapstructure:"remember_me_duration"`
|
|
|
|
Domain string `mapstructure:"domain"`
|
|
|
|
Redis *RedisSessionConfiguration `mapstructure:"redis"`
|
2019-04-25 04:52:08 +07:00
|
|
|
}
|
|
|
|
|
2020-05-02 12:06:39 +07:00
|
|
|
// DefaultSessionConfiguration is the default session configuration.
|
2019-04-25 04:52:08 +07:00
|
|
|
var DefaultSessionConfiguration = SessionConfiguration{
|
2020-04-04 06:11:33 +07:00
|
|
|
Name: "authelia_session",
|
2020-04-05 19:37:21 +07:00
|
|
|
Expiration: "1h",
|
|
|
|
Inactivity: "5m",
|
2020-04-04 06:11:33 +07:00
|
|
|
RememberMeDuration: "1M",
|
2019-04-25 04:52:08 +07:00
|
|
|
}
|