1

我创建了一个sample.rego文件,并使用 base64 进行了编码。库中是否有任何方法Golang可以验证 rego base64 编码值是否正确。

  1. 示例.rego 文件:

    package policy.authz
    
    default allow = false
    allow {
      input.policy == "abcd"
    }
    
  2. Base64 编码值为:

    cGFja2FnZSBwb2xpY3kuYXV0aHoKCiMgbG9naWMgdGhhdCBpbXBsZW1lbnRzIHBvbGljeS4KZGVmYXVsdCBhbGxvdyA9IGZhbHNlCmFsbG93IHsKICBpbnB1dC5wb2xpY3kgPT0gImFiY2QiCn0=

现在我必须在 GoLang 库的帮助下验证我们编码的文件是否有效。

现在,如果我将 Sample.rego 文件更改为:

package policy.authz
default allow = false
allow {
  wrong dummy data
  input.policy == "abcd"
}
  • Base64 编码值为:

cGFja2FnZSBwb2xpY3kuYXV0aHoKZGVmYXVsdCBhbGxvdyA9IGZhbHNlCmFsbG93IHSKICB3cm9uZyBkdW1teSBkYXRhCiAgaW5wdXQucG9saWN5ID09ICJhYmNkIgp9

现在我必须在 GoLang 库的帮助下验证我们编码的文件是无效的。

4

2 回答 2

1

Golang 库中是否有任何方法可以验证 rego base64 编码值是否正确。

您必须对其进行解码,如果它失败,则它不是 base64 或未正确编码。

这里有一个例子。

package main

import (
    "encoding/base64"
    "fmt"
)

func IsBase64(s string) bool {
    _, err := base64.StdEncoding.DecodeString(s)
    return err == nil
}

func main() {
    fmt.Println(IsBase64(`Invalid string`))
    fmt.Println(IsBase64(`VmFsaWQgc3RyaW5nCg==`))
}
于 2021-12-14T16:37:12.647 回答
0
       import "github.com/open-policy-agent/opa/ast"

        modules := map[string]*ast.Module{}
        compiler := ast.NewCompiler()
        modules["policyModule"], err = ast.ParseModule("policyModule", string(policy))
        if err!=nil{
            log.Error(err, "unable to parse the module")
        }
    
        compiler.Compile(modules)
        if compiler.Failed() {
            log.Error(compiler.Errors, "unable to compile the module")
            
        }
于 2021-12-16T16:32:56.853 回答