forked from qt-creator/qt-creator
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:
@@ -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
|
||||||
|
|||||||
@@ -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 \
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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 \
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
Reference in New Issue
Block a user