apiv1

package
v0.5.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 25, 2026 License: BSD-2-Clause Imports: 44 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AddConsentRequest

type AddConsentRequest struct {
	AuthenticSource         string `json:"authentic_source" validate:"required,max=128,printascii"`
	AuthenticSourcePersonID string `json:"authentic_source_person_id" validate:"required,max=128,printascii"`
	ConsentTo               string `json:"consent_to" validate:"required,max=128,printascii"`
	SessionID               string `json:"session_id" validate:"required,max=128,printascii"`
}

AddConsentRequest is the request for AddConsent

type AddDocumentIdentityRequest

type AddDocumentIdentityRequest struct {
	// required: true
	// example: SUNET
	AuthenticSource string `json:"authentic_source" validate:"required"`

	// required: true
	// example: urn:eudi:pid:1
	VCT string `json:"vct" validate:"required"`

	// required: true
	// example: 7a00fe1a-3e1a-11ef-9272-fb906803d1b8
	DocumentID string `json:"document_id" validate:"required"`

	Identities []*model.Identity `json:"identities" validate:"required"`
}

AddDocumentIdentityRequest is the request for DocumentIdentity

type Client

type Client struct {
	CredentialOfferLookupMetadata *CredentialOfferLookupMetadata
	// contains filtered or unexported fields
}

Client holds the public api object

func New

func New(ctx context.Context, db *db.Service, cacheService *cache.Service, tracer *trace.Tracer, cfg *model.Cfg, log *logger.Log) (*Client, error)

New creates a new instance of the public api

func (*Client) AddConsent

func (c *Client) AddConsent(ctx context.Context, req *AddConsentRequest) error

AddConsent adds a consent to a document

@Summary		AddConsent
@ID				add-consent
@Description	Add consent endpoint
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200	"Success"
@Failure		400	{object}	helpers.ErrorResponse	"Bad Request"
@Param			req	body		AddConsentRequest		true	" "
@Router			/consent [post]

func (*Client) AddDocumentIdentity

func (c *Client) AddDocumentIdentity(ctx context.Context, req *AddDocumentIdentityRequest) error

AddDocumentIdentity adds an identity to a document

@Summary		AddDocumentIdentity
@ID				add-document-identity
@Description	Adding array of identities to one document
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200
@Failure		400	{object}	helpers.ErrorResponse		"Bad Request"
@Param			req	body		AddDocumentIdentityRequest	true	" "
@Router			/document/identity [put]

func (*Client) AddPIDUser

func (c *Client) AddPIDUser(ctx context.Context, req *vcclient.AddPIDRequest) error

func (*Client) CreateCredentialOfferLookupMetadata

func (c *Client) CreateCredentialOfferLookupMetadata(ctx context.Context) error

CreateCredentialOfferLookupMetadata provides data for UI /offer, credential_offer selection

func (*Client) DeleteDocument

func (c *Client) DeleteDocument(ctx context.Context, req *DeleteDocumentRequest) error

DeleteDocument deletes a specific document

@Summary		DeleteDocument
@ID				delete-document
@Description	delete one document endpoint
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200	"Success"
@Failure		400	{object}	helpers.ErrorResponse	"Bad Request"
@Param			req	body		DeleteDocumentRequest	true	" "
@Router			/document [delete]

func (*Client) DeleteDocumentIdentity

func (c *Client) DeleteDocumentIdentity(ctx context.Context, req *DeleteDocumentIdentityRequest) error

DeleteDocumentIdentity deletes an identity from a document

@Summary		DeleteDocumentIdentity
@ID				delete-document-identity
@Description	Delete identity to document endpoint
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200
@Failure		400	{object}	helpers.ErrorResponse			"Bad Request"
@Param			req	body		DeleteDocumentIdentityRequest	true	" "
@Router			/document/identity [delete]

func (*Client) DocumentList

func (c *Client) DocumentList(ctx context.Context, req *DocumentListRequest) (*DocumentListReply, error)

DocumentList return a list of metadata for a specific identity

@Summary		DocumentList
@ID				document-list
@Description	List documents for an identity
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200	{object}	DocumentListReply		"Success"
@Failure		400	{object}	helpers.ErrorResponse	"Bad Request"
@Param			req	body		DocumentListRequest		true	" "
@Router			/document/list [post]

func (*Client) EphemeralEncryptionKey

func (c *Client) EphemeralEncryptionKey(ctx context.Context, kid string) (jwk.Key, jwk.Key, error)

