Tilde Friends
HTTPD Interface

Classes

struct  _tf_httpd_user_app_t
 

Typedefs

typedef struct JSContext JSContext
 
typedef struct _tf_http_t tf_http_t
 
typedef struct _tf_http_request_t tf_http_request_t
 
typedef struct _tf_ssb_t tf_ssb_t
 
typedef struct _tf_httpd_user_app_t tf_httpd_user_app_t
 

Functions

void tf_httpd_register (JSContext *context)
 
tf_http_ttf_httpd_create (JSContext *context)
 
void tf_httpd_destroy (tf_http_t *http)
 
const char * tf_httpd_ext_to_content_type (const char *ext, bool use_fallback)
 
const char * tf_httpd_magic_bytes_to_content_type (const uint8_t *bytes, size_t size)
 
bool tf_httpd_redirect (tf_http_request_t *request)
 
tf_httpd_user_app_ttf_httpd_parse_user_app_from_path (const char *path, const char *expected_suffix)
 
const char ** tf_httpd_form_data_decode (const char *data, int length)
 
const char * tf_httpd_form_data_get (const char **form_data, const char *key)
 
JSValue tf_httpd_authenticate_jwt (tf_ssb_t *ssb, JSContext *context, const char *jwt)
 
JSValue tf_httpd_make_response_object (JSContext *context, tf_http_request_t *request)
 
bool tf_httpd_is_name_valid (const char *name)
 
const char * tf_httpd_make_set_session_cookie_header (tf_http_request_t *request, const char *session_cookie)
 
const char * tf_httpd_make_session_jwt (JSContext *context, tf_ssb_t *ssb, const char *name)
 
void tf_httpd_endpoint_static (tf_http_request_t *request)
 
void tf_httpd_endpoint_view (tf_http_request_t *request)
 
void tf_httpd_endpoint_save (tf_http_request_t *request)
 
void tf_httpd_endpoint_delete (tf_http_request_t *request)
 
void tf_httpd_endpoint_app (tf_http_request_t *request)
 
void tf_httpd_endpoint_app_index (tf_http_request_t *request)
 
void tf_httpd_endpoint_app_socket (tf_http_request_t *request)
 
void tf_httpd_endpoint_login (tf_http_request_t *request)
 
void tf_httpd_endpoint_login_auto (tf_http_request_t *request)
 
void tf_httpd_endpoint_logout (tf_http_request_t *request)
 

Detailed Description

Exposes the HTTP Server server to script and registers a number of built-in endpoints.

core/core.js is gradually being moved from JS to C here, at which point this will no longer be a bridge between the two and instead primarily expose the web API.

Typedef Documentation

◆ JSContext

typedef struct JSContext JSContext

A JS context.

◆ tf_http_request_t

An HTTP request.

◆ tf_http_t

typedef struct _tf_http_t tf_http_t

An HTTP server instance.

◆ tf_httpd_user_app_t

A user and app name.

◆ tf_ssb_t

typedef struct _tf_ssb_t tf_ssb_t

An SSB instance.

Function Documentation

◆ tf_httpd_authenticate_jwt()

JSValue tf_httpd_authenticate_jwt ( tf_ssb_t ssb,
JSContext context,
const char *  jwt 
)

Validate a JWT.

Parameters
ssbThe SSB instance.
contextA JS context.
jwtThe JWT.
Returns
The JWT contents if valid.

◆ tf_httpd_create()

tf_http_t * tf_httpd_create ( JSContext context)

Create the HTTP server instance.

Parameters
contextThe JS context.

◆ tf_httpd_destroy()

void tf_httpd_destroy ( tf_http_t http)

Destroy the HTTP server instance.

Parameters
httpThe HTTP server instance.

◆ tf_httpd_endpoint_app()

void tf_httpd_endpoint_app ( tf_http_request_t request)

App endpoint.

Parameters
requestThe HTTP request.

◆ tf_httpd_endpoint_app_index()

void tf_httpd_endpoint_app_index ( tf_http_request_t request)

App index endpoint.

Parameters
requestThe HTTP request.

◆ tf_httpd_endpoint_app_socket()

void tf_httpd_endpoint_app_socket ( tf_http_request_t request)

App WebSocket.

Parameters
requestThe HTTP request.

◆ tf_httpd_endpoint_delete()

