mirror of
https://github.com/sigmasternchen/CShore
synced 2025-03-15 08:08:56 +00:00
changed ctx to pointer (otherwise response header changes can't be saved)
This commit is contained in:
parent
47747af272
commit
387f79e1cf
8 changed files with 25 additions and 24 deletions
19
demo/demo.c
19
demo/demo.c
|
@ -2,39 +2,40 @@
|
|||
#include <string.h>
|
||||
|
||||
#include <controller.h>
|
||||
#include <cookies.h>
|
||||
|
||||
#include "entities.h"
|
||||
|
||||
|
||||
GET("/", hello);
|
||||
GET("/index.*", hello);
|
||||
response_t hello(ctx_t ctx) {
|
||||
response_t hello(ctx_t* ctx) {
|
||||
return rawResponse(200, "Hello World\n");
|
||||
}
|
||||
|
||||
GET("/foobar", foobar);
|
||||
response_t foobar(ctx_t ctx) {
|
||||
response_t foobar(ctx_t* ctx) {
|
||||
return fileResponse("demo/foobar.txt");
|
||||
}
|
||||
|
||||
response_t authenticate(ctx_t ctx) {
|
||||
if (ctx.auth.type != BASIC) {
|
||||
response_t authenticate(ctx_t* ctx) {
|
||||
if (ctx->auth.type != BASIC) {
|
||||
return basicAuthResponse(401, "Protected Area");
|
||||
}
|
||||
|
||||
if (strcmp(ctx.auth.basic.user, "admin") != 0 ||
|
||||
strcmp(ctx.auth.basic.password, "password") != 0
|
||||
if (strcmp(ctx->auth.basic.user, "admin") != 0 ||
|
||||
strcmp(ctx->auth.basic.password, "password") != 0
|
||||
) {
|
||||
// username or password wrong
|
||||
return basicAuthResponse(401, "Protected Area");
|
||||
}
|
||||
|
||||
|
||||
return next();
|
||||
}
|
||||
|
||||
GET("/user", authenticate, user);
|
||||
response_t user(ctx_t ctx) {
|
||||
POST("/user", authenticate, user);
|
||||
response_t user(ctx_t* ctx) {
|
||||
user_t user = {
|
||||
.username = "overflowerror",
|
||||
.github = "https://github.com/overflowerror"
|
||||
|
@ -44,6 +45,6 @@ response_t user(ctx_t ctx) {
|
|||
}
|
||||
|
||||
GET("/template", template);
|
||||
response_t template(ctx_t ctx) {
|
||||
response_t template(ctx_t* ctx) {
|
||||
return templateResponse(200, "demo.templ", "Page Title", "Overflow");
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ static void handler(struct request request, struct response _response) {
|
|||
responseHeaders: headers_create()
|
||||
};
|
||||
|
||||
response_t response = routerHandler(ctx);
|
||||
response_t response = routerHandler(&ctx);
|
||||
if (response.output == NULL) {
|
||||
response = errorResponse(500, "route did not provide a reponse handler");
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ static void handler(struct request request, struct response _response) {
|
|||
return;
|
||||
}
|
||||
|
||||
response.output(out, response._userData, ctx);
|
||||
response.output(out, response._userData, &ctx);
|
||||
|
||||
fclose(out);
|
||||
}
|
||||
|
|
|
@ -114,7 +114,7 @@ int main(int argc, char** argv) {
|
|||
responseHeaders: headers_create()
|
||||
};
|
||||
|
||||
response_t response = routerHandler(ctx);
|
||||
response_t response = routerHandler(&ctx);
|
||||
if (response.output == NULL) {
|
||||
response = errorResponse(500, "route did not provide a reponse handler");
|
||||
}
|
||||
|
@ -132,7 +132,7 @@ int main(int argc, char** argv) {
|
|||
headers_free(&response.headers);
|
||||
headers_free(&ctx.responseHeaders);
|
||||
|
||||
response.output(stdout, response._userData, ctx);
|
||||
response.output(stdout, response._userData, &ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
|
||||
#include "request.h"
|
||||
|
||||
typedef response_t (handle_t)(ctx_t);
|
||||
typedef response_t (handle_t)(ctx_t*);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -31,13 +31,13 @@ void setDefaultErrorFormat(errorformat_t format) {
|
|||
errorformat = format;
|
||||
}
|
||||
|
||||
static void rawOutputAndFree(FILE* out, void* _userData, ctx_t ctx) {
|
||||
static void rawOutputAndFree(FILE* out, void* _userData, ctx_t* ctx) {
|
||||
fprintf(out, "%s", (char*) _userData);
|
||||
|
||||
free(_userData);
|
||||
}
|
||||
|
||||
static void rawOutput(FILE* out, void* _userData, ctx_t ctx) {
|
||||
static void rawOutput(FILE* out, void* _userData, ctx_t* ctx) {
|
||||
fprintf(out, "%s", (const char*) _userData);
|
||||
}
|
||||
|
||||
|
@ -70,7 +70,7 @@ struct statusdata {
|
|||
const char* message;
|
||||
};
|
||||
|
||||
static void statusOutput(FILE* out, void* _userData, ctx_t ctx) {
|
||||
static void statusOutput(FILE* out, void* _userData, ctx_t* ctx) {
|
||||
struct statusdata* data = (struct statusdata*) _userData;
|
||||
|
||||
const char* statusString = getStatusStrings(data->status).statusString;
|
||||
|
@ -80,7 +80,7 @@ static void statusOutput(FILE* out, void* _userData, ctx_t ctx) {
|
|||
"status", json_long(data->status),
|
||||
"error", json_string(statusString),
|
||||
"message", json_string(data->message),
|
||||
"path", json_string(ctx.path)
|
||||
"path", json_string(ctx->path)
|
||||
);
|
||||
free(data);
|
||||
free(tmp);
|
||||
|
@ -126,7 +126,7 @@ response_t errorResponse(int status, const char* message) {
|
|||
return statusResponse(status, message);
|
||||
}
|
||||
|
||||
static void fileOutput(FILE* out, void* _userData, ctx_t ctx) {
|
||||
static void fileOutput(FILE* out, void* _userData, ctx_t* ctx) {
|
||||
FILE* in = (FILE*) _userData;
|
||||
|
||||
#define READ_BUFFER_SIZE (1024)
|
||||
|
@ -171,7 +171,7 @@ response_t fileResponse(const char* file) {
|
|||
return response;
|
||||
}
|
||||
|
||||
static void jsonOutput(FILE* output, void* _userData, ctx_t ctx) {
|
||||
static void jsonOutput(FILE* output, void* _userData, ctx_t* ctx) {
|
||||
jsonValue_t* json = (jsonValue_t*) _userData;
|
||||
|
||||
char* result = json_stringify(json);
|
||||
|
|
|
@ -27,7 +27,7 @@ typedef struct {
|
|||
struct headers headers;
|
||||
|
||||
void* _userData;
|
||||
void (*output) (FILE* conenction, void* _userData, ctx_t ctx);
|
||||
void (*output) (FILE* conenction, void* _userData, ctx_t* ctx);
|
||||
} response_t;
|
||||
|
||||
typedef enum {
|
||||
|
|
|
@ -121,8 +121,8 @@ int registerRoute(method_t method, const char* path, ...) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
response_t routerHandler(ctx_t ctx) {
|
||||
struct route* route = findRoute(ctx.method, ctx.path);
|
||||
response_t routerHandler(ctx_t* ctx) {
|
||||
struct route* route = findRoute(ctx->method, ctx->path);
|
||||
if (route == NULL) {
|
||||
return errorResponse(404, "no route found");
|
||||
}
|
||||
|
|
|
@ -5,6 +5,6 @@
|
|||
|
||||
int registerRoute(method_t method, const char* path, ...);
|
||||
|
||||
response_t routerHandler(ctx_t ctx);
|
||||
response_t routerHandler(ctx_t* ctx);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue