telebit/rvpn/client/client.go
2017-03-30 18:20:37 -06:00

48 lines
921 B
Go

package client
import (
"context"
"crypto/tls"
"fmt"
"net/url"
"github.com/gorilla/websocket"
)
type Config struct {
Server string
Token string
Services map[string]int
Insecure bool
}
func Run(ctx context.Context, config *Config) error {
serverURL, err := url.Parse(config.Server)
if err != nil {
return fmt.Errorf("Invalid server URL: %v", err)
}
if serverURL.Scheme == "" {
serverURL.Scheme = "wss"
}
serverURL.Path = ""
query := make(url.Values)
query.Set("access_token", config.Token)
serverURL.RawQuery = query.Encode()
dialer := websocket.Dialer{}
if config.Insecure {
dialer.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
}
handler := NewWsHandler(config.Services)
conn, _, err := dialer.Dial(serverURL.String(), nil)
if err != nil {
return fmt.Errorf("First connection to server failed - check auth: %v", err)
}
handler.HandleConn(ctx, conn)
return nil
}