summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt2
-rw-r--r--logic/auth/AuthenticateTask.cpp71
-rw-r--r--logic/auth/AuthenticateTask.h44
-rw-r--r--logic/auth/YggdrasilTask.cpp5
-rw-r--r--logic/auth/YggdrasilTask.h19
5 files changed, 134 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 69c89876..8ff3aafe 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -272,6 +272,8 @@ logic/auth/MojangAccount.h
logic/auth/MojangAccount.cpp
logic/auth/YggdrasilTask.h
logic/auth/YggdrasilTask.cpp
+logic/auth/AuthenticateTask.h
+logic/auth/AuthenticateTask.cpp
# legacy instances
diff --git a/logic/auth/AuthenticateTask.cpp b/logic/auth/AuthenticateTask.cpp
new file mode 100644
index 00000000..edfdafdb
--- /dev/null
+++ b/logic/auth/AuthenticateTask.cpp
@@ -0,0 +1,71 @@
+
+/* Copyright 2013 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 <logic/auth/AuthenticateTask.h>
+
+#include <logic/auth/MojangAccount.h>
+#include <QJsonDocument>
+#include <QVariant>
+#include <QDebug>
+
+AuthenticateTask::AuthenticateTask(MojangAccount* account, const QString& password, QObject* parent) :
+ YggdrasilTask(account, parent), m_password(password)
+{
+}
+
+QJsonObject AuthenticateTask::getRequestContent() const
+{
+ /*
+ * {
+ * "agent": { // optional
+ * "name": "Minecraft", // So far this is the only encountered value
+ * "version": 1 // This number might be increased
+ * // by the vanilla client in the future
+ * },
+ * "username": "mojang account name", // Can be an email address or player name for
+ // unmigrated accounts
+ * "password": "mojang account password",
+ * "clientToken": "client identifier" // optional
+ * }
+ */
+ QJsonObject req;
+
+ {
+ QJsonObject agent;
+ // C++ makes string literals void* for some stupid reason, so we have to tell it QString... Thanks Obama.
+ agent.insert("name", QString("Minecraft"));
+ agent.insert("version", 1);
+ req.insert("agent", agent);
+ }
+
+ req.insert("username", getMojangAccount()->username());
+ req.insert("password", m_password);
+ req.insert("clientToken", getMojangAccount()->clientToken());
+
+ return req;
+}
+
+bool AuthenticateTask::processResponse(QJsonObject responseData)
+{
+ qDebug() << QJsonDocument(responseData).toVariant().toString();
+ return false;
+}
+
+QString AuthenticateTask::getEndpoint() const
+{
+ return "authenticate";
+}
+
diff --git a/logic/auth/AuthenticateTask.h b/logic/auth/AuthenticateTask.h
new file mode 100644
index 00000000..8c142535
--- /dev/null
+++ b/logic/auth/AuthenticateTask.h
@@ -0,0 +1,44 @@
+/* Copyright 2013 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 <logic/auth/YggdrasilTask.h>
+
+#include <QObject>
+#include <QString>
+#include <QJsonObject>
+
+/**
+ * The authenticate task takes a MojangAccount with no access token and password and attempts to authenticate with Mojang's servers.
+ * If successful, it will set the MojangAccount's access token.
+ */
+class AuthenticateTask : public YggdrasilTask
+{
+Q_OBJECT
+public:
+ AuthenticateTask(MojangAccount* account, const QString& password, QObject* parent=0);
+
+protected:
+ virtual QJsonObject getRequestContent() const;
+
+ virtual QString getEndpoint() const;
+
+ virtual bool processResponse(QJsonObject responseData);
+
+private:
+ QString m_password;
+};
+
diff --git a/logic/auth/YggdrasilTask.cpp b/logic/auth/YggdrasilTask.cpp
index 0029581a..efc6ec96 100644
--- a/logic/auth/YggdrasilTask.cpp
+++ b/logic/auth/YggdrasilTask.cpp
@@ -168,3 +168,8 @@ YggdrasilTask::Error *YggdrasilTask::getError() const
return this->m_error;
}
+MojangAccount* YggdrasilTask::getMojangAccount() const
+{
+ return this->m_account;
+}
+
diff --git a/logic/auth/YggdrasilTask.h b/logic/auth/YggdrasilTask.h
index 05018213..57bbede9 100644
--- a/logic/auth/YggdrasilTask.h
+++ b/logic/auth/YggdrasilTask.h
@@ -36,7 +36,6 @@ public:
explicit YggdrasilTask(MojangAccount* account, QObject* parent=0);
~YggdrasilTask();
-protected:
/**
* Class describing a Yggdrasil error response.
*/
@@ -60,6 +59,18 @@ protected:
};
/**
+ * Gets the Mojang account that this task is operating on.
+ */
+ virtual MojangAccount* getMojangAccount() const;
+
+ /**
+ * Returns a pointer to a YggdrasilTask::Error object if an error has occurred.
+ * If no error has occurred, returns a null pointer.
+ */
+ virtual Error* getError() const;
+
+protected:
+ /**
* Enum for describing the state of the current task.
* Used by the getStateMessage function to determine what the status message should be.
*/
@@ -106,12 +117,6 @@ protected:
*/
virtual QString getStateMessage(const State state);
- /**
- * Returns a pointer to a YggdrasilTask::Error object if an error has occurred.
- * If no error has occurred, returns a null pointer.
- */
- virtual Error* getError() const;
-
MojangAccount* m_account;
QNetworkReply* m_netReply;