#ifndef HANDLER_H #define HANDLER_H #include "../config.h" #include "../response.h" #include "../request.h" #include "../template.h" #include "../database/database.h" #include "../urlprovider.h" #include "../database/queryoption.h" #include "../logger.h" #include "../cache/icache.h" #include "../iparser.h" class Handler { protected: ICache *cache; IParser *parser; Template *templ; Database *database; Session *userSession; UrlProvider *urlProvider; HandlerConfig *handlersConfig; // TODO: may not to find a better place for this method Permissions effectivePermissions(std::string page); QueryOption queryOption(const Request &r, SORT_ORDER defaultSort = ASCENDING) const; public: Handler(HandlerConfig &handlersConfig, Template &templ, Database &db, Session &userSession, UrlProvider &provider, ICache &cache, IParser &parser) { this->handlersConfig = &handlersConfig; this->templ = &templ; this->database = &db; this->userSession = &userSession; this->urlProvider = &provider; this->cache = &cache; this->parser = &parser; } virtual Response handle(const Request &r); virtual Response handleRequest(const Request &r) { return this->errorResponse("Invalid action", "This action is not implemented yet"); } virtual bool canAccess(const Permissions &perms) { return false; } virtual std::string accessErrorMessage() { return "No permission for this action"; } void setGeneralVars(TemplatePage &page); virtual ~Handler() { } Response errorResponse(std::string errortitle, std::string errormessage, int status = 200); std::string createPageTitle(std::string append); }; #endif // HANDLER_H