summaryrefslogtreecommitdiff
path: root/internal/handlers/handler_state.go
blob: 6fed4e1b67499d386701e8ee13aa08a6a4cffa38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package handlers

import (
	"github.com/authelia/authelia/v4/internal/middlewares"
	"github.com/authelia/authelia/v4/internal/session"
)

// StateGET is the handler serving the user state.
func StateGET(ctx *middlewares.AutheliaCtx) {
	var (
		userSession session.UserSession
		err         error
	)

	if userSession, err = ctx.GetSession(); err != nil {
		ctx.Logger.WithError(err).Error("Error occurred retrieving user session")

		ctx.ReplyForbidden()

		return
	}

	stateResponse := StateResponse{
		Username:            userSession.Username,
		AuthenticationLevel: userSession.AuthenticationLevel(ctx.Configuration.WebAuthn.EnablePasskey2FA),
		FactorKnowledge:     userSession.AuthenticationMethodRefs.FactorKnowledge(),
	}

	if uri := ctx.GetDefaultRedirectionURL(); uri != nil {
		stateResponse.DefaultRedirectionURL = uri.String()
	}

	if err = ctx.SetJSONBody(stateResponse); err != nil {
		ctx.Logger.Errorf("Unable to set state response in body: %s", err)
	}
}