@@ -101,8 +101,7 @@ type OAuthProxy struct {
101 sessionChain alice.Chain
101 sessionChain alice.Chain
102 headersChain alice.Chain
102 headersChain alice.Chain
103 preAuthChain alice.Chain
103 preAuthChain alice.Chain
104− errorPage *app.ErrorPage
104+ pageWriter app.PageWriter
105− signInPage *app.SignInPage
108// NewOAuthProxy creates a new instance of OAuthProxy from the options provided
107// NewOAuthProxy creates a new instance of OAuthProxy from the options provided
@@ -112,20 +111,31 @@ func NewOAuthProxy(opts *options.Options, validator func(string) bool) (*OAuthPr
112 return nil, fmt.Errorf("error initialising session store: %v", err)
111 return nil, fmt.Errorf("error initialising session store: %v", err)
115− templates, err := app.LoadTemplates(opts.Templates.Path)
114+ var basicAuthValidator basic.Validator
115+ if opts.HtpasswdFile != "" {
116+ logger.Printf("using htpasswd file: %s", opts.HtpasswdFile)
118+ basicAuthValidator, err = basic.NewHTPasswdValidator(opts.HtpasswdFile)
116− if err != nil {
119+ if err != nil {
117− return nil, fmt.Errorf("error loading templates: %v", err)
120+ return nil, fmt.Errorf("could not load htpasswdfile: %v", err)
120− errorPage := &app.ErrorPage{
124+ pageWriter, err := app.NewPageWriter(app.PageWriterOpts{
121− Template: templates.Lookup("error.html"),
125+ TemplatesPath: opts.Templates.Path,
122− ProxyPrefix: opts.ProxyPrefix,
126+ ProxyPrefix: opts.ProxyPrefix,
123− Footer: opts.Templates.Footer,
127+ Footer: opts.Templates.Footer,
124− Version: VERSION,
128+ Version: VERSION,
125− Debug: opts.Templates.Debug,
129+ Debug: opts.Templates.Debug,
130+ ProviderName: buildProviderName(opts.GetProvider(), opts.ProviderName),
131+ SignInMessage: buildSignInMessage(opts),
132+ DisplayLoginForm: basicAuthValidator != nil && opts.Templates.DisplayLoginForm,
135+ return nil, fmt.Errorf("error initialising page writer: %v", err)
128− upstreamProxy, err := upstream.NewProxy(opts.UpstreamServers, opts.GetSignatureData(), errorPage.ProxyErrorHandler)
138+ upstreamProxy, err := upstream.NewProxy(opts.UpstreamServers, opts.GetSignatureData(), pageWriter.ProxyErrorHandler)
129 if err != nil {
139 if err != nil {
130 return nil, fmt.Errorf("error initialising upstream proxy: %v", err)
140 return nil, fmt.Errorf("error initialising upstream proxy: %v", err)
@@ -158,27 +168,6 @@ func NewOAuthProxy(opts *options.Options, validator func(string) bool) (*OAuthPr
161− var basicAuthValidator basic.Validator
162− if opts.HtpasswdFile != "" {
163− logger.Printf("using htpasswd file: %s", opts.HtpasswdFile)
165− basicAuthValidator, err = basic.NewHTPasswdValidator(opts.HtpasswdFile)
167− return nil, fmt.Errorf("could not load htpasswdfile: %v", err)
171− signInPage := &app.SignInPage{
172− Template: templates.Lookup("sign_in.html"),
173− ErrorPage: errorPage,
174− ProxyPrefix: opts.ProxyPrefix,
175− ProviderName: buildProviderName(opts.GetProvider(), opts.ProviderName),
176− SignInMessage: buildSignInMessage(opts),
177− Footer: opts.Templates.Footer,
179− DisplayLoginForm: basicAuthValidator != nil && opts.Templates.DisplayLoginForm,
182 allowedRoutes, err := buildRoutesAllowlist(opts)
171 allowedRoutes, err := buildRoutesAllowlist(opts)
183 if err != nil {
172 if err != nil {
184 return nil, err
173 return nil, err
@@ -232,8 +221,7 @@ func NewOAuthProxy(opts *options.Options, validator func(string) bool) (*OAuthPr
232 sessionChain: sessionChain,
221 sessionChain: sessionChain,
233 headersChain: headersChain,
222 headersChain: headersChain,
234 preAuthChain: preAuthChain,
223 preAuthChain: preAuthChain,
235− errorPage: errorPage,
224+ pageWriter: pageWriter,
236− signInPage: signInPage,
@@ -540,7 +528,7 @@ func (p *OAuthProxy) ErrorPage(rw http.ResponseWriter, req *http.Request, code i
540 redirectURL = "/"
528 redirectURL = "/"
543− p.errorPage.Render(rw, code, redirectURL, appError, messages...)
531+ p.pageWriter.WriteErrorPage(rw, code, redirectURL, appError, messages...)
546// IsAllowedRequest is used to check if auth should be skipped for this request
534// IsAllowedRequest is used to check if auth should be skipped for this request
@@ -601,7 +589,7 @@ func (p *OAuthProxy) SignInPage(rw http.ResponseWriter, req *http.Request, code
601 redirectURL = "/"
589 redirectURL = "/"
604− p.signInPage.Render(rw, redirectURL)
592+ p.pageWriter.WriteSignInPage(rw, redirectURL)
607// ManualSignIn handles basic auth logins to the proxy
595// ManualSignIn handles basic auth logins to the proxy