Add test authentication task.
It doesn't actually do anything with the server's reply yet.
This commit is contained in:
		
							
								
								
									
										71
									
								
								logic/auth/AuthenticateTask.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								logic/auth/AuthenticateTask.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -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"; | ||||
| } | ||||
|  | ||||
							
								
								
									
										44
									
								
								logic/auth/AuthenticateTask.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								logic/auth/AuthenticateTask.h
									
									
									
									
									
										Normal file
									
								
							| @@ -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; | ||||
| }; | ||||
|  | ||||
| @@ -168,3 +168,8 @@ YggdrasilTask::Error *YggdrasilTask::getError() const | ||||
| 	return this->m_error; | ||||
| } | ||||
|  | ||||
| MojangAccount* YggdrasilTask::getMojangAccount() const | ||||
| { | ||||
| 	return this->m_account; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -36,7 +36,6 @@ public: | ||||
| 	explicit YggdrasilTask(MojangAccount* account, QObject* parent=0); | ||||
| 	~YggdrasilTask(); | ||||
|  | ||||
| protected: | ||||
| 	/** | ||||
| 	 * Class describing a Yggdrasil error response. | ||||
| 	 */ | ||||
| @@ -59,6 +58,18 @@ protected: | ||||
| 		QString m_cause; | ||||
| 	}; | ||||
|  | ||||
| 	/** | ||||
| 	 * 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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user