sshpiper/cmd/sshpiperd/snap/configgen/main.go
Boshi Lian 502249d275
add config for snap (#191)
* add config for snap

* place holder

* fix build

* fit 7.2

* fix lint

* no empty
2023-08-13 07:07:28 -07:00

72 lines
1.3 KiB
Go

package main
import (
"fmt"
"go/ast"
"go/parser"
"go/token"
"log"
"os"
"strings"
)
func main() {
configs := map[string]string{
"sshpiperd": "../../main.go",
"workingdir": "../../../../plugin/workingdir/main.go",
"yaml": "../../../../plugin/yaml/main.go",
"fixed": "../../../../plugin/fixed/main.go",
"failtoban": "../../../../plugin/failtoban/main.go",
}
for k, v := range configs {
extractFlags(k, v)
}
}
func extractFlags(namespace, filePath string) {
file, err := os.Open(filePath)
if err != nil {
log.Fatal(err)
}
defer file.Close()
fset := token.NewFileSet()
node, err := parser.ParseFile(fset, filePath, file, parser.AllErrors)
if err != nil {
log.Fatal(err)
}
ast.Inspect(node, func(n ast.Node) bool {
if cl, ok := n.(*ast.CompositeLit); ok {
if t, ok := cl.Type.(*ast.SelectorExpr); ok {
o, ok := t.X.(*ast.Ident)
if !ok {
return true
}
if o.Name != "cli" {
return true
}
if !strings.HasSuffix(t.Sel.Name, "Flag") {
return true
}
for _, v := range cl.Elts {
if kv, ok := v.(*ast.KeyValueExpr); ok {
if kv.Key.(*ast.Ident).Name == "Name" {
fmt.Println(namespace + "." + strings.Trim(kv.Value.(*ast.BasicLit).Value, " \""))
}
}
}
}
}
return true
})
}