File indexing completed on 2024-05-19 04:03:03
0001 /* 0002 This file is a part of kipi-plugins project 0003 http://www.kipi-plugins.org 0004 0005 Date : 2005-07-07 0006 Description : a tool to export images to imgur.com 0007 0008 SPDX-FileCopyrightText: 2005-2008 Vardhman Jain <vardhman at gmail dot com> 0009 SPDX-FileCopyrightText: 2008-2013 Gilles Caulier <caulier dot gilles at gmail dot com> 0010 SPDX-FileCopyrightText: 2010-2012 Marius Orcsik <marius at habarnam dot ro> 0011 0012 SPDX-License-Identifier: GPL-2.0-or-later 0013 */ 0014 0015 #include "mpform.h" 0016 0017 // Qt includes 0018 0019 #include <QDebug> 0020 #include <QFile> 0021 #include <QMimeDatabase> 0022 0023 // KDE includes 0024 0025 #include <KRandom> 0026 0027 MPForm::MPForm() 0028 { 0029 m_boundary = "----------"; 0030 m_boundary += KRandom::randomString(42 + 13).toLatin1(); 0031 } 0032 0033 MPForm::~MPForm() 0034 { 0035 } 0036 0037 void MPForm::reset() 0038 { 0039 m_buffer.resize(0); 0040 } 0041 0042 void MPForm::finish() 0043 { 0044 QByteArray str; 0045 str += "--"; 0046 str += m_boundary; 0047 str += "--"; 0048 m_buffer.append(str); 0049 } 0050 0051 bool MPForm::addPair(const QString &name, const QString &value, const QString &contentType) 0052 { 0053 QByteArray str; 0054 QByteArray content_length = QByteArray::number(value.length()); 0055 0056 str += "--"; 0057 str += m_boundary; 0058 str += "\r\n"; 0059 0060 if (!name.isEmpty()) { 0061 str += "Content-Disposition: form-data; name=\""; 0062 str += name.toLatin1(); 0063 str += "\"\r\n"; 0064 } 0065 0066 if (!contentType.isEmpty()) { 0067 str += "Content-Type: " + contentType.toLatin1(); 0068 str += "\r\n"; 0069 str += "Mime-version: 1.0 "; 0070 str += "\r\n"; 0071 } 0072 0073 str += "Content-Length: "; 0074 str += content_length; 0075 str += "\r\n\r\n"; 0076 str += value.toUtf8(); 0077 0078 m_buffer.append(str); 0079 m_buffer.append("\r\n"); 0080 0081 return true; 0082 } 0083 0084 bool MPForm::addFile(const QString &name, const QString &path) 0085 { 0086 QMimeDatabase db; 0087 QMimeType ptr = db.mimeTypeForUrl(QUrl::fromLocalFile(path)); 0088 QString mime = ptr.name(); 0089 0090 if (mime.isEmpty()) { 0091 // if we ourselves can't determine the mime of the local file, 0092 // very unlikely the remote site will be able to identify it 0093 return false; 0094 } 0095 0096 QFile imageFile(path); 0097 0098 if (!imageFile.open(QIODevice::ReadOnly)) { 0099 qWarning() << "Couldn't open" << path; 0100 return false; 0101 } 0102 0103 QByteArray imageData = imageFile.readAll(); 0104 0105 QByteArray str; 0106 QByteArray file_size = QByteArray::number(imageFile.size()); 0107 imageFile.close(); 0108 0109 str += "--"; 0110 str += m_boundary; 0111 str += "\r\n"; 0112 str += "Content-Disposition: form-data; name=\""; 0113 str += name.toLatin1(); 0114 str += "\"; "; 0115 str += "filename=\""; 0116 str += QFile::encodeName(imageFile.fileName()); 0117 str += "\"\r\n"; 0118 str += "Content-Length: "; 0119 str += file_size; 0120 str += "\r\n"; 0121 str += "Content-Type: "; 0122 str += mime.toLatin1(); 0123 str += "\r\n\r\n"; 0124 0125 m_buffer.append(str); 0126 // int oldSize = m_buffer.size(); 0127 m_buffer.append(imageData); 0128 m_buffer.append("\r\n"); 0129 0130 return true; 0131 } 0132 0133 bool MPForm::addFile(const QString &name, const QUrl &fileUrl, const QByteArray &fileData) 0134 { 0135 QMimeDatabase db; 0136 QMimeType ptr = db.mimeTypeForUrl(fileUrl); 0137 QString mime = ptr.name(); 0138 0139 if (mime.isEmpty()) { 0140 // if we ourselves can't determine the mime of the local file, 0141 // very unlikely the remote site will be able to identify it 0142 return false; 0143 } 0144 0145 QByteArray str; 0146 QByteArray file_size = QByteArray::number(fileData.size()); 0147 0148 str += "--"; 0149 str += m_boundary; 0150 str += "\r\n"; 0151 str += "Content-Disposition: form-data; name=\""; 0152 str += name.toLatin1(); 0153 str += "\"; "; 0154 str += "filename=\""; 0155 str += QFile::encodeName(fileUrl.fileName()); 0156 str += "\"\r\n"; 0157 str += "Content-Length: "; 0158 str += file_size; 0159 str += "\r\n"; 0160 str += "Content-Type: "; 0161 str += mime.toLatin1(); 0162 str += "\r\n\r\n"; 0163 0164 m_buffer.append(str); 0165 // int oldSize = m_buffer.size(); 0166 m_buffer.append(fileData); 0167 m_buffer.append("\r\n"); 0168 0169 return true; 0170 } 0171 0172 QByteArray MPForm::contentType() const 0173 { 0174 return "Content-Type: multipart/form-data; boundary=" + m_boundary; 0175 } 0176 0177 QByteArray MPForm::boundary() const 0178 { 0179 return m_boundary; 0180 } 0181 0182 QByteArray MPForm::formData() const 0183 { 0184 return m_buffer; 0185 }