diff --git a/0BUILD b/0BUILD index bbe92d3..b8a851a 100644 --- a/0BUILD +++ b/0BUILD @@ -13,8 +13,8 @@ diff --git a/src/aqcgi/0BUILD b/src/aqcgi/0BUILD index d725606..9950dcd 100644 --- a/src/aqcgi/0BUILD +++ b/src/aqcgi/0BUILD @@ -85,6 +85,7 @@ + aqhcgi_service @@ -94,6 +95,7 @@ + service diff --git a/src/aqcgi/service/0BUILD b/src/aqcgi/service/0BUILD new file mode 100644 index 0000000..2877d29 --- /dev/null +++ b/src/aqcgi/service/0BUILD @@ -0,0 +1,95 @@ + + + + + + + + $(gwenhywfar_cflags) + -I$(topsrcdir)/src + -I$(topbuilddir)/src + -I$(topbuilddir) + -I$(topsrcdir) + -I$(srcdir) + + + + --include=$(builddir) + --include=$(srcdir) + + + + + + $(visibility_cflags) + + + + --api=AQCGI_API + + + + module.t2d + moduleperms.t2d + role.t2d + user.t2d + session.t2d + permdef.t2d + objectdef.t2d + objectfielddef.t2d + + + + + + + module.h + moduleperms.h + role.h + user.h + session.h + permdef.h + objectdef.h + objectfielddef.h + + + + + + + + + $(local/built_headers_pub) + + + + + service.h + + + + + service_p.h + + + + + $(local/typefiles) + + service.c + + + + + + + + + + + + + + + + diff --git a/src/aqcgi/service/README b/src/aqcgi/service/README new file mode 100644 index 0000000..6e1b52b --- /dev/null +++ b/src/aqcgi/service/README @@ -0,0 +1,20 @@ + + +- service: + - userList + - rootModule + - sessionList + +- user: + - modulePerms + +- module: + - roleList + - permDefList + +- session + + + + + diff --git a/src/aqcgi/service/module.t2d b/src/aqcgi/service/module.t2d new file mode 100644 index 0000000..36bf371 --- /dev/null +++ b/src/aqcgi/service/module.t2d @@ -0,0 +1,103 @@ + + + + + + + + AQCGI_MODULE + AQCGI_Module + module + + + with_inherit + with_xml + with_db + with_list1 + with_list2 + with_tree2 + nodup + nocopy + + + +
aqcgi/api.h
+
gwenhywfar/error.h
+
aqcgi/service/role.h
+
aqcgi/service/permdef.h
+
+ + + + +
+ + + + + + + + + + + + + 0 + 0 + public + with_getbymember sortbymember + + + + 0 + 0 + public + with_flags + + + + 0 + 0 + public + own with_getbymember sortbymember + + + + 0 + 0 + public + own + + + + 0 + 0 + public + + + + + NULL + NULL + public + own + none + none + + + + NULL + NULL + public + own + none + none + + + + +
+ +
+ diff --git a/src/aqcgi/service/moduleperms.t2d b/src/aqcgi/service/moduleperms.t2d new file mode 100644 index 0000000..119659f --- /dev/null +++ b/src/aqcgi/service/moduleperms.t2d @@ -0,0 +1,67 @@ + + + + + + + + AQCGI_MODULE_PERMS + AQCGI_ModulePerms + moduleperms + + + with_inherit + with_xml + with_db + with_list1 + with_list2 + + + +
aqcgi/api.h
+
gwenhywfar/error.h
+
aqcgi/service/role.h
+
+ + + + +
+ + + + + + 0 + 0 + public + with_getbymember sortbymember + + + + 0 + 0 + public + + + + + 0 + 0 + public + + + + + 0 + 0 + public + + + + + +
+ +
+ diff --git a/src/aqcgi/service/objectdef.t2d b/src/aqcgi/service/objectdef.t2d new file mode 100644 index 0000000..e74d626 --- /dev/null +++ b/src/aqcgi/service/objectdef.t2d @@ -0,0 +1,72 @@ + + + + + + + + AQCGI_OBJECT_DEF + AQCGI_ObjectDef + objectdef + + + with_xml + with_db + with_list1 + with_list2 + + + +
aqcgi/api.h
+
aqcgi/service/objectfielddef.h
+
gwenhywfar/error.h
+
+ + + + +
+ + + + + + + + + + + + 0 + 0 + public + own + + + + 0 + 0 + public + own + + + + 0 + 0 + public + with_flags + + + + NULL + NULL + public + own + + + + +
+ +
+ diff --git a/src/aqcgi/service/objectfielddef.t2d b/src/aqcgi/service/objectfielddef.t2d new file mode 100644 index 0000000..9cf21bf --- /dev/null +++ b/src/aqcgi/service/objectfielddef.t2d @@ -0,0 +1,108 @@ + + + + + + + + AQCGI_OBJECT_FIELD_DEF + AQCGI_ObjectFieldDef + objectfielddef + + + with_xml + with_db + with_list1 + with_list2 + + + +
aqcgi/api.h
+
gwenhywfar/error.h
+
+ + + + +
+ + + + + + + + + + + + + boolean + + + + Integer + + + + string + + + + date + + + + choice + + + + + + + + + + + 0 + 0 + public + own + + + + 0 + 0 + public + own + + + + 0 + 0 + public + with_flags + + + + 0 + 0 + public + + + + + Semicolon separated list of choices + 0 + 0 + public + own + + + + + +
+ +
+ diff --git a/src/aqcgi/service/permdef.t2d b/src/aqcgi/service/permdef.t2d new file mode 100644 index 0000000..fb7bac0 --- /dev/null +++ b/src/aqcgi/service/permdef.t2d @@ -0,0 +1,65 @@ + + + + + + + + AQCGI_PERMDEF + AQCGI_PermDef + permdef + + + with_xml + with_db + with_list1 + nodup + nocopy + + + +
aqcgi/api.h
+
+ + + + +
+ + + + + + NULL + NULL + public + own with_getbymember + + + + NULL + NULL + public + own with_getbymember + + + + 0 + 0 + public + own with_getbymember + + + + NULL + NULL + public + own + + + + +
+ +
+ diff --git a/src/aqcgi/service/role.t2d b/src/aqcgi/service/role.t2d new file mode 100644 index 0000000..ae3e05b --- /dev/null +++ b/src/aqcgi/service/role.t2d @@ -0,0 +1,79 @@ + + + + + + + + AQCGI_ROLE + AQCGI_Role + role + + + with_xml + with_db + with_list1 + with_list2 + + + +
aqcgi/api.h
+
gwenhywfar/error.h
+
+ + + + +
+ + + + + + 0 + 0 + public + with_getbymember + + + + 0 + 0 + public + own + + + + 0 + 0 + public + own + + + + 0 + 0 + public + + + + + 0 + 0 + public + + + + + 0 + 0 + public + + + + + +
+ +
+ diff --git a/src/aqcgi/service/service.c b/src/aqcgi/service/service.c new file mode 100644 index 0000000..3a4801b --- /dev/null +++ b/src/aqcgi/service/service.c @@ -0,0 +1,432 @@ +/**************************************************************************** + * This file is part of the project AqCGI. + * AqCGI (c) by 2026 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 + +//#define DISABLE_DEBUGLOG + + +#include "aqcgi/service/service_p.h" + +#include +#include +#include + + + +GWEN_INHERIT_FUNCTIONS(AQCGI_SERVICE); +GWEN_LIST_FUNCTIONS(AQCGI_SERVICE, AQCGI_Service); + + + + +AQCGI_SERVICE *AQCGI_Service_new(const char *baseFolder, const char *baseUrl) +{ + AQCGI_SERVICE *sv; + + GWEN_NEW_OBJECT(AQCGI_SERVICE, sv); + GWEN_INHERIT_INIT(AQCGI_SERVICE, sv); + GWEN_LIST_INIT(AQCGI_SERVICE, sv); + + sv->baseUrl=baseUrl?strdup(baseUrl):NULL; + sv->baseFolder=baseFolder?strdup(baseFolder):NULL; + + if (sv->baseFolder) { + GWEN_BUFFER *dbuf; + uint32_t pos; + + dbuf=GWEN_Buffer_new(0, 256, 0, 1); + GWEN_Buffer_AppendArgs(dbuf, "%s%s", sv->baseFolder, GWEN_DIR_SEPARATOR_S); + pos=GWEN_Buffer_GetPos(dbuf); + + /* data folder */ + GWEN_Buffer_AppendString(dbuf, "data"); + sv->runtimeFolder=strdup(GWEN_Buffer_GetStart(dbuf)); + DBG_ERROR(NULL, "Runtime folder: %s", GWEN_Buffer_GetStart(dbuf)); + GWEN_Buffer_Crop(dbuf, 0, pos); + + /* cache folder */ + GWEN_Buffer_AppendString(dbuf, "cache"); + sv->cacheFolder=strdup(GWEN_Buffer_GetStart(dbuf)); + DBG_ERROR(NULL, "Cache folder: %s", GWEN_Buffer_GetStart(dbuf)); + GWEN_Buffer_Crop(dbuf, 0, pos); + + GWEN_Buffer_free(dbuf); + } + + return sv; +} + + + +void AQCGI_Service_free(AQCGI_SERVICE *sv) +{ + if (sv) { + GWEN_LIST_FINI(AQCGI_SERVICE, sv); + GWEN_INHERIT_FINI(AQCGI_SERVICE, sv); + + free(sv->baseUrl); + free(sv->baseFolder); + free(sv->runtimeFolder); + free(sv->cacheFolder); + free(sv->loginUrl); + GWEN_FREE_OBJECT(sv); + } +} + + + +const char *AQCGI_Service_GetBaseUrl(const AQCGI_SERVICE *sv) +{ + return sv?sv->baseUrl:NULL; +} + + + +const char *AQCGI_Service_GetBaseFolder(const AQCGI_SERVICE *sv) +{ + return sv?sv->baseFolder:NULL; +} + + + +const char *AQCGI_Service_GetRuntimeFolder(const AQCGI_SERVICE *sv) +{ + return sv?sv->runtimeFolder:NULL; +} + + + +const char *AQCGI_Service_GetCacheFolder(const AQCGI_SERVICE *sv) +{ + return sv?sv->cacheFolder:NULL; +} + + + +const char *AQCGI_Service_GetLoginUrl(const AQCGI_SERVICE *sv) +{ + return sv?sv->loginUrl:NULL; +} + + + +void AQCGI_Service_SetLoginUrl(AQCGI_SERVICE *sv, const char *s) +{ + if (sv) { + free(sv->loginUrl); + sv->loginUrl=s?strdup(s):NULL; + } +} + + + +#if 0 +AQCGI_MODULE *AQCGI_Service_GetModuleByPath(const AQCGI_SERVICE *sv, const char *s) +{ + if (sv && s && *s) { + GWEN_STRINGLIST *sl; + + sl=GWEN_StringList_fromString2(s, "/", 0, + GWEN_TEXT_FLAGS_DEL_QUOTES | + GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS | + GWEN_TEXT_FLAGS_DEL_MULTIPLE_BLANKS | + GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS); + if (sl) { + GWEN_STRINGLISTENTRY *se; + AQCGI_MODULE *m; + + m=sv->rootModule; + se=GWEN_StringList_FirstEntry(sl); + while(se && m) { + const char *sWantedName; + + sWantedName=GWEN_StringListEntry_Data(se); + if (sWantedName && *sWantedName) { + AQCGI_MODULE *mTemp; + + mTemp=AQCGI_Module_Tree2_GetFirstChild(m); + while(mTemp) { + const char *sModName; + + sModName=AQCGI_Module_GetName(mTemp); + if (sModName && *sModName && 0==strcasecmp(sModName, sWantedName)) + break; + mTemp=AQCGI_Module_Tree2_GetNext(mTemp); + } + if (mTemp==NULL) { + DBG_ERROR(NULL, "Module \%s\" not found", sWantedName); + GWEN_StringList_free(sl); + return NULL; + } + m=mTemp; + } + else { + DBG_ERROR(NULL, "Empty path element in \"%s\"", s); + GWEN_StringList_free(sl); + return NULL; + } + + se=GWEN_StringListEntry_Next(se); + } /* while(se && m) */ + GWEN_StringList_free(sl); + return m; + } + else { + DBG_ERROR(NULL, "Bad path \"%s\"", s); + } + } + return NULL; +} +#endif + + + +int AQCGI_Service_HandleRequest(AQCGI_SERVICE *sv, AQCGI_REQUEST *req) +{ + return (sv && sv->handleRequestFn)?(sv->handleRequestFn(sv, req)):GWEN_ERROR_NOT_IMPLEMENTED; +} + + + +AQCGI_USER *AQCGI_Service_LoadUser(AQCGI_SERVICE *sv, const char *s) +{ + return (sv && sv->loadUserFn)?(sv->loadUserFn(sv, s)):NULL; +} + + + +int AQCGI_Service_SaveUser(AQCGI_SERVICE *sv, AQCGI_USER *user) +{ + return (sv && sv->saveUserFn)?(sv->saveUserFn(sv, user)):GWEN_ERROR_NOT_IMPLEMENTED; +} + + + +int AQCGI_Service_AddUser(AQCGI_SERVICE *sv, AQCGI_USER *user) +{ + return (sv && sv->addUserFn)?(sv->addUserFn(sv, user)):GWEN_ERROR_NOT_IMPLEMENTED; +} + + + +int AQCGI_Service_DelUser(AQCGI_SERVICE *sv, const char *s) +{ + return (sv && sv->delUserFn)?(sv->delUserFn(sv, s)):GWEN_ERROR_NOT_IMPLEMENTED; +} + + + +GWEN_STRINGLIST *AQCGI_Service_ListUsers(AQCGI_SERVICE *sv) +{ + return (sv && sv->listUsersFn)?(sv->listUsersFn(sv)):NULL; +} + + + +AQCGI_MODULE *AQCGI_Service_LoadModule(AQCGI_SERVICE *sv, const char *s) +{ + return (sv && sv->loadModuleFn)?(sv->loadModuleFn(sv, s)):NULL; +} + + + +int AQCGI_Service_SaveModule(AQCGI_SERVICE *sv, AQCGI_MODULE *module) +{ + return (sv && sv->saveModuleFn)?(sv->saveModuleFn(sv, module)):GWEN_ERROR_NOT_IMPLEMENTED; +} + + + +int AQCGI_Service_AddModule(AQCGI_SERVICE *sv, AQCGI_MODULE *module) +{ + return (sv && sv->addModuleFn)?(sv->addModuleFn(sv, module)):GWEN_ERROR_NOT_IMPLEMENTED; +} + + + +int AQCGI_Service_DelModule(AQCGI_SERVICE *sv, const char *s) +{ + return (sv && sv->delModuleFn)?(sv->delModuleFn(sv, s)):GWEN_ERROR_NOT_IMPLEMENTED; +} + + + +GWEN_STRINGLIST *AQCGI_Service_ListModules(AQCGI_SERVICE *sv) +{ + return (sv && sv->listModulesFn)?(sv->listModulesFn(sv)):NULL; +} + + + +AQCGI_SESSION* AQCGI_Service_LoadSession(AQCGI_SERVICE *sv, const char *s) +{ + return (sv && sv->loadSessionFn)?(sv->loadSessionFn(sv, s)):NULL; +} + + + +int AQCGI_Service_SaveSession(AQCGI_SERVICE *sv, AQCGI_SESSION *session) +{ + return (sv && sv->saveSessionFn)?(sv->saveSessionFn(sv, session)):GWEN_ERROR_NOT_IMPLEMENTED; +} + + + +int AQCGI_Service_AddSession(AQCGI_SERVICE *sv, AQCGI_SESSION *session) +{ + return (sv && sv->addSessionFn)?(sv->addSessionFn(sv, session)):GWEN_ERROR_NOT_IMPLEMENTED; +} + + + +int AQCGI_Service_DelSession(AQCGI_SERVICE *sv, const char *s) +{ + return (sv && sv->delSessionFn)?(sv->delSessionFn(sv, s)):GWEN_ERROR_NOT_IMPLEMENTED; +} + + + + + + +void AQCGI_Service_SetHandleRequestFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_HANDLEREQUEST_FN f) +{ + if (sv) + sv->handleRequestFn=f; +} + + + +void AQCGI_Service_SetLoadUserFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LOADUSER_FN f) +{ + if (sv) + sv->loadUserFn=f; +} + + + +void AQCGI_Service_SetSaveUserFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_SAVEUSER_FN f) +{ + if (sv) + sv->saveUserFn=f; +} + + + +void AQCGI_Service_SetAddUserFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_ADDUSER_FN f) +{ + if (sv) + sv->addUserFn=f; +} + + + +void AQCGI_Service_SetDelUserFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_DELUSER_FN f) +{ + if (sv) + sv->delUserFn=f; +} + + + +void AQCGI_Service_SetListUsersFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LISTUSERS_FN f) +{ + if (sv) + sv->listUsersFn=f; +} + + + +void AQCGI_Service_SetLoadModuleFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LOADMODULE_FN f) +{ + if (sv) + sv->loadModuleFn=f; +} + + + +void AQCGI_Service_SetSaveModuleFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_SAVEMODULE_FN f) +{ + if (sv) + sv->saveModuleFn=f; +} + + + +void AQCGI_Service_SetAddModuleFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_ADDMODULE_FN f) +{ + if (sv) + sv->addModuleFn=f; +} + + + +void AQCGI_Service_SetDelModuleFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_DELMODULE_FN f) +{ + if (sv) + sv->delModuleFn=f; +} + + + +void AQCGI_Service_SetListModulesFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LISTMODULES_FN f) +{ + if (sv) + sv->listModulesFn=f; +} + + + +void AQCGI_Service_SetLoadSessionFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LOADSESSION_FN f) +{ + if (sv) + sv->loadSessionFn=f; +} + + + +void AQCGI_Service_SetSaveSessionFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_SAVESESSION_FN f) +{ + if (sv) + sv->saveSessionFn=f; +} + + + +void AQCGI_Service_SetAddSessionFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_ADDSESSION_FN f) +{ + if (sv) + sv->addSessionFn=f; +} + + + +void AQCGI_Service_SetDelSessionFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_DELSESSION_FN f) +{ + if (sv) + sv->delSessionFn=f; +} + + + +void AQCGI_Service_SetListSessionsFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LISTSESSIONS_FN f) +{ + if (sv) + sv->listSessionsFn=f; +} + + + + + + + + diff --git a/src/aqcgi/service/service.h b/src/aqcgi/service/service.h new file mode 100644 index 0000000..55a0fe6 --- /dev/null +++ b/src/aqcgi/service/service.h @@ -0,0 +1,109 @@ +/**************************************************************************** + * This file is part of the project AqCGI. + * AqCGI (c) by 2026 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. + ****************************************************************************/ + +#ifndef AQCGI_SERVICE_SERVICE_H +#define AQCGI_SERVICE_SERVICE_H + + +#include + +#include +#include +#include + + +typedef struct AQCGI_SERVICE AQCGI_SERVICE; +GWEN_INHERIT_FUNCTION_LIB_DEFS(AQCGI_SERVICE, AQCGI_API); +GWEN_LIST_FUNCTION_LIB_DEFS(AQCGI_SERVICE, AQCGI_Service, AQCGI_API); + + +#include "aqcgi/service/user.h" +#include "aqcgi/service/module.h" +#include "aqcgi/service/session.h" + +#include + + +typedef int (*AQCGI_SERVICE_HANDLEREQUEST_FN)(AQCGI_SERVICE *sv, AQCGI_REQUEST *req); + +typedef AQCGI_USER* (*AQCGI_SERVICE_LOADUSER_FN)(AQCGI_SERVICE *sv, const char *s); +typedef int (*AQCGI_SERVICE_SAVEUSER_FN)(AQCGI_SERVICE *sv, AQCGI_USER *user); +typedef int (*AQCGI_SERVICE_ADDUSER_FN)(AQCGI_SERVICE *sv, AQCGI_USER *user); +typedef int (*AQCGI_SERVICE_DELUSER_FN)(AQCGI_SERVICE *sv, const char *s); +typedef GWEN_STRINGLIST* (*AQCGI_SERVICE_LISTUSERS_FN)(AQCGI_SERVICE *sv); + +typedef AQCGI_MODULE* (*AQCGI_SERVICE_LOADMODULE_FN)(AQCGI_SERVICE *sv, const char *s); +typedef int (*AQCGI_SERVICE_SAVEMODULE_FN)(AQCGI_SERVICE *sv, AQCGI_MODULE *module); +typedef int (*AQCGI_SERVICE_ADDMODULE_FN)(AQCGI_SERVICE *sv, AQCGI_MODULE *module); +typedef int (*AQCGI_SERVICE_DELMODULE_FN)(AQCGI_SERVICE *sv, const char *s); +typedef GWEN_STRINGLIST* (*AQCGI_SERVICE_LISTMODULES_FN)(AQCGI_SERVICE *sv); + + +typedef AQCGI_SESSION* (*AQCGI_SERVICE_LOADSESSION_FN)(AQCGI_SERVICE *sv, const char *s); +typedef int (*AQCGI_SERVICE_SAVESESSION_FN)(AQCGI_SERVICE *sv, AQCGI_SESSION *session); +typedef int (*AQCGI_SERVICE_ADDSESSION_FN)(AQCGI_SERVICE *sv, AQCGI_SESSION *session); +typedef int (*AQCGI_SERVICE_DELSESSION_FN)(AQCGI_SERVICE *sv, const char *s); +typedef GWEN_STRINGLIST* (*AQCGI_SERVICE_LISTSESSIONS_FN)(AQCGI_SERVICE *sv); + + + +AQCGI_API AQCGI_SERVICE *AQCGI_Service_new(const char *baseFolder, const char *baseUrl); +AQCGI_API void AQCGI_Service_free(AQCGI_SERVICE *sv); + +AQCGI_API const char *AQCGI_Service_GetBaseUrl(const AQCGI_SERVICE *sv); +AQCGI_API const char *AQCGI_Service_GetLoginUrl(const AQCGI_SERVICE *sv); +AQCGI_API void AQCGI_Service_SetLoginUrl(AQCGI_SERVICE *sv, const char *s); +AQCGI_API const char *AQCGI_Service_GetBaseFolder(const AQCGI_SERVICE *sv); +AQCGI_API const char *AQCGI_Service_GetRuntimeFolder(const AQCGI_SERVICE *sv); +AQCGI_API const char *AQCGI_Service_GetCacheFolder(const AQCGI_SERVICE *sv); + +AQCGI_API int AQCGI_Service_HandleRequest(AQCGI_SERVICE *sv, AQCGI_REQUEST *req); + +AQCGI_API AQCGI_USER *AQCGI_Service_LoadUser(AQCGI_SERVICE *sv, const char *s); +AQCGI_API int AQCGI_Service_SaveUser(AQCGI_SERVICE *sv, AQCGI_USER *user); +AQCGI_API int AQCGI_Service_AddUser(AQCGI_SERVICE *sv, AQCGI_USER *user); +AQCGI_API int AQCGI_Service_DelUser(AQCGI_SERVICE *sv, const char *s); +AQCGI_API GWEN_STRINGLIST *AQCGI_Service_ListUsers(AQCGI_SERVICE *sv); + +AQCGI_API AQCGI_MODULE *AQCGI_Service_LoadModule(AQCGI_SERVICE *sv, const char *s); +AQCGI_API int AQCGI_Service_SaveModule(AQCGI_SERVICE *sv, AQCGI_MODULE *module); +AQCGI_API int AQCGI_Service_AddModule(AQCGI_SERVICE *sv, AQCGI_MODULE *module); +AQCGI_API int AQCGI_Service_DelModule(AQCGI_SERVICE *sv, const char *s); +AQCGI_API GWEN_STRINGLIST *AQCGI_Service_ListModules(AQCGI_SERVICE *sv); + +AQCGI_API AQCGI_SESSION* AQCGI_Service_LoadSession(AQCGI_SERVICE *sv, const char *s); +AQCGI_API int AQCGI_Service_SaveSession(AQCGI_SERVICE *sv, AQCGI_SESSION *session); +AQCGI_API int AQCGI_Service_AddSession(AQCGI_SERVICE *sv, AQCGI_SESSION *session); +AQCGI_API int AQCGI_Service_DelSession(AQCGI_SERVICE *sv, const char *s); +AQCGI_API GWEN_STRINGLIST *AQCGI_Service_ListSessions(AQCGI_SERVICE *sv); + + + +AQCGI_API void AQCGI_Service_SetHandleRequestFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_HANDLEREQUEST_FN f); + +AQCGI_API void AQCGI_Service_SetLoadUserFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LOADUSER_FN f); +AQCGI_API void AQCGI_Service_SetSaveUserFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_SAVEUSER_FN f); +AQCGI_API void AQCGI_Service_SetAddUserFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_ADDUSER_FN f); +AQCGI_API void AQCGI_Service_SetDelUserFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_DELUSER_FN f); +AQCGI_API void AQCGI_Service_SetListUsersFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LISTUSERS_FN f); + +AQCGI_API void AQCGI_Service_SetLoadModuleFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LOADMODULE_FN f); +AQCGI_API void AQCGI_Service_SetSaveModuleFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_SAVEMODULE_FN f); +AQCGI_API void AQCGI_Service_SetAddModuleFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_ADDMODULE_FN f); +AQCGI_API void AQCGI_Service_SetDelModuleFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_DELMODULE_FN f); +AQCGI_API void AQCGI_Service_SetListModulesFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LISTMODULES_FN f); + +AQCGI_API void AQCGI_Service_SetLoadSessionFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LOADSESSION_FN f); +AQCGI_API void AQCGI_Service_SetSaveSessionFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_SAVESESSION_FN f); +AQCGI_API void AQCGI_Service_SetAddSessionFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_ADDSESSION_FN f); +AQCGI_API void AQCGI_Service_SetDelSessionFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_DELSESSION_FN f); +AQCGI_API void AQCGI_Service_SetListSessionsFn(AQCGI_SERVICE *sv, AQCGI_SERVICE_LISTSESSIONS_FN f); + + + +#endif diff --git a/src/aqcgi/service/service_p.h b/src/aqcgi/service/service_p.h new file mode 100644 index 0000000..cf02644 --- /dev/null +++ b/src/aqcgi/service/service_p.h @@ -0,0 +1,52 @@ +/**************************************************************************** + * This file is part of the project AqCGI. + * AqCGI (c) by 2026 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. + ****************************************************************************/ + +#ifndef AQCGI_SERVICE_SERVICE_P_H +#define AQCGI_SERVICE_SERVICE_P_H + + +#include "aqcgi/service/service.h" + + +struct AQCGI_SERVICE { + GWEN_INHERIT_ELEMENT(AQCGI_SERVICE); + GWEN_LIST_ELEMENT(AQCGI_SERVICE); + + char *baseUrl; + char *baseFolder; + char *runtimeFolder; + char *cacheFolder; + + char *loginUrl; + + AQCGI_SERVICE_HANDLEREQUEST_FN handleRequestFn; + + AQCGI_SERVICE_LOADUSER_FN loadUserFn; + AQCGI_SERVICE_SAVEUSER_FN saveUserFn; + AQCGI_SERVICE_ADDUSER_FN addUserFn; + AQCGI_SERVICE_DELUSER_FN delUserFn; + AQCGI_SERVICE_LISTUSERS_FN listUsersFn; + + AQCGI_SERVICE_LOADMODULE_FN loadModuleFn; + AQCGI_SERVICE_SAVEMODULE_FN saveModuleFn; + AQCGI_SERVICE_ADDMODULE_FN addModuleFn; + AQCGI_SERVICE_DELMODULE_FN delModuleFn; + AQCGI_SERVICE_LISTMODULES_FN listModulesFn; + + AQCGI_SERVICE_LOADSESSION_FN loadSessionFn; + AQCGI_SERVICE_SAVESESSION_FN saveSessionFn; + AQCGI_SERVICE_ADDSESSION_FN addSessionFn; + AQCGI_SERVICE_DELSESSION_FN delSessionFn; + AQCGI_SERVICE_LISTSESSIONS_FN listSessionsFn; + +}; + + + + +#endif diff --git a/src/aqcgi/service/session.t2d b/src/aqcgi/service/session.t2d new file mode 100644 index 0000000..7bf1805 --- /dev/null +++ b/src/aqcgi/service/session.t2d @@ -0,0 +1,117 @@ + + + + + + + + AQCGI_SESSION + AQCGI_Session + session + + + with_xml + with_db + with_list1 + with_list2 + nodup + nocopy + + + +
aqcgi/api.h
+
gwenhywfar/error.h
+
gwenhywfar/timestamp.h
+
aqcgi/service/user.h
+
+ + + + +
+ + + + + + + + + + + + + + 0 + 0 + public + own with_getbymember + + + + 0 + 0 + public + with_flags + + + + NULL + NULL + public + own + + + + 0 + 0 + public + + + + + 0 + 0 + public + own + + + + NULL + NULL + public + own + + + + NULL + NULL + public + own + + + + + NULL + NULL + public + assign + none + volatile nodup nocopy + + + + + + 0 + 0 + public + with_flags volatile + + + + +
+ +
+ diff --git a/src/aqcgi/service/user.t2d b/src/aqcgi/service/user.t2d new file mode 100644 index 0000000..2d9828d --- /dev/null +++ b/src/aqcgi/service/user.t2d @@ -0,0 +1,171 @@ + + + + + + + + AQCGI_USER + AQCGI_User + user + + + with_xml + with_db + with_list1 + with_list2 + with_refcount + nodup + nocopy + + + +
aqcgi/api.h
+
gwenhywfar/error.h
+
gwenhywfar/timestamp.h
+
aqcgi/service/moduleperms.h
+
+ + + + +
+ + + + + + + + + + + + + + + + + + User suspended + + + + Waiting for email confirmation + + + + Waiting for approval by admin + + + + User active + + + + + + + + + + + 0 + 0 + public + with_getbymember sortbymember + + + + 0 + 0 + public + with_flags + + + + 0 + 0 + public + sortbymember + + + + 0 + 0 + public + own sortbymember + + + + 0 + 0 + public + own with_getbymember sortbymember + + + + 0 + 0 + public + own + + + + 0 + 0 + public + own + + + + 0 + 0 + public + own with_getbymember sortbymember + + + + 0 + 0 + public + own + + + + NULL + NULL + public + own sortbymember + + + + NULL + NULL + public + own sortbymember + + + + NULL + NULL + public + none + none + own + + + + + 0 + 0 + public + volatile with_flags + + + + +
+ +
+