AUTH-1503: Added RDP support
This commit is contained in:
		
							parent
							
								
									92defa26d4
								
							
						
					
					
						commit
						200f9a3786
					
				| 
						 | 
				
			
			@ -86,6 +86,7 @@ func Commands() []*cli.Command {
 | 
			
		|||
				{
 | 
			
		||||
					Name:        "ssh",
 | 
			
		||||
					Action:      ssh,
 | 
			
		||||
					Aliases:     []string{"rdp"},
 | 
			
		||||
					Usage:       "",
 | 
			
		||||
					ArgsUsage:   "",
 | 
			
		||||
					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())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if uri, err := url.Parse(c.String("url")); err == nil && uri.Scheme == "ssh" {
 | 
			
		||||
		host := uri.Host
 | 
			
		||||
		if uri.Port() == "" { // default to 22
 | 
			
		||||
			host = uri.Hostname() + ":22"
 | 
			
		||||
		}
 | 
			
		||||
	if host := hostnameFromURI(c.String("url")); host != "" {
 | 
			
		||||
		listener, err := net.Listen("tcp", "127.0.0.1:")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			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())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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 {
 | 
			
		||||
	return []cli.Flag{
 | 
			
		||||
		&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