void tf_httpd_endpoint_delete ( tf_http_request_t request)

Delete a blob or app.

Parameters
requestThe HTTP request.

◆ tf_httpd_endpoint_login()

void tf_httpd_endpoint_login ( tf_http_request_t request)

Login endpoint.

Parameters
requestThe HTTP request.

◆ tf_httpd_endpoint_login_auto()

void tf_httpd_endpoint_login_auto ( tf_http_request_t request)

Auto-login endpoint.

Parameters
requestThe HTTP request.

◆ tf_httpd_endpoint_logout()

void tf_httpd_endpoint_logout ( tf_http_request_t request)

Logout endpoint.

Parameters
requestThe HTTP request.

◆ tf_httpd_endpoint_save()

void tf_httpd_endpoint_save ( tf_http_request_t request)

Save a blob or app.

Parameters
requestThe HTTP request.

◆ tf_httpd_endpoint_static()

void tf_httpd_endpoint_static ( tf_http_request_t request)

Serve a static file.

Parameters
requestThe HTTP request.

◆ tf_httpd_endpoint_view()

void tf_httpd_endpoint_view ( tf_http_request_t request)

View a blob.

Parameters
requestThe HTTP request.

◆ tf_httpd_ext_to_content_type()

const char * tf_httpd_ext_to_content_type ( const char *  ext,
bool  use_fallback 
)

Determine a content-type from a file extension.

Parameters
extThe file extension.
use_fallbackIf not found, fallback to application/binary.
Returns
A MIME type or NULL.

◆ tf_httpd_form_data_decode()

const char ** tf_httpd_form_data_decode ( const char *  data,
int  length 
)

Decode form data into key value pairs.

Parameters
dataThe form data string.
lengthThe length of the form data string.
Returns
Key values pairs terminated by NULL.

◆ tf_httpd_form_data_get()

const char * tf_httpd_form_data_get ( const char **  form_data,
const char *  key 
)

Get a form data value from an array of key value pairs produced by tf_httpd_form_data_decode().

Parameters
form_dataThe form data.
keyThe key for which to fetch the value.
Returns
the value for the case-insensitive key or NULL.

◆ tf_httpd_is_name_valid()

bool tf_httpd_is_name_valid ( const char *  name)

Check if a name meets requirements.

Parameters
nameThe name.
Returns
true if the name is valid.

◆ tf_httpd_magic_bytes_to_content_type()

const char * tf_httpd_magic_bytes_to_content_type ( const uint8_t *  bytes,
size_t  size 
)

Determine a content type from magic bytes.

Parameters
bytesThe first bytes of a file.
sizeThe length of the bytes.
Returns
A MIME type or NULL.

◆ tf_httpd_make_response_object()

JSValue tf_httpd_make_response_object ( JSContext context,
tf_http_request_t request 
)

Make a JS response object for a request.

Parameters
contextThe JS context.
requestThe HTTP request.
Returns
The respone object.

◆ tf_httpd_make_session_jwt()

const char * tf_httpd_make_session_jwt ( JSContext context,
tf_ssb_t ssb,
const char *  name 
)

Make a JWT for the session.

Parameters
contextA JS context.
ssbThe SSB instance.
nameThe username.
Returns
The JWT.

◆ tf_httpd_make_set_session_cookie_header()

const char * tf_httpd_make_set_session_cookie_header ( tf_http_request_t request,
const char *  session_cookie 
)

Make a header for the session cookie.

Parameters
requestThe HTTP request.
session_cookieThe session cookie.
Returns
The header.

◆ tf_httpd_parse_user_app_from_path()

tf_httpd_user_app_t * tf_httpd_parse_user_app_from_path ( const char *  path,
const char *  expected_suffix 
)

Parse a username and app from a path like /~user/app/.

Parameters
pathThe path.
expected_suffixA suffix that is required to be on the path, and removed.
Returns
The user and app. Free with tf_free().

◆ tf_httpd_redirect()

bool tf_httpd_redirect ( tf_http_request_t request)

Respond with a redirect.

Parameters
requestThe HTTP request.
Returns
true if redirected.

◆ tf_httpd_register()

void tf_httpd_register ( JSContext context)

Register the HTTP script interface. Also registers a number of built-in request handlers. An ongoing project is to move the JS request handlers into C, after which point this will only do the latter.

Parameters
contextThe JS context.