summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2015-10-02 00:12:53 +0200
committerPetr Mrázek <peterix@gmail.com>2015-10-02 00:12:53 +0200
commitae4216de6101db63a1ec7d817852cad2d10863f5 (patch)
tree1a565f4381bad632941f46724ae330ea8355bff0
parentac8ff8806137d3f6db35afe54b0ef777c40278ef (diff)
downloadMultiMC-ae4216de6101db63a1ec7d817852cad2d10863f5.tar
MultiMC-ae4216de6101db63a1ec7d817852cad2d10863f5.tar.gz
MultiMC-ae4216de6101db63a1ec7d817852cad2d10863f5.tar.lz
MultiMC-ae4216de6101db63a1ec7d817852cad2d10863f5.tar.xz
MultiMC-ae4216de6101db63a1ec7d817852cad2d10863f5.zip
GH-719 implement paste.ee API keys
-rw-r--r--application/BuildConfig.cpp.in1
-rw-r--r--application/BuildConfig.h5
-rw-r--r--application/CMakeLists.txt6
-rw-r--r--application/GuiUtil.cpp8
-rw-r--r--application/MultiMC.cpp4
-rw-r--r--application/pages/OtherLogsPage.cpp2
-rw-r--r--application/pages/global/PasteEEPage.cpp88
-rw-r--r--application/pages/global/PasteEEPage.h62
-rw-r--r--application/pages/global/PasteEEPage.ui139
-rw-r--r--logic/net/PasteUpload.cpp31
-rw-r--r--logic/net/PasteUpload.h15
11 files changed, 345 insertions, 16 deletions
diff --git a/application/BuildConfig.cpp.in b/application/BuildConfig.cpp.in
index 16920cb2..36337aa4 100644
--- a/application/BuildConfig.cpp.in
+++ b/application/BuildConfig.cpp.in
@@ -20,6 +20,7 @@ Config::Config()
GIT_COMMIT = "@MultiMC_GIT_COMMIT@";
VERSION_STR = "@MultiMC_VERSION_STRING@";
NEWS_RSS_URL = "@MultiMC_NEWS_RSS_URL@";
+ PASTE_EE_KEY = "@MultiMC_PASTE_EE_API_KEY@";
}
QString Config::printableVersionString() const
diff --git a/application/BuildConfig.h b/application/BuildConfig.h
index 8a6a76b5..a81d16ed 100644
--- a/application/BuildConfig.h
+++ b/application/BuildConfig.h
@@ -48,6 +48,11 @@ public:
QString NEWS_RSS_URL;
/**
+ * API key you can get from paste.ee when you register an account
+ */
+ QString PASTE_EE_KEY;
+
+ /**
* \brief Converts the Version to a string.
* \return The version number in string format (major.minor.revision.build).
*/
diff --git a/application/CMakeLists.txt b/application/CMakeLists.txt
index 29012157..fdb27607 100644
--- a/application/CMakeLists.txt
+++ b/application/CMakeLists.txt
@@ -29,6 +29,9 @@ set(MultiMC_UPDATER false CACHE BOOL "Whether or not the update system is enable
# Notification URL
set(MultiMC_NOTIFICATION_URL "" CACHE STRING "URL for checking for notifications.")
+# paste.ee API key
+set(MultiMC_PASTE_EE_API_KEY "" CACHE STRING "API key you can get from paste.ee when you register an account")
+
#### Check the current Git commit
include(GitFunctions)
git_run(COMMAND rev-parse HEAD DEFAULT "Unknown" OUTPUT_VAR MultiMC_GIT_COMMIT)
@@ -199,6 +202,8 @@ SET(MULTIMC_SOURCES
pages/global/MultiMCPage.h
pages/global/ProxyPage.cpp
pages/global/ProxyPage.h
+ pages/global/PasteEEPage.cpp
+ pages/global/PasteEEPage.h
# GUI - dialogs
dialogs/AboutDialog.cpp
@@ -289,6 +294,7 @@ SET(MULTIMC_UIS
pages/global/MinecraftPage.ui
pages/global/MultiMCPage.ui
pages/global/ProxyPage.ui
+ pages/global/PasteEEPage.ui
# Dialogs
dialogs/CopyInstanceDialog.ui
diff --git a/application/GuiUtil.cpp b/application/GuiUtil.cpp
index 442922cd..cc06d711 100644
--- a/application/GuiUtil.cpp
+++ b/application/GuiUtil.cpp
@@ -11,11 +11,17 @@
#include "MultiMC.h"
#include <settings/SettingsObject.h>
+#include <BuildConfig.h>
void GuiUtil::uploadPaste(const QString &text, QWidget *parentWidget)
{
ProgressDialog dialog(parentWidget);
- std::unique_ptr<PasteUpload> paste(new PasteUpload(parentWidget, text));
+ auto APIKeySetting = MMC->settings()->get("PasteEEAPIKey").toString();
+ if(APIKeySetting == "multimc")
+ {
+ APIKeySetting = BuildConfig.PASTE_EE_KEY;
+ }
+ std::unique_ptr<PasteUpload> paste(new PasteUpload(parentWidget, text, APIKeySetting));
if (!paste->validateText())
{
diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp
index 3b2003e4..612ba342 100644
--- a/application/MultiMC.cpp
+++ b/application/MultiMC.cpp
@@ -7,6 +7,7 @@
#include "pages/global/ProxyPage.h"
#include "pages/global/ExternalToolsPage.h"
#include "pages/global/AccountListPage.h"
+#include "pages/global/PasteEEPage.h"
#include <iostream>
#include <QDir>
@@ -535,6 +536,8 @@ void MultiMC::initGlobalSettings(bool test_mode)
// Jar mod nag dialog in version page
m_settings->registerSetting("JarModNagSeen", false);
+ // paste.ee API key
+ m_settings->registerSetting("PasteEEAPIKey", "multimc");
// Init page provider
{
@@ -545,6 +548,7 @@ void MultiMC::initGlobalSettings(bool test_mode)
m_globalSettingsProvider->addPage<ProxyPage>();
m_globalSettingsProvider->addPage<ExternalToolsPage>();
m_globalSettingsProvider->addPage<AccountListPage>();
+ m_globalSettingsProvider->addPage<PasteEEPage>();
}
}
diff --git a/application/pages/OtherLogsPage.cpp b/application/pages/OtherLogsPage.cpp
index 74257a83..f1b59f1e 100644
--- a/application/pages/OtherLogsPage.cpp
+++ b/application/pages/OtherLogsPage.cpp
@@ -121,7 +121,7 @@ void OtherLogsPage::on_btnReload_clicked()
tr("The file (%1) is too big. You may want to open it in a viewer optimized "
"for large files.").arg(file.fileName()));
};
- if(file.size() >= 10000000ll)
+ if(file.size() > (1024ll * 1024ll * 12ll))
{
showTooBig();
return;
diff --git a/application/pages/global/PasteEEPage.cpp b/application/pages/global/PasteEEPage.cpp
new file mode 100644
index 00000000..e6827601
--- /dev/null
+++ b/application/pages/global/PasteEEPage.cpp
@@ -0,0 +1,88 @@
+/* Copyright 2013-2015 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "PasteEEPage.h"
+#include "ui_PasteEEPage.h"
+
+#include <QMessageBox>
+#include <QFileDialog>
+#include <QStandardPaths>
+
+#include <pathutils.h>
+
+#include "settings/SettingsObject.h"
+#include "tools/BaseProfiler.h"
+#include "MultiMC.h"
+
+PasteEEPage::PasteEEPage(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::PasteEEPage)
+{
+ ui->setupUi(this);
+ ui->tabWidget->tabBar()->hide();\
+ connect(ui->customAPIkeyEdit, &QLineEdit::textEdited, this, &PasteEEPage::textEdited);
+ loadSettings();
+}
+
+PasteEEPage::~PasteEEPage()
+{
+ delete ui;
+}
+
+void PasteEEPage::loadSettings()
+{
+ auto s = MMC->settings();
+ QString keyToUse = s->get("PasteEEAPIKey").toString();
+ if(keyToUse == "public")
+ {
+ ui->publicButton->setChecked(true);
+ }
+ else if(keyToUse == "multimc")
+ {
+ ui->multimcButton->setChecked(true);
+ }
+ else
+ {
+ ui->customButton->setChecked(true);
+ ui->customAPIkeyEdit->setText(keyToUse);
+ }
+}
+
+void PasteEEPage::applySettings()
+{
+ auto s = MMC->settings();
+
+ QString pasteKeyToUse;
+ if (ui->customButton->isChecked())
+ pasteKeyToUse = ui->customAPIkeyEdit->text();
+ else if (ui->publicButton->isChecked())
+ pasteKeyToUse = "public";
+ else
+ {
+ pasteKeyToUse = "multimc";
+ }
+ s->set("PasteEEAPIKey", pasteKeyToUse);
+}
+
+bool PasteEEPage::apply()
+{
+ applySettings();
+ return true;
+}
+
+void PasteEEPage::textEdited(const QString& text)
+{
+ ui->customButton->setChecked(true);
+}
diff --git a/application/pages/global/PasteEEPage.h b/application/pages/global/PasteEEPage.h
new file mode 100644
index 00000000..99384373
--- /dev/null
+++ b/application/pages/global/PasteEEPage.h
@@ -0,0 +1,62 @@
+/* Copyright 2013-2015 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <QWidget>
+
+#include "pages/BasePage.h"
+#include <MultiMC.h>
+
+namespace Ui {
+class PasteEEPage;
+}
+
+class PasteEEPage : public QWidget, public BasePage
+{
+ Q_OBJECT
+
+public:
+ explicit PasteEEPage(QWidget *parent = 0);
+ ~PasteEEPage();
+
+ QString displayName() const override
+ {
+ return tr("Log Upload");
+ }
+ QIcon icon() const override
+ {
+ return MMC->getThemedIcon("log");
+ }
+ QString id() const override
+ {
+ return "log-upload";
+ }
+ QString helpPage() const override
+ {
+ return "Log-Upload";
+ }
+ virtual bool apply() override;
+
+private:
+ void loadSettings();
+ void applySettings();
+
+private slots:
+ void textEdited(const QString &text);
+
+private:
+ Ui::PasteEEPage *ui;
+};
diff --git a/application/pages/global/PasteEEPage.ui b/application/pages/global/PasteEEPage.ui
new file mode 100644
index 00000000..84da2b5a
--- /dev/null
+++ b/application/pages/global/PasteEEPage.ui
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PasteEEPage</class>
+ <widget class="QWidget" name="PasteEEPage">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>491</width>
+ <height>474</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="tab">
+ <attribute name="title">
+ <string>Tab 1</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>paste.ee API key</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_10">
+ <item>
+ <widget class="QRadioButton" name="publicButton">
+ <property name="text">
+ <string>No key - &amp;2MB upload limit</string>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">pasteButtonGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="multimcButton">
+ <property name="text">
+ <string>MultiMC key - 12MB &amp;upload limit</string>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">pasteButtonGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="customButton">
+ <property name="text">
+ <string>&amp;Your own key - 12MB upload limit:</string>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">pasteButtonGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="customAPIkeyEdit">
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ <property name="placeholderText">
+ <string>Paste your API key here!</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://paste.ee&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;paste.ee&lt;/span&gt;&lt;/a&gt; is used by MultiMC for log uploads. If you have a &lt;a href=&quot;https://paste.ee&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;paste.ee&lt;/span&gt;&lt;/a&gt; account, you can add your API key here and have your uploaded logs paired with your account.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>216</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>tabWidget</tabstop>
+ <tabstop>publicButton</tabstop>
+ <tabstop>multimcButton</tabstop>
+ <tabstop>customButton</tabstop>
+ <tabstop>customAPIkeyEdit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+ <buttongroups>
+ <buttongroup name="pasteButtonGroup"/>
+ </buttongroups>
+</ui>
diff --git a/logic/net/PasteUpload.cpp b/logic/net/PasteUpload.cpp
index cfbc561d..4b671d6f 100644
--- a/logic/net/PasteUpload.cpp
+++ b/logic/net/PasteUpload.cpp
@@ -4,33 +4,44 @@
#include <QJsonObject>
#include <QJsonDocument>
-PasteUpload::PasteUpload(QWidget *window, QString text) : m_window(window)
+PasteUpload::PasteUpload(QWidget *window, QString text, QString key) : m_window(window)
{
- m_text = text.toUtf8();
- m_text.replace('\n', "\r\n");
+ m_key = key;
+ QByteArray temp;
+ temp = text.toUtf8();
+ temp.replace('\n', "\r\n");
+ m_textSize = temp.size();
+ m_text = "key=" + m_key.toLatin1() + "&description=MultiMC5+Log+File&language=plain&format=json&expire=2592000&paste=" + temp.toPercentEncoding();
+ buf = new QBuffer(&m_text);
+}
+
+PasteUpload::~PasteUpload()
+{
+ if(buf)
+ {
+ delete buf;
+ }
}
bool PasteUpload::validateText()
{
- return m_text.size() <= maxSize();
+ return m_textSize <= maxSize();
}
void PasteUpload::executeTask()
{
QNetworkRequest request(QUrl("http://paste.ee/api"));
request.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Uncached)");
- QByteArray content(
- "key=public&description=MultiMC5+Log+File&language=plain&format=json&expire=2592000&paste=" +
- m_text.toPercentEncoding());
+
request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
- request.setRawHeader("Content-Length", QByteArray::number(content.size()));
+ request.setRawHeader("Content-Length", QByteArray::number(m_text.size()));
auto worker = ENV.qnam();
- QNetworkReply *rep = worker->post(request, content);
+ QNetworkReply *rep = worker->post(request, buf);
m_reply = std::shared_ptr<QNetworkReply>(rep);
setStatus(tr("Uploading to paste.ee"));
- connect(rep, &QNetworkReply::downloadProgress, this, &Task::setProgress);
+ connect(rep, &QNetworkReply::uploadProgress, this, &Task::setProgress);
connect(rep, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(downloadError(QNetworkReply::NetworkError)));
connect(rep, SIGNAL(finished()), this, SLOT(downloadFinished()));
}
diff --git a/logic/net/PasteUpload.h b/logic/net/PasteUpload.h
index 11850c71..5bc3d276 100644
--- a/logic/net/PasteUpload.h
+++ b/logic/net/PasteUpload.h
@@ -2,6 +2,7 @@
#include "tasks/Task.h"
#include <QMessageBox>
#include <QNetworkReply>
+#include <QBuffer>
#include <memory>
#include "multimc_logic_export.h"
@@ -10,8 +11,8 @@ class MULTIMC_LOGIC_EXPORT PasteUpload : public Task
{
Q_OBJECT
public:
- PasteUpload(QWidget *window, QString text);
- virtual ~PasteUpload(){};
+ PasteUpload(QWidget *window, QString text, QString key = "public");
+ virtual ~PasteUpload();
QString pasteLink()
{
return m_pasteLink;
@@ -22,8 +23,11 @@ public:
}
uint32_t maxSize()
{
- // 2MB for paste.ee
- return 1024*1024*2;
+ // 2MB for paste.ee - public
+ if(m_key == "public")
+ return 1024*1024*2;
+ // 12MB for paste.ee - with actual key
+ return 1024*1024*12;
}
bool validateText();
protected:
@@ -36,6 +40,9 @@ private:
QWidget *m_window;
QString m_pasteID;
QString m_pasteLink;
+ QString m_key;
+ int m_textSize = 0;
+ QBuffer * buf = nullptr;
std::shared_ptr<QNetworkReply> m_reply;
public
slots: