From d054e4182eebbb20a4bace44c6c7b4d768b9ddff Mon Sep 17 00:00:00 2001
From: Luca Moser <moser.luca@gmail.com>
Date: Wed, 15 Jan 2020 14:23:43 +0100
Subject: [PATCH] Set new txs as modified, adjusts webapi endpoint methods
 (#120)

---
 client/lib.go                             | 32 ++++++++++++-----------
 plugins/tangle/solidifier.go              |  4 ++-
 plugins/webapi/findTransactions/plugin.go |  3 +--
 plugins/webapi/getTransactions/plugin.go  |  2 +-
 4 files changed, 22 insertions(+), 19 deletions(-)

diff --git a/client/lib.go b/client/lib.go
index fbe735e7..d60200d6 100644
--- a/client/lib.go
+++ b/client/lib.go
@@ -40,13 +40,16 @@ const (
 	contentTypeJSON = "application/json"
 )
 
-func NewGoShimmerAPI(node string) *GoShimmerAPI {
+func NewGoShimmerAPI(node string, httpClient ...http.Client) *GoShimmerAPI {
+	if len(httpClient) > 0 {
+		return &GoShimmerAPI{node: node, httpClient: httpClient[0]}
+	}
 	return &GoShimmerAPI{node: node}
 }
 
 type GoShimmerAPI struct {
-	http.Client
-	node string
+	httpClient http.Client
+	node       string
 }
 
 type errorresponse struct {
@@ -60,7 +63,7 @@ func interpretBody(res *http.Response, decodeTo interface{}) error {
 	}
 	defer res.Body.Close()
 
-	if res.StatusCode == http.StatusOK {
+	if res.StatusCode == http.StatusOK || res.StatusCode == http.StatusCreated {
 		return json.Unmarshal(resBody, decodeTo)
 	}
 
@@ -80,20 +83,17 @@ func interpretBody(res *http.Response, decodeTo interface{}) error {
 	return errors.Wrap(ErrUnknownError, errRes.Error)
 }
 
-func (api *GoShimmerAPI) BroadcastData(targetAddress trinary.Trytes, data trinary.Trytes) (trinary.Hash, error) {
+func (api *GoShimmerAPI) BroadcastData(targetAddress trinary.Trytes, data string) (trinary.Hash, error) {
 	if !guards.IsHash(targetAddress) {
 		return "", errors.Wrapf(consts.ErrInvalidHash, "invalid address: %s", targetAddress)
 	}
-	if !guards.IsTrytes(data) {
-		return "", errors.Wrapf(consts.ErrInvalidTrytes, "invalid trytes: %s", data)
-	}
 
 	reqBytes, err := json.Marshal(&webapi_broadcastData.Request{Address: targetAddress, Data: data})
 	if err != nil {
 		return "", err
 	}
 
-	res, err := api.Post(fmt.Sprintf("%s/%s", api.node, routeBroadcastData), contentTypeJSON, bytes.NewReader(reqBytes))
+	res, err := api.httpClient.Post(fmt.Sprintf("%s/%s", api.node, routeBroadcastData), contentTypeJSON, bytes.NewReader(reqBytes))
 	if err != nil {
 		return "", err
 	}
@@ -118,7 +118,7 @@ func (api *GoShimmerAPI) GetTrytes(txHashes trinary.Hashes) ([]trinary.Trytes, e
 		return nil, err
 	}
 
-	res, err := api.Post(fmt.Sprintf("%s/%s", api.node, routeGetTrytes), contentTypeJSON, bytes.NewReader(reqBytes))
+	res, err := api.httpClient.Post(fmt.Sprintf("%s/%s", api.node, routeGetTrytes), contentTypeJSON, bytes.NewReader(reqBytes))
 	if err != nil {
 		return nil, err
 	}
@@ -143,7 +143,7 @@ func (api *GoShimmerAPI) GetTransactions(txHashes trinary.Hashes) ([]webapi_getT
 		return nil, err
 	}
 
-	res, err := api.Post(fmt.Sprintf("%s/%s", api.node, routeGetTransactions), contentTypeJSON, bytes.NewReader(reqBytes))
+	res, err := api.httpClient.Post(fmt.Sprintf("%s/%s", api.node, routeGetTransactions), contentTypeJSON, bytes.NewReader(reqBytes))
 	if err != nil {
 		return nil, err
 	}
@@ -168,7 +168,7 @@ func (api *GoShimmerAPI) FindTransactions(query *webapi_findTransactions.Request
 		return nil, err
 	}
 
-	res, err := api.Post(fmt.Sprintf("%s/%s", api.node, routeFindTransactions), contentTypeJSON, bytes.NewReader(reqBytes))
+	res, err := api.httpClient.Post(fmt.Sprintf("%s/%s", api.node, routeFindTransactions), contentTypeJSON, bytes.NewReader(reqBytes))
 	if err != nil {
 		return nil, err
 	}
@@ -181,8 +181,9 @@ func (api *GoShimmerAPI) FindTransactions(query *webapi_findTransactions.Request
 	return resObj.Transactions, nil
 }
 
+
 func (api *GoShimmerAPI) GetNeighbors() (*webapi_getNeighbors.Response, error) {
-	res, err := api.Get(fmt.Sprintf("%s/%s", api.node, routeGetNeighbors))
+	res, err := api.httpClient.Get(fmt.Sprintf("%s/%s", api.node, routeGetNeighbors))
 	if err != nil {
 		return nil, err
 	}
@@ -195,8 +196,9 @@ func (api *GoShimmerAPI) GetNeighbors() (*webapi_getNeighbors.Response, error) {
 	return resObj, nil
 }
 
+
 func (api *GoShimmerAPI) GetTips() (*webapi_gtta.Response, error) {
-	res, err := api.Get(fmt.Sprintf("%s/%s", api.node, routeGetTransactionsToApprove))
+	res, err := api.httpClient.Get(fmt.Sprintf("%s/%s", api.node, routeGetTransactionsToApprove))
 	if err != nil {
 		return nil, err
 	}
@@ -210,7 +212,7 @@ func (api *GoShimmerAPI) GetTips() (*webapi_gtta.Response, error) {
 }
 
 func (api *GoShimmerAPI) ToggleSpammer(enable bool) (*webapi_spammer.Response, error) {
-	res, err := api.Get(fmt.Sprintf("%s/%s?cmd=%s", api.node, routeSpammer, func() string {
+	res, err := api.httpClient.Get(fmt.Sprintf("%s/%s?cmd=%s", api.node, routeSpammer, func() string {
 		if enable {
 			return "start"
 		}
diff --git a/plugins/tangle/solidifier.go b/plugins/tangle/solidifier.go
index 2ab00159..1a90076b 100644
--- a/plugins/tangle/solidifier.go
+++ b/plugins/tangle/solidifier.go
@@ -181,7 +181,9 @@ func processMetaTransaction(metaTransaction *meta_transaction.MetaTransaction) {
 	if tx, err := GetTransaction(metaTransaction.GetHash(), func(transactionHash trinary.Trytes) *value_transaction.ValueTransaction {
 		newTransaction = true
 
-		return value_transaction.FromMetaTransaction(metaTransaction)
+		tx := value_transaction.FromMetaTransaction(metaTransaction)
+		tx.SetModified(true)
+		return tx
 	}); err != nil {
 		log.Errorf("Unable to load transaction %s: %s", metaTransaction.GetHash(), err.Error())
 	} else if newTransaction {
diff --git a/plugins/webapi/findTransactions/plugin.go b/plugins/webapi/findTransactions/plugin.go
index 9c4fc937..ff9b406a 100644
--- a/plugins/webapi/findTransactions/plugin.go
+++ b/plugins/webapi/findTransactions/plugin.go
@@ -16,7 +16,7 @@ var log *logger.Logger
 
 func configure(plugin *node.Plugin) {
 	log = logger.NewLogger("API-findTransactions")
-	webapi.Server.GET("findTransactions", findTransactions)
+	webapi.Server.POST("findTransactions", findTransactions)
 }
 
 // findTransactions returns the array of transaction hashes for the
@@ -24,7 +24,6 @@ func configure(plugin *node.Plugin) {
 // If a node doesn't have any transaction hash for a given address in its ledger,
 // the value at the index of that address is empty.
 func findTransactions(c echo.Context) error {
-
 	var request Request
 
 	if err := c.Bind(&request); err != nil {
diff --git a/plugins/webapi/getTransactions/plugin.go b/plugins/webapi/getTransactions/plugin.go
index 448243f9..70c23132 100644
--- a/plugins/webapi/getTransactions/plugin.go
+++ b/plugins/webapi/getTransactions/plugin.go
@@ -16,7 +16,7 @@ var log *logger.Logger
 
 func configure(plugin *node.Plugin) {
 	log = logger.NewLogger("API-getTransactions")
-	webapi.Server.GET("getTransactions", getTransactions)
+	webapi.Server.POST("getTransactions", getTransactions)
 }
 
 // getTransactions returns the array of transactions for the
-- 
GitLab