aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFJob_json.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-30 19:39:17 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-31 21:57:45 +0100
commitb74e7989c34e041e7a6461e00ae045045273ca51 (patch)
treeb798f446dad43f30dc1bc077d6f7369173c331d7 /libqpdf/QPDFJob_json.cc
parente01bbccb40d4714f8fd1551d7f7cca694d607091 (diff)
downloadqpdf-b74e7989c34e041e7a6461e00ae045045273ca51.tar.zst
QPDFJob_json: implement handlers except pages
Diffstat (limited to 'libqpdf/QPDFJob_json.cc')
-rw-r--r--libqpdf/QPDFJob_json.cc172
1 files changed, 100 insertions, 72 deletions
diff --git a/libqpdf/QPDFJob_json.cc b/libqpdf/QPDFJob_json.cc
index a9d68d49..8ebbb926 100644
--- a/libqpdf/QPDFJob_json.cc
+++ b/libqpdf/QPDFJob_json.cc
@@ -229,7 +229,9 @@ Handlers::setupInputFilename(std::string const& key)
void
Handlers::setupInputPassword(std::string const& key)
{
- // QXXXQ
+ addParameter(key, [this](char const* p) {
+ c_main->password(p);
+ });
}
void
@@ -281,21 +283,53 @@ Handlers::endOutputOptions()
}
void
-Handlers::beginOutputOptionsEncrypt(JSON)
+Handlers::beginOutputOptionsEncrypt(JSON j)
{
- // QXXXQ
-// if (this->keylen_seen == 0)
-// {
-// usage("exactly one of 40bit, 128bit, or 256bit must be given;"
-// " an empty dictionary may be supplied for one of them"
-// " to set the key length without imposing any restrictions");
-// }
+ // This method is only called if the overall JSON structure
+ // matches the schema, so we already know that keys that are
+ // present have the right types.
+ int key_len = 0;
+ std::string user_password;
+ std::string owner_password;
+ bool user_password_seen = false;
+ bool owner_password_seen = false;
+ j.forEachDictItem([&](std::string const& key, JSON value){
+ if ((key == "40bit") || (key == "128bit") || (key == "256bit"))
+ {
+ if (key_len != 0)
+ {
+ usage("exactly one of 40bit, 128bit, or 256bit must be given");
+ }
+ key_len = QUtil::string_to_int(key.c_str());
+ }
+ else if (key == "userPassword")
+ {
+ user_password_seen = value.getString(user_password);
+ }
+ else if (key == "ownerPassword")
+ {
+ owner_password_seen = value.getString(owner_password);
+ }
+ });
+ if (key_len == 0)
+ {
+ usage("exactly one of 40bit, 128bit, or 256bit must be given;"
+ " an empty dictionary may be supplied for one of them"
+ " to set the key length without imposing any restrictions");
+ }
+ if (! (user_password_seen && owner_password_seen))
+ {
+ usage("the user and owner password are both required; use the empty"
+ " string for the user password if you don't want a password");
+ }
+ this->c_enc = c_main->encrypt(key_len, user_password, owner_password);
}
void
Handlers::endOutputOptionsEncrypt()
{
- // QXXXQ
+ this->c_enc->endEncrypt();
+ this->c_enc = nullptr;
}
void
@@ -371,147 +405,141 @@ Handlers::endInspect()
}
void
-Handlers::beginTransform(JSON)
-{
- // nothing needed
-}
-
-void
-Handlers::endTransform()
-{
- // nothing needed
-}
-
-void
-Handlers::beginModify(JSON)
-{
- // nothing needed
-}
-
-void
-Handlers::endModify()
+Handlers::beginOptionsAddAttachment(JSON)
{
- // nothing needed
+ this->c_att = c_main->addAttachment();
}
void
-Handlers::beginModifyAddAttachment(JSON)
+Handlers::endOptionsAddAttachment()
{
- // QXXXQ
+ this->c_att->endAddAttachment();
+ this->c_att = nullptr;
}
void
-Handlers::endModifyAddAttachment()
+Handlers::setupOptionsAddAttachmentPath(std::string const& key)
{
- // QXXXQ
-}
-
-void
-Handlers::setupModifyAddAttachmentPath(std::string const& key)
-{
- // QXXXQ setup
+ addParameter(key, [this](char const* p) {
+ c_att->path(p);
+ });
}
void
-Handlers::beginModifyCopyAttachmentsFrom(JSON)
+Handlers::beginOptionsCopyAttachmentsFrom(JSON)
{
- // QXXXQ
+ this->c_copy_att = c_main->copyAttachmentsFrom();
}
void
-Handlers::endModifyCopyAttachmentsFrom()
+Handlers::endOptionsCopyAttachmentsFrom()
{
- // QXXXQ
+ this->c_copy_att->endCopyAttachmentsFrom();
+ this->c_copy_att = nullptr;
}
void
-Handlers::setupModifyCopyAttachmentsFromPath(std::string const& key)
+Handlers::setupOptionsCopyAttachmentsFromPath(std::string const& key)
{
- // QXXXQ setup
+ addParameter(key, [this](char const* p) {
+ c_copy_att->path(p);
+ });
}
void
-Handlers::setupModifyCopyAttachmentsFromPassword(std::string const& key)
+Handlers::setupOptionsCopyAttachmentsFromPassword(std::string const& key)
{
- // QXXXQ setup
+ addParameter(key, [this](char const* p) {
+ c_copy_att->password(p);
+ });
}
void
-Handlers::beginModifyPages(JSON)
+Handlers::beginOptionsPages(JSON)
{
// QXXXQ
}
void
-Handlers::endModifyPages()
+Handlers::endOptionsPages()
{
// QXXXQ
}
void
-Handlers::setupModifyPagesFile(std::string const& key)
+Handlers::setupOptionsPagesFile(std::string const& key)
{
- // QXXXQ setup
+ // handled in beginOptionsPages
}
void
-Handlers::setupModifyPagesPassword(std::string const& key)
+Handlers::setupOptionsPagesPassword(std::string const& key)
{
- // QXXXQ setup
+ // handled in beginOptionsPages
}
void
-Handlers::setupModifyPagesRange(std::string const& key)
+Handlers::setupOptionsPagesRange(std::string const& key)
{
- // QXXXQ setup
+ // handled in beginOptionsPages
}
void
-Handlers::beginModifyOverlay(JSON)
+Handlers::beginOptionsOverlay(JSON)
{
- // QXXXQ
+ this->c_uo = c_main->overlay();
}
void
-Handlers::endModifyOverlay()
+Handlers::endOptionsOverlay()
{
- // QXXXQ
+ c_uo->endUnderlayOverlay();
+ c_uo = nullptr;
}
void
-Handlers::setupModifyOverlayFile(std::string const& key)
+Handlers::setupOptionsOverlayFile(std::string const& key)
{
- // QXXXQ setup
+ addParameter(key, [this](char const* p) {
+ c_uo->path(p);
+ });
}
void
-Handlers::setupModifyOverlayPassword(std::string const& key)
+Handlers::setupOptionsOverlayPassword(std::string const& key)
{
- // QXXXQ setup
+ addParameter(key, [this](char const* p) {
+ c_uo->password(p);
+ });
}
void
-Handlers::beginModifyUnderlay(JSON)
+Handlers::beginOptionsUnderlay(JSON)
{
- // QXXXQ
+ this->c_uo = c_main->underlay();
}
void
-Handlers::endModifyUnderlay()
+Handlers::endOptionsUnderlay()
{
- // QXXXQ
+ c_uo->endUnderlayOverlay();
+ c_uo = nullptr;
}
void
-Handlers::setupModifyUnderlayFile(std::string const& key)
+Handlers::setupOptionsUnderlayFile(std::string const& key)
{
- // QXXXQ setup
+ addParameter(key, [this](char const* p) {
+ c_uo->path(p);
+ });
}
void
-Handlers::setupModifyUnderlayPassword(std::string const& key)
+Handlers::setupOptionsUnderlayPassword(std::string const& key)
{
- // QXXXQ setup
+ addParameter(key, [this](char const* p) {
+ c_uo->password(p);
+ });
}
void