AUTH-1503: Added RDP support
This commit is contained in:
parent
92defa26d4
commit
200f9a3786
|
@ -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.`,
|
||||||
|
|
|
@ -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{
|
||||||
|
|
|
@ -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"))
|
||||||
|
}
|
Loading…
Reference in New Issue