diff options
| author | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2023-03-29 11:58:46 +0200 |
|---|---|---|
| committer | Jeroen Wijenbergh <46386452+jwijenbergh@users.noreply.github.com> | 2023-04-18 14:05:19 +0200 |
| commit | 537a09d4334f1555b80d87b7d935328963a21739 (patch) | |
| tree | 071eeb52a4ed79a1e1b49831c80d6a2336cee7cf /exports/exports.go | |
| parent | 61871cb9ea7605e5350e9612edf8c9d603da2883 (diff) | |
Client + Server: Implement a token updater callback
Diffstat (limited to 'exports/exports.go')
| -rw-r--r-- | exports/exports.go | 40 |
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)) |