EphemeralEncryptionKey returns the ephemeral encryption key pair for the given kid. If a private key already exists in the cache (i.e. the request- object endpoint was already called for this session) the cached key is reused so that the wallet's encrypted response can still be decrypted. Otherwise a fresh P-256 key pair is generated, the private key is cached, and both private and public JWKs are returned.

func (*Client) GetConsent

func (c *Client) GetConsent(ctx context.Context, req *GetConsentRequest) (*model.Consent, error)

GetConsent gets a consent for a document

@Summary		GetConsent
@ID				get-consent
@Description	Get consent endpoint
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200	{object}	model.Consent			"Success"
@Failure		400	{object}	helpers.ErrorResponse	"Bad Request"
@Param			req	body		GetConsentRequest		true	" "
@Router			/consent/get [post]

func (*Client) GetDocument

func (c *Client) GetDocument(ctx context.Context, req *GetDocumentRequest) (*GetDocumentReply, error)

GetDocument return a specific document

@Summary		GetDocument
@ID				get-document
@Description	Get document endpoint
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200	{object}	GetDocumentReply		"Success"
@Failure		400	{object}	helpers.ErrorResponse	"Bad Request"
@Param			req	body		GetDocumentRequest		true	" "
@Router			/document [post]

func (*Client) GetDocumentCollectID

func (c *Client) GetDocumentCollectID(ctx context.Context, req *GetDocumentCollectIDRequest) (*GetDocumentCollectIDReply, error)

GetDocumentCollectID return a specific document ??

@Summary		GetDocumentByCollectID
@ID				get-document-collect-id
@Description	Get one document with collect id
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200	{object}	GetDocumentCollectIDReply	"Success"
@Failure		400	{object}	helpers.ErrorResponse		"Bad Request"
@Param			req	body		GetDocumentCollectIDRequest	true	" "
@Router			/document/collect_id [post]

func (*Client) GetVCTMFromScope

func (c *Client) GetVCTMFromScope(ctx context.Context, req *GetVCTMFromScopeRequest) (*sdjwtvc.VCTM, error)

func (*Client) HasVCIDocuments

func (c *Client) HasVCIDocuments(ctx context.Context, sessionID string) bool

HasVCIDocuments checks whether documents have already been stored for the given VCI session. Used by the consent endpoint to avoid re-initiating external auth when documents are already cached.

func (*Client) Health

Health return health for this service and dependencies

func (*Client) IdentityMapping

func (c *Client) IdentityMapping(ctx context.Context, reg *IdentityMappingRequest) (*IdentityMappingReply, error)

IdentityMapping return a mapping between PID and AuthenticSource

@Summary		IdentityMapping
@ID				identity-mapping
@Description	Identity mapping endpoint
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200	{object}	IdentityMappingReply	"Success"
@Failure		400	{object}	helpers.ErrorResponse	"Bad Request"
@Param			req	body		IdentityMappingRequest	true	" "
@Router			/identity/mapping [post]

func (*Client) JWKS

func (c *Client) JWKS(ctx context.Context) (*JWKSResponse, error)

JWKS returns the issuer's public signing keys as a JWK Set. The keys are fetched from the issuer via gRPC and stripped of any private key material before being served.

func (*Client) LoginPIDUser

func (c *Client) LoginPIDUser(ctx context.Context, req *vcclient.LoginPIDUserRequest) error

func (*Client) Notification

Notification return QR code and DeepLink for a document

@Summary		Notification
@ID				generic-notification
@Description	notification endpoint
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200	{object}	vcclient.NotificationReply		"Success"
@Failure		400	{object}	helpers.ErrorResponse	"Bad Request"
@Param			req	body		vcclient.NotificationRequest		true	" "
@Router			/notification [post]

func (*Client) OAuthAuthorize

func (*Client) OAuthMetadata

func (c *Client) OAuthMetadata(ctx context.Context) (*oauth2.AuthorizationServerMetadata, error)

func (*Client) OAuthPar

OAuthPar implements OAuth 2.0 Pushed Authorization Request (PAR) https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html#name-authorization-endpoint

func (*Client) OAuthToken

OAuthToken implements OAuth 2.0 token endpoint for credential issuance https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html#name-token-endpoint

func (*Client) OIDCRPCallback

func (c *Client) OIDCRPCallback(ctx context.Context, req *OIDCRPCallbackRequest, oidcrpService any) (*OIDCRPCallbackResponse, error)

