diff options
Diffstat (limited to 'src/api.go')
| -rw-r--r-- | src/api.go | 42 |
1 files changed, 38 insertions, 4 deletions
@@ -1,23 +1,57 @@ package eduvpn import ( + "fmt" "net/http" + "net/url" ) -func (eduvpn *VPNState) APIAuthenticatedGet(endpoint string) (string, error) { +// Authenticated wrappers on top of HTTP +func (eduvpn *VPNState) apiAuthenticatedWithOpts(method string, endpoint string, opts *HTTPOptionalParams) ([]byte, error) { + // Ensure optional is not nil as we will fill it with headers + if opts == nil { + opts = &HTTPOptionalParams{} + } url := eduvpn.Server.Endpoints.API.V3.API + endpoint // Ensure we have non-expired tokens oauthErr := eduvpn.EnsureTokensOAuth() if oauthErr != nil { - return "", oauthErr + return nil, oauthErr } - headers := &http.Header{"Authorization": {"Bearer " + eduvpn.Server.OAuth.Token.Access}} - body, bodyErr := HTTPGetWithOptionalParams(url, &HTTPOptionalParams{Headers: headers}) + headerKey := "Authorization" + headerValue := fmt.Sprintf("Bearer %s", eduvpn.Server.OAuth.Token.Access) + if opts.Headers != nil { + opts.Headers.Add(headerKey, headerValue) + } else { + opts.Headers = &http.Header{headerKey: {headerValue}} + } + body, bodyErr := HTTPMethodWithOpts(method, url, opts) + if bodyErr != nil { + return nil, bodyErr + } + return body, nil +} + +func (eduvpn *VPNState) APIConnectWireguard(pubkey string) (string, error) { + headers := &http.Header{ + "content-type": {"application/x-www-form-urlencoded"}, + "accept": {"application/x-wireguard-profile"}, + } + + urlForm := url.Values{ + "profile_id": {"default"}, + "public_key": {pubkey}, + } + body, bodyErr := eduvpn.apiAuthenticatedWithOpts(http.MethodPost, "/connect", &HTTPOptionalParams{Headers: headers, Body: urlForm}) if bodyErr != nil { return "", bodyErr } return string(body), nil } + +func (eduvpn *VPNState) APIInfo() ([]byte, error) { + return eduvpn.apiAuthenticatedWithOpts(http.MethodGet, "/info", nil) +} |
