configuration.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*
  2. Copyright 2017 Herik Lima de Castro and Marcelo Medeiros Eler
  3. Distributed under MIT license, or public domain if desired and
  4. recognized in your jurisdiction.
  5. See file LICENSE for detail.
  6. */
  7. #include "configuration.h"
  8. #include "filemanager.h"
  9. #include <QDir>
  10. CWF_BEGIN_NAMESPACE
  11. Configuration::Configuration(const QString &serverFilesPath)
  12. : path(serverFilesPath)
  13. {
  14. FileManager::removeLastBar(path);
  15. const QString iniFile("/config/CPPWeb.ini");
  16. if (QFile(path + iniFile).exists()) {
  17. valid = true;
  18. configure();
  19. } else {
  20. path = QDir::currentPath() + "/server";
  21. if (QFile(path + iniFile).exists()) {
  22. valid = true;
  23. configure();
  24. } else {
  25. valid = false;
  26. }
  27. }
  28. }
  29. QSsl::KeyAlgorithm extractSslKeyAlgorithm(QString value)
  30. {
  31. value = value.trimmed().toLower();
  32. if (value.startsWith("opaque"))
  33. return QSsl::Opaque;
  34. if (value.startsWith("dsa"))
  35. return QSsl::Dsa;
  36. if (value.startsWith("ec"))
  37. return QSsl::Dsa;
  38. return QSsl::Rsa;
  39. }
  40. QSsl::EncodingFormat extractSslEncodingFormat(QString value)
  41. {
  42. value = value.trimmed().toLower();
  43. if (value.startsWith("der"))
  44. return QSsl::Der;
  45. return QSsl::Pem;
  46. }
  47. QSsl::KeyType extractSslKeyType(QString value)
  48. {
  49. value = value.trimmed().toLower();
  50. if (value.startsWith("publickey"))
  51. return QSsl::PublicKey;
  52. return QSsl::PrivateKey;
  53. }
  54. QSslSocket::PeerVerifyMode extractSslPeerVerifyMode(QString value)
  55. {
  56. value = value.trimmed().toLower();
  57. if (value.startsWith("querypeer"))
  58. return QSslSocket::QueryPeer;
  59. if (value.startsWith("verifypeer"))
  60. return QSslSocket::QueryPeer;
  61. if (value.startsWith("autoverifypeer"))
  62. return QSslSocket::QueryPeer;
  63. return QSslSocket::VerifyNone;
  64. }
  65. QSsl::SslProtocol extractSslProtocol(QString value)
  66. {
  67. value = value.trimmed().toLower();
  68. if (value.startsWith("sslv3"))
  69. return QSsl::SslV3;
  70. if (value.startsWith("sslv2"))
  71. return QSsl::SslV2;
  72. if (value.startsWith("tlsv1_0"))
  73. return QSsl::TlsV1_0;
  74. if (value.startsWith("tlsv1_1"))
  75. return QSsl::TlsV1_1;
  76. if (value.startsWith("tlsv1_2"))
  77. return QSsl::TlsV1_2;
  78. if (value.startsWith("anyprotocol"))
  79. return QSsl::AnyProtocol;
  80. if (value.startsWith("secureprotocols"))
  81. return QSsl::SecureProtocols;
  82. if (value.startsWith("tlsv1_0Orlater"))
  83. return QSsl::TlsV1_1OrLater;
  84. if (value.startsWith("tlsv1_2Orlater"))
  85. return QSsl::TlsV1_2OrLater;
  86. if (value.startsWith("unknownprotocol"))
  87. return QSsl::UnknownProtocol;
  88. return QSsl::TlsV1SslV3;
  89. }
  90. void Configuration::configure()
  91. {
  92. const QString iniFile(path + "/config/CPPWeb.ini");
  93. if (valid) {
  94. QSettings settings(iniFile, QSettings::Format::IniFormat);
  95. settings.beginGroup("config");
  96. host.setAddress(settings.value("host").toString());
  97. port = static_cast<quint16>(settings.value("port").toInt());
  98. maxThread = settings.value("maxThread").toInt();
  99. cleanupInterval = settings.value("cleanupInterval").toInt();
  100. timeOut = settings.value("timeOut").toInt();
  101. sslKeyFile = settings.value("sslKeyFile").toString();
  102. sslCertFile = settings.value("sslCertFile").toString();
  103. sessionExpirationTime = settings.value("sessionExpirationTime").toInt();
  104. maxUploadFile = settings.value("maxUploadFile").toLongLong();
  105. indexPage = settings.value("indexPage").toString();
  106. accessCPPWebIni = settings.value("accessCPPWebIni").toBool();
  107. accessServerPages = settings.value("accessServerPages").toBool();
  108. maxLogFile = settings.value("maxLogFile").toLongLong();
  109. sslPassPhrase = settings.value("sslPassPhrase").toByteArray();
  110. sslKeyAlgorithm = extractSslKeyAlgorithm(settings.value("sslKeyAlgorithm").toString());
  111. sslEncodingFormat = extractSslEncodingFormat(settings.value("sslEncodingFormat").toString());
  112. sslKeyType = extractSslKeyType(settings.value("sslKeyType").toString());
  113. sslPeerVerifyMode = extractSslPeerVerifyMode(settings.value("sslPeerVerifyMode").toString());
  114. sslProtocol = extractSslProtocol(settings.value("sslProtocol").toString());
  115. logFilePath = path + "/config/log/CPPWebServer.log";
  116. FileManager::removeFirstBar(sslCertFile);
  117. FileManager::removeFirstBar(sslKeyFile);
  118. if (!sslKeyFile.isEmpty())
  119. sslKeyFile = path + "/" + sslKeyFile;
  120. if (!sslCertFile.isEmpty())
  121. sslCertFile = path + "/" + sslCertFile;
  122. }
  123. }
  124. CWF_END_NAMESPACE