Allow arbitrary data to be passed to templates
This commit is contained in:
parent
6ae11a1cfe
commit
d458e882aa
4 changed files with 43 additions and 0 deletions
24
Documentation/templates.md
Normal file
24
Documentation/templates.md
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# Templates
|
||||||
|
|
||||||
|
## Using your own templates
|
||||||
|
|
||||||
|
Dex supports using your own templates and passing arbitrary data to them to help customize your installation.
|
||||||
|
|
||||||
|
Steps:
|
||||||
|
|
||||||
|
1. Copy contents of the `web` directory over to a new directory.
|
||||||
|
2. Customize the templates as needed, be sure to retain all the existing variables so Dex continues working correctly.
|
||||||
|
a. Use this syntax `{{ "your_key" | extra }}` to use values from `frontend.extra`.
|
||||||
|
3. Write a theme for your templates in the `themes` directory.
|
||||||
|
4. Add your custom data to the Dex configuration `frontend.extra`.
|
||||||
|
```yaml
|
||||||
|
frontend:
|
||||||
|
dir: /path/to/custom/web
|
||||||
|
extra:
|
||||||
|
tos_footer_link: "https://example.com/terms"
|
||||||
|
client_logo_url: "../theme/client-logo.png"
|
||||||
|
foo: "bar"
|
||||||
|
```
|
||||||
|
5. Set the `frontend.dir` value to your own `web` directory.
|
||||||
|
|
||||||
|
To test your templates simply run Dex with a valid configuration and go through a login flow.
|
|
@ -1,6 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/dexidp/dex/server"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
|
@ -69,6 +70,12 @@ storage:
|
||||||
connectionTimeout: 3
|
connectionTimeout: 3
|
||||||
web:
|
web:
|
||||||
http: 127.0.0.1:5556
|
http: 127.0.0.1:5556
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
dir: ./web
|
||||||
|
extra:
|
||||||
|
foo: bar
|
||||||
|
|
||||||
staticClients:
|
staticClients:
|
||||||
- id: example-app
|
- id: example-app
|
||||||
redirectURIs:
|
redirectURIs:
|
||||||
|
@ -130,6 +137,12 @@ logger:
|
||||||
Web: Web{
|
Web: Web{
|
||||||
HTTP: "127.0.0.1:5556",
|
HTTP: "127.0.0.1:5556",
|
||||||
},
|
},
|
||||||
|
Frontend: server.WebConfig{
|
||||||
|
Dir: "./web",
|
||||||
|
Extra: map[string]string{
|
||||||
|
"foo": "bar",
|
||||||
|
},
|
||||||
|
},
|
||||||
StaticClients: []storage.Client{
|
StaticClients: []storage.Client{
|
||||||
{
|
{
|
||||||
ID: "example-app",
|
ID: "example-app",
|
||||||
|
|
|
@ -107,6 +107,9 @@ type WebConfig struct {
|
||||||
|
|
||||||
// Defaults to "coreos"
|
// Defaults to "coreos"
|
||||||
Theme string
|
Theme string
|
||||||
|
|
||||||
|
// Map of extra values passed into the templates
|
||||||
|
Extra map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
func value(val, defaultValue time.Duration) time.Duration {
|
func value(val, defaultValue time.Duration) time.Duration {
|
||||||
|
@ -181,6 +184,7 @@ func newServer(ctx context.Context, c Config, rotationStrategy rotationStrategy)
|
||||||
issuerURL: c.Issuer,
|
issuerURL: c.Issuer,
|
||||||
issuer: c.Web.Issuer,
|
issuer: c.Web.Issuer,
|
||||||
theme: c.Web.Theme,
|
theme: c.Web.Theme,
|
||||||
|
extra: c.Web.Extra,
|
||||||
}
|
}
|
||||||
|
|
||||||
static, theme, tmpls, err := loadWebConfig(web)
|
static, theme, tmpls, err := loadWebConfig(web)
|
||||||
|
|
|
@ -42,6 +42,7 @@ type webConfig struct {
|
||||||
issuer string
|
issuer string
|
||||||
theme string
|
theme string
|
||||||
issuerURL string
|
issuerURL string
|
||||||
|
extra map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
func join(base, path string) string {
|
func join(base, path string) string {
|
||||||
|
@ -140,6 +141,7 @@ func loadTemplates(c webConfig, templatesDir string) (*templates, error) {
|
||||||
"logo": func() string { return c.logoURL },
|
"logo": func() string { return c.logoURL },
|
||||||
"url": func(s string) string { return join(c.issuerURL, s) },
|
"url": func(s string) string { return join(c.issuerURL, s) },
|
||||||
"lower": strings.ToLower,
|
"lower": strings.ToLower,
|
||||||
|
"extra": func(k string) string { return c.extra[k] },
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpls, err := template.New("").Funcs(funcs).ParseFiles(filenames...)
|
tmpls, err := template.New("").Funcs(funcs).ParseFiles(filenames...)
|
||||||
|
|
Reference in a new issue