package main import ( "github.com/gin-gonic/gin" "fmt" str "strings" err "errors" ) func main() { router := gin.Default() router.LoadHTMLGlob("templates/*.html") router.POST("/ethereum/:name", func(ctx *gin.Context) { response := map[string]string{} name := ctx.Param("name") var pageError, submitError error if !str.HasSuffix(name, ".go") { pageError = err.New("File not found"); } htmlFile := str.Replace(name, ".go", "", -1) htmlFile = str.Join([]string{htmlFile, "html"},".") switch name { case "eth_address_form.go": privateKeyHex := ctx.PostForm("input") retResponse, retError := generateKeyAndAddress(privateKeyHex) submitError = retError response = retResponse case "eth_address_validator.go": address := ctx.PostForm("address") retResponse, retError := isValidAddress(address) submitError = retError response = retResponse case "eth_contract_address_form.go": address := ctx.PostForm("address") nonce := ctx.PostForm("nonce") retResponse, retError := genContractAddress(address, nonce) submitError = retError response = retResponse case "eth_rlp_encoder.go": str := ctx.PostForm("string") retResponse, retError := rlpEncode(str) submitError = retError response = retResponse case "eth_tx_form.go": chainId := ctx.PostForm("chain") nonce := ctx.PostForm("nonce") value := ctx.PostForm("value") gasLimit := ctx.PostForm("gas_limit") to := ctx.PostForm("to") data := ctx.PostForm("data") gasPrice := ctx.PostForm("gas_price") privKey := ctx.PostForm("privkey") retResponse, retError := genSignedTx(chainId, nonce, value, gasLimit, to, data, gasPrice, privKey) submitError = retError response = retResponse case "eth_tx_nonce.go": url := ctx.PostForm("host") + "/" + ctx.PostForm("path") address := ctx.PostForm("address") blockParam := ctx.PostForm("blockparam") retResponse, retError := getNonceTx(url, address, blockParam) submitError = retError response = retResponse case "eth_json_rpc.go": url := ctx.PostForm("host") + "/" + ctx.PostForm("path") method := ctx.PostForm("method") jsonver := ctx.PostForm("jsonver") params := ctx.PostForm("params") retResponse, retError := callJsonRpc(url, jsonver, method, params) submitError = retError response = retResponse default: pageError = err.New("File not found"); } var responseCode int = 200 if pageError != nil { responseCode = 404 } htmlVars := gin.H{} if(submitError != nil) { htmlVars["error"] = submitError } for k,v := range response { htmlVars[k] = v } for pk, pv := range ctx.Request.PostForm { htmlVars[pk] = pv[0] } htmlVars["chains"] = getChains() htmlVars["hosts"] = getHosts() htmlVars["blockParams"] = getBlockParams() ctx.HTML(responseCode, htmlFile, htmlVars) }) router.GET("/ethereum/:name", func(ctx *gin.Context) { fmt.Print("") name := ctx.Param("name") var thisError error if !str.HasSuffix(name, ".go") { thisError = err.New("File not found"); } htmlFile := str.Replace(name, ".go", "", -1) htmlFile = str.Join([]string{htmlFile, "html"},".") var responseCode int = 200 if thisError != nil { responseCode = 404 } htmlVars := gin.H{} htmlVars["chains"] = getChains() htmlVars["hosts"] = getHosts() htmlVars["blockParams"] = getBlockParams() ctx.HTML(responseCode, htmlFile, htmlVars) }) //due to port 80 & 443 conflict with apache, i have to enable new port 2053 to support cloudflare's https router.RunTLS(":2053", "../../../cert/server.crt", "../../../cert/server.key") //alternatively, you may consider to simply turn on 80 port like this to use HTTP //router.Run(":80") }
package main import ( "github.com/gin-gonic/gin" "fmt" str "strings" err "errors" ) func main() { router := gin.Default() router.LoadHTMLGlob("templates/*.html") router.POST("/ethereum/:name", func(ctx *gin.Context) { response := map[string]string{} name := ctx.Param("name") var pageError, submitError error if !str.HasSuffix(name, ".go") { pageError = err.New("File not found"); } htmlFile := str.Replace(name, ".go", "", -1) htmlFile = str.Join([]string{htmlFile, "html"},".") switch name { case "eth_address_form.go": privateKeyHex := ctx.PostForm("input") retResponse, retError := generateKeyAndAddress(privateKeyHex) submitError = retError response = retResponse case "eth_address_validator.go": address := ctx.PostForm("address") retResponse, retError := isValidAddress(address) submitError = retError response = retResponse case "eth_contract_address_form.go": address := ctx.PostForm("address") nonce := ctx.PostForm("nonce") retResponse, retError := genContractAddress(address, nonce) submitError = retError response = retResponse case "eth_rlp_encoder.go": str := ctx.PostForm("string") retResponse, retError := rlpEncode(str) submitError = retError response = retResponse case "eth_tx_form.go": chainId := ctx.PostForm("chain") nonce := ctx.PostForm("nonce") value := ctx.PostForm("value") gasLimit := ctx.PostForm("gas_limit") to := ctx.PostForm("to") data := ctx.PostForm("data") gasPrice := ctx.PostForm("gas_price") privKey := ctx.PostForm("privkey") retResponse, retError := genSignedTx(chainId, nonce, value, gasLimit, to, data, gasPrice, privKey) submitError = retError response = retResponse case "eth_tx_nonce.go": url := ctx.PostForm("host") + "/" + ctx.PostForm("path") address := ctx.PostForm("address") blockParam := ctx.PostForm("blockparam") retResponse, retError := getNonceTx(url, address, blockParam) submitError = retError response = retResponse case "eth_json_rpc.go": url := ctx.PostForm("host") + "/" + ctx.PostForm("path") method := ctx.PostForm("method") jsonver := ctx.PostForm("jsonver") params := ctx.PostForm("params") retResponse, retError := callJsonRpc(url, jsonver, method, params) submitError = retError response = retResponse default: pageError = err.New("File not found"); } var responseCode int = 200 if pageError != nil { responseCode = 404 } htmlVars := gin.H{} if(submitError != nil) { htmlVars["error"] = submitError } for k,v := range response { htmlVars[k] = v } for pk, pv := range ctx.Request.PostForm { htmlVars[pk] = pv[0] } htmlVars["chains"] = getChains() htmlVars["hosts"] = getHosts() htmlVars["blockParams"] = getBlockParams() ctx.HTML(responseCode, htmlFile, htmlVars) }) router.GET("/ethereum/:name", func(ctx *gin.Context) { fmt.Print("") name := ctx.Param("name") var thisError error if !str.HasSuffix(name, ".go") { thisError = err.New("File not found"); } htmlFile := str.Replace(name, ".go", "", -1) htmlFile = str.Join([]string{htmlFile, "html"},".") var responseCode int = 200 if thisError != nil { responseCode = 404 } htmlVars := gin.H{} htmlVars["chains"] = getChains() htmlVars["hosts"] = getHosts() htmlVars["blockParams"] = getBlockParams() ctx.HTML(responseCode, htmlFile, htmlVars) }) //due to port 80 & 443 conflict with apache, i have to enable new port 2053 to support cloudflare's https router.RunTLS(":2053", "../../../cert/server.crt", "../../../cert/server.key") //alternatively, you may consider to simply turn on 80 port like this to use HTTP //router.Run(":80") }