Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
outOfBand.go 1.33 KiB
package protocol

import (
	"encoding/json"

	"gitlab.eclipse.org/eclipse/xfsc/common-services/didcomm-connector/didcomm"
	"gitlab.eclipse.org/eclipse/xfsc/common-services/didcomm-connector/mediator"

	"github.com/google/uuid"
)

// https://identity.foundation/didcomm-messaging/spec/#invitation
type OutOfBand struct {
	mediator *mediator.Mediator
}

func NewOutOfBand(mediator *mediator.Mediator) *OutOfBand {
	return &OutOfBand{
		mediator: mediator,
	}
}

func (o *OutOfBand) Handle(label string, bearer string) (response string, err error) {
	type body struct {
		GoalCode string   `json:"goal_code"`
		Goal     string   `json:"goal"`
		Label    string   `json:"label"`
		Accept   []string `json:"accept"`
		Bearer   string   `json:"auth"`
	}

	b := body{
		GoalCode: "request-mediate",
		Goal:     "RequestMediate",
		Label:    label,
		Accept:   []string{"didcomm/v2"},
		Bearer:   bearer,
	}

	bodyJson, err := json.Marshal(b)
	if err != nil {
		panic(err)
	}

	message := didcomm.Message{
		Id:   uuid.Must(uuid.NewRandom()).String(),
		Type: "https://didcomm.org/out-of-band/2.0/invitation",
		Body: string(bodyJson),
		From: &o.mediator.Did,
	}
	packMsg, err := o.mediator.PackPlainMessage(message)
	if err != nil {
		return "", err
	}
	// packMsg64 := b64.StdEncoding.EncodeToString([]byte(packMsg))
	// return packMsg64, nil
	return packMsg, nil
}