Create UI tunnels through API

This commit is contained in:
Anders Pitman
2020-10-14 10:29:19 -06:00
parent a4fa2862e4
commit fb8d379663
4 changed files with 59 additions and 56 deletions

32
api.go
View File

@@ -3,9 +3,12 @@ package main
import (
"crypto/md5"
"encoding/json"
"errors"
"fmt"
"io"
"net/http"
"net/url"
"strconv"
)
type Api struct {
@@ -52,6 +55,35 @@ func (a *Api) GetTunnels(tokenData TokenData) map[string]Tunnel {
return tunnels
}
func (a *Api) CreateTunnel(tokenData TokenData, params url.Values) (*Tunnel, error) {
if len(params["domain"]) != 1 {
return nil, errors.New("Invalid domain parameter")
}
domain := params["domain"][0]
if len(params["client-name"]) != 1 {
return nil, errors.New("Invalid client-name parameter")
}
clientName := params["client-name"][0]
if len(params["client-port"]) != 1 {
return nil, errors.New("Invalid client-port parameter")
}
clientPort, err := strconv.Atoi(params["client-port"][0])
if err != nil {
return nil, errors.New("Invalid client-port parameter")
}
tunnel, err := a.tunMan.CreateTunnelForClient(domain, tokenData.Owner, clientName, clientPort)
if err != nil {
return nil, err
}
return &tunnel, nil
}
func (a *Api) handleTunnels(w http.ResponseWriter, r *http.Request) {
token, err := extractToken("access_token", r)