openfga / language

Grammar for the OpenFGA modeling language
https://openfga.dev
Apache License 2.0
17 stars 7 forks source link

Panic on validating model with comments #54

Closed miparnisari closed 1 year ago

miparnisari commented 1 year ago

[11/09/23 6:36:38] ~/GitHub/cli (main) $ cat /Users/mparnisari/Desktop/demo/model.fga
model
  schema 1.1
type user
type group
  relations
    # groups have users
    define member: [user]
type folder
  relations
    # folders can be nested
    define parent: [folder]
    # if you can view the parent folder, you can view the folder
    define viewer: [user,user:*,group#member] or viewer from parent
type document
  relations
    # documents live within folders
    define parent: [folder]
    # if you can view the parent folder, you can view the document
    define viewer: [user,user:*,group#member] or viewer from parent%
[11/09/23 6:36:40] ~/GitHub/cli (main) $ cat /Users/mparnisari/Desktop/demo/model.json
{
    "type_definitions": [
      {
        "type": "user",
        "relations": {}
      },
      {
        "type": "group",
        "relations": {
          "member": {
            "this": {}
          }
        },
        "metadata": {
          "relations": {
            "member": {
              "directly_related_user_types": [
                {
                  "type": "user"
                }
              ]
            }
          }
        }
      },
      {
        "type": "folder",
        "relations": {
          "parent": {
            "this": {}
          },
          "viewer": {
            "union": {
              "child": [
                {
                  "this": {}
                },
                {
                  "tupleToUserset": {
                    "tupleset": {
                      "object": "",
                      "relation": "parent"
                    },
                    "computedUserset": {
                      "object": "",
                      "relation": "viewer"
                    }
                  }
                }
              ]
            }
          }
        },
        "metadata": {
          "relations": {
            "parent": {
              "directly_related_user_types": [
                {
                  "type": "folder"
                }
              ]
            },
            "viewer": {
              "directly_related_user_types": [
                {
                  "type": "user"
                },
                {
                  "type": "user",
                  "wildcard": {}
                },
                {
                  "type": "group",
                  "relation": "member"
                }
              ]
            }
          }
        }
      },
      {
        "type": "document",
        "relations": {
          "parent": {
            "this": {}
          },
          "viewer": {
            "union": {
              "child": [
                {
                  "this": {}
                },
                {
                  "tupleToUserset": {
                    "tupleset": {
                      "object": "",
                      "relation": "parent"
                    },
                    "computedUserset": {
                      "object": "",
                      "relation": "viewer"
                    }
                  }
                }
              ]
            }
          }
        },
        "metadata": {
          "relations": {
            "parent": {
              "directly_related_user_types": [
                {
                  "type": "folder"
                }
              ]
            },
            "viewer": {
              "directly_related_user_types": [
                {
                  "type": "user"
                },
                {
                  "type": "user",
                  "wildcard": {}
                },
                {
                  "type": "group",
                  "relation": "member"
                }
              ]
            }
          }
        }
      }
    ],
    "schema_version": "1.1"
  }%
[11/09/23 6:36:42] ~/GitHub/cli (main) $ ./dist/fga model validate --file /Users/mparnisari/Desktop/demo/model.json
{
  "is_valid":true
}
[11/09/23 6:36:45] ~/GitHub/cli (main) $ ./dist/fga model validate --file /Users/mparnisari/Desktop/demo/model.fga
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0xb0 pc=0x15ef378]

goroutine 1 [running]:
github.com/openfga/language/pkg/go/transformer.(*openFgaDslListener).ExitRelationDeclaration(0xc00011c680, 0x1aab0e0?)
    /Users/mparnisari/go/pkg/mod/github.com/openfga/language/pkg/go@v0.0.0-20230907010412-f60426300a18/transformer/dsltojson.go:77 +0xd8
github.com/openfga/language/pkg/go/gen.(*RelationDeclarationContext).ExitRule(0xc0005e39d0?, {0x1aab0e0?, 0xc00011c680?})
    /Users/mparnisari/go/pkg/mod/github.com/openfga/language/pkg/go@v0.0.0-20230907010412-f60426300a18/gen/openfga_parser.go:1705 +0x3f
github.com/antlr4-go/antlr/v4.(*ParseTreeWalker).ExitRule(0xc000420200?, {0x1aab0e0, 0xc00011c680}, {0x4a53b148?, 0xc000420580?})
    /Users/mparnisari/go/pkg/mod/github.com/antlr4-go/antlr/v4@v4.13.0/tree.go:241 +0x62
github.com/antlr4-go/antlr/v4.(*ParseTreeWalker).Walk(0xc00011cb80?, {0x1aab0e0, 0xc00011c680}, {0x1aae9a0?, 0xc000420580})
    /Users/mparnisari/go/pkg/mod/github.com/antlr4-go/antlr/v4@v4.13.0/tree.go:225 +0x179
github.com/antlr4-go/antlr/v4.(*ParseTreeWalker).Walk(0xc00011c700?, {0x1aab0e0, 0xc00011c680}, {0x1aae9e8?, 0xc000420200})
    /Users/mparnisari/go/pkg/mod/github.com/antlr4-go/antlr/v4@v4.13.0/tree.go:223 +0x125
github.com/antlr4-go/antlr/v4.(*ParseTreeWalker).Walk(0x20e6ae0?, {0x1aab0e0, 0xc00011c680}, {0x1aaea30?, 0xc00011cb80})
    /Users/mparnisari/go/pkg/mod/github.com/antlr4-go/antlr/v4@v4.13.0/tree.go:223 +0x125
github.com/antlr4-go/antlr/v4.(*ParseTreeWalker).Walk(0xc000078590?, {0x1aab0e0, 0xc00011c680}, {0x1aaeb08?, 0xc00011c700})
    /Users/mparnisari/go/pkg/mod/github.com/antlr4-go/antlr/v4@v4.13.0/tree.go:223 +0x125
github.com/openfga/language/pkg/go/transformer.TransformDslToJSON({0xc0002e46c0?, 0x15f5279?})
    /Users/mparnisari/go/pkg/mod/github.com/openfga/language/pkg/go@v0.0.0-20230907010412-f60426300a18/transformer/dsltojson.go:236 +0x37e
github.com/openfga/cli/internal/authorizationmodel.(*AuthzModel).ReadFromDSLString(0xc0005e3ca8, {0xc0002e46c0?, 0xc0001443c0?})
    /Users/mparnisari/GitHub/cli/internal/authorizationmodel/model.go:145 +0x27
github.com/openfga/cli/cmd/model.glob..func5(0xc00057e500?, {0xc0001443c0?, 0x4?, 0x197028c?})
    /Users/mparnisari/GitHub/cli/cmd/model/validate.go:115 +0xbb
github.com/spf13/cobra.(*Command).execute(0x20d5760, {0xc0001443a0, 0x2, 0x2})
    /Users/mparnisari/go/pkg/mod/github.com/spf13/cobra@v1.7.0/command.go:940 +0x87c
github.com/spf13/cobra.(*Command).ExecuteC(0x20d4060)
    /Users/mparnisari/go/pkg/mod/github.com/spf13/cobra@v1.7.0/command.go:1068 +0x3a5
github.com/spf13/cobra.(*Command).Execute(...)
    /Users/mparnisari/go/pkg/mod/github.com/spf13/cobra@v1.7.0/command.go:992
github.com/openfga/cli/cmd.Execute()
    /Users/mparnisari/GitHub/cli/cmd/root.go:47 +0x1a
main.main()
    /Users/mparnisari/GitHub/cli/main.go:21 +0xf
[11/09/23 6:36:48] ~/GitHub/cli (main) $