diff --git a/include/http/response.h b/include/http/response.h
index ecbd158..57a7da3 100644
--- a/include/http/response.h
+++ b/include/http/response.h
@@ -48,12 +48,7 @@ HttpResponse httpResponse304(
HttpResponse httpResponse403();
HttpResponse httpResponse404();
HttpResponse httpResponse500();
-HttpResponse httpResponseMe();
-HttpResponse httpResponseLoginForm();
-HttpResponse httpResponseRandval(time_t, int);
-HttpResponse httpResponseSession(Session);
-HttpResponse httpResponseUser(User);
-HttpResponse httpResponseVersion(const char *);
+HttpResponse httpResponseJson(const char *, size_t);
HttpResponse httpResponseAsset(const char *, size_t);
#endif // __HTTP_RESPONSE_H__
diff --git a/src/application/adapter/http/update.c b/src/application/adapter/http/update.c
index d114159..bb23915 100644
--- a/src/application/adapter/http/update.c
+++ b/src/application/adapter/http/update.c
@@ -41,8 +41,12 @@
#define NO_SESSION_SID NULL
-#define SESS_HEADER "{\"id\":\"%s\",\"timeout\":%d,\"timeleft\":%ld}"
+#define RANDVAL_JSON "{\"ctime\":%ld,\"vnext\":%ld,\"value\":\"%02d\"}"
+#define SESSION_JSON "{\"id\":\"%s\",\"timeout\":%d,\"timeleft\":%ld}"
+#define USER_JSON \
+ "{\"email\":\"%s\",\"firstname\":\"%s\",\"surname\":\"%s\"}"
+#define VERSION_JSON "{\"version\":\"%s\"}"
static
inline
@@ -58,6 +62,63 @@ getSessionId(Hash cookies)
return NO_SESSION_SID;
}
+HttpMessage
+responseVersion(const char * version)
+{
+ char buffer[200];
+ size_t nbuf;
+
+ nbuf = sprintf(buffer, VERSION_JSON, version? version : "");
+ return (HttpMessage)httpResponseJson(buffer, nbuf);
+}
+
+HttpMessage
+responseRandval(struct randval * val)
+{
+ char buffer[200];
+ size_t nbuf;
+ time_t remaining;
+
+ remaining = 10 - (time(NULL) - val->timestamp);
+
+ nbuf = sprintf(
+ buffer,
+ RANDVAL_JSON,
+ val->timestamp,
+ remaining,
+ val->value);
+
+ return (HttpMessage)httpResponseJson(buffer, nbuf);
+}
+
+HttpMessage
+responseSession(Session session)
+{
+ char buffer[200];
+ size_t nbuf;
+
+ nbuf = sprintf(buffer, SESSION_JSON,
+ (NULL != session)? session->id : "",
+ (NULL != session)? SESSION_LIVETIME : 0,
+ (NULL != session)? session->livetime - time(NULL) : 0);
+
+ return (HttpMessage)httpResponseJson(buffer, nbuf);
+}
+
+HttpMessage
+responseUser(User user)
+{
+ char buffer[200];
+ size_t nbuf;
+
+ nbuf = sprintf(buffer, USER_JSON,
+ (NULL != user)? user->email : "",
+ (NULL != user)? user->firstname : "",
+ (NULL != user)? user->surname : "");
+
+ return (HttpMessage)httpResponseJson(buffer, nbuf);
+}
+
static
void
loginAdapter(Application application, HttpWorker worker, Session session)
@@ -80,8 +141,7 @@ loginAdapter(Application application, HttpWorker worker, Session session)
}
if (NULL == username || NULL == password) {
- worker->current_response =
- new(HttpResponse, "HTTP/1.1", 403, "Forbidden");
+ worker->current_response = (HttpMessage)httpResponse403();
return;
}
@@ -91,11 +151,9 @@ loginAdapter(Application application, HttpWorker worker, Session session)
(char *)(password->value), password->nvalue);
if (! applicationLogin(application, credential, session)) {
- worker->current_response =
- new(HttpResponse, "HTTP/1.1", 403, "Forbidden");
+ worker->current_response = (HttpMessage)httpResponse403();
} else {
- worker->current_response =
- (HttpMessage)httpResponseUser(session->user);
+ worker->current_response = responseUser(session->user);
}
delete(credential);
@@ -168,7 +226,6 @@ signupAdapter(Application application, HttpWorker worker, Session session)
delete(user);
}
-
void
applicationAdapterHttpUpdate(void * _this, void * subject)
{
@@ -211,36 +268,32 @@ applicationAdapterHttpUpdate(void * _this, void * subject)
if (0 == strcmp("GET", worker->current_request->method)) {
if (0 == strcmp("/version/", worker->current_request->path)) {
worker->current_response =
- (HttpMessage)httpResponseVersion(this->application->version);
+ responseVersion(this->application->version);
return;
}
if (0 == strcmp("/user/get/", worker->current_request->path)) {
- worker->current_response =
- (HttpMessage)httpResponseUser(session->user);
+ worker->current_response = responseUser(session->user);
return;
}
if (0 == strcmp("/logout/", worker->current_request->path)) {
applicationLogout(this->application, session);
- worker->current_response =
- (HttpMessage)httpResponseUser(session->user);
+ worker->current_response = responseUser(session->user);
return;
}
if (0 == strcmp("/sessinfo/", worker->current_request->path)) {
- worker->current_response =
- (HttpMessage)httpResponseSession(session);
+ worker->current_response = responseSession(session);
return;
}
if (0 == strcmp("/randval/", worker->current_request->path)) {
if (NULL != session->user) {
worker->current_response =
- (HttpMessage)httpResponseRandval(
- this->application->val->timestamp,
- this->application->val->value);
+ responseRandval(this->application->val);
+ return;
} else {
worker->current_response = (HttpMessage)httpResponse403();
}
@@ -248,7 +301,7 @@ applicationAdapterHttpUpdate(void * _this, void * subject)
}
// if (0 < session->livetime - now) {
- // nbuf = sprintf(buf, SESS_HEADER,
+ // nbuf = sprintf(buf, SESSION_JSON,
// session->id,
// SESSION_LIVETIME,
// session->livetime - now);
diff --git a/src/http/Makefile.am b/src/http/Makefile.am
index 434e403..934e001 100644
--- a/src/http/Makefile.am
+++ b/src/http/Makefile.am
@@ -14,12 +14,8 @@ RESP = response.c \
response/404.c \
response/403.c \
response/500.c \
- response/login_form.c \
response/asset.c \
- response/randval.c \
- response/session.c \
- response/version.c \
- response/user.c
+ response/json.c
PARSER = parser.c \
parser/parse.c \
parser/new_message.c \
diff --git a/src/http/response/version.c b/src/http/response/json.c
similarity index 81%
rename from src/http/response/version.c
rename to src/http/response/json.c
index deb1818..9fcd1ce 100644
--- a/src/http/response/version.c
+++ b/src/http/response/json.c
@@ -36,15 +36,11 @@
#include "utils/memory.h"
#include "hash.h"
-#define RESP_DATA "{\"version\":\"%s\"}"
-
HttpResponse
-httpResponseVersion(const char * version)
+httpResponseJson(const char * body, size_t nbody)
{
- char buffer[200];
HttpResponse response;
HttpMessage message;
- size_t nbuf;
response = new(HttpResponse, "HTTP/1.1", 200, "OK");
message = (HttpMessage)response;
@@ -52,11 +48,9 @@ httpResponseVersion(const char * version)
hashAdd(message->header,
new(HttpHeader, CSTRA("Content-Type"), CSTRA("application/json")));
- nbuf = sprintf(buffer, RESP_DATA, (NULL != version)? version : "");
-
- message->nbody = nbuf;
- message->body = memMalloc(nbuf);
- memcpy(message->body, buffer, nbuf);
+ message->nbody = nbody;
+ message->body = memMalloc(nbody);
+ memcpy(message->body, body, nbody);
return response;
}
diff --git a/src/http/response/login_form.c b/src/http/response/login_form.c
deleted file mode 100644
index 9aa2ac1..0000000
--- a/src/http/response/login_form.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * \file
- *
- * \author Georg Hopp
- *
- * \copyright
- * Copyright © 2012 Georg Hopp
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#include
-#include
-#include
-#include
-#include
-
-#include "class.h"
-
-#include "http/response.h"
-#include "http/message.h"
-#include "http/header.h"
-
-#include "utils/memory.h"
-#include "hash.h"
-
-#define RESP_DATA ""
-
-HttpResponse
-httpResponseLoginForm()
-{
- HttpResponse response;
- HttpMessage message;
-
- response = new(HttpResponse, "HTTP/1.1", 200, "OK");
- message = (HttpMessage)response;
-
- hashAdd(message->header,
- new(HttpHeader, CSTRA("Content-Type"), CSTRA("text/html")));
-
- message->nbody = sizeof(RESP_DATA)-1;
- message->body = memMalloc(message->nbody);
- memcpy(message->body, RESP_DATA, message->nbody);
-
- return response;
-}
-
-// vim: set ts=4 sw=4:
diff --git a/src/http/response/randval.c b/src/http/response/randval.c
deleted file mode 100644
index 55f985f..0000000
--- a/src/http/response/randval.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * \file
- *
- * \author Georg Hopp
- *
- * \copyright
- * Copyright © 2012 Georg Hopp
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#include
-#include
-#include
-#include
-#include
-
-#include "class.h"
-
-#include "http/response.h"
-#include "http/message.h"
-#include "http/header.h"
-
-#include "utils/memory.h"
-#include "hash.h"
-
-#define RESP_DATA "{\"ctime\":%ld,\"vnext\":%ld,\"value\":\"%02d\"}"
-
-HttpResponse
-httpResponseRandval(time_t ctime, int value)
-{
- char buffer[200];
- HttpResponse response;
- HttpMessage message;
- size_t nbuf;
- time_t remaining;
-
- response = new(HttpResponse, "HTTP/1.1", 200, "OK");
- message = (HttpMessage)response;
-
- hashAdd(message->header,
- new(HttpHeader, CSTRA("Content-Type"), CSTRA("application/json")));
-
- remaining = 10 - (time(NULL) - ctime);
-
- nbuf = sprintf(buffer, RESP_DATA, ctime, remaining, value);
-
- message->nbody = nbuf;
- message->body = memMalloc(nbuf);
- memcpy(message->body, buffer, nbuf);
-
- return response;
-}
-
-// vim: set ts=4 sw=4:
diff --git a/src/http/response/session.c b/src/http/response/session.c
deleted file mode 100644
index 34ec44b..0000000
--- a/src/http/response/session.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * \file
- *
- * \author Georg Hopp
- *
- * \copyright
- * Copyright © 2012 Georg Hopp
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#include
-#include
-#include
-#include
-#include
-
-#include "class.h"
-
-#include "http/response.h"
-#include "http/message.h"
-#include "http/header.h"
-#include "session.h"
-
-#include "utils/memory.h"
-#include "hash.h"
-
-#define RESP_DATA "{\"id\":\"%s\",\"timeout\":%d,\"timeleft\":%ld}"
-
-HttpResponse
-httpResponseSession(Session session)
-{
- char buffer[200];
- HttpResponse response;
- HttpMessage message;
- size_t nbuf;
-
- response = new(HttpResponse, "HTTP/1.1", 200, "OK");
- message = (HttpMessage)response;
-
- hashAdd(message->header,
- new(HttpHeader, CSTRA("Content-Type"), CSTRA("application/json")));
-
- nbuf = sprintf(buffer, RESP_DATA,
- (NULL != session)? session->id : "",
- (NULL != session)? SESSION_LIVETIME : 0,
- (NULL != session)? session->livetime - time(NULL) : 0);
-
- message->nbody = nbuf;
- message->body = memMalloc(nbuf);
- memcpy(message->body, buffer, nbuf);
-
- return response;
-}
-
-// vim: set ts=4 sw=4:
diff --git a/src/http/response/user.c b/src/http/response/user.c
deleted file mode 100644
index 2cde03c..0000000
--- a/src/http/response/user.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * \file
- *
- * \author Georg Hopp
- *
- * \copyright
- * Copyright © 2012 Georg Hopp
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#include
-#include
-#include
-#include
-#include
-
-#include "class.h"
-
-#include "http/response.h"
-#include "http/message.h"
-#include "http/header.h"
-#include "session.h"
-
-#include "utils/memory.h"
-#include "hash.h"
-
-#define RESP_DATA "{\"email\":\"%s\",\"firstname\":\"%s\",\"surname\":\"%s\"}"
-
-HttpResponse
-httpResponseUser(User user)
-{
- char buffer[200];
- HttpResponse response;
- HttpMessage message;
- size_t nbuf;
-
- response = new(HttpResponse, "HTTP/1.1", 200, "OK");
- message = (HttpMessage)response;
-
- hashAdd(message->header,
- new(HttpHeader, CSTRA("Content-Type"), CSTRA("application/json")));
-
- nbuf = sprintf(buffer, RESP_DATA,
- (NULL != user)? user->email : "",
- (NULL != user)? user->firstname : "",
- (NULL != user)? user->surname : "");
-
- message->nbody = nbuf;
- message->body = memMalloc(nbuf);
- memcpy(message->body, buffer, nbuf);
-
- return response;
-}
-
-// vim: set ts=4 sw=4: