mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2025-05-21 22:33:38 +02:00
86 lines
2.5 KiB
Go
86 lines
2.5 KiB
Go
|
package app
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
)
|
||
|
|
||
|
// PageWriter is an interface for rendering html templates for both sign-in and
|
||
|
// error pages.
|
||
|
// It can also be used to write errors for the http.ReverseProxy used in the
|
||
|
// upstream package.
|
||
|
type PageWriter interface {
|
||
|
WriteSignInPage(rw http.ResponseWriter, redirectURL string)
|
||
|
WriteErrorPage(rw http.ResponseWriter, status int, redirectURL string, appError string, messages ...interface{})
|
||
|
ProxyErrorHandler(rw http.ResponseWriter, req *http.Request, proxyErr error)
|
||
|
}
|
||
|
|
||
|
// pageWriter implements the PageWriter interface
|
||
|
type pageWriter struct {
|
||
|
*errorPageWriter
|
||
|
*signInPageWriter
|
||
|
}
|
||
|
|
||
|
// PageWriterOpts contains all options required to configure the template
|
||
|
// rendering within OAuth2 Proxy.
|
||
|
type PageWriterOpts struct {
|
||
|
// TemplatesPath is the path from which to load custom templates for the sign-in and error pages.
|
||
|
TemplatesPath string
|
||
|
|
||
|
// ProxyPrefix is the prefix under which OAuth2 Proxy pages are served.
|
||
|
ProxyPrefix string
|
||
|
|
||
|
// Footer is the footer to be displayed at the bottom of the page.
|
||
|
// If not set, a default footer will be used.
|
||
|
Footer string
|
||
|
|
||
|
// Version is the OAuth2 Proxy version to be used in the default footer.
|
||
|
Version string
|
||
|
|
||
|
// Debug determines whether errors pages should be rendered with detailed
|
||
|
// errors.
|
||
|
Debug bool
|
||
|
|
||
|
// DisplayLoginForm determines whether or not the basic auth password form is displayed on the sign-in page.
|
||
|
DisplayLoginForm bool
|
||
|
|
||
|
// ProviderName is the name of the provider that should be displayed on the login button.
|
||
|
ProviderName string
|
||
|
|
||
|
// SignInMessage is the messge displayed above the login button.
|
||
|
SignInMessage string
|
||
|
}
|
||
|
|
||
|
// NewPageWriter constructs a PageWriter from the options given to allow
|
||
|
// rendering of sign-in and error pages.
|
||
|
func NewPageWriter(opts PageWriterOpts) (PageWriter, error) {
|
||
|
templates, err := loadTemplates(opts.TemplatesPath)
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("error loading templates: %v", err)
|
||
|
}
|
||
|
|
||
|
errorPage := &errorPageWriter{
|
||
|
template: templates.Lookup("error.html"),
|
||
|
proxyPrefix: opts.ProxyPrefix,
|
||
|
footer: opts.Footer,
|
||
|
version: opts.Version,
|
||
|
debug: opts.Debug,
|
||
|
}
|
||
|
|
||
|
signInPage := &signInPageWriter{
|
||
|
template: templates.Lookup("sign_in.html"),
|
||
|
errorPageWriter: errorPage,
|
||
|
proxyPrefix: opts.ProxyPrefix,
|
||
|
providerName: opts.ProviderName,
|
||
|
signInMessage: opts.SignInMessage,
|
||
|
footer: opts.Footer,
|
||
|
version: opts.Version,
|
||
|
displayLoginForm: opts.DisplayLoginForm,
|
||
|
}
|
||
|
|
||
|
return &pageWriter{
|
||
|
errorPageWriter: errorPage,
|
||
|
signInPageWriter: signInPage,
|
||
|
}, nil
|
||
|
}
|