From 9b7ff515ec19b7072421aebb9b194c6790c330a0 Mon Sep 17 00:00:00 2001
From: "Gomez Goiri, Aitor" <aitor.gomez@tecnalia.com>
Date: Fri, 1 Apr 2022 12:27:21 +0200
Subject: [PATCH] Delegating organization name extraction so it can consider
 affiliation too

---
 chaincode/constants/organizations.go       | 15 +++++++++++++++
 chaincode/controller/bid/acl.go            |  3 ++-
 chaincode/controller/bid/bid_controller.go |  2 +-
 chaincode/controller/stats/stub.go         |  9 +++++----
 chaincode/go.mod                           |  2 +-
 chaincode/go.sum                           |  4 ++--
 chaincode/middleware/acl.go                |  7 ++++---
 chaincode/middleware/selector.go           | 10 ++++++----
 8 files changed, 36 insertions(+), 16 deletions(-)
 create mode 100644 chaincode/constants/organizations.go

diff --git a/chaincode/constants/organizations.go b/chaincode/constants/organizations.go
new file mode 100644
index 0000000..d8a53da
--- /dev/null
+++ b/chaincode/constants/organizations.go
@@ -0,0 +1,15 @@
+/**
+ * constants.go
+ *
+ * COPYRIGHT: FUNDACIÓN TECNALIA RESEARCH & INNOVATION, 2022.
+ */
+
+package constants
+
+var (
+	SidenorOrg string		= "sidenor.com"
+	SidenorMsp string		= "sidenor-com"
+	Cement1Msp string		= "cement-company1-com"
+	Cement2Msp string		= "cement-company2-com"
+	PublicAdminMsp string	= "public-administration-com"
+)
\ No newline at end of file
diff --git a/chaincode/controller/bid/acl.go b/chaincode/controller/bid/acl.go
index d04764d..8f498c9 100644
--- a/chaincode/controller/bid/acl.go
+++ b/chaincode/controller/bid/acl.go
@@ -9,6 +9,7 @@ package bid
 import (
 	"errors"
 
+	"git.code.tecnalia.com/blockchain/hypercog/constants"
 	"git.code.tecnalia.com/ledgerbuilder/sdk/core/api"
 	"git.code.tecnalia.com/ledgerbuilder/sdk/core/fabric/protos"
 	"git.code.tecnalia.com/ledgerbuilder/sdk/shared"
@@ -27,7 +28,7 @@ func (c BidController) OwnedBySidenor(trigger shared.TriggerFunction) shared.Tri
 			return api.NewApiResponsePtr(fnName, err, nil).SendResponse()
 		}
 
