Add support for anonymous accounts

This commit is contained in:
Grégory Soutadé 2021-12-18 17:43:47 +01:00
parent ad6da2f8ab
commit 36553cdd2c
2 changed files with 51 additions and 12 deletions

View File

@ -50,7 +50,6 @@ namespace gourou {
deviceFingerprint = gourou::extractTextElem(activationDoc, "//fingerprint", throwOnNull);
authenticationCertificate = gourou::extractTextElem(activationDoc, "//adept:authenticationCertificate", throwOnNull);
privateLicenseKey = gourou::extractTextElem(activationDoc, "//adept:privateLicenseKey", throwOnNull);
username = gourou::extractTextElem(activationDoc, "//adept:username", throwOnNull);
pugi::xpath_node xpath_node = activationDoc.select_node("//adept:username");
if (xpath_node)
@ -60,7 +59,12 @@ namespace gourou {
if (throwOnNull)
EXCEPTION(USER_INVALID_ACTIVATION_FILE, "Invalid activation file");
}
if (loginMethod == "anonymous")
username = "anonymous";
else
username = gourou::extractTextElem(activationDoc, "//adept:username", throwOnNull);
pugi::xpath_node_set nodeSet = activationDoc.select_nodes("//adept:licenseServices/adept:licenseServiceInfo");
for (pugi::xpath_node_set::const_iterator it = nodeSet.begin();
it != nodeSet.end(); ++it)

View File

@ -144,8 +144,9 @@ static void usage(const char* cmd)
{
std::cout << "Create new device files used by ADEPT DRM" << std::endl;
std::cout << "Usage: " << cmd << " (-u|--username) username [(-p|--password) password] [(-O|--output-dir) dir] [(-r|--random-serial)] [(-v|--verbose)] [(-h|--help)]" << std::endl << std::endl;
std::cout << "Usage: " << cmd << " (-a|--anonymous) | ( (-u|--username) username [(-p|--password) password] ) [(-O|--output-dir) dir] [(-r|--random-serial)] [(-v|--verbose)] [(-h|--help)]" << std::endl << std::endl;
std::cout << " " << "-a|--anonymous" << "\t" << "Anonymous account, no need for username/password (Use it only with a DRM removal software)" << std::endl;
std::cout << " " << "-u|--username" << "\t\t" << "AdobeID username (ie adobe.com email account)" << std::endl;
std::cout << " " << "-p|--password" << "\t\t" << "AdobeID password (asked if not set via command line) " << std::endl;
std::cout << " " << "-O|--output-dir" << "\t" << "Optional output directory were to put result (default ./.adept). This directory must not already exists" << std::endl;
@ -174,10 +175,12 @@ int main(int argc, char** argv)
int c, ret = -1;
const char* _outputDir = outputDir;
int verbose = gourou::DRMProcessor::getLogLevel();
bool anonymous = false;
while (1) {
int option_index = 0;
static struct option long_options[] = {
{"anonymous", no_argument , 0, 'a' },
{"username", required_argument, 0, 'u' },
{"password", required_argument, 0, 'p' },
{"output-dir", required_argument, 0, 'O' },
@ -189,12 +192,15 @@ int main(int argc, char** argv)
{0, 0, 0, 0 }
};
c = getopt_long(argc, argv, "u:p:O:H:rvVh",
c = getopt_long(argc, argv, "au:p:O:H:rvVh",
long_options, &option_index);
if (c == -1)
break;
switch (c) {
case 'a':
anonymous = true;
break;
case 'u':
username = optarg;
break;
@ -227,15 +233,22 @@ int main(int argc, char** argv)
gourou::DRMProcessor::setLogLevel(verbose);
if (!username)
if ((!username && !anonymous) ||
(username && anonymous))
{
usage(argv[0]);
return -1;
}
if (anonymous)
{
username = "anonymous";
password = "";
}
if (!_outputDir || _outputDir[0] == 0)
{
outputDir = abspath(DEFAULT_ADEPT_DIR);
outputDir = strdup(abspath(DEFAULT_ADEPT_DIR));
}
else
{
@ -245,14 +258,36 @@ int main(int argc, char** argv)
QFile file(_outputDir);
// realpath doesn't works if file/dir doesn't exists
if (file.exists())
outputDir = realpath(_outputDir, 0);
outputDir = strdup(realpath(_outputDir, 0));
else
outputDir = abspath(_outputDir);
outputDir = strdup(abspath(_outputDir));
}
else
outputDir = strdup(_outputDir);
}
QCoreApplication app(argc, argv);
QFile file(outputDir);
if (file.exists())
{
int key;
while (true)
{
std::cout << "!! Warning !! : " << outputDir << " already exists." << std::endl;
std::cout << "All your data will be overwrite. Would you like to continue ? [y/N] " << std::flush ;
key = getchar();
if (key == 'n' || key == 'N' || key == '\n' || key == '\r')
goto end;
if (key == 'y' || key == 'Y')
break;
// Clean STDIN buf
while ((key = getchar()) != '\n')
;
}
}
if (!password)
{
char prompt[128];
@ -260,14 +295,14 @@ int main(int argc, char** argv)
std::string pass = getpass((const char*)prompt, false);
password = pass.c_str();
}
QCoreApplication app(argc, argv);
ADEPTActivate activate(&app);
QThreadPool::globalInstance()->start(&activate);
ret = app.exec();
end:
free((void*)outputDir);
return ret;
}