mirror of https://github.com/ory/hydra
112 lines
2.8 KiB
Go
112 lines
2.8 KiB
Go
// Copyright © 2022 Ory Corp
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package oauth2
|
|
|
|
import (
|
|
"html/template"
|
|
"net/http"
|
|
|
|
"github.com/ory/hydra/v2/driver/config"
|
|
|
|
"github.com/julienschmidt/httprouter"
|
|
)
|
|
|
|
func (h *Handler) fallbackHandler(title, heading string, sc int, configKey string) httprouter.Handle {
|
|
if title == "" {
|
|
title = "The request could not be executed because a mandatory configuration key is missing or malformed"
|
|
}
|
|
|
|
if heading == "" {
|
|
heading = "The request could not be executed because a mandatory configuration key is missing or malformed"
|
|
}
|
|
|
|
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
|
|
h.r.Logger().Errorf(`A request failed because configuration key "%s" is missing or malformed.`, configKey)
|
|
|
|
t, err := template.New(configKey).Parse(`<html>
|
|
<head>
|
|
<title>{{ .Title }}</title>
|
|
</head>
|
|
<body>
|
|
<h1>
|
|
{{ .Heading }}
|
|
</h1>
|
|
<p>
|
|
You are seeing this page because configuration key <code>{{ .Key }}</code> is not set.
|
|
</p>
|
|
<p>
|
|
If you are an administrator, please read <a href="https://www.ory.sh/docs">the guide</a> to understand what you
|
|
need to do. If you are a user, please contact the administrator.
|
|
</p>
|
|
</body>
|
|
</html>`)
|
|
if err != nil {
|
|
h.r.Writer().WriteError(w, r, err)
|
|
return
|
|
}
|
|
|
|
w.WriteHeader(sc)
|
|
if err := t.Execute(w, struct {
|
|
Title string
|
|
Heading string
|
|
Key string
|
|
}{Title: title, Heading: heading, Key: configKey}); err != nil {
|
|
h.r.Writer().WriteError(w, r, err)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func (h *Handler) DefaultErrorHandler(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
|
|
h.r.Logger().WithRequest(r).Error("A client requested the default error URL, environment variable URLS_ERROR is probably not set.")
|
|
|
|
t, err := template.New("consent").Parse(`
|
|
<html>
|
|
<head>
|
|
<title>An OAuth 2.0 Error Occurred</title>
|
|
</head>
|
|
<body>
|
|
<h1>
|
|
The OAuth2 request resulted in an error.
|
|
</h1>
|
|
<ul>
|
|
<li>Error: {{ .Name }}</li>
|
|
<li>Description: {{ .Description }}</li>
|
|
<li>Hint: {{ .Hint }}</li>
|
|
<li>Debug: {{ .Debug }}</li>
|
|
</ul>
|
|
<p>
|
|
You are seeing this page because configuration key <code>{{ .Key }}</code> is not set.
|
|
</p>
|
|
<p>
|
|
If you are an administrator, please read <a href="https://www.ory.sh/docs">the guide</a> to understand what you
|
|
need to do. If you are a user, please contact the administrator.
|
|
</p>
|
|
</body>
|
|
</html>
|
|
`)
|
|
if err != nil {
|
|
h.r.Writer().WriteError(w, r, err)
|
|
return
|
|
}
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
if err := t.Execute(w, struct {
|
|
Name string
|
|
Description string
|
|
Hint string
|
|
Debug string
|
|
Key string
|
|
}{
|
|
Name: r.URL.Query().Get("error"),
|
|
Description: r.URL.Query().Get("error_description"),
|
|
Hint: r.URL.Query().Get("error_hint"),
|
|
Debug: r.URL.Query().Get("error_debug"),
|
|
Key: config.KeyErrorURL,
|
|
}); err != nil {
|
|
h.r.Writer().WriteError(w, r, err)
|
|
return
|
|
}
|
|
}
|