-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdiceapi.cpp
More file actions
150 lines (130 loc) · 4.18 KB
/
diceapi.cpp
File metadata and controls
150 lines (130 loc) · 4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include "diceapi.h"
DiceAuthorizer::DiceAuthorizer(QObject* parent):
QObject(parent),
token(QString(""))
{
connect(&mgr, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this, SLOT(setCredentials(QNetworkReply*,QAuthenticator*)));
}
void DiceAuthorizer::authorize(const QUrl &authUrl)
{
//creating request and setting
//content type header
QNetworkRequest request(authUrl);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
//sending request and getting reply
QNetworkReply* reply = mgr.get(request);
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
processReply(reply);
}
//method invokes if server authorization is needed
//connected to
//QNetworkAccessManager.authenticationNeeded(QNetworkReply* reply, QAuthenticator* authenticator) signal
void DiceAuthorizer::setCredentials(QNetworkReply* reply, QAuthenticator* authenticator)
{
Q_UNUSED(reply);
authenticator->setUser(userName);
authenticator->setPassword(password);
}
void DiceAuthorizer::processReply(QNetworkReply* reply)
{
//check if reply is valid
if(reply->error() == QNetworkReply::NoError)
{
//parsing JSON reply to get access_token
QJsonDocument parsedReply = QJsonDocument::fromJson(QString(reply->readAll()).toUtf8());
QJsonObject jsonObj = parsedReply.object();
token = jsonObj["access_token"].toString();
}
else
{
throw;
}
}
const QString DiceAuthorizer::getToken() const
{
return token;
}
DiceAPI::DiceAPI(QObject *parent):
QObject(parent),
token(QString()),
JSONReply(QJsonObject())
{
connect(&mgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyRecieved(QNetworkReply*)));
}
DiceAPI::DiceAPI(QString pToken, QObject *parent):
QObject(parent),
token(pToken),
JSONReply(QJsonObject())
{
connect(&mgr, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this, SLOT(setCredentials(QNetworkReply*,QAuthenticator*)));
}
void DiceAPI::setCredentials(QNetworkReply* reply, QAuthenticator* auth)
{
auth->setPassword(token);
auth->setUser(APIUserName);
}
void DiceAPI::onReplyFinished()
{
//check if reply is valid
QNetworkReply *reply = dynamic_cast<QNetworkReply*>(sender());
if(reply && (reply->error() == QNetworkReply::NoError) )
{
//parsing JSON reply to get access_token
QJsonDocument parsedReply = QJsonDocument::fromJson(QString(reply->readAll()).toUtf8());
QJsonObject jsonObj = parsedReply.object();
emit jobInfoRecevied(jsonObj);
}
else
{
throw;
}
}
void DiceAPI::replyRecieved(QNetworkReply* reply)
{
if(reply->error() == QNetworkReply::NoError)
{
QJsonDocument parsedReply = QJsonDocument::fromJson(QString(reply->readAll()).toUtf8());
JSONReply = parsedReply.object();
emit jobInfoRecevied(JSONReply);
}
else
{
throw;
}
}
QJsonObject DiceAPI::getJobsList(const QString& query)
{
QUrlQuery qry(apiUrl);
qry.addQueryItem("fields", "id, company, position");
qry.addQueryItem("q",query);
QUrl url(apiUrl);
url.setQuery(qry);
QNetworkRequest request(url);
request.setRawHeader(QByteArray("Authorization"), QByteArray((APIUserName + " " + token).toStdString().c_str()));
QNetworkReply* reply = mgr.get(request);
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
//check if reply is valid
if(reply->error() == QNetworkReply::NoError)
{
//parsing JSON reply to get access_token
QJsonDocument parsedReply = QJsonDocument::fromJson(QString(reply->readAll()).toUtf8());
QJsonObject jsonObj = parsedReply.object();
return jsonObj;
}
else
{
throw;
}
}
void DiceAPI::getJobInfo(const QString& jobId)
{
QUrl url(apiUrl+"/"+jobId);
QNetworkRequest request(url);
request.setRawHeader(QByteArray("Authorization"), QByteArray((APIUserName + " " + token).toStdString().c_str()));
QNetworkReply *reply = mgr.get(request);
connect(reply, SIGNAL(finished()), this, SLOT(onReplyFinished()), Qt::UniqueConnection);
}