add AQH_ModService_HandleRequestWithTable(). Shorten code.
This commit is contained in:
@@ -25,10 +25,10 @@
|
||||
* ------------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* global vars
|
||||
* ------------------------------------------------------------------------------------------------
|
||||
*/
|
||||
#define GBAS GWEN_Buffer_AppendString
|
||||
#define GBAA GWEN_Buffer_AppendArgs
|
||||
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* forward declarations
|
||||
@@ -40,22 +40,19 @@ static void _createRoleList(AQH_MODULE *m);
|
||||
|
||||
static AQH_MODULE *_loadSubModule(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, const char *sModuleName);
|
||||
static int _handleRequest(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, const char *sLastPathElem);
|
||||
static int _handleRqIndex(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static void _handleRqIndex(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
|
||||
static int _handleRqEditMod(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static int _handleRqEditModGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static int _handleRqEditModPost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static void _handleRqEditModGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static void _handleRqEditModPost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
|
||||
static int _handleRqAddRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static int _handleRqAddRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static int _handleRqAddRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static void _handleRqAddRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static void _handleRqAddRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
|
||||
static int _handleRqEditRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static int _handleRqEditRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static int _handleRqEditRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static void _handleRqEditRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static void _handleRqEditRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static int _getHighestUsedRoleId(const AQH_ROLE_LIST *roleList);
|
||||
|
||||
static int _handleRqDeleteRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
static void _handleRqDeleteRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf);
|
||||
|
||||
static void _writeEditModForm(const AQH_MODULE *currentMod, const char *sModName, GWEN_BUFFER *dbuf);
|
||||
static void _writeRoleListToForm(const AQH_ROLE_LIST *roleList,
|
||||
@@ -70,6 +67,25 @@ static uint32_t _readPermissionsFromForm(GWEN_DB_NODE *dbPost, const AQH_PERMDEF
|
||||
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* vars
|
||||
* ------------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
AQH_MODSERVICE_HANDLER_ENTRY _requestTable[]={
|
||||
{"index.html", AQCGI_REQUEST_METHOD_GET, AQH_MODADMMODULES_PERMS_MODULESREAD, _handleRqIndex},
|
||||
{"editmodule.html", AQCGI_REQUEST_METHOD_GET, AQH_MODADMMODULES_PERMS_MODULESWRITE, _handleRqEditModGet},
|
||||
{"editmodule.html", AQCGI_REQUEST_METHOD_POST, AQH_MODADMMODULES_PERMS_MODULESWRITE, _handleRqEditModPost},
|
||||
{"addrole.html", AQCGI_REQUEST_METHOD_GET, AQH_MODADMMODULES_PERMS_MODULESWRITE, _handleRqAddRoleGet},
|
||||
{"addrole.html", AQCGI_REQUEST_METHOD_POST, AQH_MODADMMODULES_PERMS_MODULESWRITE, _handleRqAddRolePost},
|
||||
{"editrole.html", AQCGI_REQUEST_METHOD_GET, AQH_MODADMMODULES_PERMS_MODULESWRITE, _handleRqEditRoleGet},
|
||||
{"editrole.html", AQCGI_REQUEST_METHOD_POST, AQH_MODADMMODULES_PERMS_MODULESWRITE, _handleRqEditRolePost},
|
||||
{"delrole.html", AQCGI_REQUEST_METHOD_GET, AQH_MODADMMODULES_PERMS_MODULESWRITE, _handleRqDeleteRole},
|
||||
{NULL, 0, 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* code
|
||||
* ------------------------------------------------------------------------------------------------
|
||||
@@ -150,51 +166,26 @@ AQH_MODULE *_loadSubModule(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *sessio
|
||||
|
||||
int _handleRequest(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, const char *sLastPathElem)
|
||||
{
|
||||
GWEN_BUFFER *dbuf;
|
||||
|
||||
dbuf=GWEN_Buffer_new(0, 256, 0, 1);
|
||||
AQH_ModService_AddHeader(m, "en", dbuf);
|
||||
|
||||
if (strcasecmp(sLastPathElem, "index.html")==0)
|
||||
_handleRqIndex(m, rq, session, dbuf);
|
||||
else if (strcasecmp(sLastPathElem, "editmodule.html")==0)
|
||||
_handleRqEditMod(m, rq, session, dbuf);
|
||||
else if (strcasecmp(sLastPathElem, "addrole.html")==0)
|
||||
_handleRqAddRole(m, rq, session, dbuf);
|
||||
else if (strcasecmp(sLastPathElem, "editrole.html")==0)
|
||||
_handleRqEditRole(m, rq, session, dbuf);
|
||||
else if (strcasecmp(sLastPathElem, "delrole.html")==0)
|
||||
_handleRqDeleteRole(m, rq, session, dbuf);
|
||||
else {
|
||||
AQCGI_Request_SetResponseCode(rq, 404);
|
||||
AQCGI_Request_SetResponseText(rq, "Not Found");
|
||||
}
|
||||
AQH_ModService_AddFooter(m, "en", dbuf);
|
||||
AQCGI_Request_SetBufferResponseBody(rq, dbuf);
|
||||
AQCGI_Request_AddResponseHeaderData(rq, "Content-type: text/html");
|
||||
|
||||
AQH_ModService_HandleRequestWithTable(m, rq, session, sLastPathElem, _requestTable);
|
||||
return AQCGI_SendResponse(rq);
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _handleRqIndex(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
void _handleRqIndex(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
AQH_SERVICE *sv;
|
||||
GWEN_STRINGLIST *slModules;
|
||||
uint32_t perms;
|
||||
|
||||
perms=AQH_ModService_GetUserPerms(m);
|
||||
DBG_ERROR(NULL, "Perms=%08x", perms);
|
||||
if (perms & AQH_MODADMMODULES_PERMS_MODULESREAD) {
|
||||
AQH_SERVICE *sv;
|
||||
GWEN_STRINGLIST *slModules;
|
||||
|
||||
sv=AQH_ModService_GetService(m);
|
||||
slModules=AQH_Service_ListModules(sv);
|
||||
if (slModules) {
|
||||
GWEN_STRINGLISTENTRY *se;
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf, "<h1>Modules</h1>\n");
|
||||
GWEN_Buffer_AppendString(dbuf,
|
||||
GBAS(dbuf, "<h1>Modules</h1>\n");
|
||||
GBAS(dbuf,
|
||||
"<table class=\"datatable\">\n"
|
||||
"<thead>"
|
||||
"<tr><th>Id</th><th>Name</th><th>Description</th><th>Actions</th></tr>\n"
|
||||
@@ -214,71 +205,34 @@ int _handleRqIndex(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_
|
||||
const char *sName;
|
||||
|
||||
sName=AQH_Module_GetName(currentMod);
|
||||
GWEN_Buffer_AppendString(dbuf, "<tr>");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<td>%lu</td>", (unsigned long int) AQH_Module_GetId(currentMod));
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<td>%s</td>", sName?sName:"");
|
||||
GBAS(dbuf, "<tr>");
|
||||
GBAA(dbuf, "<td>%lu</td>", (unsigned long int) AQH_Module_GetId(currentMod));
|
||||
GBAA(dbuf, "<td>%s</td>", sName?sName:"");
|
||||
s=AQH_Module_GetDescr(currentMod);
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<td>%s</td>", s?s:"");
|
||||
GBAA(dbuf, "<td>%s</td>", s?s:"");
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf, "<td>");
|
||||
GBAS(dbuf, "<td>");
|
||||
if (perms & AQH_MODADMMODULES_PERMS_MODULESWRITE)
|
||||
GWEN_Buffer_AppendArgs(dbuf,
|
||||
"<a href=\"editmodule.html?name=%s\"><img src=\"/pics/edit.png\"></a>",
|
||||
sName?sName:"");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "</td>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "</tr>\n");
|
||||
GBAA(dbuf, "<a href=\"editmodule.html?name=%s\"><img src=\"/pics/edit.png\"></a>", sName?sName:"");
|
||||
GBAA(dbuf, "</td>\n");
|
||||
GBAA(dbuf, "</tr>\n");
|
||||
AQH_Module_free(currentMod);
|
||||
}
|
||||
}
|
||||
se=GWEN_StringListEntry_Next(se);
|
||||
}
|
||||
GWEN_Buffer_AppendString(dbuf,
|
||||
GBAS(dbuf,
|
||||
"</tbody>\n"
|
||||
"</table>\n");
|
||||
GWEN_StringList_free(slModules);
|
||||
}
|
||||
GWEN_Buffer_AppendString(dbuf, "<hr><a href=\"addmodule.html\">Add Module</a>");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>No permissions to read module list.</p>");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
}
|
||||
return 0;
|
||||
if (perms & AQH_MODADMMODULES_PERMS_MODULESADD)
|
||||
GBAS(dbuf, "<hr><a href=\"addmodule.html\">Add Module</a>");
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _handleRqEditMod(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
uint32_t perms;
|
||||
|
||||
perms=AQH_ModService_GetUserPerms(m);
|
||||
DBG_ERROR(NULL, "Perms=%08x", perms);
|
||||
if (perms & AQH_MODADMMODULES_PERMS_MODULESWRITE) {
|
||||
if (AQCGI_Request_GetRequestMethod(rq)==AQCGI_REQUEST_METHOD_GET)
|
||||
return _handleRqEditModGet(m, rq, session, dbuf);
|
||||
else if (AQCGI_Request_GetRequestMethod(rq)==AQCGI_REQUEST_METHOD_POST)
|
||||
return _handleRqEditModPost(m, rq, session, dbuf);
|
||||
else {
|
||||
DBG_ERROR(NULL, "Invalid request method %d", AQCGI_Request_GetRequestMethod(rq));
|
||||
AQCGI_Request_SetResponseCode(rq, 405);
|
||||
AQCGI_Request_SetResponseText(rq, "Method Not Allowed");
|
||||
}
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>No permissions to edit modules.</p>");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _handleRqEditModGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
void _handleRqEditModGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
AQH_SERVICE *sv;
|
||||
GWEN_DB_NODE *dbQuery;
|
||||
@@ -291,8 +245,6 @@ int _handleRqEditModGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
currentMod=(sModName && *sModName)?AQH_Service_LoadModule(sv, sModName):NULL;
|
||||
if (currentMod) {
|
||||
_writeEditModForm(currentMod, sModName, dbuf);
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
AQH_Module_free(currentMod);
|
||||
}
|
||||
else {
|
||||
@@ -300,123 +252,11 @@ int _handleRqEditModGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
AQCGI_Request_SetResponseCode(rq, 303);
|
||||
AQCGI_Request_SetResponseText(rq, "See other");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _writeEditModForm(const AQH_MODULE *currentMod, const char *sModName, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
const char *sName;
|
||||
const char *sDescr;
|
||||
const AQH_PERMDEF_LIST *permDefList;
|
||||
const AQH_ROLE_LIST *roleList;
|
||||
|
||||
permDefList=AQH_Module_GetPermDefList(currentMod);
|
||||
roleList=AQH_Module_GetRoleList(currentMod);
|
||||
sName=AQH_Module_GetName(currentMod);
|
||||
sDescr=AQH_Module_GetDescr(currentMod);
|
||||
/* write module info */
|
||||
GWEN_Buffer_AppendString(dbuf, "<h2>Module Info</h2>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf,
|
||||
"<form action=\"editmodule.html\" method=\"post\">\n"
|
||||
"<table class=\"formtable\">\n"
|
||||
"<tr>"
|
||||
"<td><label for=\"name\">Name:</label></td>"
|
||||
"<td><input type=\"text\" name=\"name\" value=\"%s\"></td>"
|
||||
"</tr>\n"
|
||||
"<tr>"
|
||||
"<td><label for=\"descr\">Description:</label></td>"
|
||||
"<td><input type=\"text\" name=\"descr\" value=\"%s\"></td>"
|
||||
"</tr>\n",
|
||||
sName?sName:"", sDescr?sDescr:"");
|
||||
|
||||
if (permDefList) {
|
||||
GWEN_Buffer_AppendArgs(dbuf,
|
||||
"<tr>"
|
||||
"<td><label>Guest Permissions:</label></td>\n"
|
||||
"<td>");
|
||||
_writePermissionsToForm(permDefList, AQH_Module_GetGuestPerms(currentMod), dbuf);
|
||||
GWEN_Buffer_AppendArgs(dbuf, "</td>" "</tr>");
|
||||
}
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf, "</table>\n");
|
||||
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<input type=\"hidden\" name=\"module\" value=\"%s\">\n", sModName?sModName:"");
|
||||
GWEN_Buffer_AppendString(dbuf, "<input type=\"submit\" value=\"Save\">\n</form>\n\n");
|
||||
|
||||
/* write role list */
|
||||
GWEN_Buffer_AppendString(dbuf, "<h2>User Roles</h2>\n");
|
||||
if (roleList)
|
||||
_writeRoleListToForm(roleList, sModName, permDefList, dbuf);
|
||||
else
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>none</p>");
|
||||
GWEN_Buffer_AppendArgs(dbuf,
|
||||
"<a href=\"addrole.html?mod=%s\">"
|
||||
"<img src=\"/pics/plus.png\">Add Role</a>\n",
|
||||
sModName?sModName:"");
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _writeRoleListToForm(const AQH_ROLE_LIST *roleList,
|
||||
const char *sModName,
|
||||
const AQH_PERMDEF_LIST *permDefList,
|
||||
GWEN_BUFFER *dbuf)
|
||||
{
|
||||
const AQH_ROLE *role;
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf,
|
||||
"<table class=\"datatable\">\n"
|
||||
"<thead>"
|
||||
"<tr><th>Id</th><th>Name</th><th>Permissions</th><th>Description</th><th>Actions</th></tr>\n"
|
||||
"</thead>\n"
|
||||
"<tbody>\n");
|
||||
role=AQH_Role_List_First(roleList);
|
||||
while(role) {
|
||||
uint8_t id;
|
||||
const char *s;
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf, "<tr>");
|
||||
/* id */
|
||||
id=AQH_Role_GetId(role);
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<td>%d</td>", id);
|
||||
/* name */
|
||||
s=AQH_Role_GetName(role);
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<td>%s</td>", s?s:"");
|
||||
/* permissions */
|
||||
GWEN_Buffer_AppendString(dbuf, "<td>");
|
||||
if (permDefList)
|
||||
_writeEnabledPermissions(permDefList, AQH_Role_GetPerms(role), dbuf);
|
||||
GWEN_Buffer_AppendString(dbuf, "</td>");
|
||||
/* description */
|
||||
s=AQH_Role_GetDescr(role);
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<td>%s</td>", s?s:"");
|
||||
/* actions */
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<td>");
|
||||
GWEN_Buffer_AppendArgs(dbuf,
|
||||
"<a href=\"editrole.html?mod=%s&id=%d\">"
|
||||
"<img src=\"/pics/edit.png\"></a>",
|
||||
sModName?sModName:"", id);
|
||||
GWEN_Buffer_AppendArgs(dbuf,
|
||||
"<a href=\"delrole.html?mod=%s&id=%d\">"
|
||||
"<img src=\"/pics/minus.png\"></a>",
|
||||
sModName?sModName:"", id);
|
||||
GWEN_Buffer_AppendArgs(dbuf, "</td>");
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf, "</tr>\n");
|
||||
role=AQH_Role_List_Next(role);
|
||||
}
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf,
|
||||
"</tbody>\n"
|
||||
"</table>\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int _handleRqEditModPost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
void _handleRqEditModPost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
AQH_SERVICE *sv;
|
||||
GWEN_DB_NODE *dbPost;
|
||||
@@ -446,12 +286,10 @@ int _handleRqEditModPost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
|
||||
rv=AQH_Service_SaveModule(sv, currentMod);
|
||||
if (rv<0) {
|
||||
GWEN_Buffer_AppendString(dbuf, "<h2>Error</h2><p>Error saving module</p>");
|
||||
GBAS(dbuf, "<h2>Error</h2><p>Error saving module</p>");
|
||||
DBG_ERROR(NULL, "Could not save module \"%s\"", sModName);
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
AQH_Module_free(currentMod);
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
DBG_ERROR(NULL, "Module \"%s\" saved", sModName);
|
||||
AQH_Module_free(currentMod);
|
||||
@@ -461,44 +299,13 @@ int _handleRqEditModPost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
}
|
||||
else {
|
||||
DBG_ERROR(NULL, "Could not load module \"%s\"", sModName?sModName:"<no name>");
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Error loading module.</p>\n");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _handleRqAddRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
uint32_t perms;
|
||||
|
||||
perms=AQH_ModService_GetUserPerms(m);
|
||||
DBG_ERROR(NULL, "Perms=%08x", perms);
|
||||
if (perms & AQH_MODADMMODULES_PERMS_MODULESWRITE) {
|
||||
if (AQCGI_Request_GetRequestMethod(rq)==AQCGI_REQUEST_METHOD_GET)
|
||||
return _handleRqAddRoleGet(m, rq, session, dbuf);
|
||||
else if (AQCGI_Request_GetRequestMethod(rq)==AQCGI_REQUEST_METHOD_POST)
|
||||
return _handleRqAddRolePost(m, rq, session, dbuf);
|
||||
else {
|
||||
DBG_ERROR(NULL, "Invalid request method %d", AQCGI_Request_GetRequestMethod(rq));
|
||||
AQCGI_SendResponseWithStatus(rq, 405, "Method Not Allowed");
|
||||
AQCGI_Request_SetResponseCode(rq, 405);
|
||||
AQCGI_Request_SetResponseText(rq, "Method Not Allowed");
|
||||
GBAS(dbuf, "<p>Error loading module.</p>\n");
|
||||
}
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>No permissions to edit modules.</p>");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _handleRqAddRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
void _handleRqAddRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
AQH_SERVICE *sv;
|
||||
GWEN_DB_NODE *dbQuery;
|
||||
@@ -516,59 +323,47 @@ int _handleRqAddRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
|
||||
if (currentMod) {
|
||||
if (permDefList) {
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<h2>Add Role for Module %s</h2>\n", sModName?sModName:"");
|
||||
GWEN_Buffer_AppendString(dbuf,
|
||||
GBAA(dbuf, "<h2>Add Role for Module %s</h2>\n", sModName?sModName:"");
|
||||
GBAS(dbuf,
|
||||
"<form action=\"addrole.html\" method=\"post\">\n"
|
||||
"<table class=\"formtable\">\n"
|
||||
"<tr>"
|
||||
"<td><label for=\"name\">Name:</label></td>"
|
||||
"<td><input type=\"text\" name=\"name\"></td>"
|
||||
"<tr>"
|
||||
"<td><label for=\"descr\">Description:</label></td>"
|
||||
"<td><input type=\"text\" name=\"descr\"></td>"
|
||||
"</tr>\n");
|
||||
"<tr><td><label for=\"name\">Name:</label></td><td><input type=\"text\" name=\"name\"></td>"
|
||||
"<tr><td><label for=\"descr\">Description:</label></td><td><input type=\"text\" name=\"descr\"></td></tr>\n");
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf, "<tr><td><label>Permissions:</label></td><td>");
|
||||
GBAS(dbuf, "<tr><td><label>Permissions:</label></td><td>");
|
||||
_writePermissionsToForm(permDefList, guestPerms, dbuf);
|
||||
GWEN_Buffer_AppendString(dbuf, "</td></tr>\n");
|
||||
GBAS(dbuf, "</td></tr>\n");
|
||||
|
||||
#if 0
|
||||
GWEN_Buffer_AppendString(dbuf, "<tr><td><label>Explicitly add permissions:</label></td><td>");
|
||||
GBAS(dbuf, "<tr><td><label>Explicitly add permissions:</label></td><td>");
|
||||
_writePermissionsToForm(permDefList, 0, dbuf);
|
||||
GWEN_Buffer_AppendString(dbuf, "</td></tr>\n");
|
||||
GBAS(dbuf, "</td></tr>\n");
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf, "<tr><td><label>Explicitly sub permissions:</label></td><td>");
|
||||
GBAS(dbuf, "<tr><td><label>Explicitly sub permissions:</label></td><td>");
|
||||
_writePermissionsToForm(permDefList, 0, dbuf);
|
||||
GWEN_Buffer_AppendString(dbuf, "</td></tr>\n");
|
||||
GBAS(dbuf, "</td></tr>\n");
|
||||
#endif
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf, "</table>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<input type=\"hidden\" name=\"mod\" value=\"%s\">\n", sModName?sModName:"");
|
||||
GWEN_Buffer_AppendString(dbuf, "<input type=\"submit\" value=\"Add\">\n");
|
||||
GWEN_Buffer_AppendString(dbuf, "</form>\n\n");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
GBAS(dbuf, "</table>\n");
|
||||
GBAA(dbuf, "<input type=\"hidden\" name=\"mod\" value=\"%s\">\n", sModName?sModName:"");
|
||||
GBAS(dbuf, "<input type=\"submit\" value=\"Add\">\n");
|
||||
GBAS(dbuf, "</form>\n\n");
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Please add permission definitions first.</p>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
GBAS(dbuf, "<p>Please add permission definitions first.</p>\n");
|
||||
GBAA(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
}
|
||||
AQH_Module_free(currentMod);
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Error loading module.</p>\n");
|
||||
GWEN_Buffer_AppendString(dbuf, "<p><a href=\"index.html\"> back to module list</p>\n");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
GBAS(dbuf, "<p>Error loading module.</p>\n");
|
||||
GBAS(dbuf, "<p><a href=\"index.html\"> back to module list</p>\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _handleRqAddRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
void _handleRqAddRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
AQH_SERVICE *sv;
|
||||
GWEN_DB_NODE *dbPost;
|
||||
@@ -603,11 +398,9 @@ int _handleRqAddRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
/* validate */
|
||||
if (!(sName && *sName)) {
|
||||
DBG_ERROR(NULL, "Missing value for \"name\"");
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Missing name.</p>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
return 0;
|
||||
GBAS(dbuf, "<p>Missing name.</p>\n");
|
||||
GBAA(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentMod) {
|
||||
@@ -629,12 +422,10 @@ int _handleRqAddRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
/* save module */
|
||||
rv=AQH_Service_SaveModule(sv, currentMod);
|
||||
if (rv<0) {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Error saving module.</p>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
GBAS(dbuf, "<p>Error saving module.</p>\n");
|
||||
GBAA(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
AQH_Module_free(currentMod);
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
_setLocationHeaderForMod(rq, "editmodule.html", sModName);
|
||||
AQCGI_Request_SetResponseCode(rq, 303);
|
||||
@@ -642,66 +433,14 @@ int _handleRqAddRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
AQH_Module_free(currentMod);
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Error loading module.</p>\n");
|
||||
GWEN_Buffer_AppendString(dbuf, "<p><a href=\"index.html\"> back to module list</p>\n");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _getHighestUsedRoleId(const AQH_ROLE_LIST *roleList)
|
||||
{
|
||||
int id=0;
|
||||
|
||||
if (roleList) {
|
||||
const AQH_ROLE *role;
|
||||
|
||||
role=AQH_Role_List_First(roleList);
|
||||
while(role) {
|
||||
int rid;
|
||||
|
||||
rid=AQH_Role_GetId(role);
|
||||
id=(rid>id)?rid:id;
|
||||
role=AQH_Role_List_Next(role);
|
||||
GBAS(dbuf, "<p>Error loading module.</p>\n");
|
||||
GBAS(dbuf, "<p><a href=\"index.html\"> back to module list</p>\n");
|
||||
}
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _handleRqEditRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
uint32_t perms;
|
||||
|
||||
perms=AQH_ModService_GetUserPerms(m);
|
||||
DBG_ERROR(NULL, "Perms=%08x", perms);
|
||||
if (perms & AQH_MODADMMODULES_PERMS_MODULESWRITE) {
|
||||
if (AQCGI_Request_GetRequestMethod(rq)==AQCGI_REQUEST_METHOD_GET)
|
||||
return _handleRqEditRoleGet(m, rq, session, dbuf);
|
||||
else if (AQCGI_Request_GetRequestMethod(rq)==AQCGI_REQUEST_METHOD_POST)
|
||||
return _handleRqEditRolePost(m, rq, session, dbuf);
|
||||
else {
|
||||
DBG_ERROR(NULL, "Invalid request method %d", AQCGI_Request_GetRequestMethod(rq));
|
||||
AQCGI_Request_SetResponseCode(rq, 405);
|
||||
AQCGI_Request_SetResponseText(rq, "Method Not Allowed");
|
||||
}
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>No permissions to edit modules.</p>");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _handleRqEditRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
void _handleRqEditRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
AQH_SERVICE *sv;
|
||||
GWEN_DB_NODE *dbQuery;
|
||||
@@ -736,8 +475,8 @@ int _handleRqEditRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
#endif
|
||||
|
||||
if (role) {
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<h2>Edit Role for Module %s</h2>\n", sModName?sModName:"");
|
||||
GWEN_Buffer_AppendArgs(dbuf,
|
||||
GBAA(dbuf, "<h2>Edit Role for Module %s</h2>\n", sModName?sModName:"");
|
||||
GBAA(dbuf,
|
||||
"<form action=\"editrole.html\" method=\"post\">\n"
|
||||
"<table class=\"formtable\">\n"
|
||||
"<tr>\n"
|
||||
@@ -750,39 +489,36 @@ int _handleRqEditRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
"</tr>\n",
|
||||
sName, sDescr?sDescr:"");
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf, "<tr><td><label>Permissions:</label></td><td>");
|
||||
GBAS(dbuf, "<tr><td><label>Permissions:</label></td><td>");
|
||||
_writePermissionsToForm(permDefList, perms, dbuf);
|
||||
GWEN_Buffer_AppendString(dbuf, "</td></tr>\n");
|
||||
GBAS(dbuf, "</td></tr>\n");
|
||||
|
||||
#if 0
|
||||
GWEN_Buffer_AppendString(dbuf, "<tr><td><label>Explicitly add permissions:</label></td><td>");
|
||||
GBAS(dbuf, "<tr><td><label>Explicitly add permissions:</label></td><td>");
|
||||
_writePermissionsToForm(permDefList, explAddPerms, dbuf);
|
||||
GWEN_Buffer_AppendString(dbuf, "</td></tr>\n");
|
||||
GBAS(dbuf, "</td></tr>\n");
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf, "<tr><td><label>Explicitly sub permissions:</label></td><td>");
|
||||
GBAS(dbuf, "<tr><td><label>Explicitly sub permissions:</label></td><td>");
|
||||
_writePermissionsToForm(permDefList, explDelPerms, dbuf);
|
||||
GWEN_Buffer_AppendString(dbuf, "</td></tr>\n");
|
||||
GBAS(dbuf, "</td></tr>\n");
|
||||
#endif
|
||||
|
||||
GWEN_Buffer_AppendString(dbuf, "</table>\n");
|
||||
GBAS(dbuf, "</table>\n");
|
||||
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<input type=\"hidden\" name=\"mod\" value=\"%s\">\n", sModName?sModName:"");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<input type=\"hidden\" name=\"oldId\" value=\"%d\">\n", id);
|
||||
GWEN_Buffer_AppendString(dbuf, "<input type=\"submit\" value=\"Save\">\n");
|
||||
GWEN_Buffer_AppendString(dbuf, "</form>\n\n");
|
||||
GBAA(dbuf, "<input type=\"hidden\" name=\"mod\" value=\"%s\">\n", sModName?sModName:"");
|
||||
GBAA(dbuf, "<input type=\"hidden\" name=\"oldId\" value=\"%d\">\n", id);
|
||||
GBAS(dbuf, "<input type=\"submit\" value=\"Save\">\n");
|
||||
GBAS(dbuf, "</form>\n\n");
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Role not found.</p>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
GBAS(dbuf, "<p>Role not found.</p>\n");
|
||||
GBAA(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
}
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _handleRqEditRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
void _handleRqEditRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
AQH_SERVICE *sv;
|
||||
GWEN_DB_NODE *dbPost;
|
||||
@@ -818,19 +554,15 @@ int _handleRqEditRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session
|
||||
/* validate */
|
||||
if (!(sName && *sName)) {
|
||||
DBG_ERROR(NULL, "Missing value for \"name\"");
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Missing name.</p>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
return 0;
|
||||
GBAS(dbuf, "<p>Missing name.</p>\n");
|
||||
GBAA(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
return;
|
||||
}
|
||||
if (role==NULL) {
|
||||
DBG_ERROR(NULL, "Role %d not found", oldId);
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Role not found.</p>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
return 0;
|
||||
GBAS(dbuf, "<p>Role not found.</p>\n");
|
||||
GBAA(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentMod) {
|
||||
@@ -842,12 +574,10 @@ int _handleRqEditRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session
|
||||
/* save module */
|
||||
rv=AQH_Service_SaveModule(sv, currentMod);
|
||||
if (rv<0) {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Error saving module.</p>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
GBAS(dbuf, "<p>Error saving module.</p>\n");
|
||||
GBAA(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
AQH_Module_free(currentMod);
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
_setLocationHeaderForMod(rq, "editmodule.html", sModName);
|
||||
@@ -856,23 +586,15 @@ int _handleRqEditRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session
|
||||
AQH_Module_free(currentMod);
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Error loading module.</p>\n");
|
||||
GWEN_Buffer_AppendString(dbuf, "<p><a href=\"index.html\"> back to module list</p>\n");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
GBAS(dbuf, "<p>Error loading module.</p>\n");
|
||||
GBAS(dbuf, "<p><a href=\"index.html\"> back to module list</p>\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _handleRqDeleteRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
void _handleRqDeleteRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
uint32_t perms;
|
||||
|
||||
perms=AQH_ModService_GetUserPerms(m);
|
||||
DBG_ERROR(NULL, "Perms=%08x", perms);
|
||||
if (perms & AQH_MODADMMODULES_PERMS_MODULESWRITE) {
|
||||
AQH_SERVICE *sv;
|
||||
GWEN_DB_NODE *dbQuery;
|
||||
const char *sModName;
|
||||
@@ -898,12 +620,10 @@ int _handleRqDeleteRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
/* save module */
|
||||
rv=AQH_Service_SaveModule(sv, currentMod);
|
||||
if (rv<0) {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Error saving module.</p>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
GBAS(dbuf, "<p>Error saving module.</p>\n");
|
||||
GBAA(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
AQH_Module_free(currentMod);
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
_setLocationHeaderForMod(rq, "editmodule.html", sModName);
|
||||
@@ -911,27 +631,16 @@ int _handleRqDeleteRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session,
|
||||
AQCGI_Request_SetResponseText(rq, "See Other");
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Role not found.</p>\n");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
GBAS(dbuf, "<p>Role not found.</p>\n");
|
||||
GBAA(dbuf, "<p><a href=\"editmodule.html?name=\"%s\"> back to module</p>\n", sModName?sModName:"");
|
||||
}
|
||||
AQH_Module_free(currentMod);
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>Error loading module.</p>\n");
|
||||
GWEN_Buffer_AppendString(dbuf, "<p><a href=\"index.html\"> back to module list</p>\n");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
GBAS(dbuf, "<p>Error loading module.</p>\n");
|
||||
GBAS(dbuf, "<p><a href=\"index.html\"> back to module list</p>\n");
|
||||
}
|
||||
}
|
||||
else {
|
||||
GWEN_Buffer_AppendString(dbuf, "<p>No permissions to edit modules.</p>");
|
||||
AQCGI_Request_SetResponseCode(rq, 200);
|
||||
AQCGI_Request_SetResponseText(rq, "Ok");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -940,17 +649,141 @@ void _setLocationHeaderForMod(AQCGI_REQUEST *rq, const char *page, const char *s
|
||||
GWEN_BUFFER *tbuf;
|
||||
|
||||
tbuf=GWEN_Buffer_new(0, 256, 0, 1);
|
||||
GWEN_Buffer_AppendArgs(tbuf, "Location: %s?name=%s", page?page:"", sModName?sModName:"");
|
||||
GBAA(tbuf, "Location: %s?name=%s", page?page:"", sModName?sModName:"");
|
||||
AQCGI_Request_AddResponseHeaderData(rq, GWEN_Buffer_GetStart(tbuf));
|
||||
GWEN_Buffer_free(tbuf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _getHighestUsedRoleId(const AQH_ROLE_LIST *roleList)
|
||||
{
|
||||
int id=0;
|
||||
|
||||
if (roleList) {
|
||||
const AQH_ROLE *role;
|
||||
|
||||
role=AQH_Role_List_First(roleList);
|
||||
while(role) {
|
||||
int rid;
|
||||
|
||||
rid=AQH_Role_GetId(role);
|
||||
id=(rid>id)?rid:id;
|
||||
role=AQH_Role_List_Next(role);
|
||||
}
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _writeEditModForm(const AQH_MODULE *currentMod, const char *sModName, GWEN_BUFFER *dbuf)
|
||||
{
|
||||
const char *sName;
|
||||
const char *sDescr;
|
||||
const AQH_PERMDEF_LIST *permDefList;
|
||||
const AQH_ROLE_LIST *roleList;
|
||||
|
||||
permDefList=AQH_Module_GetPermDefList(currentMod);
|
||||
roleList=AQH_Module_GetRoleList(currentMod);
|
||||
sName=AQH_Module_GetName(currentMod);
|
||||
sDescr=AQH_Module_GetDescr(currentMod);
|
||||
/* write module info */
|
||||
GBAS(dbuf, "<h2>Module Info</h2>\n");
|
||||
GBAA(dbuf,
|
||||
"<form action=\"editmodule.html\" method=\"post\">\n"
|
||||
"<table class=\"formtable\">\n"
|
||||
"<tr>"
|
||||
"<td><label for=\"name\">Name:</label></td>"
|
||||
"<td><input type=\"text\" name=\"name\" value=\"%s\"></td>"
|
||||
"</tr>\n"
|
||||
"<tr>"
|
||||
"<td><label for=\"descr\">Description:</label></td>"
|
||||
"<td><input type=\"text\" name=\"descr\" value=\"%s\"></td>"
|
||||
"</tr>\n",
|
||||
sName?sName:"", sDescr?sDescr:"");
|
||||
|
||||
if (permDefList) {
|
||||
GBAA(dbuf,
|
||||
"<tr>"
|
||||
"<td><label>Guest Permissions:</label></td>\n"
|
||||
"<td>");
|
||||
_writePermissionsToForm(permDefList, AQH_Module_GetGuestPerms(currentMod), dbuf);
|
||||
GBAA(dbuf, "</td>" "</tr>");
|
||||
}
|
||||
|
||||
GBAS(dbuf, "</table>\n");
|
||||
|
||||
GBAA(dbuf, "<input type=\"hidden\" name=\"module\" value=\"%s\">\n", sModName?sModName:"");
|
||||
GBAS(dbuf, "<input type=\"submit\" value=\"Save\">\n</form>\n\n");
|
||||
|
||||
/* write role list */
|
||||
GBAS(dbuf, "<h2>User Roles</h2>\n");
|
||||
if (roleList)
|
||||
_writeRoleListToForm(roleList, sModName, permDefList, dbuf);
|
||||
else
|
||||
GBAS(dbuf, "<p>none</p>");
|
||||
GBAA(dbuf,
|
||||
"<a href=\"addrole.html?mod=%s\">"
|
||||
"<img src=\"/pics/plus.png\">Add Role</a>\n",
|
||||
sModName?sModName:"");
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _writeRoleListToForm(const AQH_ROLE_LIST *roleList,
|
||||
const char *sModName,
|
||||
const AQH_PERMDEF_LIST *permDefList,
|
||||
GWEN_BUFFER *dbuf)
|
||||
{
|
||||
const AQH_ROLE *role;
|
||||
|
||||
GBAS(dbuf,
|
||||
"<table class=\"datatable\">\n"
|
||||
"<thead>"
|
||||
"<tr><th>Id</th><th>Name</th><th>Permissions</th><th>Description</th><th>Actions</th></tr>\n"
|
||||
"</thead>\n"
|
||||
"<tbody>\n");
|
||||
role=AQH_Role_List_First(roleList);
|
||||
while(role) {
|
||||
uint8_t id;
|
||||
const char *s;
|
||||
|
||||
GBAS(dbuf, "<tr>");
|
||||
/* id */
|
||||
id=AQH_Role_GetId(role);
|
||||
GBAA(dbuf, "<td>%d</td>", id);
|
||||
/* name */
|
||||
s=AQH_Role_GetName(role);
|
||||
GBAA(dbuf, "<td>%s</td>", s?s:"");
|
||||
/* permissions */
|
||||
GBAS(dbuf, "<td>");
|
||||
if (permDefList)
|
||||
_writeEnabledPermissions(permDefList, AQH_Role_GetPerms(role), dbuf);
|
||||
GBAS(dbuf, "</td>");
|
||||
/* description */
|
||||
s=AQH_Role_GetDescr(role);
|
||||
GBAA(dbuf, "<td>%s</td>", s?s:"");
|
||||
/* actions */
|
||||
GBAA(dbuf, "<td>");
|
||||
GBAA(dbuf,
|
||||
"<a href=\"editrole.html?mod=%s&id=%d\">"
|
||||
"<img src=\"/pics/edit.png\"></a>",
|
||||
sModName?sModName:"", id);
|
||||
GBAA(dbuf,
|
||||
"<a href=\"delrole.html?mod=%s&id=%d\">"
|
||||
"<img src=\"/pics/minus.png\"></a>",
|
||||
sModName?sModName:"", id);
|
||||
GBAA(dbuf, "</td>");
|
||||
|
||||
GBAS(dbuf, "</tr>\n");
|
||||
role=AQH_Role_List_Next(role);
|
||||
}
|
||||
|
||||
GBAS(dbuf,
|
||||
"</tbody>\n"
|
||||
"</table>\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -970,10 +803,10 @@ void _writePermissionsToForm(const AQH_PERMDEF_LIST *permDefList, uint32_t perms
|
||||
s=AQH_PermDef_GetId(permDef);
|
||||
mask=AQH_PermDef_GetMask(permDef);
|
||||
if (perms & mask)
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<input type=\"checkbox\" name=\"%s\" checked>", s?s:"");
|
||||
GBAA(dbuf, "<input type=\"checkbox\" name=\"%s\" checked>", s?s:"");
|
||||
else
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<input type=\"checkbox\" name=\"%s\">", s?s:"");
|
||||
GWEN_Buffer_AppendArgs(dbuf, "<label for=\"%s\">%s</label>", s?s:"", s?s:"");
|
||||
GBAA(dbuf, "<input type=\"checkbox\" name=\"%s\">", s?s:"");
|
||||
GBAA(dbuf, "<label for=\"%s\">%s</label>", s?s:"", s?s:"");
|
||||
|
||||
permDef=AQH_PermDef_List_Next(permDef);
|
||||
}
|
||||
@@ -995,7 +828,7 @@ void _writeEnabledPermissions(const AQH_PERMDEF_LIST *permDefList, uint32_t perm
|
||||
s=AQH_PermDef_GetId(permDef);
|
||||
mask=AQH_PermDef_GetMask(permDef);
|
||||
if (perms & mask)
|
||||
GWEN_Buffer_AppendArgs(dbuf, "%s ", s?s:"");
|
||||
GBAA(dbuf, "%s ", s?s:"");
|
||||
permDef=AQH_PermDef_List_Next(permDef);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 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);
|
||||
|
||||
@@ -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);
|
||||
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_ReadStaticFile(AQH_MODULE *m, const char *lang, const char *filename, GWEN_BUFFER *dbuf);
|
||||
|
||||
Reference in New Issue
Block a user