package cmd import ( "fmt" "github.com/spf13/cobra" "shadowTLS/shadow" ) type ServerParam struct { ListenAddr string TargetAddr string FakeAddr string } var ( serverParams *ServerParam serverCmd = &cobra.Command{ Use: "server", Short: "Server mode", Run: func(cmd *cobra.Command, args []string) { if !verifyAndParseEncryptionKey() { fmt.Println("[Server] Invalid encryption key length") return } server := shadow.NewServer(serverParams.ListenAddr, serverParams.TargetAddr, serverParams.FakeAddr) server.Start() }, } ) func init() { serverParams = &ServerParam{} serverCmd.Flags().StringVarP(&serverParams.ListenAddr, "listen", "l", "0.0.0.0:443", "Listen address and port") serverCmd.Flags().StringVarP(&serverParams.TargetAddr, "target", "t", "", "target address and port to be proxied") serverCmd.Flags().StringVarP(&serverParams.FakeAddr, "faddr", "f", "", "Address and port of server to make TLS") serverCmd.MarkFlagRequired("listen") serverCmd.MarkFlagRequired("target") serverCmd.MarkFlagRequired("faddr") rootCmd.AddCommand(serverCmd) }