7 Commits
v0.4 ... v0.4.2

Author SHA1 Message Date
Grégory Soutadé
89a5408c2d Update README_package.md 2021-11-03 13:54:44 +01:00
Grégory Soutadé
56e4fda760 Utils: Forgot to pass responseHeaders parameters when we have a redirection 2021-11-03 13:54:04 +01:00
Grégory Soutadé
59c801da08 Fix STATIC_BUILD errors 2021-09-28 18:14:41 +02:00
Grégory Soutadé
f01bf9e837 Fix a bug : export key doesn't supports output in a target file 2021-09-28 15:14:18 +02:00
Grégory Soutadé
c57aba8061 Fix an error in utils Makefile : forgot -lz in static build 2021-09-28 15:02:50 +02:00
Grégory Soutadé
33ea9e7d65 Raise an exception if no EBX_HANDLER is found in PDF 2021-09-28 15:01:04 +02:00
Grégory Soutadé
dc15fc7197 Remove implicit handle of final \0 in ByteArray 2021-09-28 14:58:41 +02:00
9 changed files with 27 additions and 15 deletions

View File

@@ -54,7 +54,7 @@ $(BUILDDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT)
libgourou: libgourou.a libgourou.so libgourou: libgourou.a libgourou.so
libgourou.a: $(OBJECTS) libgourou.a: $(OBJECTS)
$(AR) crs $@ obj/*.o $(LDFLAGS) $(AR) crs $@ obj/*.o ./lib/updfparser/obj/*.o
libgourou.so: $(OBJECTS) $(UPDFPARSERLIB) libgourou.so: $(OBJECTS) $(UPDFPARSERLIB)
$(CXX) obj/*.o $(LDFLAGS) -o $@ -shared $(CXX) obj/*.o $(LDFLAGS) -o $@ -shared

View File

@@ -27,19 +27,19 @@ Utils
You can import configuration from your eReader or create a new one with utils/activate : You can import configuration from your eReader or create a new one with utils/activate :
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD
./utils/activate -u <AdobeID USERNAME> ./activate -u <AdobeID USERNAME>
Then a _./.adept_ directory is created with all configuration file Then a _./.adept_ directory is created with all configuration file
To download an ePub/PDF : To download an ePub/PDF :
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD
./utils/acsmdownloader -f <ACSM_FILE> ./acsmdownloader -f <ACSM_FILE>
To export your private key : To export your private key :
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD
./utils/acsmdownloader --export-private-key [-o adobekey_1.der] ./acsmdownloader --export-private-key [-o adobekey_1.der]
Sources Sources

View File

@@ -40,7 +40,7 @@
#define ACS_SERVER "http://adeactivate.adobe.com/adept" #define ACS_SERVER "http://adeactivate.adobe.com/adept"
#endif #endif
#define LIBGOUROU_VERSION "0.4" #define LIBGOUROU_VERSION "0.4.2"
namespace gourou namespace gourou
{ {

View File

@@ -68,6 +68,7 @@ namespace gourou
enum DOWNLOAD_ERROR { enum DOWNLOAD_ERROR {
DW_NO_ITEM = 0x1200, DW_NO_ITEM = 0x1200,
DW_NO_EBX_HANDLER,
}; };
enum SIGNIN_ERROR { enum SIGNIN_ERROR {
@@ -293,7 +294,7 @@ namespace gourou
*/ */
static inline void writeFile(std::string path, ByteArray& data) static inline void writeFile(std::string path, ByteArray& data)
{ {
writeFile(path, data.data(), data.length()-1); writeFile(path, data.data(), data.length());
} }
/** /**

View File

@@ -37,14 +37,14 @@ namespace gourou
ByteArray::ByteArray(const char* data, int length) ByteArray::ByteArray(const char* data, int length)
{ {
if (length == -1) if (length == -1)
length = strlen(data) + 1; length = strlen(data);
initData((const unsigned char*)data, (unsigned int) length); initData((const unsigned char*)data, (unsigned int) length);
} }
ByteArray::ByteArray(const std::string& str) ByteArray::ByteArray(const std::string& str)
{ {
initData((unsigned char*)str.c_str(), (unsigned int)str.length() + 1); initData((unsigned char*)str.c_str(), (unsigned int)str.length());
} }
void ByteArray::initData(const unsigned char* data, unsigned int length) void ByteArray::initData(const unsigned char* data, unsigned int length)

View File

@@ -611,7 +611,8 @@ namespace gourou
else if (res == PDF) else if (res == PDF)
{ {
uPDFParser::Parser parser; uPDFParser::Parser parser;
bool EBXHandlerFound = false;
try try
{ {
GOUROU_LOG(DEBUG, "Parse PDF"); GOUROU_LOG(DEBUG, "Parse PDF");
@@ -631,6 +632,7 @@ namespace gourou
// Update EBX_HANDLER with rights // Update EBX_HANDLER with rights
if ((*it)->hasKey("Filter") && (**it)["Filter"]->str() == "/EBX_HANDLER") if ((*it)->hasKey("Filter") && (**it)["Filter"]->str() == "/EBX_HANDLER")
{ {
EBXHandlerFound = true;
uPDFParser::Object* ebx = (*it)->clone(); uPDFParser::Object* ebx = (*it)->clone();
(*ebx)["ADEPT_ID"] = new uPDFParser::String(item->getResource()); (*ebx)["ADEPT_ID"] = new uPDFParser::String(item->getResource());
(*ebx)["EBX_BOOKID"] = new uPDFParser::String(item->getResource()); (*ebx)["EBX_BOOKID"] = new uPDFParser::String(item->getResource());
@@ -642,7 +644,12 @@ namespace gourou
} }
} }
parser.write(path, true); if (EBXHandlerFound)
parser.write(path, true);
else
{
EXCEPTION(DW_NO_EBX_HANDLER, "EBX_HANDLER not found");
}
} }
return res; return res;
@@ -907,7 +914,7 @@ namespace gourou
ByteArray privateLicenseKey = ByteArray::fromBase64(user->getPrivateLicenseKey()); ByteArray privateLicenseKey = ByteArray::fromBase64(user->getPrivateLicenseKey());
/* In adobekey.py, we get base64 decoded data [26:] */ /* In adobekey.py, we get base64 decoded data [26:] */
write(fd, privateLicenseKey.data()+26, privateLicenseKey.length()-1-26); write(fd, privateLicenseKey.data()+26, privateLicenseKey.length()-26);
close(fd); close(fd);
} }

