mirror of
https://github.com/optim-enterprises-bv/databunker.git
synced 2025-11-02 10:57:57 +00:00
small refactoring and adding new preserve keyword
This commit is contained in:
@@ -19,8 +19,9 @@ import (
|
|||||||
var userSchema *jsonschema.Schema
|
var userSchema *jsonschema.Schema
|
||||||
|
|
||||||
// our custom validator
|
// our custom validator
|
||||||
type IsLocked bool
|
|
||||||
type IsAdmin bool
|
type IsAdmin bool
|
||||||
|
type IsLocked bool
|
||||||
|
type IsPreserve bool
|
||||||
|
|
||||||
func loadUserSchema(cfg Config, confFile *string) error {
|
func loadUserSchema(cfg Config, confFile *string) error {
|
||||||
fileSchema := cfg.Generic.UserRecordSchema
|
fileSchema := cfg.Generic.UserRecordSchema
|
||||||
@@ -52,8 +53,9 @@ func loadUserSchema(cfg Config, confFile *string) error {
|
|||||||
}
|
}
|
||||||
rs := &jsonschema.Schema{}
|
rs := &jsonschema.Schema{}
|
||||||
jsonschema.LoadDraft2019_09()
|
jsonschema.LoadDraft2019_09()
|
||||||
jsonschema.RegisterKeyword("locked", newIsLocked)
|
|
||||||
jsonschema.RegisterKeyword("admin", newIsAdmin)
|
jsonschema.RegisterKeyword("admin", newIsAdmin)
|
||||||
|
jsonschema.RegisterKeyword("locked", newIsLocked)
|
||||||
|
jsonschema.RegisterKeyword("preserve", newIsPreserve)
|
||||||
err = rs.UnmarshalJSON(schemaData)
|
err = rs.UnmarshalJSON(schemaData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -213,10 +215,11 @@ func cleanupRecord(record []byte) []byte {
|
|||||||
|
|
||||||
for _, r := range *result.ExtendedResults {
|
for _, r := range *result.ExtendedResults {
|
||||||
fmt.Printf("path: %s key: %s data: %v\n", r.PropertyPath, r.Key, r.Value)
|
fmt.Printf("path: %s key: %s data: %v\n", r.PropertyPath, r.Key, r.Value)
|
||||||
if r.Key == "leftover" {
|
if r.Key == "preserve" {
|
||||||
//pointer, _ := jptr.Parse(r.PropertyPath)
|
//pointer, _ := jptr.Parse(r.PropertyPath)
|
||||||
//data1, _ := pointer.Eval(oldDoc)
|
//data1, _ := pointer.Eval(oldDoc)
|
||||||
nested(r.PropertyPath, r.Value)
|
nested(r.PropertyPath, r.Value)
|
||||||
|
fmt.Printf("current doc1 %v\n", doc1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Printf("final doc1 %v\n", doc1)
|
fmt.Printf("final doc1 %v\n", doc1)
|
||||||
@@ -226,30 +229,7 @@ func cleanupRecord(record []byte) []byte {
|
|||||||
return dataBinary
|
return dataBinary
|
||||||
}
|
}
|
||||||
|
|
||||||
// Locked keyword - meaningin that value should never be changed after record created
|
/*******************************************************************/
|
||||||
func newIsLocked() jsonschema.Keyword {
|
|
||||||
return new(IsLocked)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate implements jsonschema.Keyword
|
|
||||||
func (f *IsLocked) Validate(propPath string, data interface{}, errs *[]jsonschema.KeyError) {
|
|
||||||
fmt.Printf("Validate: %s -> %v\n", propPath, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Register implements jsonschema.Keyword
|
|
||||||
func (f *IsLocked) Register(uri string, registry *jsonschema.SchemaRegistry) {
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resolve implements jsonschema.Keyword
|
|
||||||
func (f *IsLocked) Resolve(pointer jptr.Pointer, uri string) *jsonschema.Schema {
|
|
||||||
fmt.Printf("Resolve %s\n", uri)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *IsLocked) ValidateKeyword(ctx context.Context, currentState *jsonschema.ValidationState, data interface{}) {
|
|
||||||
fmt.Printf("ValidateKeyword locked %s => %v\n", currentState.InstanceLocation.String(), data)
|
|
||||||
currentState.AddExtendedResult("locked", data)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Admin keyword. Any change in this record requires admin approval.
|
// Admin keyword. Any change in this record requires admin approval.
|
||||||
func newIsAdmin() jsonschema.Keyword {
|
func newIsAdmin() jsonschema.Keyword {
|
||||||
@@ -275,3 +255,57 @@ func (f *IsAdmin) ValidateKeyword(ctx context.Context, currentState *jsonschema.
|
|||||||
fmt.Printf("ValidateKeyword admin %s => %v\n", currentState.InstanceLocation.String(), data)
|
fmt.Printf("ValidateKeyword admin %s => %v\n", currentState.InstanceLocation.String(), data)
|
||||||
currentState.AddExtendedResult("admin", data)
|
currentState.AddExtendedResult("admin", data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
// Locked keyword - meaningin that value should never be changed after record creation
|
||||||
|
func newIsLocked() jsonschema.Keyword {
|
||||||
|
return new(IsLocked)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate implements jsonschema.Keyword
|
||||||
|
func (f *IsLocked) Validate(propPath string, data interface{}, errs *[]jsonschema.KeyError) {
|
||||||
|
fmt.Printf("Validate: %s -> %v\n", propPath, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Register implements jsonschema.Keyword
|
||||||
|
func (f *IsLocked) Register(uri string, registry *jsonschema.SchemaRegistry) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resolve implements jsonschema.Keyword
|
||||||
|
func (f *IsLocked) Resolve(pointer jptr.Pointer, uri string) *jsonschema.Schema {
|
||||||
|
fmt.Printf("Resolve %s\n", uri)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *IsLocked) ValidateKeyword(ctx context.Context, currentState *jsonschema.ValidationState, data interface{}) {
|
||||||
|
fmt.Printf("ValidateKeyword locked %s => %v\n", currentState.InstanceLocation.String(), data)
|
||||||
|
currentState.AddExtendedResult("locked", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
// Preserve keyword - meaningin that value should never be deleted (after user is delete it is left)
|
||||||
|
func newIsPreserve() jsonschema.Keyword {
|
||||||
|
return new(IsPreserve)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate implements jsonschema.Keyword
|
||||||
|
func (f *IsPreserve) Validate(propPath string, data interface{}, errs *[]jsonschema.KeyError) {
|
||||||
|
fmt.Printf("Validate: %s -> %v\n", propPath, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Register implements jsonschema.Keyword
|
||||||
|
func (f *IsPreserve) Register(uri string, registry *jsonschema.SchemaRegistry) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resolve implements jsonschema.Keyword
|
||||||
|
func (f *IsPreserve) Resolve(pointer jptr.Pointer, uri string) *jsonschema.Schema {
|
||||||
|
fmt.Printf("Resolve %s\n", uri)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *IsPreserve) ValidateKeyword(ctx context.Context, currentState *jsonschema.ValidationState, data interface{}) {
|
||||||
|
fmt.Printf("ValidateKeyword preserve %s => %v\n", currentState.InstanceLocation.String(), data)
|
||||||
|
currentState.AddExtendedResult("preserve", data)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user