Skip to content

Commit

Permalink
chore: add ipns logic in resolver
Browse files Browse the repository at this point in the history
Signed-off-by: Firas Qutishat <firas.qutishat@securekey.com>
  • Loading branch information
fqutishat committed Aug 30, 2022
1 parent 5c60c94 commit 0f8c25d
Show file tree
Hide file tree
Showing 4 changed files with 454 additions and 45 deletions.
256 changes: 244 additions & 12 deletions pkg/discovery/did/mocks/endpointClient.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

60 changes: 37 additions & 23 deletions pkg/discovery/endpoint/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ func (cs *Client) ResolveDomainForDID(id string) (string, error) {
return domain.(string), nil
}

func (cs *Client) getEndpoint(uri string) (*models.Endpoint, error) { //nolint: funlen,gocyclo,cyclop
func (cs *Client) getEndpoint(uri string) (*models.Endpoint, error) { //nolint:gocyclo,cyclop
var domain string

switch {
Expand All @@ -194,32 +194,12 @@ func (cs *Client) getEndpoint(uri string) (*models.Endpoint, error) { //nolint:
return nil, fmt.Errorf("get domain from DID: %w", err)
}
case strings.HasPrefix(uri, "ipns://"):
anchorOriginSplit := strings.Split(uri, "ipns://")

var jrd restapi.JRD
var err error

err := cs.sendRequest(nil, http.MethodGet, fmt.Sprintf("%s/%s/%s/.well-known/host-meta.json", ipfsGlobal, "ipns",
anchorOriginSplit[1]), &jrd)
domain, err = cs.GetDomainFromIPNS(uri)
if err != nil {
return nil, err
}

for _, v := range jrd.Links {
if v.Rel == self && v.Type == "application/activity+json" {
parsedURL, err := url.Parse(v.Href)
if err != nil {
return nil, err
}

domain = fmt.Sprintf("%s://%s", parsedURL.Scheme, parsedURL.Host)

break
}
}

if domain == "" {
return nil, fmt.Errorf("couldn't find application/activity+json in ipns file")
}
case !strings.HasPrefix(uri, "http://") && !strings.HasPrefix(uri, "https://"):
domain = "https://" + uri
default:
Expand Down Expand Up @@ -263,6 +243,40 @@ func (cs *Client) getEndpoint(uri string) (*models.Endpoint, error) { //nolint:
return endpoint, nil
}

// GetDomainFromIPNS get domain from ipns.
func (cs *Client) GetDomainFromIPNS(uri string) (string, error) {
anchorOriginSplit := strings.Split(uri, "ipns://")

var jrd restapi.JRD

var domain string

err := cs.sendRequest(nil, http.MethodGet, fmt.Sprintf("%s/%s/%s/.well-known/host-meta.json", ipfsGlobal, "ipns",
anchorOriginSplit[1]), &jrd)
if err != nil {
return "", err
}

for _, v := range jrd.Links {
if v.Rel == self && v.Type == "application/activity+json" {
parsedURL, err := url.Parse(v.Href)
if err != nil {
return "", err
}

domain = fmt.Sprintf("%s://%s", parsedURL.Scheme, parsedURL.Host)

break
}
}

if domain == "" {
return "", fmt.Errorf("couldn't find application/activity+json in ipns file")
}

return domain, nil
}

func (cs *Client) loadDomainForDID(id string) (string, error) {
doc, err := cs.vdr.Resolve(id)
if err != nil {
Expand Down
Loading

0 comments on commit 0f8c25d

Please sign in to comment.