* Add ofrep pkg * api server: Use namespace from request in case user is not authenticated * Add handlers to ofrep api builder * Add NewOpenFeatureService to initialize mt apiserver * allow specifying CA and insecure * Compare namespace with eval ctx stackID * Organize ofrep package * Implement AllowedV0Alpha1Resources * Revert folderimpl changes * Handle default namespace * Fix extracting stack id from eval ctx * Add more logs * Update pkg/registry/apis/ofrep/register.go Co-authored-by: Dave Henderson <dave.henderson@grafana.com> * Update pkg/registry/apis/ofrep/register.go Co-authored-by: Dave Henderson <dave.henderson@grafana.com> * Apply review feedback * Replace contexthandler with types * Fix identifying authed request * Refactor checks in the handlers * Remove anonymous from isAuthenticatedRequest check --------- Co-authored-by: Todd Treece <360020+toddtreece@users.noreply.github.com> Co-authored-by: Gabriel Mabille <gabriel.mabille@grafana.com> Co-authored-by: Charandas Batra <charandas.batra@grafana.com> Co-authored-by: Dave Henderson <dave.henderson@grafana.com>
65 lines
1.7 KiB
Go
65 lines
1.7 KiB
Go
package featuremgmt
|
|
|
|
import (
|
|
"github.com/open-feature/go-sdk/openfeature"
|
|
"github.com/open-feature/go-sdk/openfeature/memprovider"
|
|
)
|
|
|
|
// inMemoryBulkProvider is a wrapper around memprovider.InMemoryProvider that
|
|
// also allows for bulk evaluation of flags, necessary to proxy OFREP requests.
|
|
type inMemoryBulkProvider struct {
|
|
memprovider.InMemoryProvider
|
|
flags map[string]memprovider.InMemoryFlag
|
|
}
|
|
|
|
func newInMemoryBulkProvider(flags map[string]memprovider.InMemoryFlag) *inMemoryBulkProvider {
|
|
return &inMemoryBulkProvider{
|
|
InMemoryProvider: memprovider.NewInMemoryProvider(flags),
|
|
flags: flags,
|
|
}
|
|
}
|
|
|
|
// ListFlags returns a list of all flags registered with the provider.
|
|
func (p *inMemoryBulkProvider) ListFlags() ([]string, error) {
|
|
keys := make([]string, 0, len(p.flags))
|
|
for key := range p.flags {
|
|
keys = append(keys, key)
|
|
}
|
|
return keys, nil
|
|
}
|
|
|
|
func newStaticProvider(confFlags map[string]bool) (openfeature.FeatureProvider, error) {
|
|
flags := make(map[string]memprovider.InMemoryFlag, len(standardFeatureFlags))
|
|
|
|
// Add flags from config.ini file
|
|
for name, value := range confFlags {
|
|
flags[name] = createInMemoryFlag(name, value)
|
|
}
|
|
|
|
// Add standard flags
|
|
for _, flag := range standardFeatureFlags {
|
|
if _, exists := flags[flag.Name]; !exists {
|
|
enabled := flag.Expression == "true"
|
|
flags[flag.Name] = createInMemoryFlag(flag.Name, enabled)
|
|
}
|
|
}
|
|
|
|
return newInMemoryBulkProvider(flags), nil
|
|
}
|
|
|
|
func createInMemoryFlag(name string, enabled bool) memprovider.InMemoryFlag {
|
|
variant := "disabled"
|
|
if enabled {
|
|
variant = "enabled"
|
|
}
|
|
|
|
return memprovider.InMemoryFlag{
|
|
Key: name,
|
|
DefaultVariant: variant,
|
|
Variants: map[string]interface{}{
|
|
"enabled": true,
|
|
"disabled": false,
|
|
},
|
|
}
|
|
}
|