sslloader.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "sslloader.h"
  2. #include <QFile>
  3. #include <QDebug>
  4. #include <QSslKey>
  5. #include <QSslCertificate>
  6. #include <QSslConfiguration>
  7. #include <utility>
  8. CWF_BEGIN_NAMESPACE
  9. SslLoader::SslLoader(Configuration configuration) : configuration(std::move(configuration))
  10. {
  11. }
  12. QByteArray getFileContent(const QString &fileName, bool &ok)
  13. {
  14. QFile file(fileName);
  15. if(file.open(QIODevice::ReadOnly))
  16. {
  17. ok = true;
  18. return file.readAll();
  19. }
  20. ok = false;
  21. qDebug() << "Can't open " << fileName << ": " << file.errorString();
  22. return QByteArray();
  23. }
  24. QSslConfiguration *buildSslConfiguration(const QSslKey &keySsl,
  25. const QSslCertificate &certificateSsl,
  26. const Configuration &configuration)
  27. {
  28. auto *temp = new QSslConfiguration;
  29. temp->setProtocol(configuration.getSslProtocol());
  30. temp->setPeerVerifyMode(configuration.getSslPeerVerifyMode());
  31. temp->setPrivateKey(keySsl);
  32. temp->setLocalCertificate(certificateSsl);
  33. return temp;
  34. }
  35. QSslConfiguration *SslLoader::getSslConfiguration() const
  36. {
  37. #ifdef QT_NO_SSL
  38. qDebug() << "Secure Sockets Layer (SSL) is not supported, please check your configuration.";
  39. return nullptr;
  40. #else
  41. if(!configuration.getSslKeyFile().isEmpty() && !configuration.getSslCertFile().isEmpty())
  42. {
  43. bool okKey, okCert;
  44. QByteArray myKeyStr(getFileContent(configuration.getSslKeyFile(), okKey));
  45. QByteArray myCertificateStr(getFileContent(configuration.getSslCertFile(), okCert));
  46. if(!okKey || !okCert)
  47. {
  48. return nullptr;
  49. }
  50. QSslKey keySsl(myKeyStr,
  51. configuration.getSslKeyAlgorithm(),
  52. configuration.getSslEncodingFormat(),
  53. configuration.getSslKeyType(),
  54. configuration.getSslPassPhrase());
  55. QSslCertificate certificateSsl(myCertificateStr,
  56. configuration.getSslEncodingFormat());
  57. if(keySsl.isNull())
  58. {
  59. qDebug() << "Invalid SLL key file, please check the CPPWeb.ini file.";
  60. return nullptr;
  61. }
  62. if(certificateSsl.isNull())
  63. {
  64. qDebug() << "Invalid SLL cert file, please check the CPPWeb.ini file.";
  65. return nullptr;
  66. }
  67. return buildSslConfiguration(keySsl, certificateSsl, configuration);
  68. }
  69. #endif
  70. return nullptr;
  71. }
  72. CWF_END_NAMESPACE