mirror of
https://github.com/ading2210/libcurl.js.git
synced 2025-05-12 22:10: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"
|
CACERT_FILE="cacert.pem"
|
||||||
OUT_FILE="out/libcurl.js"
|
OUT_FILE="out/libcurl.js"
|
||||||
|
|
||||||
EXPORTED_FUNCS="_main,_perform_request"
|
EXPORTED_FUNCS="_load_certs,_perform_request"
|
||||||
RUNTIME_METHODS="addFunction,removeFunction,allocate,ALLOC_NORMAL"
|
RUNTIME_METHODS="addFunction,removeFunction,allocate,ALLOC_NORMAL"
|
||||||
COMPILER_OPTIONS="-o $OUT_FILE -lcurl -lssl -lcrypto -lcjson -I $INCLUDE_DIR -L $LIB_DIR"
|
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"
|
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"
|
||||||
|
|
||||||
if [ ! -f $CACERT_FILE ]; then
|
|
||||||
wget "https://curl.se/ca/cacert.pem" -O $CACERT_FILE
|
|
||||||
fi
|
|
||||||
|
|
||||||
tools/all_deps.sh
|
tools/all_deps.sh
|
||||||
|
tools/generate_cert.sh
|
||||||
|
|
||||||
rm -rf out
|
rm -rf out
|
||||||
mkdir -p out
|
mkdir -p out
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <emscripten.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <emscripten.h>
|
||||||
|
|
||||||
#include "curl/curl.h"
|
#include "curl/curl.h"
|
||||||
#include "cjson/cJSON.h"
|
|
||||||
#include "curl/easy.h"
|
#include "curl/easy.h"
|
||||||
#include "curl/header.h"
|
#include "curl/header.h"
|
||||||
|
#include "cjson/cJSON.h"
|
||||||
|
#include "cacert.h"
|
||||||
|
|
||||||
typedef void(*DataCallback)(char* chunk_ptr, int chunk_size);
|
typedef void(*DataCallback)(char* chunk_ptr, int chunk_size);
|
||||||
typedef void(*EndCallback)(int error, char* response_json);
|
typedef void(*EndCallback)(int error, char* response_json);
|
||||||
|
@ -170,6 +171,8 @@ char* copy_bytes(const char* ptr, const int size) {
|
||||||
return new_ptr;
|
return new_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
void load_certs() {
|
||||||
printf("emscripten libcurl module loaded\n");
|
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"
|
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) {
|
function is_str(obj) {
|
||||||
return typeof obj === 'string' || obj instanceof String;
|
return typeof obj === 'string' || obj instanceof String;
|
||||||
}
|
}
|
||||||
|
@ -145,7 +172,7 @@ function create_response(response_data, response_info) {
|
||||||
return response_obj;
|
return response_obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
function libcurl_fetch(url, params={}) {
|
function create_options(params) {
|
||||||
let body = null;
|
let body = null;
|
||||||
if (params.body) {
|
if (params.body) {
|
||||||
if (is_str(params.body)) {
|
if (is_str(params.body)) {
|
||||||
|
@ -156,10 +183,22 @@ function libcurl_fetch(url, params={}) {
|
||||||
}
|
}
|
||||||
params.body = true;
|
params.body = true;
|
||||||
}
|
}
|
||||||
if (params.referer) {
|
|
||||||
if (!params.headers) params.headers = {};
|
if (!params.headers) params.headers = {};
|
||||||
|
params.headers = new Headers(params.headers);
|
||||||
|
|
||||||
|
if (params.referer) {
|
||||||
params.headers["Referer"] = params.referer;
|
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) => {
|
return new Promise((resolve, reject) => {
|
||||||
let chunks = [];
|
let chunks = [];
|
||||||
|
@ -180,6 +219,8 @@ function libcurl_fetch(url, params={}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
|
console.log("emscripten module loaded");
|
||||||
|
_load_certs();
|
||||||
console.log(await libcurl_fetch("https://httpbin.org/anything"));
|
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