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: