summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-05-01 23:23:10 +0200
committerCarl Hetherington <cth@carlh.net>2025-06-03 22:46:26 +0200
commitcd2dffcd903a2a1d9f2b452bdd3cfec45cebe614 (patch)
tree36e39f7903377bd0c133c73b8eb53ac3eb3465d8
parent4c5691d02a8d35c2cff5c4fc490682e493d36eba (diff)
Support FTPS uploads.
-rw-r--r--src/lib/curl_uploader.cc4
-rw-r--r--src/lib/types.cc4
-rw-r--r--src/lib/types.h3
-rw-r--r--src/lib/upload_job.cc1
-rw-r--r--src/wx/upload_destination_dialog.cc3
5 files changed, 13 insertions, 2 deletions
diff --git a/src/lib/curl_uploader.cc b/src/lib/curl_uploader.cc
index 3edb46429..c2e46538f 100644
--- a/src/lib/curl_uploader.cc
+++ b/src/lib/curl_uploader.cc
@@ -100,6 +100,10 @@ CurlUploader::upload_file(boost::filesystem::path from, boost::filesystem::path
curl_easy_setopt(_curl, CURLOPT_URL, url.c_str());
+ if (_destination.protocol == FileTransferProtocol::FTPS) {
+ curl_easy_setopt(_curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
+ }
+
dcp::File file(from, "rb");
if (!file) {
throw NetworkError(String::compose(_("Could not open %1 to send"), from));
diff --git a/src/lib/types.cc b/src/lib/types.cc
index 46ec38361..948bb6a67 100644
--- a/src/lib/types.cc
+++ b/src/lib/types.cc
@@ -119,6 +119,8 @@ file_transfer_protocol_from_string(string s)
return FileTransferProtocol::SCP;
} else if (s == "ftp") {
return FileTransferProtocol::FTP;
+ } else if (s == "ftps") {
+ return FileTransferProtocol::FTPS;
}
DCPOMATIC_ASSERT(false);
@@ -134,6 +136,8 @@ file_transfer_protocol_to_string(FileTransferProtocol p)
return "scp";
case FileTransferProtocol::FTP:
return "ftp";
+ case FileTransferProtocol::FTPS:
+ return "ftps";
default:
DCPOMATIC_ASSERT(false);
}
diff --git a/src/lib/types.h b/src/lib/types.h
index 9cc20d8b4..eea63e119 100644
--- a/src/lib/types.h
+++ b/src/lib/types.h
@@ -142,7 +142,8 @@ struct CPLSummary
enum class FileTransferProtocol {
SCP,
- FTP
+ FTP,
+ FTPS
};
diff --git a/src/lib/upload_job.cc b/src/lib/upload_job.cc
index 4fee6f063..3cfbad727 100644
--- a/src/lib/upload_job.cc
+++ b/src/lib/upload_job.cc
@@ -86,6 +86,7 @@ UploadJob::run ()
uploader.reset(new SCPUploader(_destination, bind(&UploadJob::set_status, this, _1), bind(&UploadJob::set_progress, this, _1, false)));
break;
case FileTransferProtocol::FTP:
+ case FileTransferProtocol::FTPS:
uploader.reset(new CurlUploader(_destination, bind(&UploadJob::set_status, this, _1), bind(&UploadJob::set_progress, this, _1, false)));
break;
}
diff --git a/src/wx/upload_destination_dialog.cc b/src/wx/upload_destination_dialog.cc
index f7cb40379..d4da24bb0 100644
--- a/src/wx/upload_destination_dialog.cc
+++ b/src/wx/upload_destination_dialog.cc
@@ -53,6 +53,7 @@ UploadDestinationDialog::UploadDestinationDialog(wxWindow* parent)
_protocol->add_entry(_("SCP"), file_transfer_protocol_to_string(FileTransferProtocol::SCP));
_protocol->add_entry(_("FTP"), file_transfer_protocol_to_string(FileTransferProtocol::FTP));
+ _protocol->add_entry(_("FTPS"), file_transfer_protocol_to_string(FileTransferProtocol::FTPS));
_protocol->bind(&UploadDestinationDialog::protocol_changed, this);
@@ -68,7 +69,7 @@ UploadDestinationDialog::UploadDestinationDialog(wxWindow* parent)
void
UploadDestinationDialog::protocol_changed()
{
- auto const ftp = _protocol->get() == 1;
+ auto const ftp = _protocol->get_data() == string("ftp") || _protocol->get_data() == string("ftps");
_passive->Enable(ftp);
_passive->SetValue(ftp);
}