mirror of
https://github.com/ading2210/libcurl.js.git
synced 2025-05-12 14:00:01 -04:00
include certs in compiled output
This commit is contained in:
parent
961ce1c37f
commit
663f31cd6e
4 changed files with 71 additions and 12 deletions
|
@ -7,16 +7,13 @@ LIB_DIR="build/curl-wasm/lib/"
|
|||
CACERT_FILE="cacert.pem"
|
||||
OUT_FILE="out/libcurl.js"
|
||||
|
||||
EXPORTED_FUNCS="_main,_perform_request"
|
||||
EXPORTED_FUNCS="_load_certs,_perform_request"
|
||||
RUNTIME_METHODS="addFunction,removeFunction,allocate,ALLOC_NORMAL"
|
||||
COMPILER_OPTIONS="-o $OUT_FILE -lcurl -lssl -lcrypto -lcjson -I $INCLUDE_DIR -L $LIB_DIR"
|
||||
EMSCRIPTEN_OPTIONS="-lwebsocket.js -sWEBSOCKET_URL=wss://debug.ading.dev/ws -sSINGLE_FILE -sASYNCIFY -sALLOW_TABLE_GROWTH -sEXPORTED_FUNCTIONS=$EXPORTED_FUNCS -sEXPORTED_RUNTIME_METHODS=$RUNTIME_METHODS --preload-file $CACERT_FILE"
|
||||
|
||||
if [ ! -f $CACERT_FILE ]; then
|
||||
wget "https://curl.se/ca/cacert.pem" -O $CACERT_FILE
|
||||
fi
|
||||
EMSCRIPTEN_OPTIONS="-lwebsocket.js -sWEBSOCKET_URL=wss://debug.ading.dev/ws -sSINGLE_FILE -sASYNCIFY -sALLOW_TABLE_GROWTH -sEXPORTED_FUNCTIONS=$EXPORTED_FUNCS -sEXPORTED_RUNTIME_METHODS=$RUNTIME_METHODS"
|
||||
|
||||
tools/all_deps.sh
|
||||
tools/generate_cert.sh
|
||||
|
||||
rm -rf out
|
||||
mkdir -p out
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <emscripten.h>
|
||||
#include <string.h>
|
||||
#include <emscripten.h>
|
||||
|
||||
#include "curl/curl.h"
|
||||
#include "cjson/cJSON.h"
|
||||
#include "curl/easy.h"
|
||||
#include "curl/header.h"
|
||||
#include "cjson/cJSON.h"
|
||||
#include "cacert.h"
|
||||
|
||||
typedef void(*DataCallback)(char* chunk_ptr, int chunk_size);
|
||||
typedef void(*EndCallback)(int error, char* response_json);
|
||||
|
@ -170,6 +171,8 @@ char* copy_bytes(const char* ptr, const int size) {
|
|||
return new_ptr;
|
||||
}
|
||||
|
||||
int main() {
|
||||
printf("emscripten libcurl module loaded\n");
|
||||
void load_certs() {
|
||||
FILE *file = fopen("/cacert.pem", "wb");
|
||||
fwrite(_cacert_pem, 1, _cacert_pem_len, file);
|
||||
fclose(file);
|
||||
}
|
|
@ -67,6 +67,33 @@ const status_messages = {
|
|||
511: "Network Authentication Required"
|
||||
}
|
||||
|
||||
//a case insensitive dictionary for request headers
|
||||
class Headers {
|
||||
constructor(obj) {
|
||||
for (let key in obj) {
|
||||
this[key] = obj[key];
|
||||
}
|
||||
return new Proxy(this, this);
|
||||
}
|
||||
get(target, prop) {
|
||||
let keys = Object.keys(this);
|
||||
for (let key of keys) {
|
||||
if (key.toLowerCase() === prop.toLowerCase()) {
|
||||
return this[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
set(target, prop, value) {
|
||||
let keys = Object.keys(this);
|
||||
for (let key of keys) {
|
||||
if (key.toLowerCase() === prop.toLowerCase()) {
|
||||
this[key] = value;
|
||||
}
|
||||
}
|
||||
this[prop] = value;
|
||||
}
|
||||
}
|
||||
|
||||
function is_str(obj) {
|
||||
return typeof obj === 'string' || obj instanceof String;
|
||||
}
|
||||
|
@ -145,7 +172,7 @@ function create_response(response_data, response_info) {
|
|||
return response_obj;
|
||||
}
|
||||
|
||||
function libcurl_fetch(url, params={}) {
|
||||
function create_options(params) {
|
||||
let body = null;
|
||||
if (params.body) {
|
||||
if (is_str(params.body)) {
|
||||
|
@ -156,10 +183,22 @@ function libcurl_fetch(url, params={}) {
|
|||
}
|
||||
params.body = true;
|
||||
}
|
||||
|
||||
if (!params.headers) params.headers = {};
|
||||
params.headers = new Headers(params.headers);
|
||||
|
||||
if (params.referer) {
|
||||
if (!params.headers) params.headers = {};
|
||||
params.headers["Referer"] = params.referer;
|
||||
}
|
||||
if (!params.headers["User-Agent"]) {
|
||||
params.headers["User-Agent"] = navigator.userAgent;
|
||||
}
|
||||
|
||||
return body;
|
||||
}
|
||||
|
||||
function libcurl_fetch(url, params={}) {
|
||||
let body = create_options(params);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let chunks = [];
|
||||
|
@ -180,6 +219,8 @@ function libcurl_fetch(url, params={}) {
|
|||
}
|
||||
|
||||
async function main() {
|
||||
console.log("emscripten module loaded");
|
||||
_load_certs();
|
||||
console.log(await libcurl_fetch("https://httpbin.org/anything"));
|
||||
}
|
||||
|
||||
|
|
18
client/tools/generate_cert.sh
Executable file
18
client/tools/generate_cert.sh
Executable file
|
@ -0,0 +1,18 @@
|
|||
#!/bin/bash
|
||||
|
||||
#export ca certs to a c header file
|
||||
|
||||
set -e
|
||||
|
||||
CURL_PREFIX=$(realpath build/curl-wasm)
|
||||
CACERT_FILE="$(realpath build/cacert.pem)"
|
||||
CACERT_HEADER="$CURL_PREFIX/include/cacert.h"
|
||||
|
||||
CACERT_DIR="$(dirname $CACERT_FILE)"
|
||||
REPLACE_STR="$(echo $CACERT_DIR | tr '/-' '_')"
|
||||
|
||||
if [ ! -f $CACERT_FILE ]; then
|
||||
wget "https://curl.se/ca/cacert.pem" -O $CACERT_FILE
|
||||
fi
|
||||
xxd -i $CACERT_FILE > $CACERT_HEADER
|
||||
sed -i "s/$REPLACE_STR//" $CACERT_HEADER
|
Loading…
Add table
Add a link
Reference in a new issue