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