mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 21:37:32 +00:00
feat(actions): local users (#5089)
Actions are extended to to local users. It's possible to run custom code during registration and authentication of local users.
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/zitadel/logging"
|
||||
|
||||
"github.com/zitadel/zitadel/internal/actions"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
"github.com/zitadel/zitadel/internal/query"
|
||||
)
|
||||
|
||||
@@ -54,3 +55,87 @@ type userMetadata struct {
|
||||
Key string
|
||||
Value goja.Value
|
||||
}
|
||||
|
||||
type MetadataList struct {
|
||||
Metadata []*Metadata
|
||||
}
|
||||
|
||||
type Metadata struct {
|
||||
Key string
|
||||
// Value is for exporting to javascript
|
||||
Value goja.Value
|
||||
// value is for mapping to [domain.Metadata]
|
||||
value []byte
|
||||
}
|
||||
|
||||
func (md *MetadataList) AppendMetadataFunc(call goja.FunctionCall) goja.Value {
|
||||
if len(call.Arguments) != 2 {
|
||||
panic("exactly 2 (key, value) arguments expected")
|
||||
}
|
||||
|
||||
value, err := json.Marshal(call.Arguments[1].Export())
|
||||
if err != nil {
|
||||
logging.WithError(err).Debug("unable to marshal")
|
||||
panic(err)
|
||||
}
|
||||
|
||||
md.Metadata = append(md.Metadata,
|
||||
&Metadata{
|
||||
Key: call.Arguments[0].Export().(string),
|
||||
Value: call.Arguments[1],
|
||||
value: value,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func MetadataListToDomain(metadataList *MetadataList) []*domain.Metadata {
|
||||
if metadataList == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
list := make([]*domain.Metadata, len(metadataList.Metadata))
|
||||
for i, metadata := range metadataList.Metadata {
|
||||
list[i] = &domain.Metadata{
|
||||
Key: metadata.Key,
|
||||
Value: metadata.value,
|
||||
}
|
||||
}
|
||||
|
||||
return list
|
||||
}
|
||||
|
||||
func MetadataField(metadata *MetadataList) func(c *actions.FieldConfig) interface{} {
|
||||
return func(c *actions.FieldConfig) interface{} {
|
||||
for _, md := range metadata.Metadata {
|
||||
if json.Valid(md.value) {
|
||||
err := json.Unmarshal(md.value, &md.Value)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return metadata.Metadata
|
||||
}
|
||||
}
|
||||
|
||||
func MetadataListFromDomain(metadata []*domain.Metadata) *MetadataList {
|
||||
list := &MetadataList{Metadata: make([]*Metadata, len(metadata))}
|
||||
|
||||
for i, md := range metadata {
|
||||
var val interface{}
|
||||
if json.Valid(md.Value) {
|
||||
err := json.Unmarshal(md.Value, &val)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
list.Metadata[i] = &Metadata{
|
||||
Key: md.Key,
|
||||
value: md.Value,
|
||||
}
|
||||
}
|
||||
|
||||
return list
|
||||
}
|
||||
|
Reference in New Issue
Block a user