diff --git a/apiserver/pkg/application/application.go b/apiserver/pkg/application/application.go index b1f643fbd..b22a14b65 100644 --- a/apiserver/pkg/application/application.go +++ b/apiserver/pkg/application/application.go @@ -138,6 +138,7 @@ func CreateApplication(ctx context.Context, c dynamic.Interface, input generated Nodes: []v1alpha1.Node{}, }, } + common.SetCreator(ctx, &app.Spec.CommonSpec) object, err := runtime.DefaultUnstructuredConverter.ToUnstructured(app) if err != nil { return nil, err diff --git a/apiserver/pkg/auth/auth.go b/apiserver/pkg/auth/auth.go index 9753bd056..cbdaf2004 100644 --- a/apiserver/pkg/auth/auth.go +++ b/apiserver/pkg/auth/auth.go @@ -154,6 +154,11 @@ func AuthInterceptor(needAuth bool, oidcVerifier *oidc.IDTokenVerifier, verb, re return } ctx.Request = ctx.Request.WithContext(context.WithValue(ctx.Request.Context(), UserNameContextKey, userName)) + } else { + u := &User{} + if err := oidcIDtoken.Claims(u); err == nil { + ctx.Request = ctx.Request.WithContext(context.WithValue(ctx.Request.Context(), UserNameContextKey, u.Name)) + } } // for graphql query diff --git a/apiserver/pkg/common/common.go b/apiserver/pkg/common/common.go index 5f2764885..6ba2e3f92 100644 --- a/apiserver/pkg/common/common.go +++ b/apiserver/pkg/common/common.go @@ -27,6 +27,7 @@ import ( "github.com/kubeagi/arcadia/api/base/v1alpha1" "github.com/kubeagi/arcadia/apiserver/graph/generated" + "github.com/kubeagi/arcadia/apiserver/pkg/auth" "github.com/kubeagi/arcadia/pkg/config" "github.com/kubeagi/arcadia/pkg/datasource" ) @@ -192,3 +193,8 @@ func WithPageNodeConvertFunc(convertFunc PageNodeConvertFunc) ListOptionsFunc { option.ConvertFunc = convertFunc } } + +func SetCreator(ctx context.Context, common *v1alpha1.CommonSpec) { + currentUser, _ := ctx.Value(auth.UserNameContextKey).(string) + common.Creator = currentUser +} diff --git a/apiserver/pkg/dataset/dataset.go b/apiserver/pkg/dataset/dataset.go index 2ba8f4ede..a7fc709ab 100644 --- a/apiserver/pkg/dataset/dataset.go +++ b/apiserver/pkg/dataset/dataset.go @@ -83,6 +83,7 @@ func CreateDataset(ctx context.Context, c dynamic.Interface, input *generated.Cr } dataset.Labels = utils.MapAny2Str(input.Labels) dataset.Annotations = utils.MapAny2Str(input.Annotations) + common.SetCreator(ctx, &dataset.Spec.CommonSpec) u, err := runtime.DefaultUnstructuredConverter.ToUnstructured(dataset) if err != nil { diff --git a/apiserver/pkg/datasource/datasource.go b/apiserver/pkg/datasource/datasource.go index 2bf994c1d..42cc5d90f 100644 --- a/apiserver/pkg/datasource/datasource.go +++ b/apiserver/pkg/datasource/datasource.go @@ -31,6 +31,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/dynamic" + "k8s.io/utils/pointer" "github.com/kubeagi/arcadia/api/base/v1alpha1" "github.com/kubeagi/arcadia/apiserver/graph/generated" @@ -80,6 +81,7 @@ func datasource2model(obj *unstructured.Unstructured) *generated.Datasource { ID: &id, Name: datasource.Name, Namespace: datasource.Namespace, + Creator: pointer.String(datasource.Spec.Creator), Labels: graphqlutils.MapStr2Any(obj.GetLabels()), Annotations: graphqlutils.MapStr2Any(obj.GetAnnotations()), DisplayName: &datasource.Spec.DisplayName, @@ -121,6 +123,7 @@ func CreateDatasource(ctx context.Context, c dynamic.Interface, input generated. }, }, } + common.SetCreator(ctx, &datasource.Spec.CommonSpec) // make endpoint endpoint, err := common.MakeEndpoint(ctx, c, generated.TypedObjectReferenceInput{ diff --git a/apiserver/pkg/embedder/embedder.go b/apiserver/pkg/embedder/embedder.go index 0e9fdadeb..7a2ce1ba0 100644 --- a/apiserver/pkg/embedder/embedder.go +++ b/apiserver/pkg/embedder/embedder.go @@ -26,6 +26,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/dynamic" + "k8s.io/utils/pointer" "github.com/kubeagi/arcadia/api/base/v1alpha1" "github.com/kubeagi/arcadia/apiserver/graph/generated" @@ -76,6 +77,7 @@ func Embedder2model(ctx context.Context, c dynamic.Interface, obj *unstructured. ID: &id, Name: obj.GetName(), Namespace: obj.GetNamespace(), + Creator: pointer.String(embedder.Spec.Creator), CreationTimestamp: &creationtimestamp, Labels: graphqlutils.MapStr2Any(obj.GetLabels()), Annotations: graphqlutils.MapStr2Any(obj.GetAnnotations()), @@ -146,6 +148,7 @@ func CreateEmbedder(ctx context.Context, c dynamic.Interface, input generated.Cr Namespace: &input.Namespace, } } + common.SetCreator(ctx, &embedder.Spec.CommonSpec) unstructuredEmbedder, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&embedder) if err != nil { diff --git a/apiserver/pkg/knowledgebase/knowledgebase.go b/apiserver/pkg/knowledgebase/knowledgebase.go index 6d8afcf46..2dd83ebcb 100644 --- a/apiserver/pkg/knowledgebase/knowledgebase.go +++ b/apiserver/pkg/knowledgebase/knowledgebase.go @@ -87,6 +87,7 @@ func knowledgebase2model(obj *unstructured.Unstructured) *generated.KnowledgeBas ID: &id, Name: obj.GetName(), Namespace: obj.GetNamespace(), + Creator: &knowledgebase.Spec.Creator, Labels: graphqlutils.MapStr2Any(obj.GetLabels()), Annotations: graphqlutils.MapStr2Any(obj.GetAnnotations()), DisplayName: &knowledgebase.Spec.DisplayName, @@ -140,6 +141,7 @@ func CreateKnowledgeBase(ctx context.Context, c dynamic.Interface, name, namespa FileGroups: filegroups, }, } + common.SetCreator(ctx, &knowledgebase.Spec.CommonSpec) unstructuredKnowledgeBase, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&knowledgebase) if err != nil { diff --git a/apiserver/pkg/llm/llm.go b/apiserver/pkg/llm/llm.go index 7cd8bab61..73414ece7 100644 --- a/apiserver/pkg/llm/llm.go +++ b/apiserver/pkg/llm/llm.go @@ -80,6 +80,7 @@ func LLM2model(ctx context.Context, c dynamic.Interface, obj *unstructured.Unstr ID: &id, Name: obj.GetName(), Namespace: obj.GetNamespace(), + Creator: &llm.Spec.Creator, CreationTimestamp: &creationtimestamp, Labels: graphqlutils.MapStr2Any(obj.GetLabels()), Annotations: graphqlutils.MapStr2Any(obj.GetAnnotations()), @@ -221,6 +222,7 @@ func CreateLLM(ctx context.Context, c dynamic.Interface, input generated.CreateL Type: llms.LLMType(APIType), }, } + common.SetCreator(ctx, &llm.Spec.CommonSpec) // create auth secret if input.Endpointinput.Auth != nil { diff --git a/apiserver/pkg/model/model.go b/apiserver/pkg/model/model.go index 44965063e..cdb6f09c7 100644 --- a/apiserver/pkg/model/model.go +++ b/apiserver/pkg/model/model.go @@ -108,6 +108,7 @@ func CreateModel(ctx context.Context, c dynamic.Interface, input generated.Creat Types: types, }, } + common.SetCreator(ctx, &model.Spec.CommonSpec) unstructuredModel, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&model) if err != nil { return nil, err diff --git a/apiserver/pkg/versioneddataset/versioned_dataset.go b/apiserver/pkg/versioneddataset/versioned_dataset.go index f4a0e4b43..df83d0c30 100644 --- a/apiserver/pkg/versioneddataset/versioned_dataset.go +++ b/apiserver/pkg/versioneddataset/versioned_dataset.go @@ -360,6 +360,7 @@ func CreateVersionedDataset(ctx context.Context, c dynamic.Interface, input *gen if input.Description != nil { vds.Spec.Description = *input.Description } + common.SetCreator(ctx, &vds.Spec.CommonSpec) vds.SetLabels(graphqlutils.MapAny2Str(input.Labels)) vds.SetAnnotations(graphqlutils.MapAny2Str(input.Annotations)) if len(input.FileGrups) > 0 { diff --git a/apiserver/pkg/worker/worker.go b/apiserver/pkg/worker/worker.go index f1a952719..372eb24d5 100644 --- a/apiserver/pkg/worker/worker.go +++ b/apiserver/pkg/worker/worker.go @@ -174,6 +174,7 @@ func CreateWorker(ctx context.Context, c dynamic.Interface, input generated.Crea }, }, } + common.SetCreator(ctx, &worker.Spec.CommonSpec) // cpu & memory resources := v1.ResourceRequirements{