OIDCRPCallback processes OIDC callback and issues credential

func (*Client) OIDCRPInitiate

func (c *Client) OIDCRPInitiate(ctx context.Context, req *OIDCRPInitiateRequest, oidcrpService any) (*OIDCRPInitiateResponse, error)

OIDCRPInitiate initiates OIDC authentication flow

func (*Client) OpenIDFederation

func (c *Client) OpenIDFederation(ctx context.Context) (*OpenIDFederationReply, error)

func (*Client) RevokeDocument

func (c *Client) RevokeDocument(ctx context.Context, req *RevokeDocumentRequest) error

RevokeDocument revokes a specific document

@Summary		RevokeDocument
@ID				revoke-document
@Description	Revoke one document
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200	"Success"
@Failure		400	{object}	helpers.ErrorResponse	"Bad Request"
@Param			req	body		RevokeDocumentRequest	true	" "
@Router			/document/revoke [post]

func (*Client) SDJWTVCIssuerMetadata

func (c *Client) SDJWTVCIssuerMetadata(ctx context.Context) (*SDJWTVCIssuerMetadataResponse, error)

SDJWTVCIssuerMetadata returns the JWT VC Issuer Metadata per draft-ietf-oauth-sd-jwt-vc §5.3. This metadata is served at /.well-known/jwt-vc-issuer and allows verifiers to discover the issuer's JWKS endpoint.

func (*Client) SVGTemplateReply

func (c *Client) SVGTemplateReply(ctx context.Context, req *SVGTemplateRequest) (*vcclient.SVGTemplateReply, error)

func (*Client) SearchDocuments

SearchDocuments search for documents

func (*Client) StoreVCIDocuments

func (c *Client) StoreVCIDocuments(ctx context.Context, sessionID string, docs map[string]*model.CompleteDocument) error

StoreVCIDocuments stores transformed credential documents in the VCI session cache. This is used by external auth flows (SAML/OIDC) that are integrated into the OpenID4VCI pipeline. The documents are stored keyed by the VCI session ID so they can be retrieved during credential issuance (same as pid_auth flow).

func (*Client) TypeMetadata

func (c *Client) TypeMetadata(ctx context.Context, req *TypeMetadataRequest) (json.RawMessage, error)

TypeMetadata returns the raw VCTM JSON for a locally-published scope.

func (*Client) UICreateCredentialOffer

func (c *Client) UICreateCredentialOffer(ctx context.Context, req *UICredentialOfferRequest) (*CredentialOfferReply, error)

func (*Client) UICredentialOffers

func (c *Client) UICredentialOffers(ctx context.Context) (*CredentialOfferLookupMetadata, error)

UICredentialOffers provides data for UI /offer endpoint

func (*Client) Upload

func (c *Client) Upload(ctx context.Context, req *vcclient.UploadRequest) error

Upload uploads a document with a set of attributes

@Summary		Upload
@ID				generic-upload
@Description	Upload endpoint
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200	"Success"
@Failure		400	{object}	helpers.ErrorResponse	"Bad Request"
@Param			req	body		vcclient.UploadRequest	true	" "
@Router			/upload [post]

func (*Client) UserLookup

func (*Client) VCICredential

VCICredential implements OpenID4VCI credential issuance endpoint

@Summary		VCICredential
@ID				create-credential
@Description	Create credential endpoint
@Tags			dc4eu
@Accept			json
@Produce		json
@Success		200	{object}	apiv1_issuer.MakeSDJWTReply		"Success"
@Failure		400	{object}	helpers.ErrorResponse			"Bad Request"
@Param			req	body		openid4vci.CredentialRequest	true	" "
@Router			/credential [post]

func (*Client) VCIDeferredCredential

VCIDeferredCredential implements OpenID4VCI deferred credential endpoint https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html#name-deferred-credential-endpoin

func (*Client) VCINonce

func (c *Client) VCINonce(ctx context.Context) (*openid4vci.NonceResponse, error)

VCINonce implements OpenID4VCI nonce endpoint for DPoP proof freshness https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html#name-nonce-endpoint

func (*Client) VCINotification

func (c *Client) VCINotification(ctx context.Context, req *openid4vci.NotificationRequest) error

VCINotification implements OpenID4VCI notification endpoint https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html#name-notification-endpoint

func (*Client) VerificationDirectPost

