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