Skip to content

Commit a6c7e36

Browse files
Add Dispatcher logic and Composite Routine
Signed-off-by: Yogesh Deshpande <[email protected]>
1 parent b67f14e commit a6c7e36

File tree

2 files changed

+57
-13
lines changed

2 files changed

+57
-13
lines changed

vts/trustedservices/dispatcher.go

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,76 @@ package trustedservices
44

55
import (
66
"encoding/json"
7+
"errors"
78
"fmt"
89
"os"
910

1011
"github.com/veraison/services/handler"
1112
)
1213

13-
type clientDetails struct {
14+
type ClientDetails struct {
1415
Type string `json:"type"`
1516
Url string `json:"url"`
1617
Insecure bool `json:"in-secure"`
1718
CaCerts []string `json:"caCerts"`
1819
Hints []string `json:"hint"`
1920
}
2021
type Dispatcher struct {
21-
ClientInfo map[string]clientDetails
22+
ClientInfo map[string]ClientDetails
2223
}
2324

2425
var lvDispatcher Dispatcher
2526

26-
// LoadDispatchTable loads the Dispatch Table from the configuration
27-
func LoadDispatchTable(fp string) error {
27+
func NewDispatcher(fp string) (*Dispatcher, error) {
28+
lvDispatcher := &Dispatcher{ClientInfo: make(map[string]ClientDetails)}
2829
data, err := os.ReadFile(fp)
2930
if err != nil {
30-
return fmt.Errorf("error reading dispatch table from %s: %w", fp, err)
31+
return nil, fmt.Errorf("error reading dispatch table from %s: %w", fp, err)
3132
}
32-
if err := json.Unmarshal(data, &lvDispatcher); err != nil {
33-
return fmt.Errorf("error unmarshalling dispatch table: %w", err)
33+
jmap := make(map[string]json.RawMessage)
34+
err = json.Unmarshal(data, &jmap)
35+
if err != nil {
36+
return nil, fmt.Errorf("error unmarshaling table from %s: %w", fp, err)
37+
}
38+
for k, val := range jmap {
39+
var cd ClientDetails
40+
err = json.Unmarshal(val, &cd)
41+
// check error
42+
lvDispatcher.addClientInfo(k, &cd)
43+
}
44+
return lvDispatcher, nil
45+
}
46+
47+
func (d *Dispatcher) addClientInfo(key string, val *ClientDetails) error {
48+
if d.ClientInfo == nil {
49+
return errors.New("no client info to add")
3450
}
51+
d.ClientInfo[key] = *val
3552
return nil
3653
}
3754

55+
func (d *Dispatcher) GetClientConfigFromClientName(name string) (cfg []byte, err error) {
56+
if d.ClientInfo == nil {
57+
// return
58+
}
59+
60+
found := false
61+
for k, val := range d.ClientInfo {
62+
if k == name {
63+
cfg, err = json.Marshal(val)
64+
if err != nil {
65+
// Check Error
66+
}
67+
found = true
68+
break
69+
}
70+
}
71+
if !found {
72+
return nil, fmt.Errorf("unable to locate client for name: %s", name)
73+
}
74+
return cfg, nil
75+
}
76+
3877
func GetComponentVerifierFromMediaType(mt string) (handler.IComponentVerifierClientHandler, error) {
3978

4079
return nil, nil

vts/trustedservices/trustedservices_grpc.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ type GRPC struct {
7878
CoservSigner coservsigner.ICoservSigner
7979
CACertsPEM [][]byte
8080

81-
Server *grpc.Server
82-
Socket net.Listener
83-
84-
logger *zap.SugaredLogger
81+
Server *grpc.Server
82+
Socket net.Listener
83+
Dispatcher *Dispatcher
84+
logger *zap.SugaredLogger
8585

8686
proto.UnimplementedVTSServer
8787
}
@@ -96,6 +96,7 @@ func NewGRPC(
9696
policyManager *policymanager.PolicyManager,
9797
earSigner earsigner.IEarSigner,
9898
coservSigner coservsigner.ICoservSigner,
99+
lvDispatcher *Dispatcher,
99100
logger *zap.SugaredLogger,
100101
) ITrustedServices {
101102
return &GRPC{
@@ -183,7 +184,8 @@ func (o *GRPC) Init(
183184
}
184185

185186
if cfg.DispatchTable != "" {
186-
if err := LoadDispatchTable(cfg.DispatchTable); err != nil {
187+
o.Dispatcher, err = NewDispatcher(cfg.DispatchTable)
188+
if err != nil {
187189
return err
188190
}
189191
}
@@ -437,7 +439,6 @@ func (o *GRPC) GetCompositeAttestation(
437439
return o.finalize(masterAppraisal, err)
438440
}
439441

440-
/******************/
441442
p, err := compositeevidenceparser.GetCEParserFromMediaType(token.MediaType)
442443
if err != nil {
443444
return nil, fmt.Errorf("unable to fecth parser from received MediaType: %s, %w", token.MediaType, err)
@@ -456,6 +457,10 @@ func (o *GRPC) GetCompositeAttestation(
456457
return nil, fmt.Errorf("unable to get component verifier client for component evidence at index: %d, media type: %s, %w", i, mt, err)
457458
}
458459

460+
scheme := client.GetAttestationScheme()
461+
clientCfg, err = o.Dispatcher.GetClientConfigFromClientName(scheme)
462+
// Check Error
463+
459464
// TO DO Check if this is ear.Appraisal or ear.AttestationResults
460465
ar, err := client.AppraiseComponentEvidence(ev.GetevidenceData(), mt, token.Nonce, clientCfg)
461466

0 commit comments

Comments
 (0)