cwist
Modern C web framework with libttak runtime
Loading...
Searching...
No Matches
middleware.h
Go to the documentation of this file.
1
6#ifndef __CWIST_MIDDLEWARE_H__
7#define __CWIST_MIDDLEWARE_H__
8
9#include <cwist/sys/app/app.h>
10#include <cwist/sys/app/waf.h>
13#include <stdbool.h>
14
19cwist_middleware_func cwist_mw_request_id(const char *header_name);
20
23
26
28cwist_middleware_func cwist_mw_rate_limit_ip(int requests_per_minute);
29
38
58
61
64
70
84
94cwist_middleware_func cwist_mw_compress(size_t min_body_size);
95
107
108/* ---- OpenTelemetry tracing middleware ------------------------------------ */
109
116typedef struct {
117 const char *endpoint;
119 const char *service_name;
120 size_t queue_cap;
121 size_t batch_size;
123
143
152const char *cwist_mw_otel_get_trace_id(const cwist_http_request *req);
153
154#endif
Minimal in-tree Redis client (RESP2) with connection pooling.
struct cwist_redis_pool cwist_redis_pool_t
Redis connection pool handle.
Definition cwist_redis.h:24
JWT (JSON Web Token) generation and verification.
struct cwist_jwt_claims cwist_jwt_claims
Opaque JWT claims object returned after successful verification.
Definition jwt.h:25
cwist_log_format_t
Access log middleware output formats.
Definition middleware.h:16
@ CWIST_LOG_COMBINED
Definition middleware.h:16
@ CWIST_LOG_JSON
Definition middleware.h:16
@ CWIST_LOG_COMMON
Definition middleware.h:16
cwist_middleware_func cwist_mw_request_id(const char *header_name)
Request ID middleware factory.
Definition middleware.c:79
cwist_middleware_func cwist_mw_rate_limit_ip(int requests_per_minute)
Fixed-window rate limiter middleware (per-IP).
Definition middleware.c:467
cwist_middleware_func cwist_mw_access_log(cwist_log_format_t format)
Access log middleware factory.
Definition middleware.c:296
Configuration for cwist_mw_otel_trace().
Definition middleware.h:116
const char * endpoint
Definition middleware.h:117
const char * service_name
Definition middleware.h:119
Redis-backed rate limiter configuration. Strings are copied.
Definition middleware.h:31
cwist_redis_pool_t * pool
Definition middleware.h:32
Core Application Structure and Lifecycle Management.
void(* cwist_middleware_func)(cwist_http_request *req, cwist_http_response *res, cwist_handler_func next)
Middleware type that receives req/res pair and the next stage in the chain.
Definition app.h:115
cwist_middleware_func cwist_mw_metrics(void)
Prometheus metrics collection middleware.
Definition middleware.c:333
const char * cwist_mw_otel_get_trace_id(const cwist_http_request *req)
Trace id of the span cwist_mw_otel_trace() opened for req.
Definition otel.c:300
cwist_middleware_func cwist_mw_jwt_auth(const char *secret)
JWT authentication middleware factory.
Definition middleware.c:649
const cwist_jwt_claims * cwist_mw_jwt_get_claims(const cwist_http_request *req)
Retrieve JWT claims stored by cwist_mw_jwt_auth from a request.
Definition middleware.c:687
cwist_middleware_func cwist_mw_cors(void)
CORS middleware. Adds CORS headers and handles OPTIONS requests (returns 204).
Definition middleware.c:525
cwist_middleware_func cwist_mw_rate_limit_ip_redis(const cwist_rate_limit_redis_cfg_t *cfg)
Shared per-IP 60-second window using one atomic Redis Lua command.
void cwist_mw_rate_limit_reset(void)
Reset the process-local IP table; Redis configs and keys are unchanged.
Definition middleware.c:450
cwist_middleware_func cwist_mw_compress(size_t min_body_size)
Response compression middleware factory.
Definition compress.c:713
cwist_middleware_func cwist_mw_otel_trace(const cwist_otel_cfg_t *cfg)
OpenTelemetry tracing middleware.
Definition otel.c:272
Deterministic request firewall and output sanitization.