@@ -2,11 +2,14 @@ package main
22
33import (
44 "flag"
5+ "fmt"
56 "log"
7+ "net"
68 "os"
79 "os/signal"
810 "os/user"
911 "path"
12+ "strconv"
1013 "strings"
1114)
1215
@@ -22,6 +25,23 @@ var logReqHeader bool
2225var logRespHeader bool
2326var logRespBody bool
2427
28+ const flagToDescr = `local service adddress
29+ supported address formats:
30+ - [port]
31+ - :[port]
32+ - [ip]:[port]
33+ Note: [port] format (without colon) signifies 127.0.0.1:8080
34+ `
35+
36+ func sanitizeLocalAddress (addr string ) (serviceAddr string , err error ) {
37+ // if address has only digits consider it as port
38+ if port , err := strconv .Atoi (addr ); err == nil {
39+ return fmt .Sprintf ("127.0.0.1:%d" , port ), nil
40+ }
41+ _ , _ , err = net .SplitHostPort (addr )
42+ return addr , err
43+ }
44+
2545func init () {
2646 // get current system user info
2747 cuUser , err := user .Current ()
@@ -33,7 +53,7 @@ func init() {
3353 flag .StringVar (& porter , "using" , "http://localhost:8888" , "porter server address; API endpoint address" )
3454 flag .StringVar (& serviceName , "as" , "" , "service name; defaults to what is given by porter server" )
3555 flag .StringVar (& tunnelAddr , "via" , "" , "porter tunnel endpoint adddress; SSH address; defaults to 'using_host:22'" )
36- flag .StringVar (& localAddr , "to" , "127.0.0.1:8080" , "local listener adddress; local service listening address" )
56+ flag .StringVar (& localAddr , "to" , "127.0.0.1:8080" , flagToDescr )
3757 flag .StringVar (& userName , "with-user" , cuUser .Username , "username to use for porter" )
3858 flag .StringVar (& keyFile , "with-key" , defKeyFile , "private key to use for porter" )
3959 //TODO: this remoteAddr should be handled by porter
@@ -43,6 +63,12 @@ func init() {
4363 flag .BoolVar (& logRespBody , "log.response.body" , false , "log request body" )
4464 flag .Parse ()
4565
66+ localAddr , err = sanitizeLocalAddress (localAddr )
67+ if err != nil {
68+ fmt .Errorf ("invalid form of -to address: " )
69+ os .Exit (1 )
70+ }
71+
4672 // extract default tunnelAddr from porter url
4773 // eg: http://ported.example.com:8888 -> extract and convert -> ported.example.com:22
4874 if tunnelAddr == "" {
0 commit comments