AUTH-1503: Added RDP support

This commit is contained in:
Austin Cherry 2019-02-01 16:43:59 -06:00
parent 92defa26d4
commit 200f9a3786
3 changed files with 38 additions and 5 deletions

View File

@ -86,6 +86,7 @@ func Commands() []*cli.Command {
{ {
Name: "ssh", Name: "ssh",
Action: ssh, Action: ssh,
Aliases: []string{"rdp"},
Usage: "", Usage: "",
ArgsUsage: "", ArgsUsage: "",
Description: `The ssh subcommand sends data over a proxy to the Cloudflare edge.`, Description: `The ssh subcommand sends data over a proxy to the Cloudflare edge.`,

View File

@ -300,11 +300,7 @@ func StartServer(c *cli.Context, version string, shutdownC, graceShutdownC chan
c.Set("url", "https://"+helloListener.Addr().String()) c.Set("url", "https://"+helloListener.Addr().String())
} }
if uri, err := url.Parse(c.String("url")); err == nil && uri.Scheme == "ssh" { if host := hostnameFromURI(c.String("url")); host != "" {
host := uri.Host
if uri.Port() == "" { // default to 22
host = uri.Hostname() + ":22"
}
listener, err := net.Listen("tcp", "127.0.0.1:") listener, err := net.Listen("tcp", "127.0.0.1:")
if err != nil { if err != nil {
logger.WithError(err).Error("Cannot start Websocket Proxy Server") logger.WithError(err).Error("Cannot start Websocket Proxy Server")
@ -393,6 +389,27 @@ func writePidFile(waitForSignal chan struct{}, pidFile string) {
fmt.Fprintf(file, "%d", os.Getpid()) fmt.Fprintf(file, "%d", os.Getpid())
} }
func hostnameFromURI(uri string) string {
u, err := url.Parse(uri)
if err != nil {
return ""
}
switch u.Scheme {
case "ssh":
return addPortIfMissing(u, 22)
case "rdp":
return addPortIfMissing(u, 3389)
}
return ""
}
func addPortIfMissing(uri *url.URL, port int) string {
if uri.Port() != "" {
return uri.Host
}
return fmt.Sprintf("%s:%d", uri.Hostname(), port)
}
func tunnelFlags(shouldHide bool) []cli.Flag { func tunnelFlags(shouldHide bool) []cli.Flag {
return []cli.Flag{ return []cli.Flag{
&cli.StringFlag{ &cli.StringFlag{

View File

@ -0,0 +1,15 @@
package tunnel
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TesthostnameFromURI(t *testing.T) {
assert.Equal(t, "ssh://awesome.warptunnels.horse:22", hostnameFromURI("ssh://awesome.warptunnels.horse:22"))
assert.Equal(t, "ssh://awesome.warptunnels.horse:22", hostnameFromURI("ssh://awesome.warptunnels.horse"))
assert.Equal(t, "rdp://localhost:3389", hostnameFromURI("rdp://localhost"))
assert.Equal(t, "", hostnameFromURI("trash"))
assert.Equal(t, "", hostnameFromURI("https://awesomesauce.com"))
}