summaryrefslogtreecommitdiff
path: root/exports
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2022-12-20 15:43:55 +0100
committerjwijenbergh <jeroenwijenbergh@protonmail.com>2022-12-21 18:28:50 +0100
commit12838c19514459974cf0a71c42f1248b1cb9419c (patch)
treea4254d20bb7b0ef49a2fa6c12753eb4c5acb64d1 /exports
parent6981666c6d8f639a1ff9c09a3bc08769e19928af (diff)
Exports + OAuth + Server: Forward tokens to getting a config
Diffstat (limited to 'exports')
-rw-r--r--exports/exports.go86
1 files changed, 74 insertions, 12 deletions
diff --git a/exports/exports.go b/exports/exports.go
index e374661..904fbec 100644
--- a/exports/exports.go
+++ b/exports/exports.go
@@ -5,6 +5,18 @@ package main
#include "error.h"
typedef long long int (*ReadRxBytes)();
+typedef struct token {
+ const char* access;
+ const char* refresh;
+ unsigned long long int expired;
+} token;
+
+typedef struct configData {
+ const char* config;
+ const char* config_type;
+ token* tokens;
+} configData;
+
typedef int (*PythonCB)(const char* name, int oldstate, int newstate, void* data);
static long long int get_read_rx_bytes(ReadRxBytes read)
@@ -20,8 +32,10 @@ import "C"
import (
"unsafe"
+ "time"
"github.com/eduvpn/eduvpn-common/internal/log"
+ "github.com/eduvpn/eduvpn-common/internal/oauth"
"github.com/go-errors/errors"
"github.com/eduvpn/eduvpn-common/client"
@@ -249,20 +263,56 @@ func RemoveCustomServer(name *C.char, url *C.char) *C.error {
return getError(removeErr)
}
+func cToken(t oauth.Token) *C.token {
+ cTok := (*C.token)(C.malloc(C.size_t(unsafe.Sizeof(C.token{}))))
+ cTok.access = C.CString(t.Access)
+ cTok.refresh = C.CString(t.Refresh)
+ cTok.expired = C.ulonglong(t.ExpiredTimestamp.Unix())
+ return cTok
+}
+
+func cConfig(config *client.ConfigData) *C.configData {
+ // No config so return nil pointer
+ if config == nil {
+ return nil
+ }
+ cConf := (*C.configData)(C.malloc(C.size_t(unsafe.Sizeof(C.configData{}))))
+ cConf.config = C.CString(config.Config)
+ cConf.config_type = C.CString(config.Type)
+ cConf.tokens = cToken(config.Tokens)
+ return cConf
+}
+
+//export FreeConfig
+func FreeConfig(config *C.configData) {
+ C.free(unsafe.Pointer(config.config))
+ C.free(unsafe.Pointer(config.config_type))
+ C.free(unsafe.Pointer(config.tokens.access))
+ C.free(unsafe.Pointer(config.tokens.refresh))
+ C.free(unsafe.Pointer(config.tokens))
+ C.free(unsafe.Pointer(config))
+}
+
//export GetConfigSecureInternet
func GetConfigSecureInternet(
name *C.char,
orgID *C.char,
preferTCP C.int,
-) (*C.char, *C.char, *C.error) {
+ prevTokens C.token,
+) (*C.configData, *C.error) {
nameStr := C.GoString(name)
state, stateErr := GetVPNState(nameStr)
if stateErr != nil {
- return nil, nil, getError(stateErr)
+ return nil, getError(stateErr)
}
preferTCPBool := preferTCP == 1
- config, configType, configErr := state.GetConfigSecureInternet(C.GoString(orgID), preferTCPBool)
- return C.CString(config), C.CString(configType), getError(configErr)
+ t := oauth.Token{
+ Access: C.GoString(prevTokens.access),
+ Refresh: C.GoString(prevTokens.refresh),
+ ExpiredTimestamp: time.Unix(int64(prevTokens.expired), 0),
+ }
+ cfg, configErr := state.GetConfigSecureInternet(C.GoString(orgID), preferTCPBool, t)
+ return cConfig(cfg), getError(configErr)
}
//export GetConfigInstituteAccess
@@ -270,15 +320,21 @@ func GetConfigInstituteAccess(
name *C.char,
url *C.char,
preferTCP C.int,
-) (*C.char, *C.char, *C.error) {
+ prevTokens C.token,
+) (*C.configData, *C.error) {
nameStr := C.GoString(name)
state, stateErr := GetVPNState(nameStr)
if stateErr != nil {
- return nil, nil, getError(stateErr)
+ return nil, getError(stateErr)
}
preferTCPBool := preferTCP == 1
- config, configType, configErr := state.GetConfigInstituteAccess(C.GoString(url), preferTCPBool)
- return C.CString(config), C.CString(configType), getError(configErr)
+ t := oauth.Token{
+ Access: C.GoString(prevTokens.access),
+ Refresh: C.GoString(prevTokens.refresh),
+ ExpiredTimestamp: time.Unix(int64(prevTokens.expired), 0),
+ }
+ cfg, configErr := state.GetConfigInstituteAccess(C.GoString(url), preferTCPBool, t)
+ return cConfig(cfg), getError(configErr)
}
//export GetConfigCustomServer
@@ -286,15 +342,21 @@ func GetConfigCustomServer(
name *C.char,
url *C.char,
preferTCP C.int,
-) (*C.char, *C.char, *C.error) {
+ prevTokens C.token,
+) (*C.configData, *C.error) {
nameStr := C.GoString(name)
state, stateErr := GetVPNState(nameStr)
if stateErr != nil {
- return nil, nil, getError(stateErr)
+ return nil, getError(stateErr)
}
preferTCPBool := preferTCP == 1
- config, configType, configErr := state.GetConfigCustomServer(C.GoString(url), preferTCPBool)
- return C.CString(config), C.CString(configType), getError(configErr)
+ t := oauth.Token{
+ Access: C.GoString(prevTokens.access),
+ Refresh: C.GoString(prevTokens.refresh),
+ ExpiredTimestamp: time.Unix(int64(prevTokens.expired), 0),
+ }
+ cfg, configErr := state.GetConfigCustomServer(C.GoString(url), preferTCPBool, t)
+ return cConfig(cfg), getError(configErr)
}
//export SetProfileID