Can perform user sign in.

This commit is contained in:
Pierre HUBERT
2018-11-28 21:33:27 +01:00
parent 9f568d5ef6
commit 99724f845c
20 changed files with 787 additions and 40 deletions

View File

@ -0,0 +1,26 @@
#include "accountloginrequest.h"
AccountLoginRequest::AccountLoginRequest()
{
}
QString AccountLoginRequest::emailAddress() const
{
return mEmailAddress;
}
void AccountLoginRequest::setEmailAddress(const QString &emailAddress)
{
mEmailAddress = emailAddress;
}
QString AccountLoginRequest::password() const
{
return mPassword;
}
void AccountLoginRequest::setPassword(const QString &password)
{
mPassword = password;
}

View File

@ -0,0 +1,43 @@
/**
* Account login request
*
* @author Pierre HUBERT
*/
#ifndef ACCOUNTLOGINREQUEST_H
#define ACCOUNTLOGINREQUEST_H
#include <QObject>
/**
* Possible login results
*/
enum LoginResult {
LOGIN_SUCCESS,
INVALID_CREDENTIALS,
TOO_MANY_REQUEST,
NETWORK_ERROR,
OTHER_ERROR
};
/**
* Login request
*/
class AccountLoginRequest
{
public:
AccountLoginRequest();
QString emailAddress() const;
void setEmailAddress(const QString &emailAddress);
QString password() const;
void setPassword(const QString &password);
private:
QString mEmailAddress;
QString mPassword;
};
#endif // ACCOUNTLOGINREQUEST_H

54
data/apirequest.cpp Normal file
View File

@ -0,0 +1,54 @@
#include <QNetworkReply>
#include "apirequest.h"
APIRequest::APIRequest(QObject *parent) : QObject(parent)
{
}
APIRequest::~APIRequest()
{
if(mNetworkReply != nullptr)
mNetworkReply->deleteLater();
}
QString APIRequest::URI() const
{
return mURI;
}
void APIRequest::setURI(const QString &uRI)
{
mURI = uRI;
}
void APIRequest::addString(QString name, QString value)
{
mArguments.append(APIRequestParameter(name, value));
}
void APIRequest::addInt(QString name, int value)
{
mArguments.append(APIRequestParameter(name, QString::number(value)));
}
void APIRequest::addBool(QString name, bool value)
{
mArguments.append(APIRequestParameter(name, value ? "true" : "false"));
}
QList<APIRequestParameter> APIRequest::arguments() const
{
return mArguments;
}
QNetworkReply *APIRequest::networkReply() const
{
return mNetworkReply;
}
void APIRequest::setNetworkReply(QNetworkReply *networkReply)
{
mNetworkReply = networkReply;
}

88
data/apirequest.h Normal file
View File

@ -0,0 +1,88 @@
/**
* This object contains information about a single
* object.
*
* @author Pierre HUBERT
*/
#ifndef APIREQUEST_H
#define APIREQUEST_H
#include <QObject>
#include <QJsonDocument>
#include "apirequestparameter.h"
class QNetworkReply;
class APIRequest : public QObject
{
Q_OBJECT
public:
explicit APIRequest(QObject *parent = nullptr);
~APIRequest();
//Get and set URI target
QString URI() const;
void setURI(const QString &URI);
/**
* Add a string parameter to the request
*
* @param name The name of the field to add
* @param value The value of the argument to add
*/
void addString(QString name, QString value);
/**
* Add an integer parameter to the request
*
* @param name The name of the field to add
* @param value The value of the argument to add
*/
void addInt(QString name, int value);
/**
* Add a boolean parameter to the request
*
* @param name The name of the field to add
* @param value The value of the argument to add
*/
void addBool(QString name, bool value);
/**
* Get the entire list of arguments of the request
*
* @return The list of arguments
*/
QList<APIRequestParameter> arguments() const;
//Get and set network reply associated with the request
QNetworkReply *networkReply() const;
void setNetworkReply(QNetworkReply *networkReply);
signals:
/**
* Signal emitted when an error occurred
*
* @param code The code of the error
*/
void error(int code);
/**
* Signal emitted once we have got the response for our request
*
* @param document JSON Response
*/
void success(const QJsonDocument &document);
public slots:
private:
QString mURI;
QList<APIRequestParameter> mArguments;
QNetworkReply *mNetworkReply = nullptr;
};
#endif // APIREQUEST_H

View File

@ -0,0 +1,32 @@
#include "apirequestparameter.h"
APIRequestParameter::APIRequestParameter()
{
}
APIRequestParameter::APIRequestParameter(const QString &name, const QString &value) :
mName(name), mValue(value)
{
}
QString APIRequestParameter::name() const
{
return mName;
}
void APIRequestParameter::setName(const QString &name)
{
mName = name;
}
QString APIRequestParameter::value() const
{
return mValue;
}
void APIRequestParameter::setValue(const QString &value)
{
mValue = value;
}

View File

@ -0,0 +1,29 @@
/**
* Single API request parameter
*
* @author Pierre HUBERT
*/
#ifndef APIREQUESTPARAMETER_H
#define APIREQUESTPARAMETER_H
#include <QString>
class APIRequestParameter
{
public:
APIRequestParameter();
APIRequestParameter(const QString &name, const QString &value);
QString name() const;
void setName(const QString &name);
QString value() const;
void setValue(const QString &value);
private:
QString mName;
QString mValue;
};
#endif // APIREQUESTPARAMETER_H

29
data/apirequestslist.cpp Normal file
View File

@ -0,0 +1,29 @@
#include "apirequest.h"
#include "apirequestslist.h"
APIRequestsList::APIRequestsList() : QList()
{
}
APIRequest *APIRequestsList::findForReply(QNetworkReply *reply, bool delete_from_list)
{
bool found = false;
int i;
for(i = 0; i < size(); i++){
if(at(i)->networkReply() == reply){
found = true;
break;
}
}
APIRequest *request = nullptr;
if(found)
request = at(i);
if(found && delete_from_list)
removeAt(i);
return request;
}

25
data/apirequestslist.h Normal file
View File

@ -0,0 +1,25 @@
#ifndef APIREQUESTSLIST_H
#define APIREQUESTSLIST_H
#include <QList>
class APIRequest;
class QNetworkReply;
class APIRequestsList : public QList<APIRequest *>
{
public:
APIRequestsList();
/**
* Search and return the API Request that contains a specific NetworkReply
*
* @param reply The reply to search
* @param delete_from_list Specify whether the entry should be removed
* from the list or not
* @return The request / null if none found
*/
APIRequest *findForReply(QNetworkReply *reply, bool delete_from_list);
};
#endif // APIREQUESTSLIST_H