View File

@@ -2,10 +2,12 @@
TARGETS=acsmdownloader adept_activate TARGETS=acsmdownloader adept_activate
CXXFLAGS=-Wall `pkg-config --cflags Qt5Core Qt5Network` -fPIC -I$(ROOT)/include -I$(ROOT)/lib/pugixml/src/ CXXFLAGS=-Wall `pkg-config --cflags Qt5Core Qt5Network` -fPIC -I$(ROOT)/include -I$(ROOT)/lib/pugixml/src/
LDFLAGS=`pkg-config --libs Qt5Core Qt5Network` -L$(ROOT) -lcrypto -lzip -lz
ifneq ($(STATIC_UTILS),) ifneq ($(STATIC_UTILS),)
LDFLAGS=`pkg-config --libs Qt5Core Qt5Network` -L$(ROOT) $(ROOT)/libgourou.a -lcrypto -lzip LDFLAGS += $(ROOT)/libgourou.a
else else
LDFLAGS=`pkg-config --libs Qt5Core Qt5Network` -L$(ROOT) -lgourou -lcrypto -lzip -lz LDFLAGS += -lgourou
endif endif
ifneq ($(DEBUG),) ifneq ($(DEBUG),)

View File

@@ -79,6 +79,8 @@ public:
std::string filename; std::string filename;
if (!outputFile) if (!outputFile)
filename = std::string("Adobe_PrivateLicenseKey--") + user->getUsername() + ".der"; filename = std::string("Adobe_PrivateLicenseKey--") + user->getUsername() + ".der";
else
filename = outputFile;
if (outputDir) if (outputDir)
{ {
@@ -173,7 +175,7 @@ static void usage(const char* cmd)
{ {
std::cout << "Download EPUB file from ACSM request file" << std::endl; std::cout << "Download EPUB file from ACSM request file" << std::endl;
std::cout << "Usage: " << cmd << " [(-d|--device-file) device.xml] [(-a|--activation-file) activation.xml] [(-s|--device-key-file) devicesalt] [(-O|--output-dir) dir] [(-o|--output-file) output(.epub|.pdf|.der)] [(-v|--verbose)] [(-h|--help)] (-f|--acsm-file) file.acsm|(-e|--export-private-key)" << std::endl << std::endl; std::cout << "Usage: " << cmd << " [(-d|--device-file) device.xml] [(-a|--activation-file) activation.xml] [(-k|--device-key-file) devicesalt] [(-O|--output-dir) dir] [(-o|--output-file) output(.epub|.pdf|.der)] [(-v|--verbose)] [(-h|--help)] (-f|--acsm-file) file.acsm|(-e|--export-private-key)" << std::endl << std::endl;
std::cout << " " << "-d|--device-file" << "\t" << "device.xml file from eReader" << std::endl; std::cout << " " << "-d|--device-file" << "\t" << "device.xml file from eReader" << std::endl;
std::cout << " " << "-a|--activation-file" << "\t" << "activation.xml file from eReader" << std::endl; std::cout << " " << "-a|--activation-file" << "\t" << "activation.xml file from eReader" << std::endl;

View File

@@ -116,7 +116,7 @@ std::string DRMProcessorClientImpl::sendHTTPRequest(const std::string& URL, cons
if (location.size() != 0) if (location.size() != 0)
{ {
GOUROU_LOG(gourou::DEBUG, "New location"); GOUROU_LOG(gourou::DEBUG, "New location");
return sendHTTPRequest(location.constData(), POSTData, contentType); return sendHTTPRequest(location.constData(), POSTData, contentType, responseHeaders);
} }
if (reply->error() != QNetworkReply::NoError) if (reply->error() != QNetworkReply::NoError)