mirror of
				https://github.com/chainreactors/spray.git
				synced 2025-11-04 09:58:03 +00:00 
			
		
		
		
	添加templates以及templates generator
This commit is contained in:
		
							parent
							
								
									6cc0a71dae
								
							
						
					
					
						commit
						e88d780e81
					
				@ -1,4 +1,4 @@
 | 
			
		||||
package main
 | 
			
		||||
package cmd
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
@ -7,7 +7,7 @@ import (
 | 
			
		||||
	"github.com/jessevdk/go-flags"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
func Spray() {
 | 
			
		||||
	var option internal.Option
 | 
			
		||||
	parser := flags.NewParser(&option, flags.Default)
 | 
			
		||||
	_, err := parser.Parse()
 | 
			
		||||
							
								
								
									
										13
									
								
								internal/templates.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								internal/templates.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
			
		||||
package internal
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/chainreactors/files"
 | 
			
		||||
	"github.com/chainreactors/parsers"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func LoadConfig(typ string) []byte {
 | 
			
		||||
	if typ == "http" {
 | 
			
		||||
		return files.UnFlate(parsers.Base64Decode(""))
 | 
			
		||||
	}
 | 
			
		||||
	return []byte{}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										116
									
								
								internal/templates_gen.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								internal/templates_gen.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,116 @@
 | 
			
		||||
//go:build ignore
 | 
			
		||||
// +build ignore
 | 
			
		||||
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/chainreactors/files"
 | 
			
		||||
	"github.com/chainreactors/parsers"
 | 
			
		||||
	"io"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"sigs.k8s.io/yaml"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func Encode(input []byte) string {
 | 
			
		||||
	return parsers.Base64Encode(files.Flate(input))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func loadYamlFile2JsonString(filename string) string {
 | 
			
		||||
	var err error
 | 
			
		||||
	file, err := os.Open("templates/" + filename)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	bs, _ := io.ReadAll(file)
 | 
			
		||||
	jsonstr, err := yaml.YAMLToJSON(bs)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(filename + err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return Encode(jsonstr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func visit(files *[]string) filepath.WalkFunc {
 | 
			
		||||
	return func(path string, info os.FileInfo, err error) error {
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
		if !info.IsDir() {
 | 
			
		||||
			*files = append(*files, path)
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func recuLoadYamlFiles2JsonString(dir string, single bool) string {
 | 
			
		||||
	var files []string
 | 
			
		||||
	err := filepath.Walk("templates/"+dir, visit(&files))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	var pocs []interface{}
 | 
			
		||||
	for _, file := range files {
 | 
			
		||||
		var tmp interface{}
 | 
			
		||||
		bs, err := os.ReadFile(file)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err = yaml.Unmarshal(bs, &tmp)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			print(file)
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if tmp == nil {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if single {
 | 
			
		||||
			pocs = append(pocs, tmp)
 | 
			
		||||
		} else {
 | 
			
		||||
			pocs = append(pocs, tmp.([]interface{})...)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	jsonstr, err := json.Marshal(pocs)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return Encode(jsonstr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	template := `package internal
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/chainreactors/files"
 | 
			
		||||
	"github.com/chainreactors/parsers"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func LoadConfig(typ string) []byte {
 | 
			
		||||
	if typ == "http" {
 | 
			
		||||
		return files.UnFlate(parsers.Base64Decode("%s"))
 | 
			
		||||
	}
 | 
			
		||||
	return []byte{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
`
 | 
			
		||||
	template = fmt.Sprintf(template,
 | 
			
		||||
		recuLoadYamlFiles2JsonString("fingers/http", false),
 | 
			
		||||
	)
 | 
			
		||||
	f, err := os.OpenFile("internal/templates.go", os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	f.WriteString(template)
 | 
			
		||||
	f.Sync()
 | 
			
		||||
	f.Close()
 | 
			
		||||
	println("generate templates.go successfully")
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user