session.go
package veriff
import (
"context"
"fmt"
"io"
"net/http"
)
type CreateSessionPayload struct {
Verification struct {
Person struct {
FirstName string `json:"firstName,omitempty"`
LastName string `json:"lastName,omitempty"`
DateOfBirth string `json:"dateOfBirth,omitempty"`
Gender string `json:"gender,omitempty"`
} `json:"person"`
Callback string `json:"callback,omitempty"`
VendorData string `json:"vendorData"`
} `json:"verification"`
}
type CreateSessionResponse struct {
Status string `json:"status"`
Verification struct {
ID string `json:"id"`
URL string `json:"url"`
VendorData string `json:"vendorData"`
Host string `json:"host"`
Status string `json:"status"`
SessionToken string `json:"sessionToken"`
} `json:"verification"`
}
func (c *client) CreateSession(ctx context.Context, payload CreateSessionPayload) (data CreateSessionResponse, err error) {
req, err := c.newRequest(ctx, http.MethodPost, "/v1/sessions", payload, "")
if err != nil {
return data, fmt.Errorf("failed to create request: %w", err)
}
req.DecodeTo(&data)
return data, c.do(ctx, req)
}
type SessionDecisionResponse struct {
Status string `json:"status"`
Verification struct {
ID string `json:"id"`
Code int `json:"code"`
Status string `json:"status"`
Person struct {
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
DateOfBirth *Time `json:"dateOfBirth"`
Nationality string `json:"nationality"`
} `json:"person"`
Document struct {
Type string `json:"type"`
Number string `json:"number"`
Remarks string `json:"remarks"`
Country string `json:"country"`
State string `json:"state"`
ValidFrom *Time `json:"validFrom"`
ValidUntil *Time `json:"validUntil"`
} `json:"document"`
} `json:"verification"`
}
func (c *client) SessionDecision(ctx context.Context, sessionID string) (data SessionDecisionResponse, err error) {
req, err := c.newRequest(ctx, http.MethodGet, fmt.Sprintf("/v1/sessions/%s/decision", sessionID), nil, sessionID)
if err != nil {
return data, fmt.Errorf("failed to create request: %w", err)
}
req.DecodeTo(&data)
return data, c.do(ctx, req)
}
type SessionMediaResponse struct {
Status string `json:"status"`
Videos []struct {
ID string `json:"id"`
SessionID string `json:"sessionId"`
Context string `json:"context"`
Duration float64 `json:"duration"`
Mimetype string `json:"mimetype"`
Name string `json:"name"`
Size int64 `json:"size"`
URL string `json:"url"`
} `json:"videos"`
Images []struct {
ID string `json:"id"`
SessionID string `json:"sessionId"`
Context string `json:"context"`
Mimetype string `json:"mimetype"`
Name string `json:"name"`
URL string `json:"url"`
Size int64 `json:"size"`
} `json:"images"`
}
func (c *client) SessionMedia(ctx context.Context, sessionID string) (data SessionMediaResponse, err error) {
req, err := c.newRequest(ctx, http.MethodGet, fmt.Sprintf("/v1/sessions/%s/media", sessionID), nil, sessionID)
if err != nil {
return data, fmt.Errorf("failed to create request: %w", err)
}
req.DecodeTo(&data)
return data, c.do(ctx, req)
}
func (c *client) DownloadMedia(ctx context.Context, mediaID string, dst io.Writer) error {
req, err := c.newRequest(ctx, http.MethodGet, fmt.Sprintf("/v1/media/%s", mediaID), nil, mediaID)
if err != nil {
return fmt.Errorf("failed to create request: %w", err)
}
req.PipeTo(dst)
return c.do(ctx, req)
}