/**************************************************************************** * 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 #endif #include "./madmin.h" #include "aqhome-cgi/service/module.h" #include "aqhome-cgi/modules/mmodules.h" #include #include /* ------------------------------------------------------------------------------------------------ * 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; }