arnaucube
arnaucube/padArchiverPublic Self-hosted repository
small update with some improvements, updated readme
arnaucode arnaucode@gmail.com
Sun, 15 Apr 2018 21:21:55 +0200
commit

9ecec88e7d4e55294eaff60a7266d280319f9f97

parent

9bd5a48bccf7e7e2c7fb196a9ba9ebb28fad62f4

M README.md → README.md

@@ -1,7 +1,14 @@

-# padArchiver -Tool to store a pad (from the link) into IPFS and Git. +# padArchiver [![Go Report Card](https://goreportcard.com/badge/github.com/arnaucode/padArchiver)](https://goreportcard.com/report/github.com/arnaucode/padArchiver) + +Tool to store pads (from url) into local directory and IPFS. + +The tool is composed by different tools around the library: +- webServer +- listPadsImporter +- apiServer +- cli -All the necessary files are in the /build directory. +All the necessary files are in the /build directory. Can be build using the 'bash build.sh' script. ## 1.- webServer This is a webserver that automatically generates a web from the pads directories and files stored.

@@ -9,6 +16,10 @@ To run, inside 'build' directory:

``` ./webServer ``` + +![padArchiver-webServer](https://raw.githubusercontent.com/arnaucode/padArchiver/master/padArchiver-webServer.gif) + +The html template can be easily changed. ## 2.- listPadsImporter This is to import all pads from the json file 'list.json'.

@@ -116,3 +127,5 @@ ```

./padArchiver-cli ``` And follow the instructions. + +![padArchiver-cli](https://raw.githubusercontent.com/arnaucode/padArchiver/master/padArchiver-cli.png)
M apiServer/main.go → apiServer/main.go

@@ -13,12 +13,15 @@ padArchiver ".."

"github.com/gorilla/mux" ) +//PadModel is the data structure for each pad type PadModel struct { Link string `json:"link"` Dir string `json:"dir"` Title string `json:"title"` IpfsHash string `json:"ipfsHash"` } + +//Repo contains all the pads --currently not used-- type Repo struct { Pads []string `json:"pads"` }

@@ -37,6 +40,7 @@ log.Println(config.Port)

log.Fatal(http.ListenAndServe(":"+config.Port, router)) } +//GetReposList is the endpoint to get the list of current repos func GetReposList(w http.ResponseWriter, r *http.Request) { file, err := os.Open(padArchiver.Storage) if err != nil {

@@ -56,6 +60,7 @@ check(err)

fmt.Fprintln(w, string(jResp)) } +//GetRepoIDList is the endpoint to get one repo by id func GetRepoIDList(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) repoid := vars["repoid"]

@@ -74,6 +79,8 @@ jResp, err := json.Marshal(files)

check(err) fmt.Fprintln(w, string(jResp)) } + +//PostStorePad is the endpoint to post the signal to store one pad func PostStorePad(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) repoid := vars["repoid"]
M apiServer/readConfig.go → apiServer/readConfig.go

@@ -5,6 +5,7 @@ "encoding/json"

"io/ioutil" ) +//Config is the configuration of the API server type Config struct { Port string `json:"port"` }
M build/templates/menuTemplate.html → build/templates/menuTemplate.html

@@ -1,6 +1,6 @@

<ul class="list-group"> {{range .Items}} {{if .IsDir}} - <br><br> + <br> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item active" aria-current="page">
M build/templates/pageTemplate.html → build/templates/pageTemplate.html

@@ -57,7 +57,7 @@ <button class="btn btn-outline-info my-2 my-sm-0" type="submit">Search</button>

</form> </nav> - <br><br> + <br> <div class="container"> <div class="row"> <div class="col-sm-3">
M build/templates/wellcome.md → build/templates/wellcome.md

@@ -1,7 +1,9 @@

### Wellcome to the padArchiver. Select one pad from the side menu to visualize. -![golang logo](https://seeklogo.com/images/G/go-logo-046185B647-seeklogo.com.png) +![golang logo](data:image/jpeg;base64,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) This is the wellcome message, from the 'templates/wellcome.md' file. + +The complete code can be found in https://github.com/arnaucode/padArchiver
M cli/main.go → cli/main.go

@@ -35,7 +35,7 @@

newcommand := bufio.NewReader(os.Stdin) fmt.Print("Please select command number") options := ` - 1 - Store Pad (to IPFS, Git, and send Telegram notification) + 1 - Store Pad (to local directory and IPFS) 2 - IPFS hash to file 0 - Exit cli option to select: `

@@ -47,7 +47,7 @@ option = strings.TrimSpace(option)

switch option { case "1": - fmt.Println("selected 1 - Store Pad (to IPFS and Git)") + fmt.Println("selected 1 - Store Pad (to local directory and IPFS)") option1() break case "2":
M etherpad.go → etherpad.go

@@ -8,6 +8,7 @@ "net/http"

"os" ) +//GetPad gets the pad from the link, and stores it into local directory func (repo *Repo) GetPad(link string, extension string, directory string, title string) (string, error) { if extension != "md" && extension != "txt" && extension != "html" && extension != "pdf" && extension != "odt" { return "", errors.New("No valid extension")
M file.go → file.go

