summaryrefslogtreecommitdiff
path: root/exports/exports.go
diff options
context:
space:
mode:
Diffstat (limited to 'exports/exports.go')
-rw-r--r--exports/exports.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/exports/exports.go b/exports/exports.go
index d9ec122..a11c0fa 100644
--- a/exports/exports.go
+++ b/exports/exports.go
@@ -3,6 +3,7 @@ package main
/*
#include <stdlib.h>
#include "error.h"
+#include "server.h"
typedef long long int (*ReadRxBytes)();
typedef struct token {
@@ -11,6 +12,8 @@ typedef struct token {
unsigned long long int expired;
} token;
+typedef void (*UpdateToken)(const char* name, server* srv, token* tok);
+
typedef struct configData {
const char* config;
const char* config_type;
@@ -23,6 +26,12 @@ static long long int get_read_rx_bytes(ReadRxBytes read)
{
return read();
}
+
+static void update_token(UpdateToken func, const char* name, server* srv, token* tok)
+{
+ func(name, srv, tok);
+}
+
static int call_callback(PythonCB callback, const char *name, int oldstate, int newstate, void* data)
{
return callback(name, oldstate, newstate, data);
@@ -34,6 +43,8 @@ import (
"time"
"unsafe"
+ "github.com/eduvpn/eduvpn-common/internal/log"
+ "github.com/eduvpn/eduvpn-common/internal/server"
"github.com/eduvpn/eduvpn-common/internal/oauth"
"github.com/go-errors/errors"
@@ -145,6 +156,28 @@ func Register(
return getError(registerErr)
}
+//export SetTokenUpdater
+func SetTokenUpdater(name *C.char, updater C.UpdateToken) *C.error {
+ nameStr := C.GoString(name)
+ state, stateErr := GetVPNState(nameStr)
+ if stateErr != nil {
+ return getError(stateErr)
+ }
+ state.SetTokenUpdater(func(srv server.Server, tok oauth.Token) {
+ b, err := srv.Base()
+ if err != nil {
+ log.Logger.Warningf("No server base found for token updating with error: %v", err)
+ return
+ }
+ cName := C.CString(nameStr)
+ cSrv := getCPtrServer(state, b)
+ cTok := cToken(tok)
+ C.update_token(updater, cName, cSrv, cTok)
+ FreeString(cName)
+ })
+ return nil
+}
+
//export Deregister
func Deregister(name *C.char) *C.error {
nameStr := C.GoString(name)
@@ -284,6 +317,13 @@ func cConfig(config *client.ConfigData) *C.configData {
return cConf
}
+//export FreeTokens
+func FreeTokens(tokens *C.token) {
+ C.free(unsafe.Pointer(tokens.access))
+ C.free(unsafe.Pointer(tokens.refresh))
+ C.free(unsafe.Pointer(tokens))
+}
+
//export FreeConfig
func FreeConfig(config *C.configData) {
C.free(unsafe.Pointer(config.config))