Selaa lähdekoodia

Allow read config from stdin

世界 3 vuotta sitten
vanhempi
sitoutus
12d7e19f32
2 muutettua tiedostoa jossa 23 lisäystä ja 15 poistoa
  1. 2 11
      cmd/sing-box/cmd_check.go
  2. 21 4
      cmd/sing-box/cmd_run.go

+ 2 - 11
cmd/sing-box/cmd_check.go

@@ -2,13 +2,9 @@ package main
 
 import (
 	"context"
-	"os"
 
 	"github.com/sagernet/sing-box"
-	"github.com/sagernet/sing-box/common/json"
 	"github.com/sagernet/sing-box/log"
-	"github.com/sagernet/sing-box/option"
-	E "github.com/sagernet/sing/common/exceptions"
 
 	"github.com/spf13/cobra"
 )
@@ -30,14 +26,9 @@ func init() {
 }
 
 func check() error {
-	configContent, err := os.ReadFile(configPath)
+	options, err := readConfig()
 	if err != nil {
-		return E.Cause(err, "read config")
-	}
-	var options option.Options
-	err = json.Unmarshal(configContent, &options)
-	if err != nil {
-		return E.Cause(err, "decode config")
+		return err
 	}
 	ctx, cancel := context.WithCancel(context.Background())
 	_, err = box.New(ctx, options)

+ 21 - 4
cmd/sing-box/cmd_run.go

@@ -2,6 +2,7 @@ package main
 
 import (
 	"context"
+	"io"
 	"net/http"
 	"os"
 	"os/signal"
@@ -32,15 +33,31 @@ func init() {
 	mainCommand.AddCommand(commandRun)
 }
 
-func run() error {
-	configContent, err := os.ReadFile(configPath)
+func readConfig() (option.Options, error) {
+	var (
+		configContent []byte
+		err           error
+	)
+	if configPath == "stdin" {
+		configContent, err = io.ReadAll(os.Stdin)
+	} else {
+		configContent, err = os.ReadFile(configPath)
+	}
 	if err != nil {
-		return E.Cause(err, "read config")
+		return option.Options{}, E.Cause(err, "read config")
 	}
 	var options option.Options
 	err = json.Unmarshal(configContent, &options)
 	if err != nil {
-		return E.Cause(err, "decode config")
+		return option.Options{}, E.Cause(err, "decode config")
+	}
+	return options, nil
+}
+
+func run() error {
+	options, err := readConfig()
+	if err != nil {
+		return err
 	}
 	if disableColor {
 		if options.Log == nil {