Commit 4ac208010963fc91925ac238c76c2542691c0250
1 parent
ebd01e4b
Exists in
master
Implementação da classe checkmodules. Quase completa, só realizar o teste na int…
…ra e corrigir os bugs
Showing
9 changed files
with
151 additions
and
35 deletions
Show diff stats
cacic-daemon/cacicD/cacictimer.cpp
... | ... | @@ -177,13 +177,7 @@ void CacicTimer::setApplicationDirPath(const QString &value) |
177 | 177 | } |
178 | 178 | |
179 | 179 | |
180 | -bool CacicTimer::Md5IsEqual(QVariant document01,QVariant document02){ | |
181 | - QString getconfigMD5 = QString(QCryptographicHash::hash( | |
182 | - (document01.toByteArray()),QCryptographicHash::Md5).toHex()); | |
183 | - QString getconfigMD52 = QString(QCryptographicHash::hash( | |
184 | - (document02.toByteArray()),QCryptographicHash::Md5).toHex()); | |
185 | - return getconfigMD5 == getconfigMD52; | |
186 | -} | |
180 | + | |
187 | 181 | |
188 | 182 | void CacicTimer::iniciarInstancias(){ |
189 | 183 | logManager = QLogger::QLoggerManager::getInstance(); | ... | ... |
cacic-daemon/cacicD/cacictimer.h
... | ... | @@ -28,7 +28,6 @@ public: |
28 | 28 | void iniciarTimer(); |
29 | 29 | bool getTest(); |
30 | 30 | bool getConfig(); |
31 | - bool Md5IsEqual(QVariant document01,QVariant document02); | |
32 | 31 | void setApplicationDirPath(const QString &value); |
33 | 32 | QString getApplicationDirPath(); |
34 | 33 | void setDirProgram(const QString &value); | ... | ... |
cacic-teste/testcacic.cpp
... | ... | @@ -333,12 +333,13 @@ void CTestCacic::testEnviaColeta() |
333 | 333 | void CTestCacic::testGetModulesValues() |
334 | 334 | { |
335 | 335 | oCheckModules = new CheckModules(QDir::currentPath()); |
336 | + oCheckModules->start(); | |
336 | 337 | QVERIFY(false); |
337 | 338 | } |
338 | 339 | |
339 | 340 | void CTestCacic::cleanupTestCase() |
340 | 341 | { |
341 | - // OCacic.deleteFile("gpl-2.0.txt"); | |
342 | + OCacic.deleteFile("gpl-2.0.txt"); | |
342 | 343 | OCacic.deleteFile("log01.txt"); |
343 | 344 | OCacic.deleteFile("./log02.txt"); |
344 | 345 | OCacic.deleteFile("../log03.txt"); |
... | ... | @@ -349,5 +350,5 @@ void CTestCacic::cleanupTestCase() |
349 | 350 | OCacic.deleteFolder("../logs"); |
350 | 351 | OCacic.deleteFile("configRequest.json"); |
351 | 352 | OCacic.deleteFile("teste.json"); |
352 | -// OCacic.deleteFile("getConfig.json"); | |
353 | + OCacic.deleteFile("getConfig.json"); | |
353 | 354 | } | ... | ... |
src/cacic_comm.cpp
... | ... | @@ -4,10 +4,10 @@ CacicComm::CacicComm () |
4 | 4 | { |
5 | 5 | } |
6 | 6 | |
7 | -CacicComm::CacicComm (QString urlGerente, QString operatingSystem, QString computerSystem, QString csCipher, | |
8 | - QString csDebug, QString csCompress, QString httpUserAgent, QString moduleFolderName, | |
9 | - QString moduleProgramName, QString networkConfiguration,QString phpAuthPw, QString phpAuthUser, | |
10 | - QString so, QString cacicVersion, QString gercolsVersion) | |
7 | +CacicComm::CacicComm (const QString &urlGerente, const QString &operatingSystem, const QString &computerSystem, const QString &csCipher, | |
8 | + const QString &csDebug, const QString &csCompress, const QString &httpUserAgent, const QString &moduleFolderName, | |
9 | + const QString &moduleProgramName, const QString &networkConfiguration,const QString &phpAuthPw, const QString &phpAuthUser, | |
10 | + const QString &so, const QString &cacicVersion, const QString &gercolsVersion) | |
11 | 11 | { |
12 | 12 | this->setUrlGerente(urlGerente); |
13 | 13 | params.addQueryItem("OperatingSystem", operatingSystem); |
... | ... | @@ -159,6 +159,11 @@ bool CacicComm::fileDownload(const QString &mode, const QString &path, const QSt |
159 | 159 | QUrl url(urlGerente); |
160 | 160 | url.setScheme(mode); |
161 | 161 | url.setPath(path); |
162 | + if (!this->ftpUser.isEmpty()) | |
163 | + url.setUserName(ftpUser); | |
164 | + if (!this->ftpPass.isEmpty()) | |
165 | + url.setPassword(ftpPass); | |
166 | + | |
162 | 167 | request.setUrl(url); |
163 | 168 | |
164 | 169 | reply = manager.get(request); |
... | ... | @@ -196,6 +201,11 @@ bool CacicComm::fileDownload(const QString &mode, const QString &urlServer, cons |
196 | 201 | QUrl url(urlServer); |
197 | 202 | url.setScheme(mode); |
198 | 203 | url.setPath(path); |
204 | + if (!this->ftpUser.isEmpty()) | |
205 | + url.setUserName(ftpUser); | |
206 | + if (!this->ftpPass.isEmpty()) | |
207 | + url.setPassword(ftpPass); | |
208 | + | |
199 | 209 | request.setUrl(url); |
200 | 210 | |
201 | 211 | reply = manager.get(request); |
... | ... | @@ -208,6 +218,38 @@ bool CacicComm::fileDownload(const QString &mode, const QString &urlServer, cons |
208 | 218 | return true; |
209 | 219 | } |
210 | 220 | |
221 | +void CacicComm::fileDownloadFinished(QNetworkReply* reply) | |
222 | +{ | |
223 | + if (reply->size() > 0){ | |
224 | + QTextStream out(fileHandler); | |
225 | + out << reply->readAll(); | |
226 | + fileHandler->close(); | |
227 | + reply->close(); | |
228 | + } else { | |
229 | + qDebug() << "Falha ao baixar arquivo."; | |
230 | + } | |
231 | +} | |
232 | + | |
233 | +QString CacicComm::getFtpPass() const | |
234 | +{ | |
235 | + return ftpPass; | |
236 | +} | |
237 | + | |
238 | +void CacicComm::setFtpPass(const QString &value) | |
239 | +{ | |
240 | + ftpPass = value; | |
241 | +} | |
242 | + | |
243 | +QString CacicComm::getFtpUser() const | |
244 | +{ | |
245 | + return ftpUser; | |
246 | +} | |
247 | + | |
248 | +void CacicComm::setFtpUser(const QString &value) | |
249 | +{ | |
250 | + ftpUser = value; | |
251 | +} | |
252 | + | |
211 | 253 | bool CacicComm::ftpDownload( const QString &path, const QString &pathDownload ){ |
212 | 254 | return fileDownload("ftp", path, pathDownload); |
213 | 255 | } |
... | ... | @@ -228,7 +270,7 @@ QString CacicComm::getUrlSsl (){ |
228 | 270 | return this->urlSsl; |
229 | 271 | } |
230 | 272 | |
231 | -void CacicComm::setUrlSsl(QString value){ | |
273 | +void CacicComm::setUrlSsl(const QString &value){ | |
232 | 274 | this->urlSsl = value; |
233 | 275 | } |
234 | 276 | |
... | ... | @@ -251,7 +293,7 @@ QString CacicComm::getPassword() |
251 | 293 | return this->password; |
252 | 294 | } |
253 | 295 | |
254 | -void CacicComm::setPassword(QString value) | |
296 | +void CacicComm::setPassword(const QString &value) | |
255 | 297 | { |
256 | 298 | this->password = value; |
257 | 299 | } |
... | ... | @@ -260,15 +302,9 @@ QString CacicComm::getUsuario() |
260 | 302 | return this->usuario; |
261 | 303 | } |
262 | 304 | |
263 | -void CacicComm::setUsuario(QString value) | |
305 | +void CacicComm::setUsuario(const QString &value) | |
264 | 306 | { |
265 | 307 | this->usuario = value; |
266 | 308 | } |
267 | 309 | |
268 | -void CacicComm::fileDownloadFinished(QNetworkReply* reply) | |
269 | -{ | |
270 | - QTextStream out(fileHandler); | |
271 | - out << reply->readAll(); | |
272 | - fileHandler->close(); | |
273 | - reply->close(); | |
274 | -} | |
310 | + | ... | ... |
src/cacic_comm.h
... | ... | @@ -20,10 +20,10 @@ class CacicComm : public QObject{ |
20 | 20 | public: |
21 | 21 | |
22 | 22 | CacicComm (); |
23 | - CacicComm (QString urlGerente, QString operatingSystem, QString computerSystem, QString csCipher, | |
24 | - QString csDebug, QString csCompress, QString httpUserAgent, QString moduleFolderName, | |
25 | - QString moduleProgramName, QString networkConfiguration,QString phpAuthPw, QString phpAuthUser, | |
26 | - QString so, QString cacicVersion, QString gercolsVersion); | |
23 | + CacicComm (const QString &urlGerente, const QString &operatingSystem, const QString &computerSystem, const QString &csCipher, | |
24 | + const QString &csDebug, const QString &csCompress, const QString &httpUserAgent, const QString &moduleFolderName, | |
25 | + const QString &moduleProgramName, const QString &networkConfiguration,const QString &phpAuthPw, const QString &phpAuthUser, | |
26 | + const QString &so, const QString &cacicVersion, const QString &gercolsVersion); | |
27 | 27 | QJsonObject comm(QString route, bool *ok, const QJsonObject &json = QJsonObject(), bool isSsl = false); |
28 | 28 | bool commStatus(); |
29 | 29 | QJsonObject login(bool *ok); |
... | ... | @@ -32,18 +32,20 @@ public: |
32 | 32 | bool httpDownload(const QString &path, const QString &pathDownload); |
33 | 33 | bool httpDownload(const QString &urlServer, const QString &path,const QString &pathDownload); |
34 | 34 | QString getUrlSsl (); |
35 | - void setUrlSsl(QString value); | |
35 | + void setUrlSsl(const QString &value); | |
36 | 36 | QString getUrlGerente (); |
37 | 37 | void setUrlGerente(QString value); |
38 | 38 | QString getPassword(); |
39 | - void setPassword(QString value); | |
39 | + void setPassword(const QString &value); | |
40 | 40 | QString getUsuario(); |
41 | - void setUsuario(QString value); | |
42 | - | |
43 | - | |
41 | + void setUsuario(const QString &value); | |
42 | + QString getFtpUser() const; | |
43 | + void setFtpUser(const QString &value); | |
44 | + QString getFtpPass() const; | |
45 | + void setFtpPass(const QString &value); | |
44 | 46 | |
45 | 47 | signals: |
46 | -// void finished(QNetworkReply* reply); | |
48 | + void finished(QNetworkReply* reply); | |
47 | 49 | |
48 | 50 | private slots: |
49 | 51 | |
... | ... | @@ -60,6 +62,8 @@ private: |
60 | 62 | QString usuario; |
61 | 63 | QString password; |
62 | 64 | QString session; |
65 | + QString ftpUser; | |
66 | + QString ftpPass; | |
63 | 67 | |
64 | 68 | QFile *fileHandler; |
65 | 69 | ... | ... |
src/ccacic.cpp
... | ... | @@ -199,6 +199,22 @@ QString CCacic::deCrypt(std::string str_in, std::string iv) { |
199 | 199 | return QString::fromStdString(str_out); |
200 | 200 | } |
201 | 201 | |
202 | +bool CCacic::Md5IsEqual(QVariant document01,QVariant document02){ | |
203 | + QString file1 = QString(QCryptographicHash::hash( | |
204 | + (document01.toByteArray()),QCryptographicHash::Md5).toHex()); | |
205 | + QString file2 = QString(QCryptographicHash::hash( | |
206 | + (document02.toByteArray()),QCryptographicHash::Md5).toHex()); | |
207 | + return file1 == file2; | |
208 | +} | |
209 | + | |
210 | +bool CCacic::Md5IsEqual(QVariant document01,QString document02){ | |
211 | + QString file1 = QString(QCryptographicHash::hash( | |
212 | + (document01.toByteArray()),QCryptographicHash::Md5).toHex()); | |
213 | + QString file2 = document02; | |
214 | + return file1 == file2; | |
215 | +} | |
216 | + | |
217 | + | |
202 | 218 | QString CCacic::startProcess(QString pathprogram, bool wait, bool *ok, QStringList arguments) |
203 | 219 | { |
204 | 220 | QProcess process; | ... | ... |
src/ccacic.h
... | ... | @@ -17,6 +17,7 @@ |
17 | 17 | #include "../src/crypto++/include/aes.h" |
18 | 18 | #include "../src/crypto++/include/base64.h" |
19 | 19 | #include "../src/crypto++/include/modes.h" |
20 | +#include <QCryptographicHash> | |
20 | 21 | |
21 | 22 | class CCacic |
22 | 23 | { |
... | ... | @@ -60,6 +61,8 @@ public: |
60 | 61 | QString getChaveCrypt() const; |
61 | 62 | void setChaveCrypt(const QString &value); |
62 | 63 | |
64 | + bool Md5IsEqual(QVariant document01, QVariant document02); | |
65 | + bool Md5IsEqual(QVariant document01, QString document02); | |
63 | 66 | private: |
64 | 67 | QString cacicMainFolder; |
65 | 68 | QString mainModuleName; | ... | ... |
src/checkmodules.cpp
... | ... | @@ -2,23 +2,83 @@ |
2 | 2 | |
3 | 3 | CheckModules::CheckModules(const QString &workingPath) |
4 | 4 | { |
5 | + oCacic.setCacicMainFolder(workingPath); | |
5 | 6 | QJsonObject configFile; |
6 | 7 | configFile = oCacic.getJsonFromFile(workingPath + "/getConfig.json"); |
7 | 8 | if (!configFile.isEmpty()) { |
9 | + //pega url do gerente. | |
10 | + this->applicationUrl = configFile["agentcomputer"].toObject()["applicationUrl"].toString(); | |
8 | 11 | QJsonArray modulos; |
12 | + //pega o jsonarray dos módulos | |
9 | 13 | modulos = configFile["agentcomputer"].toObject()["modulos"].toArray(); |
10 | 14 | foreach (QJsonValue modulo, modulos){ |
15 | + //grava o nome com o hash de cada modulo | |
11 | 16 | modules[modulo.toObject()["nome"].toString()] = modulo.toObject()["hash"].toString(); |
12 | 17 | } |
13 | 18 | } |
14 | 19 | //TODO: Completar constructor. Agora que tenho os nomes dos módulos e os hashs, fazer a verificação. |
15 | - qDebug() << modules; | |
20 | + | |
21 | + QDir tempPath(oCacic.getCacicMainFolder() + "/temp"); | |
22 | + if (!tempPath.exists()){ | |
23 | + qDebug() << "criando diretório temporário"; | |
24 | + tempPath.mkdir(oCacic.getCacicMainFolder() + "/temp"); | |
25 | + } | |
16 | 26 | } |
17 | 27 | |
18 | 28 | bool CheckModules::start(){ |
29 | + if (!modules.isEmpty()){ | |
30 | + QVariantMap::const_iterator i = modules.constBegin(); | |
31 | + while (i != modules.constEnd()){ | |
32 | + qDebug() << "Módulo: " << i.key() << " | Hash: " << i.value().toString(); | |
33 | + this->verificaModulo(i.key(), i.value().toString()); | |
34 | + i++; | |
35 | + } | |
36 | + } | |
19 | 37 | return true; |
20 | 38 | } |
21 | 39 | |
40 | +bool CheckModules::verificaModulo(const QString &moduloName, const QString &moduloHash) | |
41 | +{ | |
42 | + QFile *modulo; | |
43 | + bool downloadOk = false; | |
44 | + //pega o arquivo do módulo selecionado | |
45 | + modulo = new QFile(oCacic.getCacicMainFolder() + "/" + moduloName); | |
46 | + //verifica se o módulo existe, se o tamaho é maior que 1 byte e se o hash é igual ao informado pelo json | |
47 | + if (!(modulo->exists() && modulo->size()>1 && oCacic.Md5IsEqual(QVariant::fromValue(modulo), moduloHash))){ | |
48 | + QFile *novoModulo; | |
49 | + QJsonObject metodoDownload; | |
50 | + //verifica o tipo de download e tenta baixar o módulo para a pasta temporária. | |
51 | + metodoDownload = oCacic.getJsonFromFile("getConfig.json")["agentcomputer"].toObject()["metodoDownload"].toObject(); | |
52 | + oCacicComm.setFtpUser(metodoDownload["usuario"].toString()); | |
53 | + oCacicComm.setFtpPass(metodoDownload["senha"].toString()); | |
54 | + if(metodoDownload["tipo"].toString() == "ftp"){ | |
55 | + qDebug() << moduloName << "ftp download"; | |
56 | + downloadOk = oCacicComm.ftpDownload(this->applicationUrl, | |
57 | + metodoDownload["path"].toString() + "/" + moduloName, | |
58 | + oCacic.getCacicMainFolder() + "/temp/"); | |
59 | + } else if (metodoDownload["tipo"].toString() == "http"){ | |
60 | + qDebug() << moduloName << "http download"; | |
61 | + downloadOk = oCacicComm.httpDownload(this->applicationUrl, | |
62 | + metodoDownload["path"].toString() + "/" + moduloName, | |
63 | + oCacic.getCacicMainFolder() + "/temp/"); | |
64 | + } else { | |
65 | + qDebug() << moduloName << "metodo de download incorreto"; | |
66 | + return false; | |
67 | + } | |
68 | + //faz uma verificação do novo módulo. | |
69 | + novoModulo = new QFile(oCacic.getCacicMainFolder() + "/temp/" + moduloName); | |
70 | + if (!(novoModulo->exists() && novoModulo->size()>1 && oCacic.Md5IsEqual(QVariant::fromValue(modulo), moduloHash))){ | |
71 | + qDebug() << moduloName << "falha no download.."; | |
72 | + novoModulo->remove(); | |
73 | + return false; | |
74 | + } else { | |
75 | + qDebug() << moduloName << "Sucesso!"; | |
76 | + return true; | |
77 | + } | |
78 | + | |
79 | + } | |
80 | +} | |
81 | + | |
22 | 82 | //QStringList CheckModules::verificaModulos(){ |
23 | 83 | // // Compara o novo arquivo de configuração com um antigo e se forem diferentes |
24 | 84 | // // mantem o mais recente; caso iguais simplesmente apaga o novo. | ... | ... |
src/checkmodules.h
... | ... | @@ -13,7 +13,10 @@ public: |
13 | 13 | bool start(); |
14 | 14 | private: |
15 | 15 | CCacic oCacic; |
16 | + CacicComm oCacicComm; | |
17 | + QString applicationUrl; | |
16 | 18 | QVariantMap modules; //modules["name"] = hash; |
19 | + bool verificaModulo(const QString &moduloName, const QString &moduloHash); | |
17 | 20 | // void lerArquivoConfig(const QJsonObject& jsonConfig); |
18 | 21 | }; |
19 | 22 | ... | ... |