-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 006540c
Showing
12 changed files
with
2,538 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
cmake_minimum_required(VERSION 3.5) | ||
|
||
project(testFiles VERSION 0.1 LANGUAGES CXX) | ||
|
||
set(CMAKE_INCLUDE_CURRENT_DIR ON) | ||
|
||
set(CMAKE_AUTOUIC ON) | ||
set(CMAKE_AUTOMOC ON) | ||
set(CMAKE_AUTORCC ON) | ||
|
||
set(CMAKE_CXX_STANDARD 17) | ||
set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||
|
||
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) | ||
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) | ||
|
||
set(PROJECT_SOURCES | ||
main.cpp | ||
mainwindow.cpp | ||
mainwindow.h | ||
mainwindow.ui | ||
cryptopro_csp.cpp | ||
cryptopro_csp.h | ||
documnetsigncreator.cpp | ||
documnetsigncreator.h | ||
|
||
|
||
) | ||
|
||
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) | ||
qt_add_executable(testFiles | ||
MANUAL_FINALIZATION | ||
${PROJECT_SOURCES} | ||
) | ||
# Define target properties for Android with Qt 6 as: | ||
# set_property(TARGET testFiles APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR | ||
# ${CMAKE_CURRENT_SOURCE_DIR}/android) | ||
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation | ||
else() | ||
if(ANDROID) | ||
add_library(testFiles SHARED | ||
${PROJECT_SOURCES} | ||
) | ||
# Define properties for Android with Qt 5 after find_package() calls as: | ||
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") | ||
else() | ||
add_executable(testFiles | ||
${PROJECT_SOURCES} | ||
) | ||
endif() | ||
endif() | ||
|
||
target_link_libraries(testFiles PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) | ||
|
||
set_target_properties(testFiles PROPERTIES | ||
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com | ||
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} | ||
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} | ||
MACOSX_BUNDLE TRUE | ||
WIN32_EXECUTABLE TRUE | ||
) | ||
|
||
if(QT_VERSION_MAJOR EQUAL 6) | ||
qt_finalize_executable(testFiles) | ||
endif() |
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
#ifndef CRYPTOPRO_CSP_H | ||
#define CRYPTOPRO_CSP_H | ||
|
||
#include <QDate> | ||
#include <QObject> | ||
#include <QProcess> | ||
#include <QDebug> | ||
#include <QDir> | ||
#include <QThread> | ||
|
||
//#include "logclass.h" | ||
|
||
#ifdef __linux__ | ||
#define CRYPTO_PRO_DIRECTORY "/opt/cprocsp/bin/amd64/" | ||
#define CERTMGR "certmgr" | ||
#define CSPTEST "csptest" | ||
#define SPLITTER_NEW_LINE "\n" | ||
#elif _WIN32 | ||
#define CRYPTO_PRO_DIRECTORY "C:/Program Files/Crypto Pro/CSP/" | ||
#define CERTMGR "certmgr.exe" | ||
#define CSPTEST "csptest.exe" | ||
#define SPLITTER_NEW_LINE "\r\n" | ||
#else | ||
|
||
#endif | ||
|
||
#if QT_VERSION >= 0x050f00 // версия Qt 5.15.2 | ||
#define SPLITTER Qt::SplitBehavior(Qt::SkipEmptyParts) | ||
#else | ||
#define SPLITTER QString::SkipEmptyParts | ||
#endif | ||
|
||
class CryptoPRO_CSP : public QObject | ||
{ | ||
Q_OBJECT | ||
public: | ||
explicit CryptoPRO_CSP(QObject *parent = nullptr); | ||
|
||
void setCryptoProDirectory(const QString &value); | ||
|
||
// главная структура | ||
struct CryptoSignData | ||
{ | ||
// общая информацию о подписи | ||
QString name = ""; | ||
QString email = ""; | ||
QString serial = ""; | ||
QString subname = ""; | ||
QString surname = ""; | ||
QString name_and_patronymic = ""; | ||
QDate startDate; | ||
QDate finishDate; | ||
|
||
int index = -1; // информация о подписи для создания sig файла | ||
|
||
QString toString() | ||
{ | ||
return "email = " + this->email + ", name = " + this->name + ", serial = " + this->serial + ", subname = " + this->subname + ", surname = " + this->surname + ", name_and_patronymic = " + this->name_and_patronymic + ", date_start = " + this->startDate.toString() + ", date_end = " + this->finishDate.toString(); | ||
} | ||
}; | ||
|
||
signals: | ||
|
||
private: | ||
QString CryptoProDirectory; | ||
|
||
static int getSignIndex(QList<CryptoSignData> allSignsList, CryptoSignData searchSign); // получает подпись по e-mail | ||
|
||
struct s_certmgr | ||
{ | ||
public: | ||
QString getConsoleText(QStringList options); // запустить программу с опциями | ||
QList<CryptoSignData> getSertifactesList(); // получить список сертификатов | ||
void setCryptoProDirectory(const QString &value); | ||
private: | ||
QString runfile = CERTMGR; | ||
// logClass log; | ||
|
||
}; | ||
struct s_csptest | ||
{ | ||
public: | ||
bool createSign(QString file, CryptoSignData sign); // создать подпись для файла | ||
void setCryptoProDirectory(const QString &value); | ||
private: | ||
QString runfile = CSPTEST; | ||
// logClass log; | ||
}; | ||
|
||
public: | ||
s_certmgr certmgr; // менеджер сертификатов | ||
s_csptest csptest; // отвечает за создание sig файла | ||
|
||
private: | ||
// logClass log; | ||
|
||
}; | ||
|
||
#endif // CRYPTOPRO_CSP_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,185 @@ | ||
#include "documnetsigncreator.h" | ||
|
||
#include <QTextCodec> | ||
|
||
DocumnetSignCreator::DocumnetSignCreator() | ||
{ | ||
|
||
} | ||
|
||
bool DocumnetSignCreator::processDocument(QString fileInput, QString fileOutput) | ||
{ | ||
if(!QFile::exists(fileInput)) | ||
{ | ||
qDebug() << QString::fromLocal8Bit("Файл для подписи не найден!"); | ||
return false; | ||
} | ||
|
||
if(jarFileName.isEmpty() || !QFile::exists(jarFileName)) | ||
{ | ||
qDebug() << QString::fromLocal8Bit("Файл запуска JAR не найден!"); | ||
return false; | ||
} | ||
|
||
if(!fileOutput.endsWith(".pdf")) | ||
{ | ||
qDebug() << QString::fromLocal8Bit("Выходной файл должен быть формата *.pdf"); | ||
return false; | ||
} | ||
|
||
// готовися к запуску | ||
QProcess process; // запускаемый процесс | ||
// process.setProgram("C:/Program Files/Java/jre1.8.0_301/bin/java.exe"); // запускаемая программа | ||
// process.setProgram("C:/Users/ASUS/Downloads/application_jar/application_jar/application.exe"); | ||
process.setProgram("java"); | ||
QStringList params; // параметры запуска | ||
|
||
// переводим bool в строку | ||
QString drawLogoStr = drawLogo ? "true" : "false"; | ||
QString checkTransitionToNewPageStr = checkTransitionToNewPage ? "true" : "false"; | ||
params | ||
<< "-jar" | ||
<< jarFileName | ||
<< fileInput | ||
<< fileOutput | ||
<< signOwner | ||
<< signCertificate | ||
<< signDateFrom | ||
<< signDateTo | ||
<< drawLogoStr | ||
<< checkTransitionToNewPageStr | ||
<< insertType; | ||
|
||
qDebug() << params; | ||
|
||
process.setArguments(params); | ||
process.setReadChannel(QProcess::StandardOutput); | ||
process.start(); | ||
bool started = process.waitForStarted(); // ждём запуска программы | ||
if(!started) | ||
{ | ||
qDebug() << QString::fromLocal8Bit("Не удалось запустить программу"); | ||
return false; | ||
} | ||
|
||
bool finished = process.waitForFinished(300000); // время ожидания программы - 5 минут (для слабых ПК) | ||
if(!finished) | ||
{ | ||
process.terminate(); // принудительно завершаем процесс | ||
qDebug() << QString::fromLocal8Bit("Превышено время ожидания программы!"); | ||
return false; | ||
} | ||
|
||
int exitCode = process.exitCode(); | ||
if(exitCode != 0) | ||
{ | ||
qDebug() << QString::fromLocal8Bit("Процесс завершился с кодом ") << exitCode; | ||
|
||
QString text = process.readAllStandardOutput(); | ||
|
||
QString lineSplitter; | ||
#ifdef __linux__ | ||
lineSplitter = "\n"; | ||
#elif _WIN32 | ||
lineSplitter = "\r\n"; | ||
#endif | ||
|
||
QStringList error_list = text.split(lineSplitter, Qt::SkipEmptyParts); | ||
qDebug() << "run_error_text = \r\n"; // выводим ошибку | ||
for(auto &&line : error_list) | ||
{ | ||
qDebug() << line; | ||
} | ||
|
||
return false; | ||
} | ||
|
||
if(QFile::exists(fileOutput)) // если файл в итоге создан | ||
{ | ||
return true; | ||
} | ||
else | ||
{ | ||
return false; | ||
} | ||
} | ||
|
||
const QString &DocumnetSignCreator::getSignCertificate() const | ||
{ | ||
return signCertificate; | ||
} | ||
|
||
void DocumnetSignCreator::setSignCertificate(const QString &newSignCertificate) | ||
{ | ||
signCertificate = newSignCertificate; | ||
} | ||
|
||
const QString &DocumnetSignCreator::getSignOwner() const | ||
{ | ||
return signOwner; | ||
} | ||
|
||
void DocumnetSignCreator::setSignOwner(const QString &newSignOwner) | ||
{ | ||
signOwner = newSignOwner; | ||
} | ||
|
||
const QString &DocumnetSignCreator::getSignDateFrom() const | ||
{ | ||
return signDateFrom; | ||
} | ||
|
||
void DocumnetSignCreator::setSignDateFrom(const QString &newSignDateFrom) | ||
{ | ||
signDateFrom = newSignDateFrom; | ||
} | ||
|
||
const QString &DocumnetSignCreator::getSignDateTo() const | ||
{ | ||
return signDateTo; | ||
} | ||
|
||
void DocumnetSignCreator::setSignDateTo(const QString &newSignDateTo) | ||
{ | ||
signDateTo = newSignDateTo; | ||
} | ||
|
||
bool DocumnetSignCreator::getDrawLogo() const | ||
{ | ||
return drawLogo; | ||
} | ||
|
||
void DocumnetSignCreator::setDrawLogo(bool newDrawLogo) | ||
{ | ||
drawLogo = newDrawLogo; | ||
} | ||
|
||
bool DocumnetSignCreator::getCheckTransitionToNewPage() const | ||
{ | ||
return checkTransitionToNewPage; | ||
} | ||
|
||
void DocumnetSignCreator::setCheckTransitionToNewPage(bool newCheckTransitionToNewPage) | ||
{ | ||
checkTransitionToNewPage = newCheckTransitionToNewPage; | ||
} | ||
|
||
const QString &DocumnetSignCreator::getInsertType() const | ||
{ | ||
return insertType; | ||
} | ||
|
||
void DocumnetSignCreator::setInsertType(const QString &newInsertType) | ||
{ | ||
insertType = newInsertType; | ||
} | ||
|
||
const QString &DocumnetSignCreator::getJarFileName() const | ||
{ | ||
return jarFileName; | ||
} | ||
|
||
void DocumnetSignCreator::setJarFileName(const QString &newJarFileName) | ||
{ | ||
jarFileName = newJarFileName; | ||
} |
Oops, something went wrong.