-		if storedAsset.Owner.Org != "sidenor.com"  {
+		if storedAsset.Owner.Org != constants.SidenorOrg  {
 			return api.NewApiResponsePtr(fnName, errNotSidenorMSP, nil).SendResponse()
 		}
 
diff --git a/chaincode/controller/bid/bid_controller.go b/chaincode/controller/bid/bid_controller.go
index beb6427..745a7a2 100644
--- a/chaincode/controller/bid/bid_controller.go
+++ b/chaincode/controller/bid/bid_controller.go
@@ -118,7 +118,7 @@ func (c BidController) BidAsset(stub shared.LedgerBuildrStubInterface, params sh
 		return api.NewApiResponsePtr(fnName, err, nil).SendResponse()
 	}
 
-	org, err := stub.GetOrganization()
+	org, err := model.GetOrganization(stub)
 	if err != nil {
 		return api.NewApiResponsePtr(fnName, err, nil).SendResponse()
 	}
diff --git a/chaincode/controller/stats/stub.go b/chaincode/controller/stats/stub.go
index 66066ad..175d4d4 100644
--- a/chaincode/controller/stats/stub.go
+++ b/chaincode/controller/stats/stub.go
@@ -14,8 +14,9 @@ import (
 	"git.code.tecnalia.com/ledgerbuilder/sdk/core/util/logging"
 	"git.code.tecnalia.com/ledgerbuilder/sdk/shared"
 
-	"git.code.tecnalia.com/blockchain/hypercog/model"
+	hmodel "git.code.tecnalia.com/blockchain/hypercog/model"
 	"git.code.tecnalia.com/blockchain/hypercog/model/stats"
+	"git.code.tecnalia.com/traceblock/sdk/model"
 )
 
 const STEEL_ORG_LIST_KEY = "steel_orgs"
@@ -156,7 +157,7 @@ func addOrgIfNotExist(stub shared.LedgerBuildrStubInterface, key string, org str
 
 
 func retrieveExistingStats(stub shared.LedgerBuildrStubInterface) (*stats.RawSteelOrgStats, error) {
-	org, err := stub.GetOrganization()
+	org, err := model.GetOrganization(stub)
 	if err != nil {
 		return nil, err
 	}
@@ -170,7 +171,7 @@ func retrieveExistingStats(stub shared.LedgerBuildrStubInterface) (*stats.RawSte
 }
 
 func upgradeSteelStats(stub shared.LedgerBuildrStubInterface, customStats *stats.RawSteelOrgStats) (error) {
-	org, err := stub.GetOrganization()
+	org, err := model.GetOrganization(stub)
 	if err != nil {
 		return err
 	}
@@ -237,7 +238,7 @@ func RegisterDiscard(stub shared.LedgerBuildrStubInterface, quantity uint32, uni
 	return nil
 }
 
-func RegisterSale(stub shared.LedgerBuildrStubInterface, acceptedBid *model.Bid, units string) (error) {
+func RegisterSale(stub shared.LedgerBuildrStubInterface, acceptedBid *hmodel.Bid, units string) (error) {
 	senderOrgStats, err := retrieveExistingStats(stub)
 	if err != nil {
 		return err
diff --git a/chaincode/go.mod b/chaincode/go.mod
index a43b720..ebc0247 100644
--- a/chaincode/go.mod
+++ b/chaincode/go.mod
@@ -4,7 +4,7 @@ go 1.15
 
 require (
 	git.code.tecnalia.com/ledgerbuilder/sdk v1.4.1
-	git.code.tecnalia.com/traceblock/sdk v1.0.1-0.20220308162114-1a900e794740
+	git.code.tecnalia.com/traceblock/sdk v1.0.1-0.20220401083654-f7585e7ed3ce
 	github.com/mitchellh/mapstructure v1.4.2
 	github.com/stretchr/testify v1.7.0
 )
diff --git a/chaincode/go.sum b/chaincode/go.sum
index b2ed95a..0fe234c 100644
--- a/chaincode/go.sum
+++ b/chaincode/go.sum
@@ -1,8 +1,8 @@
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 git.code.tecnalia.com/ledgerbuilder/sdk v1.4.1 h1:XK0VH1OWqv9G1XeTM3NMvuxJYTBFStSJ6FLlcp3lhO0=
 git.code.tecnalia.com/ledgerbuilder/sdk v1.4.1/go.mod h1:lzlMPHixE7XouwzF3UY21z40uQNxeBGhzmjd3KZk2cQ=
-git.code.tecnalia.com/traceblock/sdk v1.0.1-0.20220308162114-1a900e794740 h1:cRE2qGRBJozlhpWMvTkvQ3soyjmciKE1w0OpX8C6JkI=
-git.code.tecnalia.com/traceblock/sdk v1.0.1-0.20220308162114-1a900e794740/go.mod h1:1+VF+RqzmkMTqhqkvp8Z/t9/LONNr1vBoEkttT8oOVo=
+git.code.tecnalia.com/traceblock/sdk v1.0.1-0.20220401083654-f7585e7ed3ce h1:Rv+Jz1Qk57OYOa92pccqfD6Mi6rZO6IOOCfyrnLuzXo=
+git.code.tecnalia.com/traceblock/sdk v1.0.1-0.20220401083654-f7585e7ed3ce/go.mod h1:1+VF+RqzmkMTqhqkvp8Z/t9/LONNr1vBoEkttT8oOVo=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/RoaringBitmap/roaring v0.5.1/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
 github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
diff --git a/chaincode/middleware/acl.go b/chaincode/middleware/acl.go
index 5a3390e..9346111 100644
--- a/chaincode/middleware/acl.go
+++ b/chaincode/middleware/acl.go
@@ -9,6 +9,7 @@ package middleware
 import (
 	"errors"
 
+	"git.code.tecnalia.com/blockchain/hypercog/constants"
 	"git.code.tecnalia.com/ledgerbuilder/sdk/shared"
 )
 
@@ -22,7 +23,7 @@ var (
 func rejectIfNotSidenor(stub shared.LedgerBuildrStubInterface, ctl shared.ControllerInterface, req shared.TXRequestInterface, request shared.LedgerBuildrAsset) (shared.LedgerBuildrAsset, error) {
 	mspId := stub.GetMSPId()
 
-	if (mspId == "sidenor-com") {
+	if (mspId == constants.SidenorMsp) {
 		return request, nil
 	}
 	
@@ -32,7 +33,7 @@ func rejectIfNotSidenor(stub shared.LedgerBuildrStubInterface, ctl shared.Contro
 func rejectIfNotCementCompany(stub shared.LedgerBuildrStubInterface, ctl shared.ControllerInterface, req shared.TXRequestInterface, request shared.LedgerBuildrAsset) (shared.LedgerBuildrAsset, error) {
 	mspId := stub.GetMSPId()
 
-	if (mspId == "cement-company1-com" || mspId == "cement-company2-com") {
+	if (mspId == constants.Cement1Msp || mspId == constants.Cement2Msp) {
 		return request, nil
 	}
 	
@@ -42,7 +43,7 @@ func rejectIfNotCementCompany(stub shared.LedgerBuildrStubInterface, ctl shared.
 func rejectIfNotPublicAdmin(stub shared.LedgerBuildrStubInterface, ctl shared.ControllerInterface, req shared.TXRequestInterface, request shared.LedgerBuildrAsset) (shared.LedgerBuildrAsset, error) {
 	mspId := stub.GetMSPId()
 
-	if (mspId == "public-administration-com") {
+	if (mspId == constants.PublicAdminMsp) {
 		return request, nil
 	}
 	
diff --git a/chaincode/middleware/selector.go b/chaincode/middleware/selector.go
index b1423db..a371f2c 100644
--- a/chaincode/middleware/selector.go
+++ b/chaincode/middleware/selector.go
@@ -7,9 +7,11 @@
 package middleware
 
 import (
+	"git.code.tecnalia.com/blockchain/hypercog/constants"
 	"git.code.tecnalia.com/ledgerbuilder/sdk/core/model/query"
 	"git.code.tecnalia.com/ledgerbuilder/sdk/shared"
 	"git.code.tecnalia.com/traceblock/sdk/middleware"
+	"git.code.tecnalia.com/traceblock/sdk/model"
 )
 
 var (
@@ -22,7 +24,7 @@ var (
 func addMspConstraint(stub shared.LedgerBuildrStubInterface, ctl shared.ControllerInterface, req shared.TXRequestInterface, request shared.LedgerBuildrAsset) (shared.LedgerBuildrAsset, error) {
 	mspId := stub.GetMSPId()
 
-	if (mspId == "public-administration-com") {
+	if (mspId == constants.PublicAdminMsp) {
 		// If public administration => do not alter the query (full-access)
 		return request, nil
 	}
@@ -34,12 +36,12 @@ func addMspConstraint(stub shared.LedgerBuildrStubInterface, ctl shared.Controll
 func addOrgConstraint(stub shared.LedgerBuildrStubInterface, ctl shared.ControllerInterface, req shared.TXRequestInterface, request shared.LedgerBuildrAsset) (shared.LedgerBuildrAsset, error) {
 	mspId := stub.GetMSPId()
 
-	if (mspId == "public-administration-com") {
+	if (mspId == constants.PublicAdminMsp) {
 		// If public administration => do not alter the query (full-access)
 		return request, nil
 	}
 
-	org, err := stub.GetOrganization()
+	org, err := model.GetOrganization(stub)
 	if err != nil {
 		return nil, err
 	}
@@ -58,5 +60,5 @@ func addStockedStatusConstraint(stub shared.LedgerBuildrStubInterface, ctl share
 func addSidenorOrgConstraint(stub shared.LedgerBuildrStubInterface, ctl shared.ControllerInterface, req shared.TXRequestInterface, request shared.LedgerBuildrAsset) (shared.LedgerBuildrAsset, error) {
 	// If more than one:
 	// middleware.AlterSelector(request, "selector.owner.msp.$in", fmt.Sprintf("[\"%s\",\"%s\"]", "msp1", "sidenor-com"))
-	return middleware.AlterSelector(request, "selector.owner.org", "sidenor.com")
+	return middleware.AlterSelector(request, "selector.owner.org", constants.SidenorOrg)
 }
\ No newline at end of file
-- 
GitLab