Skip to content

Commit

Permalink
Handle IPNS names without dots
Browse files Browse the repository at this point in the history
When checking if an ipfs name is blocked, we may get an
`/ipns/{dnslink_name}` where the `{dnslink_name}` has been
encoded according to

https://specs.ipfs.tech/http-gateways/subdomain-gateway/#host-request-header

That is, "." has been replaced with "-" and "-" has been replaced with "--".

Because of this, when the given dns name has no dots, we undo things are
replace "--" with "-" and "-" with ".".
  • Loading branch information
hsanjuan committed Oct 18, 2023
1 parent d738993 commit 8a38dac
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
26 changes: 26 additions & 0 deletions denylist.go
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,32 @@ func (dl *Denylist) IsIPNSPathBlocked(name, subpath string) StatusResponse {
c, err := cid.Decode(key)
if err == nil {
key = c.Hash().B58String()
} else if !strings.ContainsRune(key, '.') {
// not a CID. It must be a ipns-dnslink name if it does not
// contain ".", maybe they got replaced by "-"
// https://specs.ipfs.tech/http-gateways/subdomain-gateway/#host-request-header
var result strings.Builder
for i := 0; i < len(key); i++ {
char := rune(key[i])
nextChar := rune(0)
if i < len(key)-1 {
nextChar = rune(key[i+1])
}

if char == '-' && nextChar == '-' {
result.WriteRune('-')
i++
continue
}

if char == '-' {
result.WriteRune('.')
continue
}

result.WriteRune(char)
}
key = result.String()
}
logger.Debugf("IsIPNSPathBlocked load: %s %s", key, subpath)
entries, _ := dl.IPNSBlocksDB.Load(key)
Expand Down
2 changes: 2 additions & 0 deletions tester/tester.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,10 +265,12 @@ func (s *Suite) testIPNSPath() error {
// rule6
rule6 := []string{
"/ipns/domain.example",
"/ipns/domain-example",
}
rule6allowed := []string{
"/ipns/domainaefa.example",
"/ipns/domain.example/path",
"/ipns/domain--example",
}

if err := s.testPaths(rule6, n, "rule6", false); err != nil {
Expand Down

0 comments on commit 8a38dac

Please sign in to comment.