From e2bcbc5d7fc8846ed189863ab33f0514f5399365 Mon Sep 17 00:00:00 2001 From: Jeroen Wijenbergh Date: Mon, 7 Mar 2022 17:34:39 +0100 Subject: Begin exporting by wrapping state in a singleton --- wrappers/python/eduvpncommon/__init__.py | 12 ++++++++++++ wrappers/python/eduvpncommon/auth.py | 14 ++++++++++++++ wrappers/python/eduvpncommon/discovery.py | 9 --------- 3 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 wrappers/python/eduvpncommon/auth.py (limited to 'wrappers/python') diff --git a/wrappers/python/eduvpncommon/__init__.py b/wrappers/python/eduvpncommon/__init__.py index 52efa05..911c671 100644 --- a/wrappers/python/eduvpncommon/__init__.py +++ b/wrappers/python/eduvpncommon/__init__.py @@ -31,3 +31,15 @@ class GoSlice(Structure): class DataError(Structure): _fields_ = [('data', c_void_p), ('error', c_int64)] + + +# We have to use c_void_p instead of c_char_p to free it properly +# See https://stackoverflow.com/questions/13445568/python-ctypes-how-to-free-memory-getting-invalid-pointer-error +lib.Register.argtypes, lib.Register.restype = [c_char_p, c_char_p], None +lib.InitializeOAuth.argtypes, lib.InitializeOAuth.restype = [], c_void_p +lib.GetOrganizationsList.argtypes, lib.GetOrganizationsList.restype = [], DataError +lib.GetServersList.argtypes, lib.GetServersList.restype = [], DataError +lib.FreeString.argtypes, lib.FreeString.restype = [c_void_p], None +lib.Verify.argtypes, lib.Verify.restype = [GoSlice, GoSlice, GoSlice, c_uint64], c_int64 +lib.InsecureTestingSetExtraKey.argtypes, lib.InsecureTestingSetExtraKey.restype = [GoSlice], None + diff --git a/wrappers/python/eduvpncommon/auth.py b/wrappers/python/eduvpncommon/auth.py new file mode 100644 index 0000000..b0d1410 --- /dev/null +++ b/wrappers/python/eduvpncommon/auth.py @@ -0,0 +1,14 @@ +from . import lib +from ctypes import * + +def Register(name, url): + name_bytes = name.encode('utf-8') + url_bytes = url.encode('utf-8') + lib.Register(name_bytes, url_bytes) + +def InitializeOAuth(): + ptr = lib.InitializeOAuth() + value = cast(ptr, c_char_p).value + authURL = value.decode() + lib.FreeString(ptr) + return authURL diff --git a/wrappers/python/eduvpncommon/discovery.py b/wrappers/python/eduvpncommon/discovery.py index 7705968..4820ca2 100644 --- a/wrappers/python/eduvpncommon/discovery.py +++ b/wrappers/python/eduvpncommon/discovery.py @@ -5,15 +5,6 @@ from typing import Callable, List, Dict, Any from enum import Enum import json -# We have to use c_void_p instead of c_char_p to free it properly -# See https://stackoverflow.com/questions/13445568/python-ctypes-how-to-free-memory-getting-invalid-pointer-error -lib.GetOrganizationsList.argtypes, lib.GetOrganizationsList.restype = [], DataError -lib.GetServersList.argtypes, lib.GetServersList.restype = [], DataError -lib.FreeString.argtypes, lib.FreeString.restype = [c_void_p], None - -lib.Verify.argtypes, lib.Verify.restype = [GoSlice, GoSlice, GoSlice, c_uint64], c_int64 -lib.InsecureTestingSetExtraKey.argtypes, lib.InsecureTestingSetExtraKey.restype = [GoSlice], None - def getList(func: Callable) -> List[Dict[str, Any]]: dataError = func() ptr = dataError.data -- cgit v1.2.3