authelia/internal/duo/types.go

60 lines
2.0 KiB
Go

package duo
import (
"encoding/json"
"net/url"
"github.com/duosecurity/duo_api_golang"
"github.com/authelia/authelia/v4/internal/middlewares"
"github.com/authelia/authelia/v4/internal/session"
)
// API interface wrapping duo api library for testing purpose.
type API interface {
Call(ctx *middlewares.AutheliaCtx, userSession *session.UserSession, values url.Values, method string, path string) (response *Response, err error)
PreAuthCall(ctx *middlewares.AutheliaCtx, userSession *session.UserSession, values url.Values) (response *PreAuthResponse, err error)
AuthCall(ctx *middlewares.AutheliaCtx, userSession *session.UserSession, values url.Values) (response *AuthResponse, err error)
}
// APIImpl implementation of DuoAPI interface.
type APIImpl struct {
*duoapi.DuoApi
}
// Device holds all necessary info for frontend.
type Device struct {
Capabilities []string `json:"capabilities"`
Device string `json:"device"`
DisplayName string `json:"display_name"`
Name string `json:"name"`
SmsNextcode string `json:"sms_nextcode"`
Number string `json:"number"`
Type string `json:"type"`
}
// Response coming from Duo API.
type Response struct {
Response json.RawMessage `json:"response"`
Code int `json:"code"`
Message string `json:"message"`
MessageDetail string `json:"message_detail"`
Stat string `json:"stat"`
}
// AuthResponse is a response for a authorization request.
type AuthResponse struct {
Result string `json:"result"`
Status string `json:"status"`
StatusMessage string `json:"status_msg"`
TrustedDeviceToken string `json:"trusted_device_token"`
}
// PreAuthResponse is a response for a preauthorization request.
type PreAuthResponse struct {
Result string `json:"result"`
StatusMessage string `json:"status_msg"`
Devices []Device `json:"devices"`
EnrollPortalURL string `json:"enroll_portal_url"`
}