You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

122 lines
2.2 KiB

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))
}