package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/fatih/color"
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
type Routes []Route
|
|
|
|
var routes = Routes{
|
|
Route{
|
|
"Index",
|
|
"GET",
|
|
"/",
|
|
Index,
|
|
},
|
|
Route{
|
|
"GetPeers",
|
|
"GET",
|
|
"/peers",
|
|
GetPeers,
|
|
},
|
|
Route{
|
|
"PostUser",
|
|
"POST",
|
|
"/register",
|
|
PostUser,
|
|
},
|
|
Route{
|
|
"GenesisBlock",
|
|
"GET",
|
|
"/blocks/genesis",
|
|
GenesisBlock,
|
|
},
|
|
Route{
|
|
"NextBlock",
|
|
"GET",
|
|
"/blocks/next/{blockhash}",
|
|
NextBlock,
|
|
},
|
|
Route{
|
|
"LastBlock",
|
|
"GET",
|
|
"/blocks/last",
|
|
LastBlock,
|
|
},
|
|
}
|
|
|
|
type Address struct {
|
|
Address string `json:"address"` //the pubK of the user, to perform logins
|
|
}
|
|
|
|
func Index(w http.ResponseWriter, r *http.Request) {
|
|
fmt.Fprintln(w, runningPeer.ID)
|
|
}
|
|
func GetPeers(w http.ResponseWriter, r *http.Request) {
|
|
jResp, err := json.Marshal(outcomingPeersList)
|
|
check(err)
|
|
fmt.Fprintln(w, string(jResp))
|
|
}
|
|
func PostUser(w http.ResponseWriter, r *http.Request) {
|
|
|
|
decoder := json.NewDecoder(r.Body)
|
|
var address Address
|
|
err := decoder.Decode(&address)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer r.Body.Close()
|
|
fmt.Println(address)
|
|
color.Blue(address.Address)
|
|
|
|
//TODO add the verification of the address, to decide if it's accepted to create a new Block
|
|
block := blockchain.createBlock(address)
|
|
blockchain.addBlock(block)
|
|
|
|
go propagateBlock(block)
|
|
|
|
jResp, err := json.Marshal(blockchain)
|
|
check(err)
|
|
fmt.Fprintln(w, string(jResp))
|
|
}
|
|
|
|
func GenesisBlock(w http.ResponseWriter, r *http.Request) {
|
|
var genesis Block
|
|
if len(blockchain.Blocks) >= 0 {
|
|
genesis = blockchain.Blocks[0]
|
|
}
|
|
|
|
jResp, err := json.Marshal(genesis)
|
|
check(err)
|
|
fmt.Fprintln(w, string(jResp))
|
|
}
|
|
|
|
func NextBlock(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
blockhash := vars["blockhash"]
|
|
|
|
currBlock, err := blockchain.getBlockByHash(blockhash)
|
|
check(err)
|
|
nextBlock, err := blockchain.getBlockByHash(currBlock.NextHash)
|
|
check(err)
|
|
|
|
jResp, err := json.Marshal(nextBlock)
|
|
check(err)
|
|
fmt.Fprintln(w, string(jResp))
|
|
}
|
|
|
|
func LastBlock(w http.ResponseWriter, r *http.Request) {
|
|
var genesis Block
|
|
if len(blockchain.Blocks) > 0 {
|
|
genesis = blockchain.Blocks[len(blockchain.Blocks)-1]
|
|
}
|
|
|
|
jResp, err := json.Marshal(genesis)
|
|
check(err)
|
|
fmt.Fprintln(w, string(jResp))
|
|
}
|