| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package engineering
- import (
- "archive/zip"
- "encoding/json"
- "flag"
- "fmt"
- "io"
- "os"
- "golang.org/x/crypto/sha3"
- "github.com/v2fly/v2ray-core/v5/app/subscription/containers"
- "github.com/v2fly/v2ray-core/v5/main/commands/base"
- )
- var cmdSubscriptionEntriesExtractInputName *string
- var cmdSubscriptionEntriesExtract = &base.Command{
- UsageLine: "{{.Exec}} engineering subscriptionEntriesExtract",
- Flag: func() flag.FlagSet {
- fs := flag.NewFlagSet("", flag.ExitOnError)
- cmdSubscriptionEntriesExtractInputName = fs.String("input", "", "")
- return *fs
- }(),
- Run: func(cmd *base.Command, args []string) {
- cmd.Flag.Parse(args)
- inputReader := os.Stdin
- if *cmdSubscriptionEntriesExtractInputName != "" {
- file, err := os.Open(*cmdSubscriptionEntriesExtractInputName)
- if err != nil {
- base.Fatalf("%s", err)
- }
- inputReader = file
- defer file.Close()
- }
- content, err := io.ReadAll(inputReader)
- if err != nil {
- base.Fatalf("%s", err)
- }
- parsed, err := containers.TryAllParsers(content, "")
- if err != nil {
- base.Fatalf("%s", err)
- }
- zipWriter := zip.NewWriter(os.Stdout)
- {
- writer, err := zipWriter.Create("meta.json")
- if err != nil {
- base.Fatalf("%s", err)
- }
- err = json.NewEncoder(writer).Encode(parsed.Metadata)
- if err != nil {
- base.Fatalf("%s", err)
- }
- }
- for k, entry := range parsed.ServerSpecs {
- hash := sha3.Sum256(entry.Content)
- fileName := fmt.Sprintf("entry_%v_%x", k, hash[:8])
- writer, err := zipWriter.Create(fileName)
- if err != nil {
- base.Fatalf("%s", err)
- }
- _, err = writer.Write(entry.Content)
- if err != nil {
- base.Fatalf("%s", err)
- }
- }
- zipWriter.Close()
- },
- }
|