New returns a new component.
(logger log.Stack, config *Config, opts ...Option)
| 152 | |
| 153 | // New returns a new component. |
| 154 | func New(logger log.Stack, config *Config, opts ...Option) (c *Component, err error) { |
| 155 | ctx, cancel := context.WithCancel(context.Background()) |
| 156 | defer func() { |
| 157 | if err != nil { |
| 158 | cancel() |
| 159 | } |
| 160 | }() |
| 161 | |
| 162 | ctx = log.NewContext(ctx, logger) |
| 163 | |
| 164 | c = &Component{ |
| 165 | ctx: ctx, |
| 166 | cancelCtx: cancel, |
| 167 | terminationSignals: make(chan os.Signal), |
| 168 | |
| 169 | config: config, |
| 170 | logger: logger, |
| 171 | |
| 172 | tcpListeners: make(map[string]*listener), |
| 173 | |
| 174 | taskStarter: task.StartTaskFunc(task.DefaultStartTask), |
| 175 | } |
| 176 | |
| 177 | c.healthHandler, err = healthcheck.NewDefaultHealthChecker() |
| 178 | if err != nil { |
| 179 | return nil, err |
| 180 | } |
| 181 | |
| 182 | c.componentKEKLabeler, err = config.KeyVault.ComponentKEKLabeler() |
| 183 | if err != nil { |
| 184 | return nil, err |
| 185 | } |
| 186 | c.keyService, err = config.KeyVault.KeyService(ctx, c) |
| 187 | if err != nil { |
| 188 | return nil, err |
| 189 | } |
| 190 | |
| 191 | c.limiter, err = ratelimit.New(ctx, config.RateLimiting, config.Blob, c) |
| 192 | if err != nil { |
| 193 | return nil, err |
| 194 | } |
| 195 | |
| 196 | for _, opt := range opts { |
| 197 | opt(c) |
| 198 | } |
| 199 | |
| 200 | fpsFetcher, err := config.FrequencyPlansFetcher(ctx, c) |
| 201 | if err != nil { |
| 202 | return nil, err |
| 203 | } |
| 204 | c.frequencyPlans = frequencyplans.NewStore(fpsFetcher) |
| 205 | |
| 206 | caStoreFetcher, err := config.MTLSAuthCAStoreFetcher(ctx, c) |
| 207 | if err != nil { |
| 208 | return nil, err |
| 209 | } |
| 210 | c.caStore, err = mtls.NewCAStore(ctx, caStoreFetcher) |
| 211 | if err != nil { |