99 lines
2.3 KiB
Go
99 lines
2.3 KiB
Go
package didplc
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/url"
|
|
|
|
"code.sonr.org/go/did-it"
|
|
)
|
|
|
|
var _ did.Document = &document{}
|
|
|
|
type document struct {
|
|
id string
|
|
alsoKnownAs []*url.URL
|
|
signatures []did.VerificationMethodSignature
|
|
services did.Services
|
|
}
|
|
|
|
func (d document) MarshalJSON() ([]byte, error) {
|
|
akas := make([]string, len(d.alsoKnownAs))
|
|
for i, aka := range d.alsoKnownAs {
|
|
akas[i] = aka.String()
|
|
}
|
|
|
|
return json.Marshal(struct {
|
|
Context []string `json:"@context"`
|
|
ID string `json:"id"`
|
|
AlsoKnownAs []string `json:"alsoKnownAs,omitempty"`
|
|
Controller string `json:"controller,omitempty"`
|
|
VerificationMethod []did.VerificationMethodSignature `json:"verificationMethod,omitempty"`
|
|
Services did.Services `json:"service,omitempty"`
|
|
}{
|
|
Context: d.Context(),
|
|
ID: d.id,
|
|
AlsoKnownAs: akas,
|
|
VerificationMethod: d.signatures,
|
|
Services: d.services,
|
|
})
|
|
}
|
|
|
|
func (d document) Context() []string {
|
|
res := make([]string, 0, 1+len(d.signatures))
|
|
res = append(res, did.JsonLdContext)
|
|
loop:
|
|
for _, method := range d.signatures {
|
|
for _, item := range res {
|
|
if method.JsonLdContext() == item {
|
|
continue loop
|
|
}
|
|
}
|
|
res = append(res, method.JsonLdContext())
|
|
}
|
|
return res
|
|
}
|
|
|
|
func (d document) ID() string {
|
|
return d.id
|
|
}
|
|
|
|
func (d document) Controllers() []string {
|
|
return nil
|
|
}
|
|
|
|
func (d document) AlsoKnownAs() []*url.URL {
|
|
return d.alsoKnownAs
|
|
}
|
|
|
|
func (d document) VerificationMethods() map[string]did.VerificationMethod {
|
|
res := make(map[string]did.VerificationMethod)
|
|
for _, signature := range d.signatures {
|
|
res[signature.ID()] = signature
|
|
}
|
|
return res
|
|
}
|
|
|
|
func (d document) Authentication() []did.VerificationMethodSignature {
|
|
return d.signatures
|
|
}
|
|
|
|
func (d document) Assertion() []did.VerificationMethodSignature {
|
|
return d.signatures
|
|
}
|
|
|
|
func (d document) KeyAgreement() []did.VerificationMethodKeyAgreement {
|
|
return nil
|
|
}
|
|
|
|
func (d document) CapabilityInvocation() []did.VerificationMethodSignature {
|
|
return d.signatures
|
|
}
|
|
|
|
func (d document) CapabilityDelegation() []did.VerificationMethodSignature {
|
|
return d.signatures
|
|
}
|
|
|
|
func (d document) Services() did.Services {
|
|
return d.services
|
|
}
|