@@ -9,7 +9,6 @@ package endpoint
9
9
import (
10
10
"bytes"
11
11
"net"
12
- "reflect"
13
12
"strings"
14
13
"sync"
15
14
@@ -19,7 +18,6 @@ import (
19
18
"github.com/hyperledger-labs/fabric-smart-client/platform/view/driver"
20
19
"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
21
20
"github.com/pkg/errors"
22
- "go.uber.org/zap/zapcore"
23
21
"golang.org/x/exp/slices"
24
22
)
25
23
@@ -69,17 +67,14 @@ type Service struct {
69
67
resolversMutex sync.RWMutex
70
68
bindingKVS driver2.BindingStore
71
69
72
- pkiExtractorsLock sync.RWMutex
73
- publicKeyExtractors []driver.PublicKeyExtractor
74
- publicKeyIDSynthesizer driver.PublicKeyIDSynthesizer
70
+ pkiExtractor * PKIExtractor
75
71
}
76
72
77
73
// NewService returns a new instance of the view-sdk endpoint service
78
74
func NewService (bindingKVS driver2.BindingStore ) (* Service , error ) {
79
75
er := & Service {
80
- bindingKVS : bindingKVS ,
81
- publicKeyExtractors : []driver.PublicKeyExtractor {},
82
- publicKeyIDSynthesizer : DefaultPublicKeyIDSynthesizer {},
76
+ bindingKVS : bindingKVS ,
77
+ pkiExtractor : NewPKIExtractor (),
83
78
}
84
79
return er , nil
85
80
}
@@ -89,7 +84,7 @@ func (r *Service) Resolve(party view.Identity) (driver.Resolver, []byte, error)
89
84
if err != nil {
90
85
return nil , nil , err
91
86
}
92
- return resolver , r .pkiResolve (resolver ), nil
87
+ return resolver , r .pkiExtractor . PkiResolve (resolver ), nil
93
88
}
94
89
95
90
func (r * Service ) GetResolver (party view.Identity ) (driver.Resolver , error ) {
@@ -161,7 +156,7 @@ func (r *Service) matchesResolver(endpoint string, pkID []byte, resolver *Resolv
161
156
}
162
157
163
158
return len (pkID ) > 0 && (bytes .Equal (pkID , resolver .Id ) ||
164
- bytes .Equal (pkID , r .pkiResolve (resolver )))
159
+ bytes .Equal (pkID , r .pkiExtractor . PkiResolve (resolver )))
165
160
}
166
161
167
162
func (r * Service ) AddResolver (name string , domain string , addresses map [string ]string , aliases []string , id []byte ) (view.Identity , error ) {
@@ -203,54 +198,15 @@ func (r *Service) AddResolver(name string, domain string, addresses map[string]s
203
198
}
204
199
205
200
func (r * Service ) AddPublicKeyExtractor (publicKeyExtractor driver.PublicKeyExtractor ) error {
206
- r .pkiExtractorsLock .Lock ()
207
- defer r .pkiExtractorsLock .Unlock ()
208
-
209
- if publicKeyExtractor == nil {
210
- return errors .New ("pki resolver should not be nil" )
211
- }
212
- r .publicKeyExtractors = append (r .publicKeyExtractors , publicKeyExtractor )
213
- return nil
201
+ return r .pkiExtractor .AddPublicKeyExtractor (publicKeyExtractor )
214
202
}
215
203
216
204
func (r * Service ) SetPublicKeyIDSynthesizer (publicKeyIDSynthesizer driver.PublicKeyIDSynthesizer ) {
217
- r .publicKeyIDSynthesizer = publicKeyIDSynthesizer
218
- }
219
-
220
- func (r * Service ) pkiResolve (resolver * Resolver ) []byte {
221
- resolver .PKILock .RLock ()
222
- if len (resolver .PKI ) != 0 {
223
- resolver .PKILock .RUnlock ()
224
- return resolver .PKI
225
- }
226
- resolver .PKILock .RUnlock ()
227
-
228
- resolver .PKILock .Lock ()
229
- defer resolver .PKILock .Unlock ()
230
- if len (resolver .PKI ) == 0 {
231
- resolver .PKI = r .ExtractPKI (resolver .Id )
232
- }
233
- return resolver .PKI
205
+ r .pkiExtractor .SetPublicKeyIDSynthesizer (publicKeyIDSynthesizer )
234
206
}
235
207
236
208
func (r * Service ) ExtractPKI (id []byte ) []byte {
237
- r .pkiExtractorsLock .RLock ()
238
- defer r .pkiExtractorsLock .RUnlock ()
239
-
240
- for _ , extractor := range r .publicKeyExtractors {
241
- if pk , err := extractor .ExtractPublicKey (id ); pk != nil {
242
- if logger .IsEnabledFor (zapcore .DebugLevel ) {
243
- logger .Debugf ("pki resolved for [%s]" , id )
244
- }
245
- return r .publicKeyIDSynthesizer .PublicKeyID (pk )
246
- } else {
247
- if logger .IsEnabledFor (zapcore .DebugLevel ) {
248
- logger .Debugf ("pki not resolved by [%s] for [%s]: [%s]" , getIdentifier (extractor ), id , err )
249
- }
250
- }
251
- }
252
- logger .Warnf ("cannot resolve pki for [%s]" , id )
253
- return nil
209
+ return r .pkiExtractor .ExtractPKI (id )
254
210
}
255
211
256
212
func (r * Service ) rootEndpoint (party view.Identity ) (* Resolver , error ) {
@@ -296,14 +252,3 @@ func LookupIPv4(endpoint string) string {
296
252
port := s [1 ]
297
253
return net .JoinHostPort (addrS , port )
298
254
}
299
-
300
- func getIdentifier (f any ) string {
301
- if f == nil {
302
- return "<nil view>"
303
- }
304
- t := reflect .TypeOf (f )
305
- for t .Kind () == reflect .Ptr {
306
- t = t .Elem ()
307
- }
308
- return t .PkgPath () + "/" + t .Name ()
309
- }
0 commit comments