mirror of
https://github.com/zitadel/zitadel.git
synced 2024-12-13 11:34:26 +00:00
26d1563643
* feat(api): feature API proto definitions * update proto based on discussion with @livio-a * cleanup old feature flag stuff * authz instance queries * align defaults * projection definitions * define commands and event reducers * implement system and instance setter APIs * api getter implementation * unit test repository package * command unit tests * unit test Get queries * grpc converter unit tests * migrate the V1 features * migrate oidc to dynamic features * projection unit test * fix instance by host * fix instance by id data type in sql * fix linting errors * add system projection test * fix behavior inversion * resolve proto file comments * rename SystemDefaultLoginInstanceEventType to SystemLoginDefaultOrgEventType so it's consistent with the instance level event * use write models and conditional set events * system features integration tests * instance features integration tests * error on empty request * documentation entry * typo in feature.proto * fix start unit tests * solve linting error on key case switch * remove system defaults after discussion with @eliobischof * fix system feature projection * resolve comments in defaults.yaml --------- Co-authored-by: Livio Spring <livio.a@gmail.com>
144 lines
2.8 KiB
Go
144 lines
2.8 KiB
Go
package authz
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"golang.org/x/text/language"
|
|
|
|
"github.com/zitadel/zitadel/internal/feature"
|
|
)
|
|
|
|
var (
|
|
emptyInstance = &instance{}
|
|
)
|
|
|
|
type Instance interface {
|
|
InstanceID() string
|
|
ProjectID() string
|
|
ConsoleClientID() string
|
|
ConsoleApplicationID() string
|
|
RequestedDomain() string
|
|
RequestedHost() string
|
|
DefaultLanguage() language.Tag
|
|
DefaultOrganisationID() string
|
|
SecurityPolicyAllowedOrigins() []string
|
|
Block() *bool
|
|
AuditLogRetention() *time.Duration
|
|
Features() feature.Features
|
|
}
|
|
|
|
type InstanceVerifier interface {
|
|
InstanceByHost(ctx context.Context, host string) (Instance, error)
|
|
InstanceByID(ctx context.Context) (Instance, error)
|
|
}
|
|
|
|
type instance struct {
|
|
id string
|
|
domain string
|
|
projectID string
|
|
appID string
|
|
clientID string
|
|
orgID string
|
|
features feature.Features
|
|
}
|
|
|
|
func (i *instance) Block() *bool {
|
|
return nil
|
|
}
|
|
|
|
func (i *instance) AuditLogRetention() *time.Duration {
|
|
return nil
|
|
}
|
|
|
|
func (i *instance) InstanceID() string {
|
|
return i.id
|
|
}
|
|
|
|
func (i *instance) ProjectID() string {
|
|
return i.projectID
|
|
}
|
|
|
|
func (i *instance) ConsoleClientID() string {
|
|
return i.clientID
|
|
}
|
|
|
|
func (i *instance) ConsoleApplicationID() string {
|
|
return i.appID
|
|
}
|
|
|
|
func (i *instance) RequestedDomain() string {
|
|
return i.domain
|
|
}
|
|
|
|
func (i *instance) RequestedHost() string {
|
|
return i.domain
|
|
}
|
|
|
|
func (i *instance) DefaultLanguage() language.Tag {
|
|
return language.Und
|
|
}
|
|
|
|
func (i *instance) DefaultOrganisationID() string {
|
|
return i.orgID
|
|
}
|
|
|
|
func (i *instance) SecurityPolicyAllowedOrigins() []string {
|
|
return nil
|
|
}
|
|
|
|
func (i *instance) Features() feature.Features {
|
|
return i.features
|
|
}
|
|
|
|
func GetInstance(ctx context.Context) Instance {
|
|
instance, ok := ctx.Value(instanceKey).(Instance)
|
|
if !ok {
|
|
return emptyInstance
|
|
}
|
|
return instance
|
|
}
|
|
|
|
func GetFeatures(ctx context.Context) feature.Features {
|
|
return GetInstance(ctx).Features()
|
|
}
|
|
|
|
func WithInstance(ctx context.Context, instance Instance) context.Context {
|
|
return context.WithValue(ctx, instanceKey, instance)
|
|
}
|
|
|
|
func WithInstanceID(ctx context.Context, id string) context.Context {
|
|
return context.WithValue(ctx, instanceKey, &instance{id: id})
|
|
}
|
|
|
|
func WithRequestedDomain(ctx context.Context, domain string) context.Context {
|
|
i, ok := ctx.Value(instanceKey).(*instance)
|
|
if !ok {
|
|
i = new(instance)
|
|
}
|
|
|
|
i.domain = domain
|
|
return context.WithValue(ctx, instanceKey, i)
|
|
}
|
|
|
|
func WithConsole(ctx context.Context, projectID, appID string) context.Context {
|
|
i, ok := ctx.Value(instanceKey).(*instance)
|
|
if !ok {
|
|
i = new(instance)
|
|
}
|
|
|
|
i.projectID = projectID
|
|
i.appID = appID
|
|
//i.clientID = clientID
|
|
return context.WithValue(ctx, instanceKey, i)
|
|
}
|
|
|
|
func WithFeatures(ctx context.Context, f feature.Features) context.Context {
|
|
i, ok := ctx.Value(instanceKey).(*instance)
|
|
if !ok {
|
|
i = new(instance)
|
|
}
|
|
i.features = f
|
|
return context.WithValue(ctx, instanceKey, i)
|
|
}
|