summaryrefslogtreecommitdiff
path: root/pkg/backend
diff options
context:
space:
mode:
authorkali kaneko (leap communications) <kali@leap.se>2021-05-28 12:26:11 +0200
committerkali kaneko (leap communications) <kali@leap.se>2021-06-01 12:31:48 +0200
commit1bd2637e3133d895d1e73931f8b3466a5761d9ef (patch)
tree1bd75f2a91f30d996030a8531fefbb29f7c41831 /pkg/backend
parentc6c0209ad45fb7d2e45370ee3a39f2dd437603b0 (diff)
[feat] expose set transport
webapi mainly for tests, but it's usable too
Diffstat (limited to 'pkg/backend')
-rw-r--r--pkg/backend/api.go4
-rw-r--r--pkg/backend/status.go3
-rw-r--r--pkg/backend/webapi.go50
3 files changed, 48 insertions, 9 deletions
diff --git a/pkg/backend/api.go b/pkg/backend/api.go
index 0db26ae..e96c65b 100644
--- a/pkg/backend/api.go
+++ b/pkg/backend/api.go
@@ -83,6 +83,10 @@ func UseTransport(label string) {
ctx.bm.UseTransport(label)
}
+func GetTransport() *C.char {
+ return C.CString(ctx.bm.GetTransport())
+}
+
func Quit() {
if ctx.autostart != nil {
ctx.autostart.Disable()
diff --git a/pkg/backend/status.go b/pkg/backend/status.go
index bdbdd35..1ec5c4f 100644
--- a/pkg/backend/status.go
+++ b/pkg/backend/status.go
@@ -57,7 +57,8 @@ type connectionCtx struct {
func (c *connectionCtx) toJson() ([]byte, error) {
statusMutex.Lock()
if c.bm != nil {
- c.Locations = c.bm.ListLocationFullness("openvpn")
+ transport := c.bm.GetTransport()
+ c.Locations = c.bm.ListLocationFullness(transport)
c.CurrentGateway = c.bm.GetCurrentGateway()
c.CurrentLocation = c.bm.GetCurrentLocation()
c.CurrentCountry = c.bm.GetCurrentCountry()
diff --git a/pkg/backend/webapi.go b/pkg/backend/webapi.go
index 903112e..a14974e 100644
--- a/pkg/backend/webapi.go
+++ b/pkg/backend/webapi.go
@@ -49,7 +49,7 @@ func webGatewaySet(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "ParseForm() err: %v", err)
return
}
- gwLabel := r.FormValue("gw")
+ gwLabel := r.FormValue("transport")
fmt.Fprintf(w, "selected gateway: %s\n", gwLabel)
ctx.bm.UseGateway(gwLabel)
// TODO make sure we don't tear the fw down on reconnect...
@@ -63,23 +63,48 @@ func webGatewaySet(w http.ResponseWriter, r *http.Request) {
}
func webGatewayList(w http.ResponseWriter, r *http.Request) {
- locationJson, err := json.Marshal(ctx.bm.ListLocationFullness("openvpn"))
+ transport := ctx.bm.GetTransport()
+ locationJson, err := json.Marshal(ctx.bm.ListLocationFullness(transport))
if err != nil {
fmt.Fprintf(w, "Error converting json: %v", err)
}
fmt.Fprintf(w, string(locationJson))
}
-// TODO
func webTransportGet(w http.ResponseWriter, r *http.Request) {
+ t, err := json.Marshal(ctx.bm.GetTransport())
+ if err != nil {
+ fmt.Fprintf(w, "Error converting json: %v", err)
+ }
+ fmt.Fprintf(w, string(t))
+
}
-// TODO
func webTransportSet(w http.ResponseWriter, r *http.Request) {
+ switch r.Method {
+ case "POST":
+ if err := r.ParseForm(); err != nil {
+ fmt.Fprintf(w, "ParseForm() err: %v", err)
+ return
+ }
+ t := r.FormValue("transport")
+ if isValidTransport(t) {
+ fmt.Fprintf(w, "Selected transport: %s\n", t)
+ go ctx.bm.SetTransport(string(t))
+ } else {
+ fmt.Fprintf(w, "Unknown transport: %s\n", t)
+ }
+ default:
+ fmt.Fprintf(w, "Only POST supported.")
+ }
}
-// TODO
func webTransportList(w http.ResponseWriter, r *http.Request) {
+ t, err := json.Marshal([]string{"openvpn", "obfs4"})
+ if err != nil {
+ fmt.Fprintf(w, "Error converting json: %v", err)
+ }
+ fmt.Fprintf(w, string(t))
}
func webQuit(w http.ResponseWriter, r *http.Request) {
@@ -97,10 +122,19 @@ func enableWebAPI(port int) {
http.Handle("/vpn/gw/get", CheckAuth(http.HandlerFunc(webGatewayGet), token))
http.Handle("/vpn/gw/set", CheckAuth(http.HandlerFunc(webGatewaySet), token))
http.Handle("/vpn/gw/list", CheckAuth(http.HandlerFunc(webGatewayList), token))
- //http.Handle("/vpn/transport/get", CheckAuth(http.HandlerFunc(webTransportGet), token))
- //http.Handle("/vpn/transport/set", CheckAuth(http.HandlerFunc(webTransportSet), token))
- //http.Handle("/vpn/transport/list", CheckAuth(http.HandlerFunc(webTransportList), token))
+ http.Handle("/vpn/transport/get", CheckAuth(http.HandlerFunc(webTransportGet), token))
+ http.Handle("/vpn/transport/set", CheckAuth(http.HandlerFunc(webTransportSet), token))
+ http.Handle("/vpn/transport/list", CheckAuth(http.HandlerFunc(webTransportList), token))
http.Handle("/vpn/status", CheckAuth(http.HandlerFunc(webStatus), token))
http.Handle("/vpn/quit", CheckAuth(http.HandlerFunc(webQuit), token))
http.ListenAndServe(":"+strconv.Itoa(port), nil)
}
+
+func isValidTransport(t string) bool {
+ for _, b := range []string{"openvpn", "obfs4"} {
+ if b == t {
+ return true
+ }
+ }
+ return false
+}