@@ -4,37 +4,76 @@ package trustedservices
44
55import (
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}
2021type Dispatcher struct {
21- ClientInfo map [string ]clientDetails
22+ ClientInfo map [string ]ClientDetails
2223}
2324
2425var 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+
3877func GetComponentVerifierFromMediaType (mt string ) (handler.IComponentVerifierClientHandler , error ) {
3978
4079 return nil , nil
0 commit comments