@@ -4,6 +4,7 @@ import (

"io/ioutil" ) +//AddLineToFile adds a line in the beginning of the file func AddLineToFile(path string, line string) error { fileBytes, err := ioutil.ReadFile(path) if err != nil {
M git.go → git.go

@@ -5,8 +5,9 @@ "fmt"

"os/exec" ) -//TODO this is not finished +//GitUpdate updates the git func (repo *Repo) GitUpdate(commitMsg string) error { + //TODO this is not finished _, err := exec.Command("bash", "-c", "git pull origin master").Output() if err != nil { fmt.Println(err)
M ipfs.go → ipfs.go

@@ -7,11 +7,13 @@

sh "github.com/ipfs/go-ipfs-api" ) -//GettedPads is the directory where are stored the pads that are getted from IPFS +//IpfsStorage is the directory where are stored the pads that are getted from IPFS const IpfsStorage = "ipfsStorage" + +//GettedPads is the directory where are stored the pads that are getted from the links const GettedPads = "ipfsStorage/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 +//IpfsAdd 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 IpfsAdd(path string) (string, error) { //connect to ipfs shell s := sh.NewShell("localhost:5001")

@@ -24,7 +26,7 @@ }

return ipfsHash, nil } -//Get gets the content from IPFS for a given hash, and saves it into a file +//IpfsGet gets the content from IPFS for a given hash, and saves it into a file func IpfsGet(hash string, filename string) error { //create the pads directory //create the pads directory _ = os.Mkdir(IpfsStorage, os.ModePerm)
M listPadsImporter/main.go → listPadsImporter/main.go

@@ -9,11 +9,14 @@ padArchiver ".."

"github.com/fatih/color" ) +//PadModel is the data struct of each pad in the list.json file type PadModel struct { Link string `json:"link"` Dir string `json:"dir"` Title string `json:"title"` } + +//ListModel is the struct of the data from the list.json file type ListModel struct { RepoID string `json:"repoid"` Pads []PadModel `json:"pads"`
M padArchiver.go → padArchiver.go

@@ -6,12 +6,15 @@

"github.com/fatih/color" ) +//Storage is the directory where are stored the repos const Storage = "reposStorage" +//Repo is the directory where is placed the repository of pads type Repo struct { Dir string } +//OpenRepo opens a repo from the directory func OpenRepo(directory string) Repo { //if not exist create the repos directory _ = os.Mkdir(Storage, os.ModePerm)

@@ -23,6 +26,7 @@ _ = os.Mkdir(repo.Dir, os.ModePerm)

return repo } +//StorePad gets a pad from the link, and stores it into local directory. Then also, adds the file to IPFS. func (repo *Repo) StorePad(link string, directory string, title string, ipfsActive bool) (string, error) { path, err := repo.GetPad(link, "md", directory, title) if err != nil {
M webServer/main.go → webServer/main.go

@@ -13,15 +13,20 @@ padArchiver ".."

"github.com/gorilla/mux" ) +//ItemModel is the model for each one of the files and directories in the directory of the pads type ItemModel struct { Name string Path string IsDir bool } + +//MenuModel is the struct for all the menu, containing Items type MenuModel struct { PageTitle string Items []ItemModel } + +//PageModel is the data model used in the html templates type PageModel struct { Title string MenuContent template.HTML

@@ -100,7 +105,7 @@ content, err := fileToHTML(path)

check(err) var page PageModel - page.Title = path + page.Title = strings.Replace(path, padArchiver.Storage, "", -1) page.Content = template.HTML(content) page.MenuContent = generateMenuHTML("")
M webServer/templates/menuTemplate.html → webServer/templates/menuTemplate.html

@@ -1,6 +1,6 @@

<ul class="list-group"> {{range .Items}} {{if .IsDir}} - <br><br> + <br> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item active" aria-current="page">
M webServer/templates/pageTemplate.html → webServer/templates/pageTemplate.html

@@ -57,7 +57,7 @@ <button class="btn btn-outline-info my-2 my-sm-0" type="submit">Search</button>

</form> </nav> - <br><br> + <br> <div class="container"> <div class="row"> <div class="col-sm-3">
M webServer/templates/wellcome.md → webServer/templates/wellcome.md

@@ -1,7 +1,9 @@

### Wellcome to the padArchiver. Select one pad from the side menu to visualize. -![golang logo](https://seeklogo.com/images/G/go-logo-046185B647-seeklogo.com.png) +![golang logo](data:image/jpeg;base64,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) This is the wellcome message, from the 'templates/wellcome.md' file. + +The complete code can be found in https://github.com/arnaucode/padArchiver