CodePaster: Remove support for pastebin.ca

It's been returning 503 for months now.

Change-Id: I0280a21e6fd7c34b4c9b9c9b118a9e2f61f4a022
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Christian Kandeler
2018-10-22 15:41:18 +02:00
parent 33cb73d24e
commit a4c457ea04
9 changed files with 0 additions and 311 deletions

View File

@@ -37,7 +37,6 @@
\list \list
\li \uicontrol {Pastebin.Com} \li \uicontrol {Pastebin.Com}
\li \uicontrol {Pastebin.Ca}
\li \uicontrol {Paste.KDE.Org} \li \uicontrol {Paste.KDE.Org}
\li \uicontrol {Shared network drives} \li \uicontrol {Shared network drives}
\endlist \endlist

View File

@@ -6,7 +6,6 @@ HEADERS += cpasterplugin.h \
pasteview.h \ pasteview.h \
cpasterconstants.h \ cpasterconstants.h \
pastebindotcomprotocol.h \ pastebindotcomprotocol.h \
pastebindotcaprotocol.h \
pastecodedotxyzprotocol.h \ pastecodedotxyzprotocol.h \
settings.h \ settings.h \
pasteselectdialog.h \ pasteselectdialog.h \
@@ -23,7 +22,6 @@ SOURCES += cpasterplugin.cpp \
protocol.cpp \ protocol.cpp \
pasteview.cpp \ pasteview.cpp \
pastebindotcomprotocol.cpp \ pastebindotcomprotocol.cpp \
pastebindotcaprotocol.cpp \
pastecodedotxyzprotocol.cpp \ pastecodedotxyzprotocol.cpp \
settings.cpp \ settings.cpp \
pasteselectdialog.cpp \ pasteselectdialog.cpp \

View File

