From 7f301d271b38c08de926ec02d814e5b791fd1150 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Mon, 15 Sep 2025 18:47:16 +0200 Subject: [PATCH] aqhome-cgi: more work --- apps/aqhome-cgi/modules/mdataclient.c | 2 - apps/aqhome-cgi/modules/mdevices.c | 337 +++++++++++++------- apps/aqhome-cgi/modules/mdevices.h | 21 +- apps/aqhome-cgi/modules/mmodules.c | 428 ++++++++------------------ 4 files changed, 358 insertions(+), 430 deletions(-) diff --git a/apps/aqhome-cgi/modules/mdataclient.c b/apps/aqhome-cgi/modules/mdataclient.c index ddacf8d..2a1408f 100644 --- a/apps/aqhome-cgi/modules/mdataclient.c +++ b/apps/aqhome-cgi/modules/mdataclient.c @@ -92,8 +92,6 @@ int AQH_ModDataClient_HandleRequest(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSIO AQH_ModService_AddFooter(m, "en", dbuf); AQCGI_Request_SetBufferResponseBody(rq, dbuf); AQCGI_Request_AddResponseHeaderData(rq, "Content-type: text/html"); - AQCGI_SendResponseWithStatus(rq, 200, "Ok"); - GWEN_Buffer_free(dbuf); AQH_DataClient_free(dc); AQH_EventLoop_free(eventLoop); diff --git a/apps/aqhome-cgi/modules/mdevices.c b/apps/aqhome-cgi/modules/mdevices.c index e4bddfa..3d70da1 100644 --- a/apps/aqhome-cgi/modules/mdevices.c +++ b/apps/aqhome-cgi/modules/mdevices.c @@ -38,6 +38,9 @@ * ------------------------------------------------------------------------------------------------ */ +static void _createPermDefList(AQH_MODULE *m); +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 void _runIndex(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, AQH_DATACLIENT *dc, GWEN_BUFFER *dbuf); @@ -58,6 +61,82 @@ void AQH_ModDevices_Extend(AQH_MODULE *m, AQH_SERVICE *sv, const char *baseFolde +int AQH_ModDevices_Create(AQH_SERVICE *sv) +{ + AQH_MODULE *m; + int rv; + + m=AQH_Module_new(); + AQH_Module_SetName(m, "devices"); + AQH_Module_SetDescr(m, "device module"); + AQH_Module_SetGuestPerms(m, 0); + + _createPermDefList(m); + _createRoleList(m); + + rv=AQH_Service_AddModule(sv, m); + if (rv<0) { + DBG_INFO(NULL, "here (%d)", rv); + } + AQH_Module_free(m); + return rv; +} + + + +void _createPermDefList(AQH_MODULE *m) +{ + AQH_PERMDEF_LIST *permDefList; + + permDefList=AQH_PermDef_List_new(); + + AQH_ModService_AddPermDef(permDefList, "DeviceRead", 0x001, "Read and list devices"); + AQH_ModService_AddPermDef(permDefList, "DeviceWrite", 0x002, "Modify devices"); + AQH_ModService_AddPermDef(permDefList, "DeviceAdd", 0x004, "Add devices"); + AQH_ModService_AddPermDef(permDefList, "DeviceDel", 0x008, "Remove devices"); + + AQH_ModService_AddPermDef(permDefList, "ValueRead", 0x010, "Read and list values"); + AQH_ModService_AddPermDef(permDefList, "ValueWrite", 0x020, "Modify values"); + AQH_ModService_AddPermDef(permDefList, "ValueAdd", 0x040, "Add values"); + AQH_ModService_AddPermDef(permDefList, "ValueDel", 0x080, "Remove values"); + AQH_ModService_AddPermDef(permDefList, "ValueSet", 0x100, "Set values"); + + AQH_Module_SetPermDefList(m, permDefList); +} + + + +void _createRoleList(AQH_MODULE *m) +{ + AQH_ROLE_LIST *roleList; + int id=0; + + roleList=AQH_Role_List_new(); + AQH_ModService_AddRole(roleList, id++, "Reader", + AQH_MODDEVICES_PERMS_DEVICEREAD | + AQH_MODDEVICES_PERMS_VALUEREAD, + "Read devices and values"); + AQH_ModService_AddRole(roleList, id++, "Writer", + AQH_MODDEVICES_PERMS_DEVICEREAD | + AQH_MODDEVICES_PERMS_DEVICEWRITE | + AQH_MODDEVICES_PERMS_DEVICEADD | + AQH_MODDEVICES_PERMS_DEVICEDEL | + AQH_MODDEVICES_PERMS_VALUEREAD | + AQH_MODDEVICES_PERMS_VALUEWRITE | + AQH_MODDEVICES_PERMS_VALUEADD | + AQH_MODDEVICES_PERMS_VALUEDEL | + AQH_MODDEVICES_PERMS_VALUESET, + "Read and write devices and values"); + AQH_ModService_AddRole(roleList, id++, "Setter", + AQH_MODDEVICES_PERMS_DEVICEREAD | + AQH_MODDEVICES_PERMS_VALUEREAD | + AQH_MODDEVICES_PERMS_VALUESET, + "Set values"); + AQH_Module_SetRoleList(m, roleList); +} + + + AQH_MODULE *_loadSubModule(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, const char *sModuleName) { return NULL; @@ -81,146 +160,172 @@ int _handleRequest(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, const void _runIndex(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, AQH_DATACLIENT *dc, GWEN_BUFFER *dbuf) { - AQH_DEVICE_LIST *deviceList; - AQH_DEVICE *device; + uint32_t perms; - deviceList=AQH_DataClient_GetDevices(dc, NULL); - if (deviceList==NULL) { - DBG_ERROR(NULL, "No device received"); - GWEN_Buffer_AppendString(dbuf, "Empty device list."); - return; + perms=AQH_ModService_GetUserPerms(m); + DBG_ERROR(NULL, "Perms=%08x", perms); + if (perms & AQH_MODDEVICES_PERMS_DEVICEREAD) { + AQH_DEVICE_LIST *deviceList; + AQH_DEVICE *device; + + deviceList=AQH_DataClient_GetDevices(dc, NULL); + if (deviceList==NULL) { + DBG_ERROR(NULL, "No device received"); + GWEN_Buffer_AppendString(dbuf, "Empty device list."); + return; + } + + GWEN_Buffer_AppendString(dbuf, "

Devices

\n"); + GWEN_Buffer_AppendString(dbuf, + "\n" + "\n" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "\n" + "\n" + "\n"); + + device=AQH_Device_List_First(deviceList); + while(device) { + const char *s; + + GWEN_Buffer_AppendArgs(dbuf, ""); + /* name for system */ + s=AQH_Device_GetNameForSystem(device); + GWEN_Buffer_AppendString(dbuf,"", s?s:""); + /* room */ + s=AQH_Device_GetRoomName(device); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + /* location */ + s=AQH_Device_GetLocation(device); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + /* description */ + s=AQH_Device_GetDescription(device); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + /* device type */ + s=AQH_Device_GetDeviceType(device); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + /* driver */ + s=AQH_Device_GetDriver(device); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + /* short device name */ + s=AQH_Device_GetName(device); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + /* GUI name for device */ + s=AQH_Device_GetNameForGui(device); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + /* manufacturer */ + s=AQH_Device_GetManufacturer(device); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + + GWEN_Buffer_AppendArgs(dbuf, ""); + device=AQH_Device_List_Next(device); + } + + GWEN_Buffer_AppendString(dbuf, + "\n" + "
Name For SystemRoomLocationDescriptionTypeDriverNameGUI NameManufacturer
%s%s%s%s%s%s%s%s%s
\n"); + AQH_Device_List_free(deviceList); + AQCGI_Request_SetResponseCode(rq, 200); + AQCGI_Request_SetResponseText(rq, "Ok"); } - - GWEN_Buffer_AppendString(dbuf, "

Devices

\n"); - GWEN_Buffer_AppendString(dbuf, - "\n" - "\n" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "\n" - "\n" - "\n"); - - device=AQH_Device_List_First(deviceList); - while(device) { - const char *s; - - GWEN_Buffer_AppendArgs(dbuf, ""); - /* name for system */ - s=AQH_Device_GetNameForSystem(device); - GWEN_Buffer_AppendString(dbuf,"", s?s:""); - /* room */ - s=AQH_Device_GetRoomName(device); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - /* location */ - s=AQH_Device_GetLocation(device); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - /* description */ - s=AQH_Device_GetDescription(device); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - /* device type */ - s=AQH_Device_GetDeviceType(device); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - /* driver */ - s=AQH_Device_GetDriver(device); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - /* short device name */ - s=AQH_Device_GetName(device); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - /* GUI name for device */ - s=AQH_Device_GetNameForGui(device); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - /* manufacturer */ - s=AQH_Device_GetManufacturer(device); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - - GWEN_Buffer_AppendArgs(dbuf, ""); - device=AQH_Device_List_Next(device); + else { + GWEN_Buffer_AppendString(dbuf, "

No permissions to read devices.

"); + AQCGI_Request_SetResponseCode(rq, 200); + AQCGI_Request_SetResponseText(rq, "Ok"); } - - GWEN_Buffer_AppendString(dbuf, - "\n" - "
Name For SystemRoomLocationDescriptionTypeDriverNameGUI NameManufacturer
%s%s%s%s%s%s%s%s%s
\n"); - - AQH_Device_List_free(deviceList); } void _runValues(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, AQH_DATACLIENT *dc, GWEN_BUFFER *dbuf) { - GWEN_DB_NODE *dbQuery; - const char *sDeviceName; + uint32_t perms; - dbQuery=AQCGI_Request_GetDbQuery(rq); - sDeviceName=GWEN_DB_GetCharValue(dbQuery, "device", 0, NULL); - if (!(sDeviceName && *sDeviceName)) - _runIndex(m, rq, session, dc, dbuf); - else { - AQH_VALUE_LIST *valueList; + perms=AQH_ModService_GetUserPerms(m); + DBG_ERROR(NULL, "Perms=%08x", perms); + if ((perms & AQH_MODDEVICES_PERMS_DEVICEREAD) && + (perms & AQH_MODDEVICES_PERMS_VALUEREAD)) { + GWEN_DB_NODE *dbQuery; + const char *sDeviceName; - valueList=AQH_DataClient_GetValues(dc, sDeviceName, 0); - if (valueList) { - AQH_VALUE *value; + dbQuery=AQCGI_Request_GetDbQuery(rq); + sDeviceName=GWEN_DB_GetCharValue(dbQuery, "device", 0, NULL); + if (!(sDeviceName && *sDeviceName)) + _runIndex(m, rq, session, dc, dbuf); + else { + AQH_VALUE_LIST *valueList; - GWEN_Buffer_AppendArgs(dbuf, "

Values for Device %s

\n", sDeviceName); - GWEN_Buffer_AppendString(dbuf, - "\n" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "\n" - "\n"); + valueList=AQH_DataClient_GetValues(dc, sDeviceName, 0); + if (valueList) { + AQH_VALUE *value; - value=AQH_Value_List_First(valueList); - while(value) { - const char *s; + GWEN_Buffer_AppendArgs(dbuf, "

Values for Device %s

\n", sDeviceName); + GWEN_Buffer_AppendString(dbuf, + "
NameTypeModalityDriverDeviceName for System
\n" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "\n" + "\n"); - GWEN_Buffer_AppendString(dbuf, ""); + value=AQH_Value_List_First(valueList); + while(value) { + const char *s; - s=AQH_Value_GetName(value); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + GWEN_Buffer_AppendString(dbuf, ""); - s=AQH_ValueType_toString(AQH_Value_GetValueType(value)); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + s=AQH_Value_GetName(value); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - s=AQH_ValueModality_toString(AQH_Value_GetModality(value)); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + s=AQH_ValueType_toString(AQH_Value_GetValueType(value)); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - s=AQH_Value_GetDriver(value); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + s=AQH_ValueModality_toString(AQH_Value_GetModality(value)); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - s=AQH_Value_GetDeviceNameForSystem(value); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + s=AQH_Value_GetDriver(value); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - s=AQH_Value_GetNameForSystem(value); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); + s=AQH_Value_GetDeviceNameForSystem(value); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - GWEN_Buffer_AppendArgs(dbuf, "\n"); + s=AQH_Value_GetNameForSystem(value); + GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - value=AQH_Value_List_Next(value); + GWEN_Buffer_AppendArgs(dbuf, "\n"); + + value=AQH_Value_List_Next(value); + } + GWEN_Buffer_AppendString(dbuf, + "\n" + "
NameTypeModalityDriverDeviceName for System
%s
%s%s%s%s%s%s%s%s%s%s
%s
\n"); + AQH_Value_List_free(valueList); } - GWEN_Buffer_AppendString(dbuf, - "\n" - "\n"); - AQH_Value_List_free(valueList); } + AQCGI_Request_SetResponseCode(rq, 200); + AQCGI_Request_SetResponseText(rq, "Ok"); + } + else { + GWEN_Buffer_AppendString(dbuf, "

No permissions to read devices/values.

"); + AQCGI_Request_SetResponseCode(rq, 200); + AQCGI_Request_SetResponseText(rq, "Ok"); } } diff --git a/apps/aqhome-cgi/modules/mdevices.h b/apps/aqhome-cgi/modules/mdevices.h index 373e365..acb819c 100644 --- a/apps/aqhome-cgi/modules/mdevices.h +++ b/apps/aqhome-cgi/modules/mdevices.h @@ -18,22 +18,21 @@ #include -#define AQH_MODDEVICES_PERMS_DEVICELIST 0x001 -#define AQH_MODDEVICES_PERMS_DEVICEREAD 0x002 -#define AQH_MODDEVICES_PERMS_DEVICEWRITE 0x004 -#define AQH_MODDEVICES_PERMS_DEVICEADD 0x008 -#define AQH_MODDEVICES_PERMS_DEVICEDEL 0x010 +#define AQH_MODDEVICES_PERMS_DEVICEREAD 0x001 +#define AQH_MODDEVICES_PERMS_DEVICEWRITE 0x002 +#define AQH_MODDEVICES_PERMS_DEVICEADD 0x004 +#define AQH_MODDEVICES_PERMS_DEVICEDEL 0x008 -#define AQH_MODDEVICES_PERMS_VALUELIST 0x020 -#define AQH_MODDEVICES_PERMS_VALUEREAD 0x040 -#define AQH_MODDEVICES_PERMS_VALUEWRITE 0x080 -#define AQH_MODDEVICES_PERMS_VALUEADD 0x100 -#define AQH_MODDEVICES_PERMS_VALUEDEL 0x200 -#define AQH_MODDEVICES_PERMS_VALUESET 0x400 +#define AQH_MODDEVICES_PERMS_VALUEREAD 0x010 +#define AQH_MODDEVICES_PERMS_VALUEWRITE 0x020 +#define AQH_MODDEVICES_PERMS_VALUEADD 0x040 +#define AQH_MODDEVICES_PERMS_VALUEDEL 0x080 +#define AQH_MODDEVICES_PERMS_VALUESET 0x100 void AQH_ModDevices_Extend(AQH_MODULE *m, AQH_SERVICE *sv, const char *baseFolder); +int AQH_ModDevices_Create(AQH_SERVICE *sv); diff --git a/apps/aqhome-cgi/modules/mmodules.c b/apps/aqhome-cgi/modules/mmodules.c index 6b54f07..a5e7ea3 100644 --- a/apps/aqhome-cgi/modules/mmodules.c +++ b/apps/aqhome-cgi/modules/mmodules.c @@ -163,10 +163,6 @@ int _handleRequest(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, const _handleRqIndex(m, rq, session, dbuf); else if (strcasecmp(sLastPathElem, "editmodule.html")==0) _handleRqEditMod(m, rq, session, dbuf); -#if 0 - else if (strcasecmp(sLastPathElem, "editperm.html")==0) - _handleRqEditPerm(m, rq, session, dbuf); -#endif else if (strcasecmp(sLastPathElem, "addrole.html")==0) _handleRqAddRole(m, rq, session, dbuf); else if (strcasecmp(sLastPathElem, "editrole.html")==0) @@ -353,19 +349,6 @@ void _writeEditModForm(const AQH_MODULE *currentMod, const char *sModName, GWEN_ GWEN_Buffer_AppendArgs(dbuf, "\n", sModName?sModName:""); GWEN_Buffer_AppendString(dbuf, "\n\n\n"); -#if 0 - /* write permission def list */ - GWEN_Buffer_AppendString(dbuf, "

Permission Definitions

\n"); - if (permDefList) - _writePermDefListToForm(permDefList, sModName, dbuf); - else - GWEN_Buffer_AppendString(dbuf, "

none

"); - GWEN_Buffer_AppendArgs(dbuf, - "" - "Add Permission\n", - sModName?sModName:""); -#endif - /* write role list */ GWEN_Buffer_AppendString(dbuf, "

User Roles

\n"); if (roleList) @@ -380,55 +363,6 @@ void _writeEditModForm(const AQH_MODULE *currentMod, const char *sModName, GWEN_ -#if 0 -void _writePermDefListToForm(const AQH_PERMDEF_LIST *permDefList, const char *sModName, GWEN_BUFFER *dbuf) -{ - const AQH_PERMDEF *permDef; - - GWEN_Buffer_AppendString(dbuf, - "\n" - "" - "\n" - "\n" - "\n"); - permDef=AQH_PermDef_List_First(permDefList); - while(permDef) { - const char *sId; - const char *s; - - GWEN_Buffer_AppendString(dbuf, ""); - /* id */ - sId=AQH_PermDef_GetId(permDef); - GWEN_Buffer_AppendArgs(dbuf, "", sId?sId:""); - /* mask */ - GWEN_Buffer_AppendArgs(dbuf, "", AQH_PermDef_GetMask(permDef)); - /* description */ - s=AQH_PermDef_GetDescr(permDef); - GWEN_Buffer_AppendArgs(dbuf, "", s?s:""); - /* actions */ - GWEN_Buffer_AppendArgs(dbuf, ""); - - GWEN_Buffer_AppendString(dbuf, "\n"); - - permDef=AQH_PermDef_List_Next(permDef); - } - GWEN_Buffer_AppendString(dbuf, - "\n" - "
IdMaskDescriptionActions
%s0x%x%s"); - GWEN_Buffer_AppendArgs(dbuf, - "" - "", - sModName?sModName:"", sId?sId:""); - GWEN_Buffer_AppendArgs(dbuf, - "" - "", - sModName?sModName:"", sId?sId:""); - GWEN_Buffer_AppendArgs(dbuf, "
\n"); -} -#endif - - - void _writeRoleListToForm(const AQH_ROLE_LIST *roleList, const char *sModName, const AQH_PERMDEF_LIST *permDefList, @@ -520,6 +454,7 @@ int _handleRqEditModPost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, 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; } DBG_ERROR(NULL, "Module \"%s\" saved", sModName); @@ -538,154 +473,6 @@ int _handleRqEditModPost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, } -#if 0 -int _handleRqEditPerm(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 _handleRqEditPermGet(m, rq, session, dbuf); - else if (AQCGI_Request_GetRequestMethod(rq)==AQCGI_REQUEST_METHOD_POST) - return _handleRqEditPermPost(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"); - } - } - else { - GWEN_Buffer_AppendString(dbuf, "

No permissions to edit modules.

"); - AQCGI_Request_SetResponseCode(rq, 200); - AQCGI_Request_SetResponseText(rq, "Ok"); - } - return 0; -} - - - -int _handleRqEditPermGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf) -{ - AQH_SERVICE *sv; - GWEN_DB_NODE *dbQuery; - const char *sModName; - const char *sId; - const char *sDescr; - uint32_t mask; - AQH_MODULE *currentMod; - const AQH_PERMDEF_LIST *permDefList; - const AQH_PERMDEF *permDef; - - sv=AQH_ModService_GetService(m); - dbQuery=AQCGI_Request_GetDbQuery(rq); - sModName=dbQuery?GWEN_DB_GetCharValue(dbQuery, "mod", 0, NULL):NULL; - sId=dbQuery?GWEN_DB_GetCharValue(dbQuery, "id", 0, NULL):NULL; - currentMod=(sModName && *sModName)?AQH_Service_LoadModule(sv, sModName):NULL; - permDefList=currentMod?AQH_Module_GetPermDefList(currentMod):NULL; - permDef=(permDefList && sId && *sId)?AQH_PermDef_List_GetById(permDefList, sId):NULL; - sDescr=permDef?AQH_PermDef_GetDescr(permDef):NULL; - mask=permDef?AQH_PermDef_GetMask(permDef):0; - - if (permDef) { - GWEN_Buffer_AppendArgs(dbuf, "

Edit Permission Definition for Module %s

\n", sModName?sModName:""); - GWEN_Buffer_AppendArgs(dbuf, - "
\n" - "\n" - "" - "" - "" - "\n" - "\n" - "" - "" - "\n" - "" - "" - "" - "\n", - sId, (unsigned long int) mask, sDescr?sDescr:""); - GWEN_Buffer_AppendString(dbuf, "
\n"); - - GWEN_Buffer_AppendArgs(dbuf, "\n", sModName?sModName:""); - GWEN_Buffer_AppendArgs(dbuf, "\n", sId?sId:""); - GWEN_Buffer_AppendString(dbuf, "\n"); - GWEN_Buffer_AppendString(dbuf, "
\n\n"); - AQCGI_Request_SetResponseCode(rq, 200); - AQCGI_Request_SetResponseText(rq, "Ok"); - return 0; - } - else { - _setLocationHeaderForMod(rq, "editmodule.html", sModName); - AQCGI_Request_SetResponseCode(rq, 303); - AQCGI_Request_SetResponseText(rq, "See Other"); - return 0; - } -} - - - -int _handleRqEditPermPost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf) -{ - AQH_SERVICE *sv; - GWEN_DB_NODE *dbPost; - const char *sModName; - AQH_MODULE *currentMod; - const char *sOldId; - const char *sNewId; - const char *sDescr; - const char *sMask; - uint32_t mask=0; - AQH_PERMDEF_LIST *permDefList; - AQH_PERMDEF *permDef; - long int i; - int rv; - - /* sample data */ - sv=AQH_ModService_GetService(m); - dbPost=AQCGI_Request_GetDbPostBody(rq); - sModName=dbPost?GWEN_DB_GetCharValue(dbPost, "mod", 0, NULL):NULL; - currentMod=(sModName && *sModName)?AQH_Service_LoadModule(sv, sModName):NULL; - sOldId=dbPost?GWEN_DB_GetCharValue(dbPost, "oldId", 0, NULL):NULL; - sNewId=dbPost?GWEN_DB_GetCharValue(dbPost, "id", 0, NULL):NULL; - sDescr=dbPost?GWEN_DB_GetCharValue(dbPost, "descr", 0, NULL):NULL; - sMask=dbPost?GWEN_DB_GetCharValue(dbPost, "mask", 0, NULL):NULL; - if (sMask && *sMask && 1==sscanf(sMask, "%li", &i)) - mask=i; - permDefList=currentMod?AQH_Module_GetPermDefList(currentMod):NULL; - permDef=(permDefList && sOldId)?AQH_PermDef_List_GetById(permDefList, sOldId):NULL; - - /* validate */ - if (mask==0) { - DBG_ERROR(NULL, "Invalid value for mask"); - } - if (permDef==NULL) { - DBG_ERROR(NULL, "PermDef %s not found", sOldId?sOldId:NULL); - } - - /* set new values */ - AQH_PermDef_SetId(permDef, sNewId); - AQH_PermDef_SetMask(permDef, mask); - AQH_PermDef_SetDescr(permDef, sDescr); - - /* save module */ - rv=AQH_Service_SaveModule(sv, currentMod); - if (rv<0) { - GWEN_Buffer_AppendString(dbuf, "

Error

Error saving module

"); - DBG_ERROR(NULL, "Could not save module \"%s\"", sModName); - return 0; - } - - _setLocationHeaderForMod(rq, "editmodule.html", sModName); - AQCGI_Request_SetResponseCode(rq, 303); - AQCGI_Request_SetResponseText(rq, "See Other"); - return 0; -} -#endif - - int _handleRqAddRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, GWEN_BUFFER *dbuf) { @@ -731,43 +518,52 @@ int _handleRqAddRoleGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, guestPerms=currentMod?AQH_Module_GetGuestPerms(currentMod):0; permDefList=currentMod?AQH_Module_GetPermDefList(currentMod):NULL; - if (permDefList) { - GWEN_Buffer_AppendArgs(dbuf, "

Add Role for Module %s

\n", sModName?sModName:""); - GWEN_Buffer_AppendString(dbuf, - "
\n" - "\n" - "" - "" - "" - "" - "" - "" - "\n"); + if (currentMod) { + if (permDefList) { + GWEN_Buffer_AppendArgs(dbuf, "

Add Role for Module %s

\n", sModName?sModName:""); + GWEN_Buffer_AppendString(dbuf, + "\n" + "
\n" + "" + "" + "" + "" + "" + "" + "\n"); - GWEN_Buffer_AppendString(dbuf, "\n"); + GWEN_Buffer_AppendString(dbuf, "\n"); #if 0 - GWEN_Buffer_AppendString(dbuf, "\n"); + GWEN_Buffer_AppendString(dbuf, "\n"); - GWEN_Buffer_AppendString(dbuf, "\n"); + GWEN_Buffer_AppendString(dbuf, "\n"); #endif - GWEN_Buffer_AppendString(dbuf, "
"); - _writePermissionsToForm(permDefList, guestPerms, dbuf); - GWEN_Buffer_AppendString(dbuf, "
"); + _writePermissionsToForm(permDefList, guestPerms, dbuf); + GWEN_Buffer_AppendString(dbuf, "
"); - _writePermissionsToForm(permDefList, 0, dbuf); - GWEN_Buffer_AppendString(dbuf, "
"); + _writePermissionsToForm(permDefList, 0, dbuf); + GWEN_Buffer_AppendString(dbuf, "
"); - _writePermissionsToForm(permDefList, 0, dbuf); - GWEN_Buffer_AppendString(dbuf, "
"); + _writePermissionsToForm(permDefList, 0, dbuf); + GWEN_Buffer_AppendString(dbuf, "
\n"); - GWEN_Buffer_AppendArgs(dbuf, "\n", sModName?sModName:""); - GWEN_Buffer_AppendString(dbuf, "\n"); - GWEN_Buffer_AppendString(dbuf, "
\n\n"); - AQCGI_Request_SetResponseCode(rq, 200); - AQCGI_Request_SetResponseText(rq, "Ok"); + GWEN_Buffer_AppendString(dbuf, "\n"); + GWEN_Buffer_AppendArgs(dbuf, "\n", sModName?sModName:""); + GWEN_Buffer_AppendString(dbuf, "\n"); + GWEN_Buffer_AppendString(dbuf, "\n\n"); + AQCGI_Request_SetResponseCode(rq, 200); + AQCGI_Request_SetResponseText(rq, "Ok"); + } + else { + GWEN_Buffer_AppendString(dbuf, "

Please add permission definitions first.

\n"); + GWEN_Buffer_AppendArgs(dbuf, "

back to module

\n", sModName?sModName:""); + AQCGI_Request_SetResponseCode(rq, 200); + AQCGI_Request_SetResponseText(rq, "Ok"); + } + AQH_Module_free(currentMod); } else { - GWEN_Buffer_AppendString(dbuf, "

Please add permission definitions first.

\n"); - GWEN_Buffer_AppendArgs(dbuf, "

back to module

\n", sModName?sModName:""); + GWEN_Buffer_AppendString(dbuf, "

Error loading module.

\n"); + GWEN_Buffer_AppendString(dbuf, "

back to module list

\n"); AQCGI_Request_SetResponseCode(rq, 200); AQCGI_Request_SetResponseText(rq, "Ok"); } @@ -792,7 +588,6 @@ int _handleRqAddRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, #endif AQH_PERMDEF_LIST *permDefList; AQH_ROLE_LIST *roleList; - AQH_ROLE *role; int rv; /* sample data */ @@ -809,7 +604,7 @@ int _handleRqAddRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, sDescr=dbPost?GWEN_DB_GetCharValue(dbPost, "descr", 0, NULL):NULL; perms=(dbPost && permDefList)?_readPermissionsFromForm(dbPost, permDefList):0; - /* validate */ + /* validate */ if (!(sName && *sName)) { DBG_ERROR(NULL, "Missing value for \"name\""); GWEN_Buffer_AppendString(dbuf, "

Missing name.

\n"); @@ -819,32 +614,44 @@ int _handleRqAddRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, return 0; } - /* set new values */ - role=AQH_Role_new(); - AQH_Role_SetId(role, newId); - AQH_Role_SetName(role, sName); - AQH_Role_SetDescr(role, sDescr); - AQH_Role_SetPerms(role, perms); - /* add role */ - if (roleList==NULL) { - roleList=AQH_Role_List_new(); - AQH_Module_SetRoleList(currentMod, roleList); - } - AQH_Role_List_Add(role, roleList); + if (currentMod) { + AQH_ROLE *role; - /* save module */ - rv=AQH_Service_SaveModule(sv, currentMod); - if (rv<0) { - GWEN_Buffer_AppendString(dbuf, "

Error saving module.

\n"); - GWEN_Buffer_AppendArgs(dbuf, "

back to module

\n", sModName?sModName:""); + /* set new values */ + role=AQH_Role_new(); + AQH_Role_SetId(role, newId); + AQH_Role_SetName(role, sName); + AQH_Role_SetDescr(role, sDescr); + AQH_Role_SetPerms(role, perms); + /* add role */ + if (roleList==NULL) { + roleList=AQH_Role_List_new(); + AQH_Module_SetRoleList(currentMod, roleList); + } + AQH_Role_List_Add(role, roleList); + + /* save module */ + rv=AQH_Service_SaveModule(sv, currentMod); + if (rv<0) { + GWEN_Buffer_AppendString(dbuf, "

Error saving module.

\n"); + GWEN_Buffer_AppendArgs(dbuf, "

back to module

\n", sModName?sModName:""); + AQCGI_Request_SetResponseCode(rq, 200); + AQCGI_Request_SetResponseText(rq, "Ok"); + AQH_Module_free(currentMod); + return 0; + } + _setLocationHeaderForMod(rq, "editmodule.html", sModName); + AQCGI_Request_SetResponseCode(rq, 303); + AQCGI_Request_SetResponseText(rq, "See Other"); + AQH_Module_free(currentMod); + } + else { + GWEN_Buffer_AppendString(dbuf, "

Error loading module.

\n"); + GWEN_Buffer_AppendString(dbuf, "

back to module list

\n"); AQCGI_Request_SetResponseCode(rq, 200); AQCGI_Request_SetResponseText(rq, "Ok"); - return 0; } - _setLocationHeaderForMod(rq, "editmodule.html", sModName); - AQCGI_Request_SetResponseCode(rq, 303); - AQCGI_Request_SetResponseText(rq, "See Other"); return 0; } @@ -1030,24 +837,34 @@ int _handleRqEditRolePost(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session return 0; } - /* set new values */ - AQH_Role_SetName(role, sName); - AQH_Role_SetDescr(role, sDescr); - AQH_Role_SetPerms(role, perms); + if (currentMod) { + /* set new values */ + AQH_Role_SetName(role, sName); + AQH_Role_SetDescr(role, sDescr); + AQH_Role_SetPerms(role, perms); - /* save module */ - rv=AQH_Service_SaveModule(sv, currentMod); - if (rv<0) { - GWEN_Buffer_AppendString(dbuf, "

Error saving module.

\n"); - GWEN_Buffer_AppendArgs(dbuf, "

back to module

\n", sModName?sModName:""); + /* save module */ + rv=AQH_Service_SaveModule(sv, currentMod); + if (rv<0) { + GWEN_Buffer_AppendString(dbuf, "

Error saving module.

\n"); + GWEN_Buffer_AppendArgs(dbuf, "

back to module

\n", sModName?sModName:""); + AQCGI_Request_SetResponseCode(rq, 200); + AQCGI_Request_SetResponseText(rq, "Ok"); + AQH_Module_free(currentMod); + return 0; + } + + _setLocationHeaderForMod(rq, "editmodule.html", sModName); + AQCGI_Request_SetResponseCode(rq, 303); + AQCGI_Request_SetResponseText(rq, "See Other"); + AQH_Module_free(currentMod); + } + else { + GWEN_Buffer_AppendString(dbuf, "

Error loading module.

\n"); + GWEN_Buffer_AppendString(dbuf, "

back to module list

\n"); AQCGI_Request_SetResponseCode(rq, 200); AQCGI_Request_SetResponseText(rq, "Ok"); - return 0; } - - _setLocationHeaderForMod(rq, "editmodule.html", sModName); - AQCGI_Request_SetResponseCode(rq, 303); - AQCGI_Request_SetResponseText(rq, "See Other"); return 0; } @@ -1073,32 +890,41 @@ int _handleRqDeleteRole(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, sModName=dbQuery?GWEN_DB_GetCharValue(dbQuery, "mod", 0, NULL):NULL; id=dbQuery?GWEN_DB_GetIntValue(dbQuery, "id", 0, 0):0; currentMod=(sModName && *sModName)?AQH_Service_LoadModule(sv, sModName):NULL; - roleList=currentMod?AQH_Module_GetRoleList(currentMod):NULL; - role=roleList?AQH_Role_List_GetById(roleList, id):NULL; + if (currentMod) { + roleList=currentMod?AQH_Module_GetRoleList(currentMod):NULL; + role=roleList?AQH_Role_List_GetById(roleList, id):NULL; + if (role) { + int rv; - if (role) { - int rv; + AQH_Role_List_Del(role); + AQH_Role_free(role); - AQH_Role_List_Del(role); - AQH_Role_free(role); + /* save module */ + rv=AQH_Service_SaveModule(sv, currentMod); + if (rv<0) { + GWEN_Buffer_AppendString(dbuf, "

Error saving module.

\n"); + GWEN_Buffer_AppendArgs(dbuf, "

back to module

\n", sModName?sModName:""); + AQCGI_Request_SetResponseCode(rq, 200); + AQCGI_Request_SetResponseText(rq, "Ok"); + AQH_Module_free(currentMod); + return 0; + } - /* save module */ - rv=AQH_Service_SaveModule(sv, currentMod); - if (rv<0) { - GWEN_Buffer_AppendString(dbuf, "

Error saving module.

\n"); - GWEN_Buffer_AppendArgs(dbuf, "

back to module

\n", sModName?sModName:""); - AQCGI_Request_SetResponseCode(rq, 200); - AQCGI_Request_SetResponseText(rq, "Ok"); - return 0; - } - - _setLocationHeaderForMod(rq, "editmodule.html", sModName); - AQCGI_Request_SetResponseCode(rq, 303); - AQCGI_Request_SetResponseText(rq, "See Other"); + _setLocationHeaderForMod(rq, "editmodule.html", sModName); + AQCGI_Request_SetResponseCode(rq, 303); + AQCGI_Request_SetResponseText(rq, "See Other"); + } + else { + GWEN_Buffer_AppendString(dbuf, "

Role not found.

\n"); + GWEN_Buffer_AppendArgs(dbuf, "

back to module

\n", sModName?sModName:""); + AQCGI_Request_SetResponseCode(rq, 200); + AQCGI_Request_SetResponseText(rq, "Ok"); + } + AQH_Module_free(currentMod); } else { - GWEN_Buffer_AppendString(dbuf, "

Role not found.

\n"); - GWEN_Buffer_AppendArgs(dbuf, "

back to module

\n", sModName?sModName:""); + GWEN_Buffer_AppendString(dbuf, "

Error loading module.

\n"); + GWEN_Buffer_AppendString(dbuf, "

back to module list

\n"); AQCGI_Request_SetResponseCode(rq, 200); AQCGI_Request_SetResponseText(rq, "Ok"); }