add namespace
This commit is contained in:
1
.vscode/c_cpp_properties.json
vendored
1
.vscode/c_cpp_properties.json
vendored
@@ -4,6 +4,7 @@
|
|||||||
"name": "MinGW64",
|
"name": "MinGW64",
|
||||||
"includePath": [
|
"includePath": [
|
||||||
"${workspaceFolder}/include",
|
"${workspaceFolder}/include",
|
||||||
|
"${workspaceFolder}/qrcodegen",
|
||||||
"${workspaceFolder}",
|
"${workspaceFolder}",
|
||||||
"C:\\MinGW64\\include",
|
"C:\\MinGW64\\include",
|
||||||
"C:\\MinGW64\\x86_64-w64-mingw32\\include"
|
"C:\\MinGW64\\x86_64-w64-mingw32\\include"
|
||||||
|
|||||||
@@ -1,12 +1,39 @@
|
|||||||
cmake_minimum_required(VERSION 3.15)
|
cmake_minimum_required(VERSION 3.15)
|
||||||
|
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
set(CMAKE_BUILD_TYPE Release)
|
||||||
|
option(USE_SYSTEM_CURL "use system installed libcurl" ON)
|
||||||
|
|
||||||
find_package(mbedtls REQUIRED)
|
find_package(mbedtls REQUIRED)
|
||||||
find_package(CURL REQUIRED)
|
|
||||||
|
if (USE_SYSTEM_CURL)
|
||||||
|
find_package(CURL REQUIRED)
|
||||||
|
else ()
|
||||||
|
include(FetchContent)
|
||||||
|
FetchContent_Declare(curl
|
||||||
|
URL https://curl.se/download/curl-8.16.0.tar.xz
|
||||||
|
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
|
||||||
|
)
|
||||||
|
set(ZLIB_USE_STATIC_LIBS ON)
|
||||||
|
set(CURL_USE_MBEDTLS ON)
|
||||||
|
set(HTTP_ONLY ON)
|
||||||
|
set(BUILD_CURL_EXE OFF)
|
||||||
|
set(BUILD_TESTING OFF)
|
||||||
|
set(BUILD_EXAMPLES OFF)
|
||||||
|
set(BUILD_LIBCURL_DOCS OFF)
|
||||||
|
set(BUILD_MISC_DOCS OFF)
|
||||||
|
set(ENABLE_CURL_MANUAL OFF)
|
||||||
|
set(USE_NGHTTP2 OFF)
|
||||||
|
set(USE_LIBIDN2 OFF)
|
||||||
|
set(CURL_BROTLI OFF)
|
||||||
|
set(CURL_ZSTD OFF)
|
||||||
|
set(CURL_USE_LIBSSH2 OFF)
|
||||||
|
set(CURL_USE_LIBPSL OFF)
|
||||||
|
set(CURL_DISABLE_PROGRESS_METER ON)
|
||||||
|
FetchContent_MakeAvailable(curl)
|
||||||
|
endif ()
|
||||||
|
|
||||||
project(clist)
|
project(clist)
|
||||||
file(GLOB_RECURSE MAIN_SRC "${CMAKE_SOURCE_DIR}/src/*.cpp")
|
file(GLOB_RECURSE MAIN_SRC "${CMAKE_SOURCE_DIR}/src/*.cpp" "qrcodegen/qrcodegen.c")
|
||||||
add_executable(${PROJECT_NAME} ${MAIN_SRC})
|
add_executable(${PROJECT_NAME} ${MAIN_SRC})
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE include qrcodegen)
|
target_include_directories(${PROJECT_NAME} PRIVATE include qrcodegen)
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE mbedtls CURL::libcurl)
|
target_link_libraries(${PROJECT_NAME} PRIVATE fmt mbedcrypto CURL::libcurl bcrypt)
|
||||||
@@ -4,6 +4,8 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
namespace drive {
|
||||||
|
|
||||||
enum drive_type {
|
enum drive_type {
|
||||||
dt_alipan,
|
dt_alipan,
|
||||||
dt_filebrowser,
|
dt_filebrowser,
|
||||||
@@ -35,3 +37,5 @@ drive::ref new_drive(drive_type type);
|
|||||||
|
|
||||||
std::string hex_encode(const unsigned char* data, size_t len);
|
std::string hex_encode(const unsigned char* data, size_t len);
|
||||||
std::string device_name();
|
std::string device_name();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -10,6 +10,8 @@
|
|||||||
#include <mbedtls/base64.h>
|
#include <mbedtls/base64.h>
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
namespace drive {
|
||||||
|
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
@@ -116,7 +118,7 @@ bool alipan::qrLogin(fnQrcode printQr) {
|
|||||||
this->refresh_token = login.at("refreshToken");
|
this->refresh_token = login.at("refreshToken");
|
||||||
// 计算设备ID
|
// 计算设备ID
|
||||||
unsigned char digest[32];
|
unsigned char digest[32];
|
||||||
mbedtls_sha256_ret((uint8_t*)this->user_id.c_str(), this->user_id.size(), digest, 0);
|
mbedtls_sha256((uint8_t*)this->user_id.c_str(), this->user_id.size(), digest, 0);
|
||||||
this->device_id = hex_encode(digest, sizeof(digest));
|
this->device_id = hex_encode(digest, sizeof(digest));
|
||||||
fmt::print("login user_id({}) drive_id({})\n", this->user_id, this->drive_id);
|
fmt::print("login user_id({}) drive_id({})\n", this->user_id, this->drive_id);
|
||||||
|
|
||||||
@@ -307,18 +309,19 @@ bool alipan::createSession() {
|
|||||||
size_t pub_len = 0;
|
size_t pub_len = 0;
|
||||||
std::vector<uint8_t> pub(MBEDTLS_ECP_MAX_BYTES, 0);
|
std::vector<uint8_t> pub(MBEDTLS_ECP_MAX_BYTES, 0);
|
||||||
mbedtls_ecp_point_write_binary(
|
mbedtls_ecp_point_write_binary(
|
||||||
&ctx_sign.grp, &ctx_sign.Q, MBEDTLS_ECP_PF_UNCOMPRESSED, &pub_len, pub.data(), pub.size());
|
&ctx_sign.private_grp, &ctx_sign.private_Q, MBEDTLS_ECP_PF_UNCOMPRESSED, &pub_len, pub.data(), pub.size());
|
||||||
pub_key = hex_encode(pub.data(), pub_len);
|
pub_key = hex_encode(pub.data(), pub_len);
|
||||||
|
|
||||||
// sign message
|
// sign message
|
||||||
unsigned char msg_hash[32];
|
unsigned char msg_hash[32];
|
||||||
mbedtls_sha256_ret((uint8_t*)msg.c_str(), msg.size(), msg_hash, 0);
|
mbedtls_sha256((uint8_t*)msg.c_str(), msg.size(), msg_hash, 0);
|
||||||
|
|
||||||
mbedtls_mpi r, s;
|
mbedtls_mpi r, s;
|
||||||
std::vector<uint8_t> sigdata(MBEDTLS_ECDSA_MAX_LEN, 0);
|
std::vector<uint8_t> sigdata(MBEDTLS_ECDSA_MAX_LEN, 0);
|
||||||
mbedtls_mpi_init(&r);
|
mbedtls_mpi_init(&r);
|
||||||
mbedtls_mpi_init(&s);
|
mbedtls_mpi_init(&s);
|
||||||
mbedtls_ecdsa_sign(&ctx_sign.grp, &r, &s, &ctx_sign.d, msg_hash, sizeof(msg_hash), mbd_rand, nullptr);
|
mbedtls_ecdsa_sign(
|
||||||
|
&ctx_sign.private_grp, &r, &s, &ctx_sign.private_d, msg_hash, sizeof(msg_hash), mbd_rand, nullptr);
|
||||||
|
|
||||||
size_t plen = mbedtls_mpi_size(&r);
|
size_t plen = mbedtls_mpi_size(&r);
|
||||||
mbedtls_mpi_write_binary(&r, sigdata.data(), plen);
|
mbedtls_mpi_write_binary(&r, sigdata.data(), plen);
|
||||||
@@ -343,4 +346,6 @@ bool alipan::createSession() {
|
|||||||
{"device_id", this->device_id},
|
{"device_id", this->device_id},
|
||||||
});
|
});
|
||||||
return j.at("success").get<bool>();
|
return j.at("success").get<bool>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace drive
|
||||||
@@ -4,6 +4,8 @@
|
|||||||
#include "http.h"
|
#include "http.h"
|
||||||
#include "drive.h"
|
#include "drive.h"
|
||||||
|
|
||||||
|
namespace drive {
|
||||||
|
|
||||||
class alipan : public drive {
|
class alipan : public drive {
|
||||||
public:
|
public:
|
||||||
bool qrLogin(fnQrcode printQr) override;
|
bool qrLogin(fnQrcode printQr) override;
|
||||||
@@ -28,4 +30,6 @@ private:
|
|||||||
|
|
||||||
std::string drive_id;
|
std::string drive_id;
|
||||||
std::string user_id;
|
std::string user_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "alipan.h"
|
#include "alipan.h"
|
||||||
|
|
||||||
|
namespace drive {
|
||||||
|
|
||||||
static std::map<drive_type, drive::ref> m;
|
static std::map<drive_type, drive::ref> m;
|
||||||
|
|
||||||
drive::ref new_drive(drive_type type) {
|
drive::ref new_drive(drive_type type) {
|
||||||
@@ -15,4 +17,6 @@ drive::ref new_drive(drive_type type) {
|
|||||||
m.insert(std::make_pair(type, it->second));
|
m.insert(std::make_pair(type, it->second));
|
||||||
}
|
}
|
||||||
return it->second;
|
return it->second;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::string hex_encode(const unsigned char* data, size_t len) {
|
std::string drive::hex_encode(const unsigned char* data, size_t len) {
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
for (size_t i = 0; i < len; i++) ss << std::hex << std::setw(2) << std::setfill('0') << (int)data[i];
|
for (size_t i = 0; i < len; i++) ss << std::hex << std::setw(2) << std::setfill('0') << (int)data[i];
|
||||||
return ss.str();
|
return ss.str();
|
||||||
@@ -36,7 +36,7 @@ std::string ansi_to_utf8(const char* locale, std::string const& str_gbk) {
|
|||||||
return cutf8.to_bytes(std::wstring(buff.data(), to_next));
|
return cutf8.to_bytes(std::wstring(buff.data(), to_next));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string device_name() {
|
std::string drive::device_name() {
|
||||||
#ifdef __SWITCH__
|
#ifdef __SWITCH__
|
||||||
SetSysDeviceNickName nick;
|
SetSysDeviceNickName nick;
|
||||||
if (R_SUCCEEDED(setsysGetDeviceNickname(&nick))) {
|
if (R_SUCCEEDED(setsysGetDeviceNickname(&nick))) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#include "http.h"
|
#include "http.h"
|
||||||
#include "drive.h"
|
#include "drive.h"
|
||||||
#include <qrcodegen/qrcodegen.h>
|
#include <qrcodegen.h>
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
|
||||||
void printQr(const std::string& text) {
|
void printQr(const std::string& text) {
|
||||||
@@ -23,7 +23,7 @@ void printQr(const std::string& text) {
|
|||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
curl_global_init(CURL_GLOBAL_ALL);
|
curl_global_init(CURL_GLOBAL_ALL);
|
||||||
|
|
||||||
drive::ref c = new_drive(dt_alipan);
|
auto c = drive::new_drive(drive::dt_alipan);
|
||||||
if (!c->qrLogin(printQr)) return 1;
|
if (!c->qrLogin(printQr)) return 1;
|
||||||
|
|
||||||
uint32_t choice = 0;
|
uint32_t choice = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user