From 559a1a666b0ae82aad0ecfa1565e4296160d4a1a Mon Sep 17 00:00:00 2001 From: 9seconds Date: Tue, 5 Nov 2019 11:01:29 +0300 Subject: [PATCH] Generate tls secrets --- cli/generate.go | 4 ++-- config/config.go | 12 ++++++------ main.go | 7 ++++++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/cli/generate.go b/cli/generate.go index 96c8311..5811798 100644 --- a/cli/generate.go +++ b/cli/generate.go @@ -7,7 +7,7 @@ import ( "github.com/9seconds/mtg/config" ) -func Generate(secretType string) { +func Generate(secretType, hostname string) { data := make([]byte, config.SimpleSecretLength) if _, err := rand.Read(data); err != nil { panic(err) @@ -21,6 +21,6 @@ func Generate(secretType string) { case "secured": PrintStdout("dd" + secret) default: - Fatal("Unknown secret type " + secret) + PrintStdout("ee" + secret + hex.EncodeToString([]byte(hostname))) } } diff --git a/config/config.go b/config/config.go index bea6989..588737f 100644 --- a/config/config.go +++ b/config/config.go @@ -169,6 +169,11 @@ func Init(options ...Opt) error { // nolint: gocyclo, funlen C.Secret = bytes.TrimPrefix(C.Secret, []byte{0xdd}) case len(C.Secret) == SimpleSecretLength: C.SecretMode = SecretModeSimple + case bytes.HasPrefix(C.Secret, []byte{0xee}): + C.SecretMode = SecretModeTLS + secret := bytes.TrimPrefix(C.Secret, []byte{0xee}) + C.Secret = secret[:SimpleSecretLength] + C.CloakHost = string(secret[SimpleSecretLength:]) default: return errors.New("incorrect secret") } @@ -225,10 +230,5 @@ func Printable() interface{} { panic(err) } - rrv, err := json.Marshal(rv) - if err != nil { - panic(err) - } - - return rrv + return rv } diff --git a/main.go b/main.go index 194545b..62336ac 100644 --- a/main.go +++ b/main.go @@ -19,6 +19,11 @@ var ( generateSecretCommand = app.Command("generate-secret", "Generate new secret") + generateCloakHost = generateSecretCommand.Flag("cloak-host", + "A host to use for TLS cloaking."). + Short('c'). + Default("storage.googleapis.com"). + String() generateSecretType = generateSecretCommand.Arg("type", "A type of secret to generate. Valid options are 'simple', 'secured' and 'tls'"). Required(). @@ -123,7 +128,7 @@ func main() { switch kingpin.MustParse(app.Parse(os.Args[1:])) { case generateSecretCommand.FullCommand(): - cli.Generate(*generateSecretType) + cli.Generate(*generateSecretType, *generateCloakHost) case proxyCommand.FullCommand(): err := config.Init( config.Opt{Option: config.OptionTypeDebug, Value: *proxyDebug},