108 lines
3.2 KiB
C
108 lines
3.2 KiB
C
/****************************************************************************
|
|
* This file is part of the project AqHome.
|
|
* AqHome (c) by 2025 Martin Preuss, all rights reserved.
|
|
*
|
|
* The license for this file can be found in the file COPYING which you
|
|
* should have received along with this file.
|
|
****************************************************************************/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
# include <config.h>
|
|
#endif
|
|
|
|
|
|
#include "./madmin.h"
|
|
|
|
#include "aqhome-cgi/service/module.h"
|
|
#include "aqhome-cgi/modules/mmodules.h"
|
|
|
|
#include <gwenhywfar/debug.h>
|
|
#include <gwenhywfar/timestamp.h>
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------------------------------
|
|
* defs and enums
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
/* ------------------------------------------------------------------------------------------------
|
|
* global vars
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
/* ------------------------------------------------------------------------------------------------
|
|
* forward declarations
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
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);
|
|
|
|
|
|
/* ------------------------------------------------------------------------------------------------
|
|
* code
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
void AQH_ModAdmin_Extend(AQH_MODULE *m, AQH_SERVICE *sv, const char *baseFolder)
|
|
{
|
|
AQH_ModService_Extend(m, sv, baseFolder);
|
|
AQH_ModService_SetHandleRequestFn(m, _handleRequest);
|
|
AQH_ModService_SetLoadSubModuleFn(m, _loadSubModule);
|
|
}
|
|
|
|
|
|
|
|
AQH_MODULE *_loadSubModule(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, const char *sModuleName)
|
|
{
|
|
AQH_SERVICE *sv;
|
|
|
|
sv=AQH_ModService_GetService(m);
|
|
if (strcasecmp(sModuleName, "modules")==0) {
|
|
AQH_MODULE *mSub;
|
|
|
|
mSub=AQH_Service_LoadModule(sv, sModuleName);
|
|
if (mSub) {
|
|
const char *s;
|
|
GWEN_BUFFER *nbuf;
|
|
|
|
nbuf=GWEN_Buffer_new(0, 256, 0, 1);
|
|
s=AQH_ModService_GetBaseFolder(m);
|
|
GWEN_Buffer_AppendArgs(nbuf, "%s/modules", s?s:".");
|
|
|
|
AQH_ModAdmModules_Extend(mSub, AQH_ModService_GetService(m), GWEN_Buffer_GetStart(nbuf));
|
|
AQH_Module_Tree2_AddChild(m, mSub);
|
|
GWEN_Buffer_free(nbuf);
|
|
return mSub;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
|
|
|
|
int _handleRequest(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, const char *sLastPathElem)
|
|
{
|
|
if (strcasecmp(sLastPathElem, "index.html")==0)
|
|
return _handleRqIndex(m, rq);
|
|
else {
|
|
AQCGI_SendResponseWithStatus(rq, 404, "Not Found");
|
|
return GWEN_ERROR_NOT_IMPLEMENTED;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
int _handleRqIndex(AQH_MODULE *m, AQCGI_REQUEST *rq)
|
|
{
|
|
if (AQCGI_Request_GetRequestMethod(rq)==AQCGI_REQUEST_METHOD_GET)
|
|
return AQH_ModService_RespondWithFile(m, rq, "en", "index.html");
|
|
AQCGI_SendResponseWithStatus(rq, 404, "Not Found");
|
|
return GWEN_ERROR_GENERIC;
|
|
}
|
|
|
|
|
|
|