mirror of
https://github.com/arnaucube/pad2ipfs.git
synced 2026-02-06 19:26:41 +01:00
Add from pad link to IPFS works. Get from IPFS to file works.
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
addedPads
|
||||
gettedPads
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 arnau
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
51
README.md
Normal file
51
README.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# pad2ipfs [](https://goreportcard.com/report/github.com/arnaucode/pad2ipfs)
|
||||
|
||||
Simply Go lang library to get the content from a pad (etherpad) and put into IPFS.
|
||||
|
||||
|
||||
Needs to have installed IPFS (https://ipfs.io), and the daemon running ('> ipfs daemon').
|
||||
|
||||
### Install
|
||||
```
|
||||
go get github.com/arnaucode/pad2ipfs
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
The added pads are stored in 'addedPads' directory.
|
||||
The getted pads are stored in 'gettedPads' directory.
|
||||
|
||||
|
||||
##### - Add
|
||||
Adds the content from a pad to IPFS
|
||||
|
||||
```go
|
||||
hash, err := pad2ipfs.Add(link, format)
|
||||
```
|
||||
```go
|
||||
hash, err := pad2ipfs.Add("https://board.net/p/selectedpad", "md")
|
||||
if err!=nil{
|
||||
fmt.Println(err)
|
||||
}
|
||||
```
|
||||
Supported formats:
|
||||
- md
|
||||
- txt
|
||||
- html
|
||||
- pdf
|
||||
- odt
|
||||
|
||||
|
||||
|
||||
##### - Get
|
||||
Gets the content from IPFS and stores it into a file
|
||||
|
||||
```go
|
||||
err := pad2ipfs.Get(hash, filename)
|
||||
```
|
||||
```go
|
||||
err := pad2ipfs.Get("QmVyp4JSREK5syLmNRCafkZkhzC7CfvS9qYWKfvfffqK2B", "selectedpad.md")
|
||||
if err!=nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
```
|
||||
80
pad2ipfs.go
Normal file
80
pad2ipfs.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package pad2ipfs
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
sh "github.com/ipfs/go-ipfs-api"
|
||||
)
|
||||
|
||||
const addedPads = "addedPads"
|
||||
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
|
||||
}
|
||||
56
pad2ipfs_test.go
Normal file
56
pad2ipfs_test.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package pad2ipfs
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/fatih/color"
|
||||
)
|
||||
|
||||
const checkIcon = "\xE2\x9C\x94 "
|
||||
|
||||
func TestGenerateEmptyMT(t *testing.T) {
|
||||
hash1, err := Add("http://board.net/p/pad1", "md")
|
||||
if err != nil {
|
||||
t.Errorf(err.Error())
|
||||
} else {
|
||||
color.Green(checkIcon + "added file1")
|
||||
fmt.Print(" IPFS hash:")
|
||||
color.Blue(hash1)
|
||||
}
|
||||
hash2, err := Add("http://board.net/p/pad2", "txt")
|
||||
if err != nil {
|
||||
t.Errorf(err.Error())
|
||||
} else {
|
||||
color.Green(checkIcon + "added file2")
|
||||
fmt.Print(" IPFS hash:")
|
||||
color.Blue(hash2)
|
||||
}
|
||||
hash3, err := Add("http://board.net/p/pad3", "html")
|
||||
if err != nil {
|
||||
t.Errorf(err.Error())
|
||||
} else {
|
||||
color.Green(checkIcon + "added file3")
|
||||
fmt.Print(" IPFS hash:")
|
||||
color.Blue(hash3)
|
||||
}
|
||||
|
||||
err = Get(hash1, "pad1.md")
|
||||
if err != nil {
|
||||
t.Errorf(err.Error())
|
||||
} else {
|
||||
color.Green(checkIcon + "getted file1")
|
||||
}
|
||||
err = Get(hash2, "pad2.txt")
|
||||
if err != nil {
|
||||
t.Errorf(err.Error())
|
||||
} else {
|
||||
color.Green(checkIcon + "getted file2")
|
||||
}
|
||||
err = Get(hash3, "pad3.html")
|
||||
if err != nil {
|
||||
t.Errorf(err.Error())
|
||||
} else {
|
||||
color.Green(checkIcon + "getted file3")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user