aqhome-cgi: added some functions for redirection headers. allow vars in static files.
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include "aqhome-cgi/service/module.h"
|
||||
|
||||
#include <gwenhywfar/debug.h>
|
||||
#include <gwenhywfar/text.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
@@ -35,7 +36,6 @@
|
||||
#define AQH_MOD_SERVICE_HEADERFILE "header.html"
|
||||
#define AQH_MOD_SERVICE_FOOTERFILE "footer.html"
|
||||
|
||||
|
||||
#define GBAS GWEN_Buffer_AppendString
|
||||
#define GBAA GWEN_Buffer_AppendArgs
|
||||
|
||||
@@ -256,6 +256,34 @@ int AQH_ModService_RespondWithFile(AQH_MODULE *m, AQCGI_REQUEST *rq, const char
|
||||
|
||||
|
||||
|
||||
int AQH_ModService_RespondWithVarFile(AQH_MODULE *m, AQCGI_REQUEST *rq,
|
||||
const char *lang,
|
||||
const char *sFilename,
|
||||
GWEN_DB_NODE *dbVars,
|
||||
GWEN_BUFFER *dbuf)
|
||||
{
|
||||
int rv;
|
||||
GWEN_BUFFER *fbuf;
|
||||
|
||||
fbuf=GWEN_Buffer_new(0, 256, 0, 1);
|
||||
rv=AQH_ModService_ReadStaticFile(m, lang, sFilename, fbuf);
|
||||
if (rv<0) {
|
||||
AQCGI_Request_SetResponseCode(rq, 500);
|
||||
AQCGI_Request_SetResponseText(rq, "Internal Error");
|
||||
GWEN_Buffer_free(fbuf);
|
||||
return GWEN_ERROR_INTERNAL;
|
||||
}
|
||||
else {
|
||||
GWEN_DB_ReplaceVars(dbVars, GWEN_Buffer_GetStart(fbuf), dbuf);
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
GWEN_Buffer_free(fbuf);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
int AQH_ModService_HandleRequest(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, const char *sLastPathElem)
|
||||
{
|
||||
if (m) {
|
||||
@@ -517,11 +545,8 @@ void AQH_ModService_HandleRequestWithTable(AQH_MODULE *m,
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
if ((perms & e[i].perms)==e[i].perms)
|
||||
(e[i].handlerFn)(m, rq, session, dbuf);
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<h1>Error</h1><p>No permissions for this request.</p>");
|
||||
AQCGI_Request_SetResponseCode(rq, 403);
|
||||
AQCGI_Request_SetResponseText(rq, "Forbidden");
|
||||
}
|
||||
else
|
||||
AQH_ModService_DenyRequest(m, rq, session, dbuf);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -818,3 +843,81 @@ int AQH_ModService_RespondWithMimeFile(AQCGI_REQUEST *rq, const char *sFilename,
|
||||
|
||||
|
||||
|
||||
int AQH_ModService_AddRequestUrl(const AQCGI_REQUEST *rq, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
GWEN_DB_NODE *dbRequest;
|
||||
|
||||
dbRequest=AQCGI_Request_GetDbRequestHeader(rq);
|
||||
if (dbRequest) {
|
||||
const char *s;
|
||||
|
||||
GWEN_Buffer_AppendArgs(dbuf,
|
||||
"%s%s",
|
||||
GWEN_DB_GetCharValue(dbRequest, "SCRIPT_NAME", 0, ""),
|
||||
GWEN_DB_GetCharValue(dbRequest, "PATH_INFO", 0, ""));
|
||||
s=GWEN_DB_GetCharValue(dbRequest, "QUERY_STRING", 0, NULL);
|
||||
if (s && *s)
|
||||
GWEN_Buffer_AppendArgs(dbuf, "?%s", s);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_ModService_Redirect(AQCGI_REQUEST *rq, const char *destLocation)
|
||||
{
|
||||
GWEN_BUFFER *dbuf;
|
||||
|
||||
dbuf=GWEN_Buffer_new(0, 128, 0, 1);
|
||||
AQCGI_Request_SetResponseCode(rq, 303);
|
||||
AQCGI_Request_SetResponseText(rq, "See other");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "Location: %s", destLocation);
|
||||
AQCGI_Request_AddResponseHeaderData(rq, GWEN_Buffer_GetStart(dbuf));
|
||||
GWEN_Buffer_free(dbuf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_ModService_RedirectWithReferer(AQCGI_REQUEST *rq, const char *destLocation)
|
||||
{
|
||||
GWEN_BUFFER *dbuf;
|
||||
GWEN_BUFFER *ubuf;
|
||||
|
||||
dbuf=GWEN_Buffer_new(0, 128, 0, 1);
|
||||
GWEN_Buffer_AppendArgs(dbuf, "Location: %s", destLocation);
|
||||
|
||||
ubuf=GWEN_Buffer_new(0, 128, 0, 1);
|
||||
if (AQH_ModService_AddRequestUrl(rq, ubuf)) {
|
||||
DBG_ERROR(NULL, "Adding header: [%s]", GWEN_Buffer_GetStart(ubuf));
|
||||
GWEN_Buffer_AppendString(dbuf, "?src=");
|
||||
GWEN_Text_EscapeToBuffer(GWEN_Buffer_GetStart(ubuf), dbuf);
|
||||
}
|
||||
GWEN_Buffer_free(ubuf);
|
||||
|
||||
AQCGI_Request_SetResponseCode(rq, 303);
|
||||
AQCGI_Request_SetResponseText(rq, "See other");
|
||||
AQCGI_Request_AddResponseHeaderData(rq, GWEN_Buffer_GetStart(dbuf));
|
||||
GWEN_Buffer_free(dbuf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_ModService_DenyRequest(AQH_MODULE *m, AQCGI_REQUEST *rq, const AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
if (session && AQH_Session_GetUser(session)) {
|
||||
/* no permissions */
|
||||
AQCGI_Request_SetResponseCode(rq, 403);
|
||||
AQCGI_Request_SetResponseText(rq, "Forbidden");
|
||||
if (dbuf)
|
||||
GWEN_Buffer_AppendString(dbuf, "<h1>Error</h1><p>No permissions for this request.</p>");
|
||||
}
|
||||
else {
|
||||
/* need login */
|
||||
AQH_ModService_RedirectWithReferer(rq, AQH_Service_GetLoginUrl(AQH_ModService_GetService(m)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -86,6 +86,16 @@ void AQH_ModService_UnescapeToBuffer(const char *src, GWEN_BUFFER *buf);
|
||||
int AQH_ModService_FileIsCurrent(const char *sPath, int seconds);
|
||||
|
||||
int AQH_ModService_RespondWithMimeFile(AQCGI_REQUEST *rq, const char *sFilename, const char *sMimeType, GWEN_BUFFER *dbuf);
|
||||
int AQH_ModService_RespondWithVarFile(AQH_MODULE *m, AQCGI_REQUEST *rq,
|
||||
const char *lang,
|
||||
const char *sFilename,
|
||||
GWEN_DB_NODE *dbVars,
|
||||
GWEN_BUFFER *dbuf);
|
||||
|
||||
int AQH_ModService_AddRequestUrl(const AQCGI_REQUEST *rq, GWEN_BUFFER *dbuf);
|
||||
void AQH_ModService_Redirect(AQCGI_REQUEST *rq, const char *destLocation);
|
||||
void AQH_ModService_RedirectWithReferer(AQCGI_REQUEST *rq, const char *destLocation);
|
||||
void AQH_ModService_DenyRequest(AQH_MODULE *m, AQCGI_REQUEST *rq, const AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user