added one line bash command to uplaod file to peernet

This commit is contained in:
2022-10-03 23:54:58 +04:00
parent 98d3ad6400
commit 216c6fd136

280
main.go
View File

@@ -1,177 +1,217 @@
package main
import (
"bytes"
"encoding/hex"
"encoding/json"
"fmt"
"github.com/PeernetOfficial/core"
"github.com/PeernetOfficial/core/webapi"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"io"
"io/ioutil"
"net/http"
"time"
"bytes"
"encoding/hex"
"encoding/json"
"errors"
"fmt"
"github.com/PeernetOfficial/core"
"github.com/PeernetOfficial/core/btcec"
"github.com/PeernetOfficial/core/webapi"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"io"
"io/ioutil"
"mime/multipart"
"net/http"
"time"
)
// StartPeernet start peernet
func InitPeernet() *core.Backend {
backend, status, err := core.Init("Your application/1.0", "Config.yaml", nil, nil)
if status != core.ExitSuccess {
fmt.Printf("Error %d initializing backend: %s\n", status, err.Error())
return nil
}
backend, status, err := core.Init("Your application/1.0", "Config.yaml", nil, nil)
if status != core.ExitSuccess {
fmt.Printf("Error %d initializing backend: %s\n", status, err.Error())
return nil
}
return backend
return backend
}
func RunPeernet(backend *core.Backend) {
webapi.Start(backend, []string{"0.0.0.0:8081"}, false, "", "", 10*time.Second, 10*time.Second, uuid.Nil)
backend.Connect()
webapi.Start(backend, []string{"0.0.0.0:8081"}, false, "", "", 10*time.Second, 10*time.Second, uuid.Nil)
backend.Connect()
for {
for {
}
}
}
type WarehouseResult struct {
Status int `json:"status"`
Hash []byte `json:"hash"`
Status int `json:"status"`
Hash []byte `json:"hash"`
}
type BlockchainRequest struct {
Files []File `json:"files"`
Files []File `json:"files"`
}
type File struct {
Hash []byte `json:"hash"`
Type int `json:"type"`
Name string `json:"name"`
Hash []byte `json:"hash"`
Type int `json:"type"`
Name string `json:"name"`
}
func AddFileWarehouse(file io.Reader) *WarehouseResult {
url := "http://0.0.0.0:8081/warehouse/create"
url := "http://0.0.0.0:8081/warehouse/create"
req, err := http.NewRequest("POST", url, file)
//req.Header.Set("X-Custom-Header", "myvalue")
//req.Header.Set("Content-Type", "application/json")
req, err := http.NewRequest("POST", url, file)
//req.Header.Set("X-Custom-Header", "myvalue")
//req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("response Status:", resp.Status)
fmt.Println("response Headers:", resp.Header)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(body))
var result WarehouseResult
err = json.Unmarshal(body, &result)
if err != nil {
fmt.Println(err)
}
fmt.Println("response Status:", resp.Status)
fmt.Println("response Headers:", resp.Header)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(body))
var result WarehouseResult
err = json.Unmarshal(body, &result)
if err != nil {
fmt.Println(err)
}
return &result
return &result
}
type BlockchainResponse struct {
Status int `json:"status"`
Height int `json:"height"`
Version int `json:"version"`
Status int `json:"status"`
Height int `json:"height"`
Version int `json:"version"`
}
func AddFileToBlockchain(hash []byte, filename string) *BlockchainResponse {
url := "http://0.0.0.0:8081/blockchain/file/add"
url := "http://0.0.0.0:8081/blockchain/file/add"
// Create file object for post
var blockchainRequest BlockchainRequest
var files File
files.Name = filename
files.Hash = hash
files.Type = 0
blockchainRequest.Files = append(blockchainRequest.Files, files)
// Create file object for post
var blockchainRequest BlockchainRequest
var files File
files.Name = filename
files.Hash = hash
files.Type = 0
blockchainRequest.Files = append(blockchainRequest.Files, files)
Byte, err := json.Marshal(blockchainRequest)
Byte, err := json.Marshal(blockchainRequest)
// convert bytes
req, err := http.NewRequest("POST", url, bytes.NewBuffer(Byte))
//req.Header.Set("X-Custom-Header", "myvalue")
req.Header.Set("Content-Type", "application/json")
// convert bytes
req, err := http.NewRequest("POST", url, bytes.NewBuffer(Byte))
//req.Header.Set("X-Custom-Header", "myvalue")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("response Status:", resp.Status)
fmt.Println("response Headers:", resp.Header)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(body))
var result BlockchainResponse
err = json.Unmarshal(body, &result)
if err != nil {
return nil
}
fmt.Println("response Status:", resp.Status)
fmt.Println("response Headers:", resp.Header)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(body))
var result BlockchainResponse
err = json.Unmarshal(body, &result)
if err != nil {
return nil
}
return &result
return &result
//return &result
//return &result
}
// UploadFile Simple abstracted function to add files to peernet core
func UploadFile(backend *core.Backend, file *multipart.File, header *multipart.FileHeader) (*btcec.PublicKey, *WarehouseResult, error) {
buf := bytes.NewBuffer(nil)
if _, err := io.Copy(buf, *file); err != nil {
return nil, nil, errors.New("io.Copy not successful")
}
// adds file to warehouse
warehouseResult := AddFileWarehouse(buf)
fmt.Println(warehouseResult.Hash)
// current using default port for Peernet api which is 8080
// First add file to warehouse
// Adds the file to a blockchain
Blockchainfo := AddFileToBlockchain(warehouseResult.Hash, header.Filename)
if Blockchainfo == nil {
return nil, nil, errors.New("add file to blockchain not successful")
}
_, publicKey := backend.ExportPrivateKey()
fmt.Println(hex.EncodeToString(publicKey.SerializeCompressed()))
return publicKey, warehouseResult, nil
}
// Add files
func main() {
// Start peernet
backend := InitPeernet()
go RunPeernet(backend)
// Start peernet
backend := InitPeernet()
go RunPeernet(backend)
r := gin.Default()
r.LoadHTMLGlob("templates/*.html")
r.Static("/templates", "./templates")
r.GET("/upload", func(c *gin.Context) {
c.HTML(http.StatusOK, "upload2.html", nil)
})
r := gin.Default()
r.LoadHTMLGlob("templates/*.html")
r.Static("/templates", "./templates")
r.GET("/upload", func(c *gin.Context) {
c.HTML(http.StatusOK, "upload2.html", nil)
})
r.POST("/uploadFile", func(c *gin.Context) {
file, header, err := c.Request.FormFile("file")
defer file.Close()
r.POST("/uploadFile", func(c *gin.Context) {
file, header, err := c.Request.FormFile("file")
defer file.Close()
if err != nil {
fmt.Println(err)
}
if err != nil {
fmt.Println(err)
}
buf := bytes.NewBuffer(nil)
if _, err := io.Copy(buf, file); err != nil {
fmt.Println(err)
}
publicKey, warehouseResult, err := UploadFile(backend, &file, header)
if err != nil {
fmt.Println(err)
}
// adds file to warehouse
warehouseResult := AddFileWarehouse(buf)
fmt.Println(warehouseResult.Hash)
// current using default port for Peernet api which is 8080
// First add file to warehouse
c.HTML(http.StatusOK, "upload2.html", gin.H{
"hash": hex.EncodeToString(warehouseResult.Hash),
"filename": header.Filename,
"size": header.Size,
"link": "https://peer.ae/" + hex.EncodeToString(publicKey.SerializeCompressed()) + "/" + hex.EncodeToString(warehouseResult.Hash),
})
// Adds the file to a blockchain
Blockchainfo := AddFileToBlockchain(warehouseResult.Hash, header.Filename)
if Blockchainfo == nil {
return
}
})
_, publicKey := backend.ExportPrivateKey()
fmt.Println(hex.EncodeToString(publicKey.SerializeCompressed()))
// Implement CURL script to ensure linux users can upload directly
// the Cli like https://bashupload.com
// Ex: curl peer.ae/upload -T your_file.txt
c.HTML(http.StatusOK, "upload2.html", gin.H{
"hash": hex.EncodeToString(warehouseResult.Hash),
"filename": header.Filename,
"size": header.Size,
"link": "https://peer.ae/" + hex.EncodeToString(publicKey.SerializeCompressed()) + "/" + hex.EncodeToString(warehouseResult.Hash),
})
r.POST("/uploadCurl", func(c *gin.Context) {
file, header, err := c.Request.FormFile("add")
defer file.Close()
})
if err != nil {
fmt.Println(err)
}
r.Run()
publicKey, warehouseResult, err := UploadFile(backend, &file, header)
if err != nil {
fmt.Println(err)
}
link := "https://peer.ae/" + hex.EncodeToString(publicKey.SerializeCompressed()) + "/" + hex.EncodeToString(warehouseResult.Hash)
c.Data(http.StatusOK, "plain/text", []byte(link))
// c.JSON(http.StatusOK, gin.H{
// "hash": hex.EncodeToString(warehouseResult.Hash),
// "filename": header.Filename,
// "size": header.Size,
// "link": "https://peer.ae/" + hex.EncodeToString(publicKey.SerializeCompressed()) + "/" + hex.EncodeToString(warehouseResult.Hash),
//})
})
r.Run()
}