Separate v1 and v2 server api classes and execution path.

This commit is contained in:
Luis Ángel San Martín
2018-03-04 13:05:00 +01:00
parent aca67f2b2a
commit 68db72078f
66 changed files with 1105 additions and 580 deletions

View File

@ -6,30 +6,36 @@
#include "requestmapper.h"
#include "static.h"
#include "staticfilecontroller.h"
#include "controllers/dumpcontroller.h"
#include "controllers/templatecontroller.h"
#include "controllers/formcontroller.h"
#include "controllers/fileuploadcontroller.h"
#include "controllers/sessioncontroller.h"
#include "controllers/librariescontroller.h"
#include "controllers/foldercontroller.h"
#include "controllers/covercontroller.h"
#include "controllers/comiccontroller.h"
#include "controllers/folderinfocontroller.h"
#include "controllers/pagecontroller.h"
#include "controllers/updatecomiccontroller.h"
#include "controllers/errorcontroller.h"
#include "controllers/comicdownloadinfocontroller.h"
#include "controllers/synccontroller.h"
#include "controllers/versioncontroller.h"
#include "controllers/foldercontentcontroller.h"
#include "controllers/tagscontroller.h"
#include "controllers/tagcontentcontroller.h"
#include "controllers/favoritescontroller.h"
#include "controllers/readingcomicscontroller.h"
#include "controllers/readinglistscontroller.h"
#include "controllers/readinglistcontentcontroller.h"
#include "controllers/v1/librariescontroller.h"
#include "controllers/v1/foldercontroller.h"
#include "controllers/v1/covercontroller.h"
#include "controllers/v1/comiccontroller.h"
#include "controllers/v1/folderinfocontroller.h"
#include "controllers/v1/pagecontroller.h"
#include "controllers/v1/updatecomiccontroller.h"
#include "controllers/v1/errorcontroller.h"
#include "controllers/v1/comicdownloadinfocontroller.h"
#include "controllers/v1/synccontroller.h"
#include "controllers/v2/librariescontroller_v2.h"
#include "controllers/v2/covercontroller_v2.h"
#include "controllers/v2/comiccontroller_v2.h"
#include "controllers/v2/folderinfocontroller_v2.h"
#include "controllers/v2/pagecontroller_v2.h"
#include "controllers/v2/updatecomiccontroller_v2.h"
#include "controllers/v2/errorcontroller_v2.h"
#include "controllers/v2/comicdownloadinfocontroller_v2.h"
#include "controllers/v2/synccontroller_v2.h"
#include "controllers/v2/foldercontentcontroller_v2.h"
#include "controllers/v2/tagscontroller_v2.h"
#include "controllers/v2/tagcontentcontroller_v2.h"
#include "controllers/v2/favoritescontroller_v2.h"
#include "controllers/v2/readingcomicscontroller_v2.h"
#include "controllers/v2/readinglistscontroller_v2.h"
#include "controllers/v2/readinglistcontentcontroller_v2.h"
#include "db_helper.h"
#include "yacreader_libraries.h"
@ -111,6 +117,20 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
QByteArray path=request.getPath();
qDebug("RequestMapper: path=%s",path.data());
if (path.startsWith("/v2"))
{
serviceV2(request, response);
}
else
{
serviceV1(request, response);
}
}
void RequestMapper::serviceV1(HttpRequest& request, HttpResponse& response)
{
QByteArray path=request.getPath();
QRegExp folder("/library/.+/folder/[0-9]+/?");//get comic content
QRegExp folderInfo("/library/.+/folder/[0-9]+/info/?"); //get folder info
QRegExp comicDownloadInfo("/library/.+/comic/[0-9]+/?"); //get comic info (basic/download info)
@ -121,14 +141,6 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
QRegExp cover("/library/.+/cover/[0-9a-f]+.jpg"); //get comic cover (navigation)
QRegExp comicPage("/library/.+/comic/[0-9]+/page/[0-9]+/?"); //get comic page
QRegExp comicPageRemote("/library/.+/comic/[0-9]+/page/[0-9]+/remote?"); //get comic page (remote reading)
QRegExp serverVersion("/version/?");
QRegExp folderContent("/library/.+/folder/[0-9]+/content/?");
QRegExp favs("/library/.+/favs/?");
QRegExp reading("/library/.+/reading/?");
QRegExp tags("/library/.+/tags/?");
QRegExp tagContent("/library/.+/tag/[0-9]+/content/?");
QRegExp readingLists("/library/.+/reading_lists/?");
QRegExp readingListContent("/library/.+/reading_list/[0-9]+/content/?");
QRegExp sync("/sync");
@ -146,14 +158,8 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
}
else
{
if(serverVersion.exactMatch(path))
{
VersionController().service(request, response);
}
else if(sync.exactMatch(path))
{
if(sync.exactMatch(path))
SyncController().service(request, response);
}
else
{
//se comprueba que la sesión sea la correcta con el fin de evitar accesos no autorizados
@ -191,34 +197,6 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
{
UpdateComicController().service(request, response);
}
else if(folderContent.exactMatch(path))
{
FolderContentController().service(request, response);
}
else if(tags.exactMatch(path))
{
TagsController().service(request, response);
}
else if(tagContent.exactMatch(path))
{
TagContentController().service(request, response);
}
else if(favs.exactMatch(path))
{
FavoritesController().service(request, response);
}
else if(reading.exactMatch(path))
{
ReadingComicsController().service(request, response);
}
else if(readingLists.exactMatch(path))
{
ReadingListsController().service(request, response);
}
else if(readingListContent.exactMatch(path))
{
ReadingListContentController().service(request, response);
}
}
else
{
@ -233,3 +211,124 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
}
}
}
void RequestMapper::serviceV2(HttpRequest& request, HttpResponse& response)
{
QByteArray path=request.getPath();
QRegExp folderInfo("/v2/library/.+/folder/[0-9]+/info/?"); //get folder info
QRegExp comicDownloadInfo("/v2/library/.+/comic/[0-9]+/?"); //get comic info (basic/download info)
QRegExp comicFullInfo("/v2/library/.+/comic/[0-9]+/info/?"); //get comic info (full info)
QRegExp comicOpen("/v2/library/.+/comic/[0-9]+/remote/?"); //the server will open for reading the comic
QRegExp comicUpdate("/v2/library/.+/comic/[0-9]+/update/?"); //get comic info
QRegExp comicClose("/v2/library/.+/comic/[0-9]+/close/?"); //the server will close the comic and free memory
QRegExp cover("/v2/library/.+/cover/[0-9a-f]+.jpg"); //get comic cover (navigation)
QRegExp comicPage("/v2/library/.+/comic/[0-9]+/page/[0-9]+/?"); //get comic page
QRegExp comicPageRemote("/v2/library/.+/comic/[0-9]+/page/[0-9]+/remote?"); //get comic page (remote reading)
QRegExp serverVersion("/v2/version/?");
QRegExp folderContent("/v2/library/.+/folder/[0-9]+/content/?");
QRegExp favs("/v2/library/.+/favs/?");
QRegExp reading("/v2/library/.+/reading/?");
QRegExp tags("/v2/library/.+/tags/?");
QRegExp tagContent("/v2/library/.+/tag/[0-9]+/content/?");
QRegExp readingLists("/v2/library/.+/reading_lists/?");
QRegExp readingListContent("/v2/library/.+/reading_list/[0-9]+/content/?");
QRegExp sync("/v2/sync");
QRegExp library("/v2/library/([0-9]+)/.+"); //permite verificar que la biblioteca solicitada existe
path = QUrl::fromPercentEncoding(path).toUtf8();
if(!sync.exactMatch(path)) //no session is needed for syncback info, until security will be added
loadSession(request, response);
//primera petición, se ha hecho un post, se sirven las bibliotecas si la seguridad mediante login no está habilitada
if(path == "/v2/libraries") //Don't send data to the server using '/' !!!!
{
LibrariesControllerV2().service(request, response);
}
else
{
if(serverVersion.exactMatch(path))
{
VersionController().service(request, response);
}
else if(sync.exactMatch(path))
{
SyncControllerV2().service(request, response);
}
else
{
//se comprueba que la sesión sea la correcta con el fin de evitar accesos no autorizados
HttpSession session=Static::sessionStore->getSession(request,response,false);
if(!session.isNull() && session.contains("ySession"))
{
if(library.indexIn(path)!=-1 && DBHelper::getLibraries().contains(library.cap(1).toInt()) )
{
if (folderInfo.exactMatch(path))
{
FolderInfoControllerV2().service(request, response);
}
else if(cover.exactMatch(path))
{
CoverControllerV2().service(request, response);
}
else if(comicDownloadInfo.exactMatch(path))
{
ComicDownloadInfoControllerV2().service(request, response);
}
else if(comicFullInfo.exactMatch(path) || comicOpen.exactMatch(path))//start download or start remote reading
{
ComicControllerV2().service(request, response);
}
else if(comicPage.exactMatch(path) || comicPageRemote.exactMatch(path))
{
PageControllerV2().service(request,response);
}
else if(comicUpdate.exactMatch(path))
{
UpdateComicControllerV2().service(request, response);
}
else if(folderContent.exactMatch(path))
{
FolderContentControllerV2().service(request, response);
}
else if(tags.exactMatch(path))
{
TagsControllerV2().service(request, response);
}
else if(tagContent.exactMatch(path))
{
TagContentControllerV2().service(request, response);
}
else if(favs.exactMatch(path))
{
FavoritesControllerV2().service(request, response);
}
else if(reading.exactMatch(path))
{
ReadingComicsControllerV2().service(request, response);
}
else if(readingLists.exactMatch(path))
{
ReadingListsControllerV2().service(request, response);
}
else if(readingListContent.exactMatch(path))
{
ReadingListContentControllerV2().service(request, response);
}
}
else
{
//response.writeText(library.cap(1));
Static::staticFileController->service(request, response);
}
}
else //acceso no autorizado, redirección
{
ErrorControllerV2(300).service(request,response);
}
}
}
}