59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
package schema
|
|
|
|
import (
|
|
_ "embed"
|
|
"fmt"
|
|
|
|
openfgav1 "github.com/openfga/api/proto/openfga/v1"
|
|
language "github.com/openfga/language/pkg/go/transformer"
|
|
"google.golang.org/protobuf/encoding/protojson"
|
|
)
|
|
|
|
func TransformModulesToModel(modules []language.ModuleFile) (*openfgav1.AuthorizationModel, error) {
|
|
parsedAuthModel, err := language.TransformModuleFilesToModel(modules, "1.2")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to transform dsl to model: %w", err)
|
|
}
|
|
|
|
return parsedAuthModel, nil
|
|
}
|
|
|
|
func TransformDSLToModel(dsl string) (*openfgav1.AuthorizationModel, error) {
|
|
parsedAuthModel, err := language.TransformDSLToProto(dsl)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to transform dsl to model: %w", err)
|
|
}
|
|
|
|
return parsedAuthModel, nil
|
|
}
|
|
|
|
func TransformToDSL(model *openfgav1.AuthorizationModel, opts ...language.TransformOption) (string, error) {
|
|
return language.TransformJSONProtoToDSL(model, opts...)
|
|
}
|
|
|
|
// EqualModels compares two authorization models.
|
|
// Id is not comparing since model loaded from disk doesn't contain Id.
|
|
func EqualModels(a, b *openfgav1.AuthorizationModel) bool {
|
|
aCopy := openfgav1.AuthorizationModel{
|
|
SchemaVersion: a.SchemaVersion,
|
|
TypeDefinitions: a.TypeDefinitions,
|
|
Conditions: a.Conditions,
|
|
}
|
|
aJSONBytes, err := protojson.Marshal(&aCopy)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
bCopy := openfgav1.AuthorizationModel{
|
|
SchemaVersion: b.SchemaVersion,
|
|
TypeDefinitions: b.TypeDefinitions,
|
|
Conditions: b.Conditions,
|
|
}
|
|
bJSONBytes, err := protojson.Marshal(&bCopy)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
return string(aJSONBytes) == string(bJSONBytes)
|
|
}
|