mirror of
https://github.com/YACReader/yacreader
synced 2025-08-15 02:34:59 -04:00
QsLog
YACReader
YACReaderLibrary
comic_vine
db
qml
server
controllers
lib
documentcache.h
requestmapper.cpp
requestmapper.h
server.pri
startup.cpp
startup.h
static.cpp
static.h
YACReaderLibrary.icns
YACReaderLibrary.pro
add_library_dialog.cpp
add_library_dialog.h
bundle_creator.cpp
bundle_creator.h
classic_comics_view.cpp
classic_comics_view.h
comic_files_manager.cpp
comic_files_manager.h
comic_flow.cpp
comic_flow.h
comic_flow_widget.cpp
comic_flow_widget.h
comics_remover.cpp
comics_remover.h
comics_view.cpp
comics_view.h
comics_view_transition.cpp
comics_view_transition.h
create_library_dialog.cpp
create_library_dialog.h
db_helper.cpp
db_helper.h
empty_folder_widget.cpp
empty_folder_widget.h
export_comics_info_dialog.cpp
export_comics_info_dialog.h
export_library_dialog.cpp
export_library_dialog.h
files.qrc
grid_comics_view.cpp
grid_comics_view.h
icon.ico
icon.rc
icon2.ico
icon3.ico
images.qrc
images_osx.qrc
images_win.qrc
import_comics_info_dialog.cpp
import_comics_info_dialog.h
import_library_dialog.cpp
import_library_dialog.h
import_widget.cpp
import_widget.h
library_creator.cpp
library_creator.h
library_window.cpp
library_window.h
main.cpp
no_libraries_widget.cpp
no_libraries_widget.h
no_search_results_widget.cpp
no_search_results_widget.h
options_dialog.cpp
options_dialog.h
package_manager.cpp
package_manager.h
properties_dialog.cpp
properties_dialog.h
qml.qrc
qml_osx.qrc
qml_win.qrc
rename_library_dialog.cpp
rename_library_dialog.h
server_config_dialog.cpp
server_config_dialog.h
yacreader_libraries.cpp
yacreader_libraries.h
yacreader_local_server.cpp
yacreader_local_server.h
yacreader_main_toolbar.cpp
yacreader_main_toolbar.h
yacreaderlibrary_de.ts
yacreaderlibrary_es.qm
yacreaderlibrary_es.ts
yacreaderlibrary_fr.ts
yacreaderlibrary_nl.ts
yacreaderlibrary_pt.ts
yacreaderlibrary_ru.ts
yacreaderlibrary_source.ts
yacreaderlibrary_tr.ts
common
compressed_archive
custom_widgets
dependencies
files
images
release
shortcuts_management
CHANGELOG.txt
COPYING.txt
INSTALL.txt
README.txt
YACReader.1
YACReader.desktop
YACReader.pro
YACReaderLibrary.1
YACReaderLibrary.desktop
background.png
cleanOSX.sh
compileOSX.sh
create-dmg
generateVS2010Projects.bat
icon.icns
mktarball.sh
releaseOSX.sh
172 lines
6.1 KiB
C++
172 lines
6.1 KiB
C++
/**
|
||
@file
|
||
@author Stefan Frings
|
||
*/
|
||
|
||
#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 "db_helper.h"
|
||
#include "yacreader_libraries.h"
|
||
|
||
#include "QsLog.h"
|
||
|
||
RequestMapper::RequestMapper(QObject* parent)
|
||
:HttpRequestHandler(parent) {}
|
||
|
||
void RequestMapper::loadSession(HttpRequest & request, HttpResponse& response)
|
||
{
|
||
HttpSession session=Static::sessionStore->getSession(request,response);
|
||
if(session.contains("ySession")) //session is already alive check if it is needed to update comics
|
||
{
|
||
QString postData = QString::fromUtf8(request.getBody());
|
||
|
||
if(postData.contains("currentPage"))
|
||
return;
|
||
|
||
if(postData.length()>0) {
|
||
|
||
QList<QString> data = postData.split("\n");
|
||
if(data.length() > 2) {
|
||
session.setDeviceType(data.at(0).split(":").at(1));
|
||
session.setDisplayType(data.at(1).split(":").at(1));
|
||
QList<QString> comics = data.at(2).split(":").at(1).split("\t");
|
||
session.clearComics();
|
||
foreach(QString hash,comics) {
|
||
session.setComicOnDevice(hash);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(data.length()>1)
|
||
{
|
||
session.setDeviceType(data.at(0).split(":").at(1));
|
||
session.setDisplayType(data.at(1).split(":").at(1));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
session.set("ySession","ok");
|
||
|
||
QString postData = QString::fromUtf8(request.getBody());
|
||
//response.writeText(postData);
|
||
|
||
QList<QString> data = postData.split("\n");
|
||
|
||
if(data.length() > 2)
|
||
{
|
||
session.setDeviceType(data.at(0).split(":").at(1));
|
||
session.setDisplayType(data.at(1).split(":").at(1));
|
||
QList<QString> comics = data.at(2).split(":").at(1).split("\t");
|
||
foreach(QString hash,comics)
|
||
{
|
||
session.setComicOnDevice(hash);
|
||
}
|
||
}
|
||
else //values by default, only for debug purposes.
|
||
{
|
||
session.setDeviceType("ipad");
|
||
session.setDisplayType("@2x");
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
|
||
QByteArray path=request.getPath();
|
||
qDebug("RequestMapper: path=%s",path.data());
|
||
|
||
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)
|
||
QRegExp comicFullInfo("/library/.+/comic/[0-9]+/info/?"); //get comic info (full info)
|
||
QRegExp comicOpen("/library/.+/comic/[0-9]+/remote/?"); //the server will open for reading the comic
|
||
QRegExp comicUpdate("/library/.+/comic/[0-9]+/update/?"); //get comic info
|
||
QRegExp comicClose("/library/.+/comic/[0-9]+/close/?"); //the server will close the comic and free memory
|
||
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 library("/library/([0-9]+)/.+"); //permite verificar que la biblioteca solicitada existe
|
||
|
||
path = QUrl::fromPercentEncoding(path).toLatin1();
|
||
|
||
loadSession(request, response);
|
||
|
||
//primera petici<63>n, se ha hecho un post, se sirven las bibliotecas si la seguridad mediante login no est<73> habilitada
|
||
if(path == "/") //Don't send data to the server using '/' !!!!
|
||
{
|
||
LibrariesController().service(request, response);
|
||
}
|
||
|
||
else
|
||
{
|
||
|
||
//se comprueba que la sesi<73>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()) )
|
||
{
|
||
//listar el contenido del folder
|
||
if(folder.exactMatch(path))
|
||
{
|
||
FolderController().service(request, response);
|
||
}
|
||
else if (folderInfo.exactMatch(path))
|
||
{
|
||
FolderInfoController().service(request, response);
|
||
}
|
||
else if(cover.exactMatch(path))
|
||
{
|
||
CoverController().service(request, response);
|
||
}
|
||
else if(comicDownloadInfo.exactMatch(path))
|
||
{
|
||
ComicDownloadInfoController().service(request, response);
|
||
}
|
||
else if(comicFullInfo.exactMatch(path) || comicOpen.exactMatch(path))//start download or start remote reading
|
||
{
|
||
ComicController().service(request, response);
|
||
}
|
||
else if(comicPage.exactMatch(path) || comicPageRemote.exactMatch(path))
|
||
{
|
||
PageController().service(request,response);
|
||
}
|
||
else if(comicUpdate.exactMatch(path))
|
||
{
|
||
UpdateComicController().service(request, response);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//response.writeText(library.cap(1));
|
||
Static::staticFileController->service(request, response);
|
||
}
|
||
}
|
||
else //acceso no autorizado, redirecci<63>n
|
||
{
|
||
ErrorController(300).service(request,response);
|
||
}
|
||
}
|
||
|
||
}
|