func (*Client) VerificationRequestObject

func (c *Client) VerificationRequestObject(ctx context.Context, req *VerificationRequestObjectRequest) (string, error)

type CredentialOfferLookupMetadata

type CredentialOfferLookupMetadata struct {
	// CredentialTypes use scope as key
	CredentialTypes map[string]CredentialOfferTypeData `json:"credential_types"`

	// Wallet use name in config as key and description as value
	Wallets map[string]string `json:"wallets"`
}

type CredentialOfferReply

type CredentialOfferReply struct {
	Name string            `json:"name" validate:"required"`
	ID   string            `json:"id" validate:"required"`
	QR   openid4vp.QRReply `json:"qr" validate:"required"`
}

type CredentialOfferTypeData

type CredentialOfferTypeData struct {
	Name        string `json:"name"`
	Description string `json:"description"`
}

type DeleteDocumentIdentityRequest

type DeleteDocumentIdentityRequest struct {
	// required: true
	// example: SUNET
	AuthenticSource string `json:"authentic_source" validate:"required"`

	// required: true
	// example: urn:eudi:pid:1
	VCT string `json:"vct" validate:"required"`

	// required: true
	// example: 7a00fe1a-3e1a-11ef-9272-fb906803d1b8
	DocumentID string `json:"document_id" validate:"required"`

	// required: true
	// example: 83c1a3c8-3e1a-11ef-9c01-6b6642c8d638
	AuthenticSourcePersonID string `json:"authentic_source_person_id" validate:"required"`
}

DeleteDocumentIdentityRequest is the request for DeleteDocumentIdentity

type DeleteDocumentRequest

type DeleteDocumentRequest struct {
	// required: true
	// example: skatteverket
	AuthenticSource string `json:"authentic_source" validate:"required"`

	// required: true
	// example: 5e7a981c-c03f-11ee-b116-9b12c59362b9
	DocumentID string `json:"document_id" validate:"required"`

	// required: true
	// example: urn:eudi:pid:1
	VCT string `json:"vct" validate:"required"`
}

DeleteDocumentRequest is the request for DeleteDocument

type DocumentListReply

type DocumentListReply struct {
	Data []*model.DocumentList `json:"data"`
}

DocumentListReply is the reply for a list of documents

type DocumentListRequest

type DocumentListRequest struct {
	AuthenticSource string          `json:"authentic_source"`
	Identity        *model.Identity `json:"identity" validate:"required"`
	VCT             string          `json:"vct"`
	ValidFrom       int64           `json:"valid_from"`
	ValidTo         int64           `json:"valid_to"`
}

DocumentListRequest is the request for DocumentList

type EventPublisher

type EventPublisher interface {
	Upload(uploadRequest *vcclient.UploadRequest) error
	Close(ctx context.Context) error
}

type GetConsentRequest

type GetConsentRequest struct {
	AuthenticSource         string `json:"authentic_source" validate:"required,max=128,printascii"`
	AuthenticSourcePersonID string `json:"authentic_source_person_id" validate:"required,max=128,printascii"`
}

GetConsentRequest is the request for GetConsent

type GetDocumentCollectIDReply

type GetDocumentCollectIDReply struct {
	Data *model.Document `json:"data"`
}

GetDocumentCollectIDReply is the reply for a generic document

type GetDocumentCollectIDRequest

type GetDocumentCollectIDRequest struct {
	AuthenticSource string          `json:"authentic_source" validate:"required"`
	VCT             string          `json:"vct" validate:"required"`
	CollectID       string          `json:"collect_id" validate:"required"`
	Identity        *model.Identity `json:"identity" validate:"required"`
}

GetDocumentCollectIDRequest is the request for GetDocumentAttestation

type GetDocumentReply

type GetDocumentReply struct {
	Data *model.Document `json:"data"`
}

GetDocumentReply is the reply for a generic document

type GetDocumentRequest

type GetDocumentRequest struct {
	AuthenticSource string `json:"authentic_source" validate:"required"`
	VCT             string `json:"vct" validate:"required"`
	DocumentID      string `json:"document_id" validate:"required"`
}

GetDocumentRequest is the request for GetDocument

type GetVCTMFromScopeRequest

type GetVCTMFromScopeRequest struct {
	Scope string `validate:"required"`
}

type IdentityMappingReply

type IdentityMappingReply struct {
	Data *model.IDMapping `json:"data"`
}

