package pad2ipfs
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
|
|
sh "github.com/ipfs/go-ipfs-api"
|
|
)
|
|
|
|
//AddedPads is the directory where are stored the pads that are added to IPFS
|
|
const AddedPads = "addedPads"
|
|
|
|
//GettedPads is the directory where are stored the pads that are getted from IPFS
|
|
const GettedPads = "gettedPads"
|
|
|
|
//Add gets the content from the etherpad specified in the link, and downloads it in the format of the specified extension, and then, puts it into IPFS
|
|
func Add(link string, extension string) (string, error) {
|
|
if extension != "md" && extension != "txt" && extension != "html" && extension != "pdf" && extension != "odt" {
|
|
return "", errors.New("No valid extension")
|
|
}
|
|
format := extension
|
|
if extension == "md" {
|
|
format = "markdown"
|
|
extension = "md"
|
|
}
|
|
|
|
//create the pads directory
|
|
_ = os.Mkdir(AddedPads, os.ModePerm)
|
|
|
|
//get the pad name
|
|
linkSplitted := strings.Split(link, "/")
|
|
padName := linkSplitted[len(linkSplitted)-1]
|
|
completeLink := link + "/export/" + format
|
|
|
|
//get the content from the url
|
|
r, err := http.Get(completeLink)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return "", err
|
|
}
|
|
defer r.Body.Close()
|
|
content, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
fmt.Printf("%s", err)
|
|
return "", err
|
|
}
|
|
|
|
//save the content into a file
|
|
err = ioutil.WriteFile(AddedPads+"/"+padName+"."+extension, content, 0644)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return "", err
|
|
}
|
|
|
|
//connect to ipfs shell
|
|
s := sh.NewShell("localhost:5001")
|
|
//save the file into IPFS
|
|
ipfsHash, err := s.AddDir(AddedPads + "/" + padName + "." + extension)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return "", err
|
|
}
|
|
return ipfsHash, nil
|
|
}
|
|
|
|
//Get gets the content from IPFS for a given hash, and saves it into a file
|
|
func Get(hash string, filename string) error {
|
|
//create the pads directory
|
|
_ = os.Mkdir(GettedPads, os.ModePerm)
|
|
|
|
//connect to ipfs shell
|
|
s := sh.NewShell("localhost:5001")
|
|
err := s.Get(hash, GettedPads+"/"+filename)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|