forked from mystiq/dex
Merge pull request #1504 from MarcDufresne/template-custom-data
Allow arbitrary data to be passed to templates
This commit is contained in:
commit
89e43c198b
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
|
||||
|
||||
import (
|
||||
"github.com/dexidp/dex/server"
|
||||
"testing"
|
||||
|
||||
"github.com/ghodss/yaml"
|
||||
|
@ -69,6 +70,12 @@ storage:
|
|||
connectionTimeout: 3
|
||||
web:
|
||||
http: 127.0.0.1:5556
|
||||
|
||||
frontend:
|
||||
dir: ./web
|
||||
extra:
|
||||
foo: bar
|
||||
|
||||
staticClients:
|
||||
- id: example-app
|
||||
redirectURIs:
|
||||
|
@ -130,6 +137,12 @@ logger:
|
|||
Web: Web{
|
||||
HTTP: "127.0.0.1:5556",
|
||||
},
|
||||
Frontend: server.WebConfig{
|
||||
Dir: "./web",
|
||||
Extra: map[string]string{
|
||||
"foo": "bar",
|
||||
},
|
||||
},
|
||||
StaticClients: []storage.Client{
|
||||
{
|
||||
ID: "example-app",
|
||||
|
|
|
@ -107,6 +107,9 @@ type WebConfig struct {
|
|||
|
||||
// Defaults to "coreos"
|
||||
Theme string
|
||||
|
||||
// Map of extra values passed into the templates
|
||||
Extra map[string]string
|
||||
}
|
||||
|
||||
func value(val, defaultValue time.Duration) time.Duration {
|
||||
|
@ -181,6 +184,7 @@ func newServer(ctx context.Context, c Config, rotationStrategy rotationStrategy)
|
|||
issuerURL: c.Issuer,
|
||||
issuer: c.Web.Issuer,
|
||||
theme: c.Web.Theme,
|
||||
extra: c.Web.Extra,
|
||||
}
|
||||
|
||||
static, theme, tmpls, err := loadWebConfig(web)
|
||||
|
|
|
@ -42,6 +42,7 @@ type webConfig struct {
|
|||
issuer string
|
||||
theme string
|
||||
issuerURL string
|
||||
extra map[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 },
|
||||
"url": func(s string) string { return join(c.issuerURL, s) },
|
||||
"lower": strings.ToLower,
|
||||
"extra": func(k string) string { return c.extra[k] },
|
||||
}
|
||||
|
||||
tmpls, err := template.New("").Funcs(funcs).ParseFiles(filenames...)
|
||||
|
|
Loading…
Reference in a new issue