@@ -26,8 +26,6 @@ QtcPlugin {
"fileshareprotocolsettingswidget.ui", "fileshareprotocolsettingswidget.ui",
"kdepasteprotocol.cpp", "kdepasteprotocol.cpp",
"kdepasteprotocol.h", "kdepasteprotocol.h",
"pastebindotcaprotocol.cpp",
"pastebindotcaprotocol.h",
"pastebindotcomprotocol.cpp", "pastebindotcomprotocol.cpp",
"pastebindotcomprotocol.h", "pastebindotcomprotocol.h",
"pastebindotcomsettings.ui", "pastebindotcomsettings.ui",

View File

@@ -28,7 +28,6 @@
#include "pasteview.h" #include "pasteview.h"
#include "kdepasteprotocol.h" #include "kdepasteprotocol.h"
#include "pastebindotcomprotocol.h" #include "pastebindotcomprotocol.h"
#include "pastebindotcaprotocol.h"
#include "pastecodedotxyzprotocol.h" #include "pastecodedotxyzprotocol.h"
#include "fileshareprotocol.h" #include "fileshareprotocol.h"
#include "pasteselectdialog.h" #include "pasteselectdialog.h"
@@ -121,7 +120,6 @@ bool CodepasterPlugin::initialize(const QStringList &arguments, QString *errorMe
// Create the protocols and append them to the Settings // Create the protocols and append them to the Settings
Protocol *protos[] = {new PasteBinDotComProtocol, Protocol *protos[] = {new PasteBinDotComProtocol,
new PasteBinDotCaProtocol,
new KdePasteProtocol, new KdePasteProtocol,
new FileShareProtocol, new FileShareProtocol,
new PasteCodeDotXyzProtocol, new PasteCodeDotXyzProtocol,

View File

@@ -13,7 +13,6 @@ QT += network
HEADERS = ../protocol.h \ HEADERS = ../protocol.h \
../cpasterconstants.h \ ../cpasterconstants.h \
../pastebindotcomprotocol.h \ ../pastebindotcomprotocol.h \
../pastebindotcaprotocol.h \
../pastecodedotxyzprotocol.h \ ../pastecodedotxyzprotocol.h \
../kdepasteprotocol.h \ ../kdepasteprotocol.h \
../urlopenprotocol.h \ ../urlopenprotocol.h \
@@ -21,7 +20,6 @@ HEADERS = ../protocol.h \
SOURCES += ../protocol.cpp \ SOURCES += ../protocol.cpp \
../pastebindotcomprotocol.cpp \ ../pastebindotcomprotocol.cpp \
../pastebindotcaprotocol.cpp \
../pastecodedotxyzprotocol.cpp \ ../pastecodedotxyzprotocol.cpp \
../kdepasteprotocol.cpp \ ../kdepasteprotocol.cpp \
../urlopenprotocol.cpp \ ../urlopenprotocol.cpp \

View File

@@ -24,7 +24,6 @@ QtcTool {
files: [ files: [
"cpasterconstants.h", "cpasterconstants.h",
"kdepasteprotocol.h", "kdepasteprotocol.cpp", "kdepasteprotocol.h", "kdepasteprotocol.cpp",
"pastebindotcaprotocol.h", "pastebindotcaprotocol.cpp",
"pastebindotcomprotocol.h", "pastebindotcomprotocol.cpp", "pastebindotcomprotocol.h", "pastebindotcomprotocol.cpp",
"pastecodedotxyzprotocol.h", "pastecodedotxyzprotocol.cpp", "pastecodedotxyzprotocol.h", "pastecodedotxyzprotocol.cpp",
"protocol.h", "protocol.cpp", "protocol.h", "protocol.cpp",

View File

@@ -25,7 +25,6 @@
#include "argumentscollector.h" #include "argumentscollector.h"
#include "../kdepasteprotocol.h" #include "../kdepasteprotocol.h"
#include "../pastebindotcaprotocol.h"
#include "../pastebindotcomprotocol.h" #include "../pastebindotcomprotocol.h"
#include "../pastecodedotxyzprotocol.h" #include "../pastecodedotxyzprotocol.h"
@@ -49,8 +48,6 @@ public:
{ {
if (protocol == KdePasteProtocol::protocolName().toLower()) if (protocol == KdePasteProtocol::protocolName().toLower())
m_protocol.reset(new KdePasteProtocol); m_protocol.reset(new KdePasteProtocol);
else if (protocol == PasteBinDotCaProtocol::protocolName().toLower())
m_protocol.reset(new PasteBinDotCaProtocol);
else if (protocol == PasteBinDotComProtocol::protocolName().toLower()) else if (protocol == PasteBinDotComProtocol::protocolName().toLower())
m_protocol.reset(new PasteBinDotComProtocol); m_protocol.reset(new PasteBinDotComProtocol);
else if (protocol == PasteCodeDotXyzProtocol::protocolName().toLower()) else if (protocol == PasteCodeDotXyzProtocol::protocolName().toLower())
@@ -95,7 +92,6 @@ int main(int argc, char *argv[])
QCoreApplication app(argc, argv); QCoreApplication app(argc, argv);
const QStringList protocols = {KdePasteProtocol::protocolName().toLower(), const QStringList protocols = {KdePasteProtocol::protocolName().toLower(),
PasteBinDotCaProtocol::protocolName().toLower(),
PasteBinDotComProtocol::protocolName().toLower(), PasteBinDotComProtocol::protocolName().toLower(),
PasteCodeDotXyzProtocol::protocolName().toLower()}; PasteCodeDotXyzProtocol::protocolName().toLower()};
ArgumentsCollector argsCollector(protocols); ArgumentsCollector argsCollector(protocols);

View File

@@ -1,232 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "pastebindotcaprotocol.h"
#include <utils/qtcassert.h>
#include <QNetworkReply>
#include <QStringList>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonValue>
#include <QJsonObject>
static const char urlC[] = "https://pastebin.ca/";
static const char internalUrlC[] = "https://pbin.ca/";
static const char protocolNameC[] = "Pastebin.Ca";
static inline QByteArray expiryValue(int expiryDays)
{
// pastebin.ca supports 1-3 days, 1-3 weeks, 1-6 months, 1 year
const int months = expiryDays / 30;
const int weeks = expiryDays / 7;
if (expiryDays == 1)
return "1 day";
if (expiryDays < 4)
return QByteArray::number(expiryDays) + " days";
if (weeks <= 1)
return "1 week";
if (weeks <= 3)
return QByteArray::number(weeks) + " weeks";
if (months <= 1)
return "1 month";
if (months <= 6)
return QByteArray::number(months) + " months";
return "1 year"; // using Never makes the post expire after 1 month
}
namespace CodePaster {
QString PasteBinDotCaProtocol::protocolName()
{
return QLatin1String(protocolNameC);
}
unsigned PasteBinDotCaProtocol::capabilities() const
{
return ListCapability | PostDescriptionCapability | PostCommentCapability;
}
void PasteBinDotCaProtocol::fetch(const QString &id)
{
QTC_ASSERT(!m_fetchReply, return);
const QString url = QLatin1String(internalUrlC);
const QString rawPostFix = QLatin1String("raw/");
// Create link as ""http://pbin.ca/raw/[id]"
// If we get a complete URL, just insert 'raw', else build URL.
QString link = id;
if (link.startsWith(url)) {
const int lastSlashPos = link.lastIndexOf(QLatin1Char('/'));
if (lastSlashPos != -1)
link.insert(lastSlashPos + 1, rawPostFix);
} else {
link.insert(0, rawPostFix);
link.insert(0, url);
}
m_fetchReply = httpGet(link);
connect(m_fetchReply, &QNetworkReply::finished,
this, &PasteBinDotCaProtocol::fetchFinished);
m_fetchId = id;
}
static QByteArray toTypeId(Protocol::ContentType ct)
{
if (ct == Protocol::C)
return QByteArray(1, '3');
if (ct == Protocol::Cpp)
return QByteArray(1, '4');
if (ct == Protocol::JavaScript)
return QByteArray("27");
if (ct == Protocol::Diff)
return QByteArray( "34");
if (ct == Protocol::Xml)
return QByteArray("15");
return QByteArray(1, '1');
}
void PasteBinDotCaProtocol::paste(const QString &text,
ContentType ct, int expiryDays,
const QString &/* username */,
const QString & comment,
const QString &description)
{
QTC_ASSERT(!m_pasteReply, return);
QByteArray data = "api=+xKvWG+1UFXkr2Kn3Td4AnpYtCIjA4qt&";
data += "content=";
data += QUrl::toPercentEncoding(fixNewLines(text));
data += "&type=";
data += toTypeId(ct);
data += "&description=";
data += QUrl::toPercentEncoding(comment);
data += "&expiry=";
data += QUrl::toPercentEncoding(QLatin1String(expiryValue(expiryDays)));
data += "&name="; // Title or name.
data += QUrl::toPercentEncoding(description);
// fire request
const QString link = QLatin1String(internalUrlC) + QLatin1String("quiet-paste.php");
m_pasteReply = httpPost(link, data);
connect(m_pasteReply, &QNetworkReply::finished,
this, &PasteBinDotCaProtocol::pasteFinished);
}
void PasteBinDotCaProtocol::pasteFinished()
{
if (m_pasteReply->error()) {
qWarning("%s protocol error: %s", protocolNameC, qPrintable(m_pasteReply->errorString()));
} else {
/// returns ""SUCCESS:[id]""
const QByteArray data = m_pasteReply->readAll();
const QString link = QString::fromLatin1(urlC) + QString::fromLatin1(data).remove(QLatin1String("SUCCESS:"));
emit pasteDone(link);
}
m_pasteReply->deleteLater();
m_pasteReply = 0;
}
void PasteBinDotCaProtocol::fetchFinished()
{
QString title;
QString content;
bool error = m_fetchReply->error();
if (error) {
content = m_fetchReply->errorString();
} else {
title = name() + QLatin1String(": ") + m_fetchId;
const QByteArray data = m_fetchReply->readAll();
content = QString::fromUtf8(data);
content.remove(QLatin1Char('\r'));
}
m_fetchReply->deleteLater();
m_fetchReply = 0;
emit fetchDone(title, content, error);
}
void PasteBinDotCaProtocol::list()
{
QTC_ASSERT(!m_listReply, return);
m_listReply = httpGet(QLatin1String(urlC));
connect(m_listReply, &QNetworkReply::finished, this, &PasteBinDotCaProtocol::listFinished);
}
bool PasteBinDotCaProtocol::checkConfiguration(QString *errorMessage)
{
if (m_hostChecked) // Check the host once.
return true;
const bool ok = httpStatus(QLatin1String(urlC), errorMessage);
if (ok)
m_hostChecked = true;
return ok;
}
/* Quick & dirty: Parse page does no more work due to internal javascript/websocket magic - so,
* search for _initial_ json array containing the last added pastes.
\code
<script type="text/javascript">var pHistoryInitial = [{"id":3791300,"ts":1491288268,"name":"try",
"expires":1491374668},
\endcode */
static inline QStringList parseLists(QIODevice *io)
{
QStringList rc;
QByteArray data = io->readAll();
const QByteArray history("<script type=\"text/javascript\">var pHistoryInitial = ");
int pos = data.indexOf(history);
if (pos == -1)
return rc;
data.remove(0, pos + history.size());
pos = data.indexOf(";</script>");
if (pos == -1)
return rc;
data.truncate(pos);
QJsonParseError error;
const QJsonDocument doc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError)
return rc;
QJsonArray array = doc.array();
for (const QJsonValue &val : array) {
const QJsonObject obj = val.toObject();
const QJsonValue id = obj.value("id");
const QJsonValue name = obj.value("name");
if (!id.isUndefined())
rc.append(QString::number(id.toInt()) + ' ' + name.toString());
}
return rc;
}
void PasteBinDotCaProtocol::listFinished()
{
const bool error = m_listReply->error();
if (error)
qWarning("%s list failed: %s", protocolNameC, qPrintable(m_listReply->errorString()));
else
emit listDone(name(), parseLists(m_listReply));
m_listReply->deleteLater();
m_listReply = nullptr;
}
} // namespace CodePaster

View File

@@ -1,65 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "protocol.h"
namespace CodePaster {
class PasteBinDotCaProtocol : public NetworkProtocol
{
Q_OBJECT
public:
static QString protocolName();
QString name() const override { return protocolName(); }
bool hasSettings() const override { return false; }
unsigned capabilities() const override;
void fetch(const QString &id) override;
void paste(const QString &text,
ContentType ct = Text,
int expiryDays = 1,
const QString &username = QString(),
const QString &comment = QString(),
const QString &description = QString()) override;
void list() override;
protected:
bool checkConfiguration(QString *errorMessage) override;
private:
void fetchFinished();
void listFinished();
void pasteFinished();
QNetworkReply *m_fetchReply = nullptr;
QNetworkReply *m_listReply = nullptr;
QNetworkReply *m_pasteReply = nullptr;
QString m_fetchId;
bool m_hostChecked = false;
};
} // namespace CodePaster