mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-12 01:47:33 +00:00
feat: handle instance from context (#3382)
* commander * commander * selber! * move to packages * fix(errors): implement Is interface * test: command * test: commands * add init steps * setup tenant * add default step yaml * possibility to set password * merge v2 into v2-commander * fix: rename iam command side to instance * fix: rename iam command side to instance * fix: rename iam command side to instance * fix: rename iam command side to instance * fix: search query builder can filter events in memory * fix: filters for add member * fix(setup): add `ExternalSecure` to config * chore: name iam to instance * fix: matching * remove unsued func * base url * base url * test(command): filter funcs * test: commands * fix: rename orgiampolicy to domain policy * start from init * commands * config * fix indexes and add constraints * fixes * fix: merge conflicts * fix: protos * fix: md files * setup * add deprecated org iam policy again * typo * fix search query * fix filter * Apply suggestions from code review * remove custom org from org setup * add todos for verification * change apps creation * simplify package structure * fix error * move preparation helper for tests * fix unique constraints * fix config mapping in setup * fix error handling in encryption_keys.go * fix projection config * fix query from old views to projection * fix setup of mgmt api * set iam project and fix instance projection * fix tokens view * fix steps.yaml and defaults.yaml * fix projections * change instance context to interface * instance interceptors and additional events in setup * cleanup * tests for interceptors * fix label policy * add todo * single api endpoint in environment.json Co-authored-by: adlerhurst <silvan.reusser@gmail.com> Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
This commit is contained in:
@@ -31,10 +31,6 @@ func (ctxData CtxData) IsZero() bool {
|
||||
return ctxData.UserID == "" || ctxData.OrgID == ""
|
||||
}
|
||||
|
||||
type Instance struct {
|
||||
ID string
|
||||
}
|
||||
|
||||
type Grants []*Grant
|
||||
|
||||
type Grant struct {
|
||||
@@ -116,15 +112,6 @@ func GetCtxData(ctx context.Context) CtxData {
|
||||
return ctxData
|
||||
}
|
||||
|
||||
func GetInstance(ctx context.Context) Instance {
|
||||
instance, _ := ctx.Value(instanceKey).(Instance)
|
||||
return instance
|
||||
}
|
||||
|
||||
func WithInstance(ctx context.Context, instance Instance) context.Context {
|
||||
return context.WithValue(ctx, instanceKey, instance)
|
||||
}
|
||||
|
||||
func GetRequestPermissionsFromCtx(ctx context.Context) []string {
|
||||
ctxPermission, _ := ctx.Value(requestPermissionsKey).([]string)
|
||||
return ctxPermission
|
||||
|
51
internal/api/authz/instance.go
Normal file
51
internal/api/authz/instance.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package authz
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
var (
|
||||
emptyInstance = &instance{}
|
||||
)
|
||||
|
||||
type Instance interface {
|
||||
InstanceID() string
|
||||
ProjectID() string
|
||||
ConsoleClientID() string
|
||||
}
|
||||
|
||||
type InstanceVerifier interface {
|
||||
InstanceByHost(context.Context, string) (Instance, error)
|
||||
}
|
||||
|
||||
type instance struct {
|
||||
ID string
|
||||
}
|
||||
|
||||
func (i *instance) InstanceID() string {
|
||||
return i.ID
|
||||
}
|
||||
|
||||
func (i *instance) ProjectID() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (i *instance) ConsoleClientID() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func GetInstance(ctx context.Context) Instance {
|
||||
instance, ok := ctx.Value(instanceKey).(Instance)
|
||||
if !ok {
|
||||
return emptyInstance
|
||||
}
|
||||
return instance
|
||||
}
|
||||
|
||||
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})
|
||||
}
|
80
internal/api/authz/instance_test.go
Normal file
80
internal/api/authz/instance_test.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package authz
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func Test_Instance(t *testing.T) {
|
||||
type args struct {
|
||||
ctx context.Context
|
||||
}
|
||||
type res struct {
|
||||
instanceID string
|
||||
projectID string
|
||||
consoleID string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
res res
|
||||
}{
|
||||
{
|
||||
"empty context",
|
||||
args{
|
||||
context.Background(),
|
||||
},
|
||||
res{
|
||||
instanceID: "",
|
||||
projectID: "",
|
||||
consoleID: "",
|
||||
},
|
||||
},
|
||||
{
|
||||
"WithInstanceID",
|
||||
args{
|
||||
WithInstanceID(context.Background(), "id"),
|
||||
},
|
||||
res{
|
||||
instanceID: "id",
|
||||
projectID: "",
|
||||
consoleID: "",
|
||||
},
|
||||
},
|
||||
{
|
||||
"WithInstance",
|
||||
args{
|
||||
WithInstance(context.Background(), &mockInstance{}),
|
||||
},
|
||||
res{
|
||||
instanceID: "instanceID",
|
||||
projectID: "projectID",
|
||||
consoleID: "consoleID",
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := GetInstance(tt.args.ctx)
|
||||
assert.Equal(t, tt.res.instanceID, got.InstanceID())
|
||||
assert.Equal(t, tt.res.projectID, got.ProjectID())
|
||||
assert.Equal(t, tt.res.consoleID, got.ConsoleClientID())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
type mockInstance struct{}
|
||||
|
||||
func (m *mockInstance) InstanceID() string {
|
||||
return "instanceID"
|
||||
}
|
||||
|
||||
func (m *mockInstance) ProjectID() string {
|
||||
return "projectID"
|
||||
}
|
||||
|
||||
func (m *mockInstance) ConsoleClientID() string {
|
||||
return "consoleID"
|
||||
}
|
Reference in New Issue
Block a user