snapshot of https://github.com/ory/kratos.git (master, 2026-09-15; blobs > 131072B omitted)
Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
This commit is contained in:
117
selfservice/errorx/handler.go
Normal file
117
selfservice/errorx/handler.go
Normal file
@@ -0,0 +1,117 @@
|
||||
// Copyright © 2023 Ory Corp
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package errorx
|
||||
|
||||
import (
|
||||
"cmp"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"github.com/ory/herodot"
|
||||
"github.com/ory/kratos/driver/config"
|
||||
"github.com/ory/kratos/x"
|
||||
"github.com/ory/kratos/x/nosurfx"
|
||||
"github.com/ory/kratos/x/redir"
|
||||
"github.com/ory/nosurf"
|
||||
"github.com/ory/x/httprouterx"
|
||||
"github.com/ory/x/httpx"
|
||||
)
|
||||
|
||||
const RouteGet = "/self-service/errors"
|
||||
|
||||
var stub500, _ = json.Marshal(herodot.ErrInternalServerError().WithReasonf("This is a stub error."))
|
||||
|
||||
type (
|
||||
handlerDependencies interface {
|
||||
httpx.WriterProvider
|
||||
PersistenceProvider
|
||||
config.Provider
|
||||
}
|
||||
HandlerProvider interface {
|
||||
SelfServiceErrorHandler() *Handler
|
||||
}
|
||||
Handler struct {
|
||||
r handlerDependencies
|
||||
csrf nosurfx.CSRFToken
|
||||
}
|
||||
)
|
||||
|
||||
func NewHandler(
|
||||
r handlerDependencies,
|
||||
) *Handler {
|
||||
return &Handler{r: r, csrf: nosurf.Token}
|
||||
}
|
||||
|
||||
func (h *Handler) WithTokenGenerator(f func(r *http.Request) string) {
|
||||
h.csrf = f
|
||||
}
|
||||
|
||||
func (h *Handler) RegisterPublicRoutes(public *httprouterx.RouterPublic) {
|
||||
public.GET(RouteGet, h.publicFetchError)
|
||||
}
|
||||
|
||||
func (h *Handler) RegisterAdminRoutes(public *httprouterx.RouterAdmin) {
|
||||
public.GET(RouteGet, redir.RedirectToPublicRoute(h.r))
|
||||
}
|
||||
|
||||
// swagger:parameters getFlowError
|
||||
//
|
||||
//nolint:deadcode,unused
|
||||
//lint:ignore U1000 Used to generate Swagger and OpenAPI definitions
|
||||
type getFlowError struct {
|
||||
// Error is the error's ID
|
||||
//
|
||||
// in: query
|
||||
// required: true
|
||||
ID string `json:"id"`
|
||||
}
|
||||
|
||||
// swagger:route GET /self-service/errors frontend getFlowError
|
||||
//
|
||||
// # Get User-Flow Errors
|
||||
//
|
||||
// This endpoint returns the error associated with a user-facing self service errors.
|
||||
//
|
||||
// This endpoint supports stub values to help you implement the error UI:
|
||||
//
|
||||
// - `?id=stub:500` - returns a stub 500 (Internal Server Error) error.
|
||||
//
|
||||
// More information can be found at [Ory Kratos User User Facing Error Documentation](https://www.ory.com/docs/kratos/self-service/flows/user-facing-errors).
|
||||
//
|
||||
// Produces:
|
||||
// - application/json
|
||||
//
|
||||
// Schemes: http, https
|
||||
//
|
||||
// Responses:
|
||||
// 200: flowError
|
||||
// 403: errorGeneric
|
||||
// 404: errorGeneric
|
||||
// 500: errorGeneric
|
||||
//
|
||||
// Extensions:
|
||||
// x-ory-ratelimit-bucket: kratos-public-high
|
||||
func (h *Handler) publicFetchError(w http.ResponseWriter, r *http.Request) {
|
||||
if err := h.fetchError(w, r); err != nil {
|
||||
h.r.Writer().WriteError(w, r, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Handler) fetchError(w http.ResponseWriter, r *http.Request) error {
|
||||
id := cmp.Or(r.URL.Query().Get("error"), r.URL.Query().Get("id"))
|
||||
switch id {
|
||||
case "stub:500":
|
||||
h.r.Writer().Write(w, r, &ErrorContainer{ID: x.NewUUID(), Errors: stub500})
|
||||
return nil
|
||||
}
|
||||
|
||||
es, err := h.r.SelfServiceErrorPersister().ReadErrorContainer(r.Context(), x.ParseUUID(id))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
h.r.Writer().Write(w, r, es)
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user