Skip to content

Commit

Permalink
feat:测试程序添加aes加密测试;cookie转为QVariantMap存储而不是QString类型
Browse files Browse the repository at this point in the history
  • Loading branch information
overwriter committed Jan 13, 2024
1 parent e5b0aae commit c224733
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 28 deletions.
5 changes: 1 addition & 4 deletions QCloudMusicApi/request.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
#include <iostream>
#include <QObject>
#include <QEventLoop>
#include <QEventLoop>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
Expand All @@ -10,7 +8,6 @@
#include <QTimer>
#include <QVariantMap>
#include <QByteArray>
#include <QObject>
#include <QRandomGenerator>
#include <QNetworkCookie>
#include <QNetworkProxyFactory>
Expand Down
3 changes: 1 addition & 2 deletions QCloudMusicApi/request.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkAccessManager>

namespace Request {

Expand Down
11 changes: 10 additions & 1 deletion Test/main.cpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
#include "mainwindow.h"

#include "../QCloudMusicApi/util/crypto.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
[]() {//测试aes加解密
QString body = "This is a text";
auto bodyEncrypt = Crypto::aesEncrypt(body.toUtf8(), EVP_aes_128_ecb, Crypto::eapiKey, "");
auto bodyDecrypt = Crypto::aesDecrypt(bodyEncrypt, EVP_aes_128_ecb, Crypto::eapiKey, "");
qDebug() << body;
qDebug() << bodyEncrypt;
qDebug() << bodyDecrypt;
qDebug() << (body == bodyDecrypt);
}();
MainWindow w;
w.show();
return a.exec();
Expand Down
47 changes: 30 additions & 17 deletions Test/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,33 +24,49 @@ MainWindow::~MainWindow()
delete ui;
}

void MainWindow::updateCookie(QVariantMap ret) {
void MainWindow::updateCookie(const QVariantMap ret) {
auto newMap = Index::stringToMap(ret["cookie"].toString());
auto map = Index::stringToMap(cookie);
cookie = Index::mergeMap(cookie, newMap);;
if (ret["body"].toMap()["token"].isValid()) {
map["MUSIC_A"] = ret["body"].toMap()["token"];
cookie["MUSIC_A"] = ret["body"].toMap()["token"];
}
Index::mergeMap(map, newMap);
cookie = Index::mapToString(map);
}

QVariantMap MainWindow::invoke(QString funName, QVariantMap arg) {
arg["cookie"] = arg.value("cookie", cookie);
cookie = arg["cookie"].toString() + " SameSite=None; Secure";
QVariantMap MainWindow::invoke(const QString funName, const QVariantMap arg) {
QVariantMap ret;
QMetaObject::invokeMethod(&api, funName.toUtf8()
, Qt::DirectConnection
, Q_RETURN_ARG(QVariantMap, ret)
, Q_ARG(QVariantMap, arg));
this->updateCookie(ret);
return ret;
}

void MainWindow::on_pushButton_clicked()
{
ui->textEdit_2->setText(QJsonDocument::fromJson(ui->textEdit_2->toPlainText().toUtf8()).toJson(QJsonDocument::Indented));
auto JsonFormat = ui->checkBox->isChecked() ? QJsonDocument::Indented : QJsonDocument::Compact;
ui->textEdit_2->setText(QJsonDocument::fromJson(ui->textEdit_2->toPlainText().toUtf8()).toJson(JsonFormat));

QVariantMap arg = QJsonDocument::fromJson(ui->textEdit_2->toPlainText().toUtf8()).toVariant().toMap();

//Api只能处理map类型的cookie
if(arg.contains("cookie")) {
//如果传入新的cookie,替换原有的cookie
if(arg["cookie"].userType() == QMetaType::QVariantMap) {
cookie = arg["cookie"].toMap()/* + " SameSite=None; Secure"*/;
}
else if(arg["cookie"].userType() == QMetaType::QString) {
cookie = Index::stringToMap(arg["cookie"].toString());
}
}
else {
//使用存储的cookie
arg["cookie"] = arg.value("cookie", cookie);
}

QVariantMap ret = this->invoke(ui->comboBox->currentText(), arg);

this->updateCookie(ret);

if(ui->checkBox->isChecked()) {
ui->textEdit->setText(QJsonDocument::fromVariant(ret).toJson(QJsonDocument::Indented));
}
Expand All @@ -65,20 +81,17 @@ void MainWindow::on_comboBox_currentTextChanged(const QString &arg1)
QFile file(":/config.json");
file.open(QIODevice::ReadOnly);
auto config = QJsonDocument::fromJson(file.readAll());
auto JsonFormat = ui->checkBox->isChecked() ? QJsonDocument::Indented : QJsonDocument::Compact;
ui->textEdit_2->setText(
QJsonDocument(config[arg1].toObject())
.toJson(QJsonDocument::Indented)
.toJson(JsonFormat)
);
}


void MainWindow::on_checkBox_stateChanged(int arg1)
{
if(arg1) {
ui->textEdit->setText(QJsonDocument::fromJson(ui->textEdit->toPlainText().toUtf8()).toJson(QJsonDocument::Indented));
}
else {
ui->textEdit->setText(QJsonDocument::fromJson(ui->textEdit->toPlainText().toUtf8()).toJson(QJsonDocument::Compact));
}
auto JsonFormat = arg1 ? QJsonDocument::Indented : QJsonDocument::Compact;
ui->textEdit->setText(QJsonDocument::fromJson(ui->textEdit->toPlainText().toUtf8()).toJson(JsonFormat));
}

21 changes: 17 additions & 4 deletions Test/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,24 @@ private slots:
void on_checkBox_stateChanged(int arg1);

private:

/**
* @brief 反射调用API中的方法
* @param funName 函数名称
* @param arg 参数
* @return QVariantMap 返回的数据
*/
QVariantMap invoke(const QString funName, const QVariantMap arg);

/**
* @brief 更新储存的cookie
* @param ret Api返回的数据
* @return void
*/
void updateCookie(const QVariantMap ret);

Ui::MainWindow *ui;
NeteaseCloudMusicApi api;

QVariantMap invoke(QString funName, QVariantMap arg);
void updateCookie(QVariantMap ret);
QString cookie = "";
QVariantMap cookie;
};
#endif // MAINWINDOW_H

0 comments on commit c224733

Please sign in to comment.