add AQH_ModService_HandleRequestWithTable(). Shorten code.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -477,4 +477,49 @@ void AQH_ModService_AddRole(AQH_ROLE_LIST *roleList, int id, const char *name, u
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void AQH_ModService_HandleRequestWithTable(AQH_MODULE *m,
|
||||||
|
AQCGI_REQUEST *rq,
|
||||||
|
AQH_SESSION *session,
|
||||||
|
const char *page,
|
||||||
|
const AQH_MODSERVICE_HANDLER_ENTRY *e)
|
||||||
|
{
|
||||||
|
uint32_t perms;
|
||||||
|
GWEN_BUFFER *dbuf;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
perms=AQH_ModService_GetUserPerms(m);
|
||||||
|
DBG_ERROR(NULL, "Perms=%08x", perms);
|
||||||
|
|
||||||
|
dbuf=GWEN_Buffer_new(0, 256, 0, 1);
|
||||||
|
AQH_ModService_AddHeader(m, "en", dbuf);
|
||||||
|
|
||||||
|
for (i=0; ; i++) {
|
||||||
|
if (e[i].page==NULL) {
|
||||||
|
AQCGI_Request_SetResponseCode(rq, 404);
|
||||||
|
AQCGI_Request_SetResponseText(rq, "Not Found");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((AQCGI_Request_GetRequestMethod(rq)==e[i].httpMethod) &&
|
||||||
|
(strcasecmp(page, e[i].page)==0)) {
|
||||||
|
/* preset result */
|
||||||
|
AQCGI_Request_SetResponseCode(rq, 200);
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AQH_ModService_AddFooter(m, "en", dbuf);
|
||||||
|
AQCGI_Request_SetBufferResponseBody(rq, dbuf);
|
||||||
|
AQCGI_Request_AddResponseHeaderData(rq, "Content-type: text/html");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,15 @@ typedef void (*AQH_MODSERVICE_ADDHEADER_FN)(AQH_MODULE *m, const char *lang, GWE
|
|||||||
typedef void (*AQH_MODSERVICE_ADDFOOTER_FN)(AQH_MODULE *m, const char *lang, GWEN_BUFFER *dbuf);
|
typedef void (*AQH_MODSERVICE_ADDFOOTER_FN)(AQH_MODULE *m, const char *lang, GWEN_BUFFER *dbuf);
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct AQH_MODSERVICE_HANDLER_ENTRY AQH_MODSERVICE_HANDLER_ENTRY;
|
||||||
|
struct AQH_MODSERVICE_HANDLER_ENTRY {
|
||||||
|
const char *page;
|
||||||
|
int httpMethod;
|
||||||
|
uint32_t perms;
|
||||||
|
void (*handlerFn)(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void AQH_ModService_Extend(AQH_MODULE *m, AQH_SERVICE *sv, const char *baseFolder);
|
void AQH_ModService_Extend(AQH_MODULE *m, AQH_SERVICE *sv, const char *baseFolder);
|
||||||
|
|
||||||
@@ -41,6 +50,11 @@ int AQH_ModService_HandleRequest(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *
|
|||||||
AQH_SESSION *AQH_ModService_ReadSession(AQH_MODULE *m, AQCGI_REQUEST *rq);
|
AQH_SESSION *AQH_ModService_ReadSession(AQH_MODULE *m, AQCGI_REQUEST *rq);
|
||||||
void AQH_ModService_CalcSessionModPerms(AQH_MODULE *m, const AQH_SESSION *session);
|
void AQH_ModService_CalcSessionModPerms(AQH_MODULE *m, const AQH_SESSION *session);
|
||||||
|
|
||||||
|
void AQH_ModService_HandleRequestWithTable(AQH_MODULE *m,
|
||||||
|
AQCGI_REQUEST *rq,
|
||||||
|
AQH_SESSION *session,
|
||||||
|
const char *page,
|
||||||
|
const AQH_MODSERVICE_HANDLER_ENTRY *e);
|
||||||
|
|
||||||
int AQH_ModService_RespondWithFile(AQH_MODULE *m, AQCGI_REQUEST *rq, const char *lang, const char *sFilename, GWEN_BUFFER *dbuf);
|
int AQH_ModService_RespondWithFile(AQH_MODULE *m, AQCGI_REQUEST *rq, const char *lang, const char *sFilename, GWEN_BUFFER *dbuf);
|
||||||
int AQH_ModService_ReadStaticFile(AQH_MODULE *m, const char *lang, const char *filename, GWEN_BUFFER *dbuf);
|
int AQH_ModService_ReadStaticFile(AQH_MODULE *m, const char *lang, const char *filename, GWEN_BUFFER *dbuf);
|
||||||
|
|||||||
Reference in New Issue
Block a user