mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-22 10:57:42 +08:00
Change the template handler to pass the hash to the directory listing template if the original url doesn't contain the hash. The directory listing template will display the hash in grey under the original url if the hash is passed to it. License: MIT Signed-off-by: Jack Loughran <j@ckloughran.com>
93 lines
2.7 KiB
Go
93 lines
2.7 KiB
Go
//go:generate go-bindata -pkg=assets -prefix=$GOPATH/src/gx/ipfs/QmT1jwrqzSMjSjLG5oBd9w4P9vXPKQksWuf5ghsE3Q88ZV init-doc $GOPATH/src/gx/ipfs/QmT1jwrqzSMjSjLG5oBd9w4P9vXPKQksWuf5ghsE3Q88ZV/dir-index-html
|
|
//go:generate gofmt -w bindata.go
|
|
|
|
package assets
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/ipfs/go-ipfs/core"
|
|
"github.com/ipfs/go-ipfs/core/coreunix"
|
|
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
|
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
|
|
|
// this import keeps gx from thinking the dep isn't used
|
|
_ "gx/ipfs/QmT1jwrqzSMjSjLG5oBd9w4P9vXPKQksWuf5ghsE3Q88ZV/dir-index-html"
|
|
)
|
|
|
|
// initDocPaths lists the paths for the docs we want to seed during --init
|
|
var initDocPaths = []string{
|
|
filepath.Join("init-doc", "about"),
|
|
filepath.Join("init-doc", "readme"),
|
|
filepath.Join("init-doc", "help"),
|
|
filepath.Join("init-doc", "contact"),
|
|
filepath.Join("init-doc", "security-notes"),
|
|
filepath.Join("init-doc", "quick-start"),
|
|
filepath.Join("init-doc", "ping"),
|
|
}
|
|
|
|
// SeedInitDocs adds the list of embedded init documentation to the passed node, pins it and returns the root key
|
|
func SeedInitDocs(nd *core.IpfsNode) (cid.Cid, error) {
|
|
return addAssetList(nd, initDocPaths)
|
|
}
|
|
|
|
var initDirPath = filepath.Join(os.Getenv("GOPATH"), "gx", "ipfs", "QmT1jwrqzSMjSjLG5oBd9w4P9vXPKQksWuf5ghsE3Q88ZV", "dir-index-html")
|
|
var initDirIndex = []string{
|
|
filepath.Join(initDirPath, "knownIcons.txt"),
|
|
filepath.Join(initDirPath, "dir-index.html"),
|
|
}
|
|
|
|
func SeedInitDirIndex(nd *core.IpfsNode) (cid.Cid, error) {
|
|
return addAssetList(nd, initDirIndex)
|
|
}
|
|
|
|
func addAssetList(nd *core.IpfsNode, l []string) (cid.Cid, error) {
|
|
dirb := uio.NewDirectory(nd.DAG)
|
|
|
|
for _, p := range l {
|
|
d, err := Asset(p)
|
|
if err != nil {
|
|
return cid.Cid{}, fmt.Errorf("assets: could load Asset '%s': %s", p, err)
|
|
}
|
|
|
|
s, err := coreunix.Add(nd, bytes.NewBuffer(d))
|
|
if err != nil {
|
|
return cid.Cid{}, fmt.Errorf("assets: could not Add '%s': %s", p, err)
|
|
}
|
|
|
|
fname := filepath.Base(p)
|
|
|
|
c, err := cid.Decode(s)
|
|
if err != nil {
|
|
return cid.Cid{}, err
|
|
}
|
|
|
|
node, err := nd.DAG.Get(nd.Context(), c)
|
|
if err != nil {
|
|
return cid.Cid{}, err
|
|
}
|
|
|
|
if err := dirb.AddChild(nd.Context(), fname, node); err != nil {
|
|
return cid.Cid{}, fmt.Errorf("assets: could not add '%s' as a child: %s", fname, err)
|
|
}
|
|
}
|
|
|
|
dir, err := dirb.GetNode()
|
|
if err != nil {
|
|
return cid.Cid{}, err
|
|
}
|
|
|
|
if err := nd.Pinning.Pin(nd.Context(), dir, true); err != nil {
|
|
return cid.Cid{}, fmt.Errorf("assets: Pinning on init-docu failed: %s", err)
|
|
}
|
|
|
|
if err := nd.Pinning.Flush(); err != nil {
|
|
return cid.Cid{}, fmt.Errorf("assets: Pinning flush failed: %s", err)
|
|
}
|
|
|
|
return dir.Cid(), nil
|
|
}
|