TODO: Remove (https://github.com/TheThingsNetwork/lorawan-stack/issues/6026)
( //nolint:gocyclo ctx context.Context, conf config.InteropServer, httpClientProvider httpclient.Provider, )
| 84 | |
| 85 | // TODO: Remove (https://github.com/TheThingsNetwork/lorawan-stack/issues/6026) |
| 86 | func fetchSenderClientCAs( //nolint:gocyclo |
| 87 | ctx context.Context, conf config.InteropServer, httpClientProvider httpclient.Provider, |
| 88 | ) (map[string][]*x509.Certificate, error) { |
| 89 | decodeCerts := func(b []byte) (res []*x509.Certificate, err error) { |
| 90 | for len(b) > 0 { |
| 91 | var block *pem.Block |
| 92 | block, b = pem.Decode(b) |
| 93 | if block == nil { |
| 94 | break |
| 95 | } |
| 96 | if block.Type != "CERTIFICATE" || len(block.Headers) != 0 { |
| 97 | continue |
| 98 | } |
| 99 | cert, err := x509.ParseCertificate(block.Bytes) |
| 100 | if err != nil { |
| 101 | return nil, err |
| 102 | } |
| 103 | res = append(res, cert) |
| 104 | } |
| 105 | return res, nil |
| 106 | } |
| 107 | |
| 108 | var senderClientCAs map[string][]*x509.Certificate |
| 109 | if len(conf.SenderClientCADeprecated) > 0 { |
| 110 | senderClientCAs = make(map[string][]*x509.Certificate, len(conf.SenderClientCA.Static)) |
| 111 | for id, filename := range conf.SenderClientCADeprecated { |
| 112 | b, err := os.ReadFile(filename) |
| 113 | if err != nil { |
| 114 | return nil, err |
| 115 | } |
| 116 | certs, err := decodeCerts(b) |
| 117 | if err != nil { |
| 118 | return nil, err |
| 119 | } |
| 120 | if len(certs) > 0 { |
| 121 | senderClientCAs[id] = certs |
| 122 | } |
| 123 | } |
| 124 | } else if len(conf.SenderClientCA.Static) > 0 { |
| 125 | senderClientCAs = make(map[string][]*x509.Certificate, len(conf.SenderClientCA.Static)) |
| 126 | for id, b := range conf.SenderClientCA.Static { |
| 127 | certs, err := decodeCerts(b) |
| 128 | if err != nil { |
| 129 | return nil, err |
| 130 | } |
| 131 | if len(certs) > 0 { |
| 132 | senderClientCAs[id] = certs |
| 133 | } |
| 134 | } |
| 135 | } else { |
| 136 | fetcher, err := conf.SenderClientCA.Fetcher(ctx, httpClientProvider) |
| 137 | if err != nil { |
| 138 | return nil, err |
| 139 | } |
| 140 | if fetcher != nil { |
| 141 | confFileBytes, err := fetcher.File(SenderClientCAsConfigurationName) |
| 142 | if err != nil { |
| 143 | return nil, err |