IdentityMappingReply is the reply for a IDMapping

type IdentityMappingRequest

type IdentityMappingRequest struct {
	// required: true
	// example: SUNET
	AuthenticSource string          `json:"authentic_source" validate:"required,max=128,printascii"`
	Identity        *model.Identity `json:"identity" validate:"required"`
}

IdentityMappingRequest is the request for IDMapping

type JWKSResponse

type JWKSResponse = apiv1_issuer.Keys

JWKSResponse represents a JSON Web Key Set (RFC 7517 §5).

type OAuthAuthorizationConsentCallbackResponse

type OAuthAuthorizationConsentCallbackResponse struct {
}

type OAuthAuthorizationConsentResponse

type OAuthAuthorizationConsentResponse struct {
	RedirectURL       string
	VerifierContextID string `json:"-"`
}

type OIDCRPCallbackRequest

type OIDCRPCallbackRequest struct {
	Code  string `json:"code" binding:"required"`
	State string `json:"state" binding:"required"`
}

OIDCRPCallbackRequest represents the OIDC callback parameters

type OIDCRPCallbackResponse

type OIDCRPCallbackResponse struct {
	Status          string         `json:"status"`
	CredentialType  string         `json:"credential_type"`
	Credential      string         `json:"credential"`
	CredentialOffer map[string]any `json:"credential_offer"`
	Message         string         `json:"message"`

	// VCIRedirectURL is set when the callback is part of a VCI consent flow.
	// The httpserver should redirect the browser to this URL instead of returning JSON.
	VCIRedirectURL string `json:"vci_redirect_url,omitempty"`
}

OIDCRPCallbackResponse represents the credential issuance response

type OIDCRPInitiateRequest

type OIDCRPInitiateRequest struct {
	CredentialType string `json:"credential_type" binding:"required"`
}

OIDCRPInitiateRequest represents the request to initiate OIDC authentication

type OIDCRPInitiateResponse

type OIDCRPInitiateResponse struct {
	AuthorizationURL string `json:"authorization_url"`
	State            string `json:"state"`
}

OIDCRPInitiateResponse represents the response with authorization URL

type OauthAuthorizationConsentCallbackRequest

type OauthAuthorizationConsentCallbackRequest struct {
	ResponseCode string `json:"response_code" form:"response_code" uri:"response_code"`
}

type OauthAuthorizationConsentRequest

type OauthAuthorizationConsentRequest struct {
	//AuthMethod string `json:"-"`
	SessionID string `json:"-"`
}

type OpenIDFederationReply

type OpenIDFederationReply struct{}

type RevokeDocumentRequest

type RevokeDocumentRequest struct {
	AuthenticSource string            `json:"authentic_source" validate:"required"`
	VCT             string            `json:"vct" validate:"required"`
	Revocation      *model.Revocation `json:"revocation" validate:"required"`
}

RevokeDocumentRequest is the request for RevokeDocument

type SDJWTVCIssuerMetadataResponse

type SDJWTVCIssuerMetadataResponse struct {
	Issuer  string `json:"issuer"`
	JWKSURI string `json:"jwks_uri"`
}

SDJWTVCIssuerMetadataResponse represents JWT VC Issuer Metadata per SD-JWT VC §5.3.

type SVGTemplateRequest

type SVGTemplateRequest struct {
	VCTM *sdjwtvc.VCTM `json:"-"`
}

SVGTemplateRequest holds the request for fetching an SVG template.

type TypeMetadataRequest

type TypeMetadataRequest struct {
	Scope string `uri:"scope" validate:"required"`
}

TypeMetadataRequest holds the request for serving locally-published VCTM.

type UICredentialOfferRequest

type UICredentialOfferRequest struct {
	Scope    string `json:"scope" uri:"scope" binding:"required"`
	WalletID string `json:"wallet_id" uri:"wallet_id" binding:"required"`
}

type VerificationDirectPostRequest

type VerificationDirectPostRequest struct {
	Response string `json:"response" form:"response"`
}

func (*VerificationDirectPostRequest) GetKID

type VerificationDirectPostResponse

type VerificationDirectPostResponse struct {
	PresentationDuringIssuanceSession string `json:"presentation_during_issuance_session"`
	RedirectURI                       string `json:"redirect_uri"`
}

type VerificationRequestObjectRequest

type VerificationRequestObjectRequest struct {
	ID string `form:"id" uri:"id" validate:"required,max=128,printascii"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL