Skip to content
Snippets Groups Projects
Unverified Commit e591c314 authored by Kali Kaneko's avatar Kali Kaneko
Browse files

[bug] pass json as bytes to go side

parent c2871f4a
No related branches found
No related tags found
No related merge requests found
......@@ -23,10 +23,11 @@ def generateProvidersJSON(configPath, outputJSONPath):
providers = {}
defaultProvider = getDefaultProvider(config)
providers['default'] = defaultProvider
providers['providers'] = []
providerData = getProviderData(defaultProvider, config)
addCaData(providerData, configPath)
providers[defaultProvider] = providerData
providers['providers'].append(providerData)
with open(outputJSONPath, 'w', encoding='utf-8') as f:
json.dump(providers, f, ensure_ascii=False, indent=4)
......
......@@ -7,6 +7,7 @@ package main
import (
"C"
"log"
"unsafe"
"0xacab.org/leap/bitmask-vpn/pkg/backend"
......@@ -53,8 +54,11 @@ func SubscribeToEvent(event string, f unsafe.Pointer) {
}
//export InitializeBitmaskContext
func InitializeBitmaskContext() {
opts := &backend.InitOpts{}
func InitializeBitmaskContext(provider string, jsonPtr unsafe.Pointer, jsonLen C.int) {
log.Println("DEBUG: provider=", provider)
json := C.GoBytes(jsonPtr, jsonLen)
log.Println("DEBUG: json=", string(json))
opts := backend.InitOptsFromJSON(provider, string(json))
backend.InitializeBitmaskContext(opts)
}
......
......@@ -8,7 +8,9 @@
GoString toGoStr(QString s)
{
char *c = s.toLocal8Bit().data();
// TODO verify that it's more correct
// char *c = s.toLocal8Bit().data();
const char *c = s.toUtf8().constData();
return (GoString){c, (long int)strlen(c)};
}
......
......@@ -145,8 +145,14 @@ int main(int argc, char **argv) {
GoString statusChangedEvt = {stCh, (long int)strlen(stCh)};
SubscribeToEvent(statusChangedEvt, (void *)onStatusChanged);
QJsonValue defaultProvider = providers->json().object().value("default");
/* we send json as bytes because it breaks as a simple string */
QString QProvidersJSON(providers->json().toJson(QJsonDocument::Compact));
/* let the Go side initialize its internal state */
InitializeBitmaskContext();
InitializeBitmaskContext(
toGoStr(defaultProvider.toString()),
(char*)QProvidersJSON.toUtf8().data(), strlen(QProvidersJSON.toUtf8().data()));
/* if requested, enable web api for controlling the VPN */
if (webAPI) {
......
[
{"name": "provider1", "url": "https://example.com"},
{"name": "provider2", "url": "https://foobar.com"}
]
{
"default": "demolib",
"providers": [
{
"name": "demolib",
"applicationName": "DemoLib",
"binaryName": "demo-lib",
"auth": "sip",
"providerURL": "vpnlib.bitmask.net",
"tosURL": "https://libraryvpn.org/",
"helpURL": "https://libraryvpn.org/",
"askForDonations": "false",
"donateURL": "",
"apiURL": "https://api.vpnlib.bitmask.net:4430/",
"geolocationAPI": "https://getmyip.vpnlib.bitmask.net/json",
"caCertString": "-----BEGIN CERTIFICATE-----\nMIIBQzCB6aADAgECAgEBMAoGCCqGSM49BAMCMBcxFTATBgNVBAMTDExFQVAgUm9v\ndCBDQTAeFw0yMDA4MDYxOTA3NDRaFw0yNTA4MDYxOTEyNDRaMBcxFTATBgNVBAMT\nDExFQVAgUm9vdCBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIG5POr4cAdK\nkTavKpSJr8nW1V7HLpr27qKaShpk1TUy5ipaAlusmavGLxKsPE+i3AMlvf/f6ch3\n1MjAtIf5rYujJjAkMA4GA1UdDwEB/wQEAwICpDASBgNVHRMBAf8ECDAGAQH/AgEB\nMAoGCCqGSM49BAMCA0kAMEYCIQDXj280LNZbSbi0Y2WvtQrJBUw4wdm8qAeOeuH7\n6XiLEwIhAPBRsmst/ujcChsG2t6LpG+p8s4rfIfh8YLo/4qrcc5p\n-----END CERTIFICATE-----",
"timeStamp": "2020-09-08 01:01:08"
}
]
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ package backend
import (
"C"
"encoding/json"
"log"
"strconv"
"unsafe"
......@@ -61,10 +62,30 @@ func SubscribeToEvent(event string, f unsafe.Pointer) {
subscribe(event, f)
}
type Providers struct {
Default string `json:"default"`
Data []InitOpts
}
type InitOpts struct {
Provider string
AppName string
SkipLaunch bool
Provider string `json:"name"`
AppName string `json:"applicationName"`
BinaryName string `json:"binaryName"`
Auth string `json:"auth"`
ProviderURL string `json:"providerURL"`
TosURL string `json:"tosURL"`
HelpURL string `json:"helpURL"`
AskForDonations bool `json:"askForDonations"`
SkipLaunch bool
}
func InitOptsFromJSON(provider, providersJSON string) *InitOpts {
opts := InitOpts{}
err := json.Unmarshal([]byte(providersJSON), &opts)
if err != nil {
log.Println("ERROR: %v", err)
}
return &opts
}
func InitializeBitmaskContext(opts *InitOpts) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment