42 lines
1.8 KiB
Go
42 lines
1.8 KiB
Go
|
package flow
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"strconv"
|
||
|
|
||
|
"goauthentik.io/api/v3"
|
||
|
)
|
||
|
|
||
|
func (fe *FlowExecutor) solveChallenge_Identification(challenge *api.ChallengeTypes, req api.ApiFlowsExecutorSolveRequest) (api.FlowChallengeResponseRequest, error) {
|
||
|
r := api.NewIdentificationChallengeResponseRequest(fe.getAnswer(StageIdentification))
|
||
|
r.SetPassword(fe.getAnswer(StagePassword))
|
||
|
return api.IdentificationChallengeResponseRequestAsFlowChallengeResponseRequest(r), nil
|
||
|
}
|
||
|
|
||
|
func (fe *FlowExecutor) solveChallenge_Password(challenge *api.ChallengeTypes, req api.ApiFlowsExecutorSolveRequest) (api.FlowChallengeResponseRequest, error) {
|
||
|
r := api.NewPasswordChallengeResponseRequest(fe.getAnswer(StagePassword))
|
||
|
return api.PasswordChallengeResponseRequestAsFlowChallengeResponseRequest(r), nil
|
||
|
}
|
||
|
|
||
|
func (fe *FlowExecutor) solveChallenge_AuthenticatorValidate(challenge *api.ChallengeTypes, req api.ApiFlowsExecutorSolveRequest) (api.FlowChallengeResponseRequest, error) {
|
||
|
// We only support duo as authenticator, check if that's allowed
|
||
|
var deviceChallenge *api.DeviceChallenge
|
||
|
for _, devCh := range challenge.AuthenticatorValidationChallenge.DeviceChallenges {
|
||
|
if devCh.DeviceClass == string(api.DEVICECLASSESENUM_DUO) {
|
||
|
deviceChallenge = &devCh
|
||
|
}
|
||
|
}
|
||
|
if deviceChallenge == nil {
|
||
|
return api.FlowChallengeResponseRequest{}, errors.New("no compatible authenticator class found")
|
||
|
}
|
||
|
devId, err := strconv.Atoi(deviceChallenge.DeviceUid)
|
||
|
if err != nil {
|
||
|
return api.FlowChallengeResponseRequest{}, errors.New("failed to convert duo device id to int")
|
||
|
}
|
||
|
devId32 := int32(devId)
|
||
|
inner := api.NewAuthenticatorValidationChallengeResponseRequest()
|
||
|
inner.SelectedChallenge = (*api.DeviceChallengeRequest)(deviceChallenge)
|
||
|
inner.Duo = &devId32
|
||
|
return api.AuthenticatorValidationChallengeResponseRequestAsFlowChallengeResponseRequest(inner), nil
|
||
|
}
|