Browse Source

created and used a more generalized httpResponseJson

0.1.7
Georg Hopp 12 years ago
parent
commit
07316ef7b2
  1. 7
      include/http/response.h
  2. 91
      src/application/adapter/http/update.c
  3. 6
      src/http/Makefile.am
  4. 14
      src/http/response/json.c
  5. 62
      src/http/response/login_form.c
  6. 66
      src/http/response/randval.c
  7. 67
      src/http/response/session.c
  8. 67
      src/http/response/user.c

7
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__

91
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);

6
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 \

14
src/http/response/version.c → 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;
}

62
src/http/response/login_form.c

@ -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 <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <sys/types.h>
#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 "<form action=\"/me/\" method=\"POST\">" \
"<input name=\"username\" type=\"text\" />" \
"<input type=\"submit\">" \
"</form>"
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:

66
src/http/response/randval.c

@ -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 <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <sys/types.h>
#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:

67
src/http/response/session.c

@ -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 <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <sys/types.h>
#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:

67
src/http/response/user.c

@ -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 <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <sys/types.h>
#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:
Loading…
Cancel
Save