File indexing completed on 2024-12-01 10:39:48
0001 /* 0002 SPDX-FileCopyrightText: 2017-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "ruqolaserverconfig.h" 0008 #include "ruqola_authentication_debug.h" 0009 #include "ruqola_debug.h" 0010 #include <QJsonArray> 0011 #include <QJsonDocument> 0012 #include <QJsonObject> 0013 #include <QRegularExpression> 0014 #include <QStringList> 0015 0016 RuqolaServerConfig::RuqolaServerConfig() = default; 0017 0018 QString RuqolaServerConfig::uniqueId() const 0019 { 0020 return mUniqueId; 0021 } 0022 0023 void RuqolaServerConfig::setUniqueId(const QString &uniqueId) 0024 { 0025 mUniqueId = uniqueId; 0026 } 0027 0028 QString RuqolaServerConfig::jitsiMeetUrl() const 0029 { 0030 return mJitsiMeetUrl; 0031 } 0032 0033 void RuqolaServerConfig::setJitsiMeetUrl(const QString &jitsiMeetUrl) 0034 { 0035 mJitsiMeetUrl = jitsiMeetUrl; 0036 } 0037 0038 QString RuqolaServerConfig::jitsiMeetPrefix() const 0039 { 0040 return mJitsiMeetPrefix; 0041 } 0042 0043 void RuqolaServerConfig::setJitsiMeetPrefix(const QString &jitsiMeetPrefix) 0044 { 0045 mJitsiMeetPrefix = jitsiMeetPrefix; 0046 } 0047 0048 QString RuqolaServerConfig::fileUploadStorageType() const 0049 { 0050 return mFileUploadStorageType; 0051 } 0052 0053 void RuqolaServerConfig::setFileUploadStorageType(const QString &type) 0054 { 0055 mFileUploadStorageType = type; 0056 } 0057 0058 void RuqolaServerConfig::setBlockDeletingMessageInMinutes(int minutes) 0059 { 0060 mBlockDeletingMessageInMinutes = minutes; 0061 } 0062 0063 void RuqolaServerConfig::setBlockEditingMessageInMinutes(int minutes) 0064 { 0065 mBlockEditingMessageInMinutes = minutes; 0066 } 0067 0068 int RuqolaServerConfig::blockEditingMessageInMinutes() const 0069 { 0070 return mBlockEditingMessageInMinutes; 0071 } 0072 0073 bool RuqolaServerConfig::needAdaptNewSubscriptionRC60() const 0074 { 0075 return mNeedAdaptNewSubscriptionRC60; 0076 } 0077 0078 bool RuqolaServerConfig::hasAtLeastVersion(int major, int minor, int patch) const 0079 { 0080 // qDebug() << " major " << major << " mServerVersionMajor " << mServerVersionMajor << " (major <= mServerVersionMajor) " << (major <= 0081 // mServerVersionMajor) << 0082 // " minor " << minor << " mServerVersionMinor " << mServerVersionMinor << " (minor <= mServerVersionMinor) " << (minor <= 0083 // mServerVersionMinor) << " patch " << patch << " mServerVersionPatch " << mServerVersionPatch << " (patch <= mServerVersionPatch) " << 0084 // (patch <= mServerVersionPatch); 0085 if (mServerVersionMajor > major) { 0086 return true; 0087 } 0088 return (major <= mServerVersionMajor) && (minor <= mServerVersionMinor) && (patch <= mServerVersionPatch); 0089 } 0090 0091 void RuqolaServerConfig::setServerVersion(const QString &version) 0092 { 0093 mServerVersionStr = version; 0094 const QStringList lst = version.split(QLatin1Char('.')); 0095 // 0.70.0-rc.1 has 4 "." 0096 if (lst.count() >= 3) { 0097 bool ok; 0098 int value = lst.at(0).toInt(&ok); 0099 if (ok) { 0100 mServerVersionMajor = value; 0101 } 0102 value = lst.at(1).toInt(&ok); 0103 if (ok) { 0104 mServerVersionMinor = value; 0105 } 0106 value = lst.at(2).toInt(&ok); 0107 if (ok) { 0108 mServerVersionPatch = value; 0109 } else { // Perhaps it has "rc"/"beta" etc. 0110 mServerVersionPatch = 0; 0111 } 0112 } else if (lst.count() == 2) { // As "4.0" 0113 bool ok; 0114 int value = lst.at(0).toInt(&ok); 0115 if (ok) { 0116 mServerVersionMajor = value; 0117 } 0118 value = lst.at(1).toInt(&ok); 0119 if (ok) { 0120 mServerVersionMinor = value; 0121 } 0122 mServerVersionPatch = 0; 0123 } 0124 adaptToServerVersion(); 0125 } 0126 0127 QString RuqolaServerConfig::serverVersion() const 0128 { 0129 return mServerVersionStr; 0130 } 0131 0132 bool RuqolaServerConfig::ruqolaHasSupportForAuthMethodType(AuthenticationManager::AuthMethodType type) const 0133 { 0134 return mRuqolaAuthMethodTypes & type; 0135 } 0136 0137 bool RuqolaServerConfig::canShowAuthMethod(AuthenticationManager::AuthMethodType type) const 0138 { 0139 const bool hasSupport = serverHasSupportForAuthMethodType(type) && ruqolaHasSupportForAuthMethodType(type); 0140 return hasSupport; 0141 } 0142 0143 void RuqolaServerConfig::addRuqolaAuthenticationSupport(AuthenticationManager::AuthMethodType type) 0144 { 0145 mRuqolaAuthMethodTypes |= type; 0146 } 0147 0148 bool RuqolaServerConfig::serverHasSupportForAuthMethodType(AuthenticationManager::AuthMethodType type) const 0149 { 0150 return mServerAuthTypes & type; 0151 } 0152 0153 void RuqolaServerConfig::addOauthService(const QString &service) 0154 { 0155 qCDebug(RUQOLA_AUTHENTICATION_LOG) << " serviceLower " << service; 0156 if (service.endsWith(QLatin1String("twitter"), Qt::CaseInsensitive)) { 0157 mServerAuthTypes |= AuthenticationManager::AuthMethodType::Twitter; 0158 } else if (service.endsWith(QLatin1String("facebook"), Qt::CaseInsensitive)) { 0159 mServerAuthTypes |= AuthenticationManager::AuthMethodType::FaceBook; 0160 } else if (service.endsWith(QLatin1String("github"), Qt::CaseInsensitive)) { 0161 mServerAuthTypes |= AuthenticationManager::AuthMethodType::GitHub; 0162 } else if (service.endsWith(QLatin1String("gitlab"), Qt::CaseInsensitive)) { 0163 mServerAuthTypes |= AuthenticationManager::AuthMethodType::GitLab; 0164 } else if (service.endsWith(QLatin1String("google"), Qt::CaseInsensitive)) { 0165 mServerAuthTypes |= AuthenticationManager::AuthMethodType::Google; 0166 } else if (service.endsWith(QLatin1String("linkedin"), Qt::CaseInsensitive)) { 0167 mServerAuthTypes |= AuthenticationManager::AuthMethodType::Linkedin; 0168 } else if (service.endsWith(QLatin1String("wordpress"), Qt::CaseInsensitive)) { 0169 mServerAuthTypes |= AuthenticationManager::AuthMethodType::Wordpress; 0170 } else if (service.endsWith(QLatin1String("apple"), Qt::CaseInsensitive)) { 0171 mServerAuthTypes |= AuthenticationManager::AuthMethodType::Apple; 0172 } else if (service.endsWith(QLatin1String("nextcloud"), Qt::CaseInsensitive)) { 0173 mServerAuthTypes |= AuthenticationManager::AuthMethodType::NextCloud; 0174 } else if (service.endsWith(QLatin1String("_oauth_proxy_host"), Qt::CaseInsensitive)) { 0175 // Hide warning as it's not a service 0176 qCDebug(RUQOLA_LOG) << "_OAuth_Proxy_host found "; 0177 } else if (service.endsWith(QLatin1String("_oauth_meteor"), Qt::CaseInsensitive)) { 0178 qCDebug(RUQOLA_LOG) << "Accounts_OAuth_Meteor found "; 0179 } else { 0180 qCDebug(RUQOLA_LOG) << "Unknown service type: " << service; 0181 } 0182 qCDebug(RUQOLA_AUTHENTICATION_LOG) << " authentication service " << mServerAuthTypes; 0183 } 0184 0185 void RuqolaServerConfig::adaptToServerVersion() 0186 { 0187 mNeedAdaptNewSubscriptionRC60 = (mServerVersionMajor >= 1) || ((mServerVersionMajor == 0) && (mServerVersionMinor >= 60)); 0188 } 0189 0190 bool RuqolaServerConfig::messageAllowConvertLongMessagesToAttachment() const 0191 { 0192 return mMessageAllowConvertLongMessagesToAttachment; 0193 } 0194 0195 void RuqolaServerConfig::setMessageAllowConvertLongMessagesToAttachment(bool newMessageAllowConvertLongMessagesToAttachment) 0196 { 0197 mMessageAllowConvertLongMessagesToAttachment = newMessageAllowConvertLongMessagesToAttachment; 0198 } 0199 0200 void RuqolaServerConfig::privateSettingsUpdated(const QJsonArray &updateArray) 0201 { 0202 if (updateArray.count() == 2) { 0203 const QString updateArrayInfo{updateArray.at(0).toString()}; 0204 if (updateArrayInfo == QLatin1String("updated")) { 0205 loadSettings(updateArray.at(1).toObject()); 0206 qDebug() << "Update settings " << *this; 0207 } else { 0208 qCWarning(RUQOLA_LOG) << "UpdateArray info unknown: " << updateArrayInfo; 0209 } 0210 } else { 0211 qCWarning(RUQOLA_LOG) << "Error in privateSettingsUpdated " << updateArray; 0212 } 0213 } 0214 0215 int RuqolaServerConfig::messageMaximumAllowedSize() const 0216 { 0217 return mMessageMaximumAllowedSize; 0218 } 0219 0220 void RuqolaServerConfig::setMessageMaximumAllowedSize(int newMessageMaximumAllowedSize) 0221 { 0222 mMessageMaximumAllowedSize = newMessageMaximumAllowedSize; 0223 } 0224 0225 const QString &RuqolaServerConfig::userNameValidation() const 0226 { 0227 return mUserNameValidation; 0228 } 0229 0230 const QString &RuqolaServerConfig::channelNameValidation() const 0231 { 0232 return mChannelNameValidation; 0233 } 0234 0235 int RuqolaServerConfig::loginExpiration() const 0236 { 0237 return mLoginExpiration; 0238 } 0239 0240 void RuqolaServerConfig::setChannelNameValidation(const QString &str) 0241 { 0242 mChannelNameValidation = str; 0243 } 0244 0245 void RuqolaServerConfig::setUserNameValidation(const QString &str) 0246 { 0247 mUserNameValidation = str; 0248 } 0249 0250 void RuqolaServerConfig::setLoginExpiration(int loginExpiration) 0251 { 0252 mLoginExpiration = loginExpiration; 0253 } 0254 0255 RuqolaServerConfig::ServerConfigFeatureTypes RuqolaServerConfig::serverConfigFeatureTypes() const 0256 { 0257 return mServerConfigFeatureTypes; 0258 } 0259 0260 void RuqolaServerConfig::setServerConfigFeatureTypes(ServerConfigFeatureTypes serverConfigFeatureTypes) 0261 { 0262 mServerConfigFeatureTypes = serverConfigFeatureTypes; 0263 } 0264 0265 void RuqolaServerConfig::setAllowRegistrationFrom(const QString ®istrationFromValue) 0266 { 0267 if (registrationFromValue == QLatin1String("Public")) { 0268 mServerConfigFeatureTypes |= ServerConfigFeatureType::RegistrationFormEnabled; 0269 } else if (registrationFromValue == QLatin1String("Disabled")) { 0270 // Nothing => disabled 0271 ; 0272 } else if (registrationFromValue == QLatin1String("Secret URL")) { 0273 qCWarning(RUQOLA_LOG) << " Registration Secret Url not implemented"; 0274 } 0275 } 0276 0277 qint64 RuqolaServerConfig::fileMaxFileSize() const 0278 { 0279 return mFileMaxFileSize; 0280 } 0281 0282 void RuqolaServerConfig::setFileMaxFileSize(qint64 fileMaxFileSize) 0283 { 0284 mFileMaxFileSize = fileMaxFileSize; 0285 } 0286 0287 int RuqolaServerConfig::blockDeletingMessageInMinutes() const 0288 { 0289 return mBlockDeletingMessageInMinutes; 0290 } 0291 0292 QString RuqolaServerConfig::autoTranslateGoogleKey() const 0293 { 0294 return mAutoTranslateGoogleKey; 0295 } 0296 0297 void RuqolaServerConfig::setAutoTranslateGoogleKey(const QString &autoTranslateGoogleKey) 0298 { 0299 mAutoTranslateGoogleKey = autoTranslateGoogleKey; 0300 } 0301 0302 int RuqolaServerConfig::serverVersionPatch() const 0303 { 0304 return mServerVersionPatch; 0305 } 0306 0307 int RuqolaServerConfig::serverVersionMinor() const 0308 { 0309 return mServerVersionMinor; 0310 } 0311 0312 int RuqolaServerConfig::serverVersionMajor() const 0313 { 0314 return mServerVersionMajor; 0315 } 0316 0317 QString RuqolaServerConfig::serverVersionStr() const 0318 { 0319 return mServerVersionStr; 0320 } 0321 0322 QString RuqolaServerConfig::siteName() const 0323 { 0324 return mSiteName; 0325 } 0326 0327 void RuqolaServerConfig::setSiteName(const QString &siteName) 0328 { 0329 mSiteName = siteName; 0330 } 0331 0332 QString RuqolaServerConfig::siteUrl() const 0333 { 0334 return mSiteUrl; 0335 } 0336 0337 void RuqolaServerConfig::setSiteUrl(const QString &siteUrl) 0338 { 0339 mSiteUrl = siteUrl; 0340 } 0341 0342 AuthenticationManager::AuthMethodTypes RuqolaServerConfig::ruqolaOauthTypes() const 0343 { 0344 return mRuqolaAuthMethodTypes; 0345 } 0346 0347 AuthenticationManager::AuthMethodTypes RuqolaServerConfig::serverAuthMethodTypes() const 0348 { 0349 return mServerAuthTypes; 0350 } 0351 0352 RuqolaServerConfig::ConfigWithDefaultValue RuqolaServerConfig::logoUrl() const 0353 { 0354 return mLogoUrl; 0355 } 0356 0357 void RuqolaServerConfig::setLogoUrl(const RuqolaServerConfig::ConfigWithDefaultValue &url) 0358 { 0359 mLogoUrl = url; 0360 } 0361 0362 RuqolaServerConfig::ConfigWithDefaultValue RuqolaServerConfig::faviconUrl() const 0363 { 0364 return mFaviconUrl; 0365 } 0366 0367 void RuqolaServerConfig::setFaviconUrl(const RuqolaServerConfig::ConfigWithDefaultValue &url) 0368 { 0369 mFaviconUrl = url; 0370 } 0371 0372 QDebug operator<<(QDebug d, const RuqolaServerConfig::ConfigWithDefaultValue &t) 0373 { 0374 d.space() << " Value " << t.url; 0375 d.space() << " Default Value " << t.defaultUrl; 0376 return d; 0377 } 0378 0379 QDebug operator<<(QDebug d, const RuqolaServerConfig &t) 0380 { 0381 d.space() << "mUniqueId " << t.uniqueId(); 0382 d.space() << "mJitsiMeetUrl " << t.jitsiMeetUrl(); 0383 d.space() << "mJitsiMeetPrefix " << t.jitsiMeetPrefix(); 0384 d.space() << "mFileUploadStorageType " << t.fileUploadStorageType(); 0385 d.space() << "mSiteUrl " << t.siteUrl(); 0386 d.space() << "mSiteName " << t.siteName(); 0387 d.space() << "mServerOauthTypes " << t.serverAuthMethodTypes(); 0388 d.space() << "mRuqolaOauthTypes " << t.ruqolaOauthTypes(); 0389 d.space() << "mBlockEditingMessageInMinutes " << t.blockEditingMessageInMinutes(); 0390 d.space() << "mNeedAdaptNewSubscriptionRC60 " << t.needAdaptNewSubscriptionRC60(); 0391 d.space() << "mServerVersionMajor " << t.serverVersionMajor() << " mServerVersionMinor " << t.serverVersionMinor() << " mServerVersionPatch " 0392 << t.serverVersionPatch(); 0393 d.space() << "mLogoUrl " << t.logoUrl(); 0394 d.space() << "mFaviconUrl " << t.faviconUrl(); 0395 d.space() << "mLoginExpiration " << t.loginExpiration(); 0396 d.space() << "mChannelNameValidation " << t.channelNameValidation(); 0397 d.space() << "mUserNameValidation " << t.userNameValidation(); 0398 d.space() << "mMessageMaximumAllowedSize " << t.messageMaximumAllowedSize(); 0399 d.space() << "mMessageAllowConvertLongMessagesToAttachment " << t.messageAllowConvertLongMessagesToAttachment(); 0400 d.space() << "mUIUseRealName " << t.useRealName(); 0401 d.space() << "mAccountsAllowInvisibleStatusOption" << t.accountsAllowInvisibleStatusOption(); 0402 d.space() << "mUserDataDownloadEnabled " << t.userDataDownloadEnabled(); 0403 d.space() << "mMediaBlackList " << t.mediaBlackList(); 0404 d.space() << "mMediaWhiteList " << t.mediaWhiteList(); 0405 d.space() << "previewEmbed " << t.previewEmbed(); 0406 d.space() << "embedCacheExpirationDays " << t.embedCacheExpirationDays(); 0407 return d; 0408 } 0409 0410 void RuqolaServerConfig::assignSettingValue(bool value, ServerConfigFeatureType type) 0411 { 0412 if (value) { 0413 mServerConfigFeatureTypes |= type; 0414 } else { 0415 mServerConfigFeatureTypes &= ~type; 0416 } 0417 } 0418 0419 RuqolaServerConfig::ConfigWithDefaultValue RuqolaServerConfig::parseConfigWithDefaultValue(const QJsonObject &o) 0420 { 0421 RuqolaServerConfig::ConfigWithDefaultValue value; 0422 value.defaultUrl = o[QLatin1String("defaultUrl")].toString(); 0423 value.url = o[QLatin1String("url")].toString(); 0424 return value; 0425 } 0426 0427 int RuqolaServerConfig::embedCacheExpirationDays() const 0428 { 0429 return mEmbedCacheExpirationDays; 0430 } 0431 0432 void RuqolaServerConfig::setEmbedCacheExpirationDays(int newEmbedCacheExpirationDays) 0433 { 0434 mEmbedCacheExpirationDays = newEmbedCacheExpirationDays; 0435 } 0436 0437 bool RuqolaServerConfig::previewEmbed() const 0438 { 0439 return mPreviewEmbed; 0440 } 0441 0442 void RuqolaServerConfig::setPreviewEmbed(bool newPreviewEmbed) 0443 { 0444 mPreviewEmbed = newPreviewEmbed; 0445 } 0446 0447 void RuqolaServerConfig::loadSettings(const QJsonObject ¤tConfObject) 0448 { 0449 // qDebug() << " currentConfObject " << currentConfObject; 0450 const QString id = currentConfObject[QLatin1String("_id")].toString(); 0451 const QVariant value = currentConfObject[QLatin1String("value")].toVariant(); 0452 static const QRegularExpression regularExpressionOAuth(QStringLiteral("^Accounts_OAuth_\\w+")); 0453 if (id == QLatin1String("uniqueID")) { 0454 setUniqueId(value.toString()); 0455 } else if (id == QLatin1String("Jitsi_Enabled")) { 0456 assignSettingValue(value.toBool(), ServerConfigFeatureType::JitsiEnabled); 0457 } else if (id == QLatin1String("Jitsi_Enable_Teams")) { 0458 assignSettingValue(value.toBool(), ServerConfigFeatureType::JitsiEnabledTeams); 0459 } else if (id == QLatin1String("Jitsi_Enable_Channels")) { 0460 assignSettingValue(value.toBool(), ServerConfigFeatureType::JitsiEnabledChannels); 0461 } else if (id == QLatin1String("Jitsi_Domain")) { 0462 setJitsiMeetUrl(value.toString()); 0463 } else if (id == QLatin1String("Jitsi_URL_Room_Prefix")) { 0464 setJitsiMeetPrefix(value.toString()); 0465 } else if (id == QLatin1String("FileUpload_Storage_Type")) { 0466 setFileUploadStorageType(value.toString()); 0467 } else if (id == QLatin1String("Message_AllowEditing")) { 0468 assignSettingValue(value.toBool(), ServerConfigFeatureType::AllowEditingMessage); 0469 } else if (id == QLatin1String("Message_AllowEditing_BlockEditInMinutes")) { 0470 setBlockEditingMessageInMinutes(value.toInt()); 0471 } else if (id == QLatin1String("Message_AllowDeleting_BlockDeleteInMinutes")) { 0472 setBlockDeletingMessageInMinutes(value.toInt()); 0473 } else if (id == QLatin1String("OTR_Enable")) { 0474 assignSettingValue(value.toBool(), ServerConfigFeatureType::OtrEnabled); 0475 } else if (id.contains(regularExpressionOAuth)) { 0476 if (value.toBool()) { 0477 addOauthService(id); 0478 } 0479 } else if (id == QLatin1String("Site_Url")) { 0480 setSiteUrl(value.toString()); 0481 } else if (id == QLatin1String("Site_Name")) { 0482 setSiteName(value.toString()); 0483 } else if (id == QLatin1String("E2E_Enable")) { 0484 assignSettingValue(value.toBool(), ServerConfigFeatureType::EncryptionEnabled); 0485 } else if (id == QLatin1String("Message_AllowPinning")) { 0486 assignSettingValue(value.toBool(), ServerConfigFeatureType::AllowMessagePinning); 0487 } else if (id == QLatin1String("Message_AllowStarring")) { 0488 assignSettingValue(value.toBool(), ServerConfigFeatureType::AllowMessageStarring); 0489 } else if (id == QLatin1String("Message_AllowDeleting")) { 0490 assignSettingValue(value.toBool(), ServerConfigFeatureType::AllowMessageDeleting); 0491 } else if (id == QLatin1String("Threads_enabled")) { 0492 assignSettingValue(value.toBool(), ServerConfigFeatureType::ThreadsEnabled); 0493 } else if (id == QLatin1String("Discussion_enabled")) { 0494 assignSettingValue(value.toBool(), ServerConfigFeatureType::DiscussionEnabled); 0495 } else if (id == QLatin1String("AutoTranslate_Enabled")) { 0496 assignSettingValue(value.toBool(), ServerConfigFeatureType::AutoTranslateEnabled); 0497 } else if (id == QLatin1String("AutoTranslate_GoogleAPIKey")) { 0498 setAutoTranslateGoogleKey(value.toString()); 0499 } else if (id == QLatin1String("FileUpload_Enabled")) { 0500 assignSettingValue(value.toBool(), ServerConfigFeatureType::UploadFileEnabled); 0501 } else if (id == QLatin1String("FileUpload_MaxFileSize")) { 0502 setFileMaxFileSize(value.toULongLong()); 0503 } else if (id == QLatin1String("Broadcasting_enabled")) { 0504 assignSettingValue(value.toBool(), ServerConfigFeatureType::BroadCastEnabled); 0505 } else if (id == QLatin1String("Message_VideoRecorderEnabled")) { 0506 assignSettingValue(value.toBool(), ServerConfigFeatureType::VideoRecorderEnabled); 0507 } else if (id == QLatin1String("Message_AudioRecorderEnabled")) { 0508 assignSettingValue(value.toBool(), ServerConfigFeatureType::AudioRecorderEnabled); 0509 } else if (id == QLatin1String("Assets_logo")) { 0510 setLogoUrl(parseConfigWithDefaultValue(value.toJsonObject())); 0511 } else if (id == QLatin1String("Assets_favicon")) { 0512 setFaviconUrl(parseConfigWithDefaultValue(value.toJsonObject())); 0513 } else if (id == QLatin1String("Accounts_AllowDeleteOwnAccount")) { 0514 assignSettingValue(value.toBool(), ServerConfigFeatureType::AllowDeleteOwnAccount); 0515 } else if (id == QLatin1String("Accounts_RegistrationForm")) { 0516 setAllowRegistrationFrom(value.toString()); 0517 } else if (id == QLatin1String("Accounts_PasswordReset")) { 0518 assignSettingValue(value.toBool(), ServerConfigFeatureType::AllowPasswordReset); 0519 } else if (id == QLatin1String("Accounts_AllowEmailChange")) { 0520 assignSettingValue(value.toBool(), ServerConfigFeatureType::AllowEmailChange); 0521 } else if (id == QLatin1String("Accounts_AllowPasswordChange")) { 0522 assignSettingValue(value.toBool(), ServerConfigFeatureType::AllowPasswordChange); 0523 } else if (id == QLatin1String("Accounts_AllowUsernameChange")) { 0524 assignSettingValue(value.toBool(), ServerConfigFeatureType::AllowUsernameChange); 0525 } else if (id == QLatin1String("Accounts_AllowUserProfileChange")) { 0526 assignSettingValue(value.toBool(), ServerConfigFeatureType::AllowUserProfileChange); 0527 } else if (id == QLatin1String("Accounts_AllowUserAvatarChange")) { 0528 assignSettingValue(value.toBool(), ServerConfigFeatureType::AllowUserAvatarChange); 0529 } else if (id == QLatin1String("LDAP_Enable")) { 0530 assignSettingValue(value.toBool(), ServerConfigFeatureType::LdapEnabled); 0531 } else if (id == QLatin1String("Accounts_LoginExpiration")) { 0532 setLoginExpiration(value.toInt()); 0533 } else if (id == QLatin1String("Accounts_TwoFactorAuthentication_Enabled")) { 0534 assignSettingValue(value.toBool(), ServerConfigFeatureType::TwoFactorAuthenticationEnabled); 0535 } else if (id == QLatin1String("Accounts_TwoFactorAuthentication_By_Email_Enabled")) { 0536 assignSettingValue(value.toBool(), ServerConfigFeatureType::TwoFactorAuthenticationByEmailEnabled); 0537 } else if (id == QLatin1String("Accounts_TwoFactorAuthentication_By_TOTP_Enabled")) { 0538 assignSettingValue(value.toBool(), ServerConfigFeatureType::TwoFactorAuthenticationByTOTPEnabled); 0539 } else if (id == QLatin1String("Accounts_TwoFactorAuthentication_Enforce_Password_Fallback")) { 0540 assignSettingValue(value.toBool(), ServerConfigFeatureType::TwoFactorAuthenticationEnforcePasswordFallback); 0541 } else if (id == QLatin1String("UTF8_Channel_Names_Validation")) { 0542 setChannelNameValidation(value.toString()); 0543 } else if (id == QLatin1String("UTF8_User_Names_Validation")) { 0544 setUserNameValidation(value.toString()); 0545 } else if (id == QLatin1String("Message_MaxAllowedSize")) { 0546 setMessageMaximumAllowedSize(value.toInt()); 0547 } else if (id == QLatin1String("Message_AllowConvertLongMessagesToAttachment")) { 0548 setMessageAllowConvertLongMessagesToAttachment(value.toBool()); 0549 } else if (id == QLatin1String("UI_Use_Real_Name")) { 0550 setUseRealName(value.toBool()); 0551 } else if (id == QLatin1String("Accounts_AllowInvisibleStatusOption")) { 0552 setAccountsAllowInvisibleStatusOption(value.toBool()); 0553 } else if (id == QLatin1String("UserData_EnableDownload")) { 0554 setUserDataDownloadEnabled(value.toBool()); 0555 } else if (id == QLatin1String("Device_Management_Enable_Login_Emails")) { 0556 setDeviceManagementEnableLoginEmails(value.toBool()); 0557 } else if (id == QLatin1String("Device_Management_Allow_Login_Email_preference")) { 0558 setDeviceManagementAllowLoginEmailpreference(value.toBool()); 0559 } else if (id == QLatin1String("Message_GroupingPeriod")) { 0560 setMessageGroupingPeriod(value.toInt()); 0561 } else if (id == QLatin1String("DirectMesssage_maxUsers")) { 0562 setDirectMessageMaximumUser(value.toInt()); 0563 } else if (id == QLatin1String("Message_QuoteChainLimit")) { 0564 setMessageQuoteChainLimit(value.toInt()); 0565 } else if (id == QLatin1String("Accounts_AllowUserStatusMessageChange")) { 0566 setAllowCustomStatusMessage(value.toBool()); 0567 } else if (id == QLatin1String("FileUpload_MediaTypeWhiteList")) { 0568 setMediaWhiteList(value.toString().split(QLatin1Char(','), Qt::SkipEmptyParts)); 0569 } else if (id == QLatin1String("FileUpload_MediaTypeBlackList")) { 0570 setMediaBlackList(value.toString().split(QLatin1Char(','), Qt::SkipEmptyParts)); 0571 } else if (id == QLatin1String("Accounts_ShowFormLogin")) { 0572 if (value.toBool()) { 0573 mServerAuthTypes |= AuthenticationManager::AuthMethodType::Password; 0574 } else { 0575 mServerAuthTypes &= ~AuthenticationManager::AuthMethodType::Password; 0576 } 0577 } else if (id == QLatin1String("AuthenticationServerMethod")) { 0578 mServerAuthTypes = static_cast<AuthenticationManager::AuthMethodTypes>(value.toInt()); 0579 } else if (id == QLatin1String("API_Embed")) { 0580 setPreviewEmbed(value.toBool()); 0581 } else if (id == QLatin1String("API_EmbedCacheExpirationDays")) { 0582 setEmbedCacheExpirationDays(value.toInt()); 0583 } else { 0584 qCDebug(RUQOLA_LOG) << "Other public settings id " << id << value; 0585 } 0586 } 0587 0588 QStringList RuqolaServerConfig::mediaBlackList() const 0589 { 0590 return mMediaBlackList; 0591 } 0592 0593 void RuqolaServerConfig::setMediaBlackList(const QStringList &newMediaBlackList) 0594 { 0595 mMediaBlackList = newMediaBlackList; 0596 } 0597 0598 QJsonObject RuqolaServerConfig::createJsonObject(const QString &identifier, const QString &value) 0599 { 0600 QJsonObject v; 0601 v[QLatin1String("_id")] = identifier; 0602 v[QLatin1String("value")] = value; 0603 return v; 0604 } 0605 0606 QJsonObject RuqolaServerConfig::createJsonObject(const QString &identifier, const RuqolaServerConfig::ConfigWithDefaultValue &value) 0607 { 0608 QJsonObject v; 0609 v[QLatin1String("_id")] = identifier; 0610 QJsonObject customUrl; 0611 customUrl[QLatin1String("defaultUrl")] = value.defaultUrl; 0612 customUrl[QLatin1String("url")] = value.url; 0613 v[QLatin1String("value")] = customUrl; 0614 return v; 0615 } 0616 0617 QJsonObject RuqolaServerConfig::createJsonObject(const QString &identifier, qint64 value) 0618 { 0619 QJsonObject v; 0620 v[QLatin1String("_id")] = identifier; 0621 v[QLatin1String("value")] = static_cast<qint64>(value); 0622 return v; 0623 } 0624 0625 QJsonObject RuqolaServerConfig::createJsonObject(const QString &identifier, bool value) 0626 { 0627 QJsonObject v; 0628 v[QLatin1String("_id")] = identifier; 0629 v[QLatin1String("value")] = value; 0630 return v; 0631 } 0632 0633 QJsonObject RuqolaServerConfig::createJsonObject(const QString &identifier, int value) 0634 { 0635 QJsonObject v; 0636 v[QLatin1String("_id")] = identifier; 0637 v[QLatin1String("value")] = value; 0638 return v; 0639 } 0640 0641 QByteArray RuqolaServerConfig::serialize(bool toBinary) 0642 { 0643 QJsonObject o; 0644 QJsonArray array; 0645 array.append(createJsonObject(QStringLiteral("uniqueID"), mUniqueId)); 0646 array.append(createJsonObject(QStringLiteral("Jitsi_Enabled"), static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::JitsiEnabled))); 0647 array.append( 0648 createJsonObject(QStringLiteral("Jitsi_Enable_Teams"), static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::JitsiEnabledTeams))); 0649 array.append(createJsonObject(QStringLiteral("Jitsi_Enable_Channels"), 0650 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::JitsiEnabledChannels))); 0651 array.append(createJsonObject(QStringLiteral("Jitsi_Domain"), jitsiMeetUrl())); 0652 array.append(createJsonObject(QStringLiteral("Jitsi_URL_Room_Prefix"), jitsiMeetPrefix())); 0653 array.append(createJsonObject(QStringLiteral("FileUpload_Storage_Type"), fileUploadStorageType())); 0654 array.append( 0655 createJsonObject(QStringLiteral("Message_AllowEditing"), static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AllowEditingMessage))); 0656 array.append(createJsonObject(QStringLiteral("Message_AllowEditing_BlockEditInMinutes"), blockEditingMessageInMinutes())); 0657 array.append(createJsonObject(QStringLiteral("Message_AllowDeleting_BlockDeleteInMinutes"), blockDeletingMessageInMinutes())); 0658 array.append(createJsonObject(QStringLiteral("OTR_Enable"), static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::OtrEnabled))); 0659 array.append(createJsonObject(QStringLiteral("Site_Url"), mSiteUrl)); 0660 array.append(createJsonObject(QStringLiteral("Site_Name"), siteName())); 0661 array.append(createJsonObject(QStringLiteral("E2E_Enable"), static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::EncryptionEnabled))); 0662 array.append( 0663 createJsonObject(QStringLiteral("Message_AllowPinning"), static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AllowMessagePinning))); 0664 array.append(createJsonObject(QStringLiteral("Message_AllowStarring"), 0665 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AllowMessageStarring))); 0666 array.append(createJsonObject(QStringLiteral("Message_AllowDeleting"), 0667 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AllowMessageDeleting))); 0668 array.append(createJsonObject(QStringLiteral("Threads_enabled"), static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::ThreadsEnabled))); 0669 array.append( 0670 createJsonObject(QStringLiteral("Discussion_enabled"), static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::DiscussionEnabled))); 0671 array.append(createJsonObject(QStringLiteral("AutoTranslate_Enabled"), 0672 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AutoTranslateEnabled))); 0673 array.append( 0674 createJsonObject(QStringLiteral("FileUpload_Enabled"), static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::UploadFileEnabled))); 0675 array.append(createJsonObject(QStringLiteral("AutoTranslate_GoogleAPIKey"), autoTranslateGoogleKey())); 0676 array.append( 0677 createJsonObject(QStringLiteral("Broadcasting_enabled"), static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::BroadCastEnabled))); 0678 array.append(createJsonObject(QStringLiteral("Message_VideoRecorderEnabled"), 0679 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::VideoRecorderEnabled))); 0680 array.append(createJsonObject(QStringLiteral("Message_AudioRecorderEnabled"), 0681 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AudioRecorderEnabled))); 0682 array.append(createJsonObject(QStringLiteral("Accounts_AllowDeleteOwnAccount"), 0683 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AllowDeleteOwnAccount))); 0684 array.append(createJsonObject(QStringLiteral("Accounts_PasswordReset"), 0685 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AllowPasswordReset))); 0686 array.append(createJsonObject(QStringLiteral("Accounts_AllowEmailChange"), 0687 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AllowEmailChange))); 0688 array.append(createJsonObject(QStringLiteral("Accounts_AllowPasswordChange"), 0689 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AllowPasswordChange))); 0690 array.append(createJsonObject(QStringLiteral("Accounts_AllowUsernameChange"), 0691 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AllowUsernameChange))); 0692 0693 array.append(createJsonObject(QStringLiteral("Accounts_AllowUserProfileChange"), 0694 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AllowUserProfileChange))); 0695 array.append(createJsonObject(QStringLiteral("Accounts_AllowUserAvatarChange"), 0696 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::AllowUserAvatarChange))); 0697 array.append(createJsonObject(QStringLiteral("LDAP_Enable"), static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::LdapEnabled))); 0698 array.append(createJsonObject(QStringLiteral("Accounts_TwoFactorAuthentication_Enabled"), 0699 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::TwoFactorAuthenticationEnabled))); 0700 array.append(createJsonObject(QStringLiteral("Accounts_TwoFactorAuthentication_By_Email_Enabled"), 0701 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::TwoFactorAuthenticationByEmailEnabled))); 0702 array.append(createJsonObject(QStringLiteral("Accounts_TwoFactorAuthentication_By_TOTP_Enabled"), 0703 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::TwoFactorAuthenticationByTOTPEnabled))); 0704 array.append(createJsonObject(QStringLiteral("Accounts_TwoFactorAuthentication_Enforce_Password_Fallback"), 0705 static_cast<bool>(serverConfigFeatureTypes() & ServerConfigFeatureType::TwoFactorAuthenticationEnforcePasswordFallback))); 0706 array.append(createJsonObject(QStringLiteral("Assets_logo"), logoUrl())); 0707 array.append(createJsonObject(QStringLiteral("Assets_favicon"), faviconUrl())); 0708 array.append(createJsonObject(QStringLiteral("Accounts_LoginExpiration"), loginExpiration())); 0709 array.append(createJsonObject(QStringLiteral("UTF8_Channel_Names_Validation"), channelNameValidation())); 0710 array.append(createJsonObject(QStringLiteral("UTF8_User_Names_Validation"), userNameValidation())); 0711 array.append(createJsonObject(QStringLiteral("Message_MaxAllowedSize"), messageMaximumAllowedSize())); 0712 array.append(createJsonObject(QStringLiteral("Message_AllowConvertLongMessagesToAttachment"), messageAllowConvertLongMessagesToAttachment())); 0713 array.append(createJsonObject(QStringLiteral("UI_Use_Real_Name"), useRealName())); 0714 array.append(createJsonObject(QStringLiteral("Accounts_AllowInvisibleStatusOption"), accountsAllowInvisibleStatusOption())); 0715 array.append(createJsonObject(QStringLiteral("UserData_EnableDownload"), userDataDownloadEnabled())); 0716 array.append(createJsonObject(QStringLiteral("Device_Management_Enable_Login_Emails"), deviceManagementEnableLoginEmails())); 0717 array.append(createJsonObject(QStringLiteral("Device_Management_Allow_Login_Email_preference"), deviceManagementAllowLoginEmailpreference())); 0718 array.append(createJsonObject(QStringLiteral("Message_GroupingPeriod"), messageGroupingPeriod())); 0719 array.append(createJsonObject(QStringLiteral("DirectMesssage_maxUsers"), directMessageMaximumUser())); 0720 array.append(createJsonObject(QStringLiteral("Message_QuoteChainLimit"), messageQuoteChainLimit())); 0721 array.append(createJsonObject(QStringLiteral("Accounts_AllowUserStatusMessageChange"), allowCustomStatusMessage())); 0722 array.append(createJsonObject(QStringLiteral("FileUpload_MediaTypeWhiteList"), mMediaWhiteList.join(QLatin1Char(',')))); 0723 array.append(createJsonObject(QStringLiteral("FileUpload_MediaTypeBlackList"), mMediaBlackList.join(QLatin1Char(',')))); 0724 array.append(createJsonObject(QStringLiteral("FileUpload_MaxFileSize"), mFileMaxFileSize)); 0725 array.append(createJsonObject(QStringLiteral("AuthenticationServerMethod"), static_cast<int>(mServerAuthTypes))); 0726 array.append(createJsonObject(QStringLiteral("API_Embed"), previewEmbed())); 0727 array.append(createJsonObject(QStringLiteral("API_EmbedCacheExpirationDays"), embedCacheExpirationDays())); 0728 0729 o[QLatin1String("result")] = array; 0730 #if 0 0731 } else if (id.contains(regExp)) { 0732 if (value.toBool()) { 0733 addOauthService(id); 0734 } 0735 } else if (id == QLatin1String("Accounts_RegistrationForm")) { 0736 setAllowRegistrationFrom(value.toString()); 0737 0738 #endif 0739 if (toBinary) { 0740 return QCborValue::fromJsonValue(o).toCbor(); 0741 } 0742 QJsonDocument d; 0743 d.setObject(o); 0744 return d.toJson(QJsonDocument::Indented); 0745 } 0746 0747 void RuqolaServerConfig::deserialize(const QJsonObject &obj) 0748 { 0749 QJsonArray configs = obj.value(QLatin1String("result")).toArray(); 0750 mServerConfigFeatureTypes = ServerConfigFeatureType::None; 0751 for (QJsonValueRef currentConfig : configs) { 0752 const QJsonObject currentConfObject = currentConfig.toObject(); 0753 loadSettings(currentConfObject); 0754 } 0755 } 0756 0757 QStringList RuqolaServerConfig::mediaWhiteList() const 0758 { 0759 return mMediaWhiteList; 0760 } 0761 0762 void RuqolaServerConfig::setMediaWhiteList(const QStringList &newMediaWhiteList) 0763 { 0764 mMediaWhiteList = newMediaWhiteList; 0765 } 0766 0767 bool RuqolaServerConfig::allowCustomStatusMessage() const 0768 { 0769 return mAllowCustomStatusMessage; 0770 } 0771 0772 void RuqolaServerConfig::setAllowCustomStatusMessage(bool newAllowCustomStatusMessage) 0773 { 0774 mAllowCustomStatusMessage = newAllowCustomStatusMessage; 0775 } 0776 0777 int RuqolaServerConfig::messageQuoteChainLimit() const 0778 { 0779 return mMessageQuoteChainLimit; 0780 } 0781 0782 void RuqolaServerConfig::setMessageQuoteChainLimit(int newMessageQuoteChainLimit) 0783 { 0784 mMessageQuoteChainLimit = newMessageQuoteChainLimit; 0785 } 0786 0787 int RuqolaServerConfig::directMessageMaximumUser() const 0788 { 0789 return mDirectMessageMaximumUser; 0790 } 0791 0792 void RuqolaServerConfig::setDirectMessageMaximumUser(int newDirectMessageMaximumUser) 0793 { 0794 mDirectMessageMaximumUser = newDirectMessageMaximumUser; 0795 } 0796 0797 int RuqolaServerConfig::messageGroupingPeriod() const 0798 { 0799 return mMessageGroupingPeriod; 0800 } 0801 0802 void RuqolaServerConfig::setMessageGroupingPeriod(int newMessageGroupingPeriod) 0803 { 0804 mMessageGroupingPeriod = newMessageGroupingPeriod; 0805 } 0806 0807 bool RuqolaServerConfig::deviceManagementAllowLoginEmailpreference() const 0808 { 0809 return mDeviceManagementAllowLoginEmailpreference; 0810 } 0811 0812 void RuqolaServerConfig::setDeviceManagementAllowLoginEmailpreference(bool newDeviceManagementAllowLoginEmailpreference) 0813 { 0814 mDeviceManagementAllowLoginEmailpreference = newDeviceManagementAllowLoginEmailpreference; 0815 } 0816 0817 bool RuqolaServerConfig::deviceManagementEnableLoginEmails() const 0818 { 0819 return mDeviceManagementEnableLoginEmails; 0820 } 0821 0822 void RuqolaServerConfig::setDeviceManagementEnableLoginEmails(bool newDeviceManagementEnableLoginEmails) 0823 { 0824 mDeviceManagementEnableLoginEmails = newDeviceManagementEnableLoginEmails; 0825 } 0826 0827 bool RuqolaServerConfig::userDataDownloadEnabled() const 0828 { 0829 return mUserDataDownloadEnabled; 0830 } 0831 0832 void RuqolaServerConfig::setUserDataDownloadEnabled(bool newUserDataDownloadEnabled) 0833 { 0834 mUserDataDownloadEnabled = newUserDataDownloadEnabled; 0835 } 0836 0837 bool RuqolaServerConfig::accountsAllowInvisibleStatusOption() const 0838 { 0839 return mAccountsAllowInvisibleStatusOption; 0840 } 0841 0842 void RuqolaServerConfig::setAccountsAllowInvisibleStatusOption(bool newAccountsAllowInvisibleStatusOption) 0843 { 0844 mAccountsAllowInvisibleStatusOption = newAccountsAllowInvisibleStatusOption; 0845 } 0846 0847 bool RuqolaServerConfig::hasEnterpriseSupport() const 0848 { 0849 return mHasEnterpriseSupport; 0850 } 0851 0852 void RuqolaServerConfig::setHasEnterpriseSupport(bool newHasEnterpriseSupport) 0853 { 0854 mHasEnterpriseSupport = newHasEnterpriseSupport; 0855 } 0856 0857 bool RuqolaServerConfig::useRealName() const 0858 { 0859 return mUIUseRealName; 0860 } 0861 0862 void RuqolaServerConfig::setUseRealName(bool newUIUseRealName) 0863 { 0864 mUIUseRealName = newUIUseRealName; 0865 } 0866 0867 void RuqolaServerConfig::parsePublicSettings(const QJsonObject &obj, bool update) 0868 { 0869 // qDebug() << " void RuqolaServerConfig::parsePublicSettings(const QJsonObject &obj)" << obj; 0870 QJsonArray configs = obj.value(QLatin1String("result")).toArray(); 0871 if (!update) { 0872 mServerConfigFeatureTypes = ServerConfigFeatureType::None; 0873 } 0874 for (QJsonValueRef currentConfig : configs) { 0875 const QJsonObject currentConfObject = currentConfig.toObject(); 0876 loadSettings(currentConfObject); 0877 } 0878 } 0879 0880 bool RuqolaServerConfig::ConfigWithDefaultValue::operator==(const RuqolaServerConfig::ConfigWithDefaultValue &other) const 0881 { 0882 return other.url == url && other.defaultUrl == defaultUrl; 0883 } 0884 0885 bool RuqolaServerConfig::operator==(const RuqolaServerConfig &other) const 0886 { 0887 return mUniqueId == other.mUniqueId && mJitsiMeetUrl == other.mJitsiMeetUrl && mJitsiMeetPrefix == other.mJitsiMeetPrefix 0888 && mFileUploadStorageType == other.mFileUploadStorageType && mSiteUrl == other.mSiteUrl && mSiteName == other.mSiteName 0889 && mServerVersionStr == other.mServerVersionStr && mAutoTranslateGoogleKey == other.mAutoTranslateGoogleKey 0890 && mChannelNameValidation == other.mChannelNameValidation && mUserNameValidation == other.mUserNameValidation 0891 && mServerAuthTypes == other.mServerAuthTypes && mRuqolaAuthMethodTypes == other.mRuqolaAuthMethodTypes 0892 && mBlockEditingMessageInMinutes == other.mBlockEditingMessageInMinutes && mBlockDeletingMessageInMinutes == other.mBlockDeletingMessageInMinutes 0893 && mServerVersionMajor == other.mServerVersionMajor && mServerVersionMinor == other.mServerVersionMinor 0894 && mServerVersionPatch == other.mServerVersionPatch && mFileMaxFileSize == other.mFileMaxFileSize 0895 && mNeedAdaptNewSubscriptionRC60 == other.mNeedAdaptNewSubscriptionRC60 0896 && mMessageAllowConvertLongMessagesToAttachment == other.mMessageAllowConvertLongMessagesToAttachment && mUIUseRealName == other.mUIUseRealName 0897 && mServerConfigFeatureTypes == other.mServerConfigFeatureTypes && mMediaWhiteList == other.mMediaWhiteList && mMediaBlackList == other.mMediaBlackList 0898 && mLogoUrl == other.mLogoUrl && mFaviconUrl == other.mFaviconUrl && mLoginExpiration == other.mLoginExpiration 0899 && mMessageMaximumAllowedSize == other.mMessageMaximumAllowedSize && mMessageGroupingPeriod == other.mMessageGroupingPeriod 0900 && mDirectMessageMaximumUser == other.mDirectMessageMaximumUser && mMessageQuoteChainLimit == other.mMessageQuoteChainLimit 0901 && mHasEnterpriseSupport == other.mHasEnterpriseSupport && mAccountsAllowInvisibleStatusOption == other.mAccountsAllowInvisibleStatusOption 0902 && mUserDataDownloadEnabled == other.mUserDataDownloadEnabled && mDeviceManagementEnableLoginEmails == other.mDeviceManagementEnableLoginEmails 0903 && mDeviceManagementAllowLoginEmailpreference == other.mDeviceManagementAllowLoginEmailpreference 0904 && mAllowCustomStatusMessage == other.mAllowCustomStatusMessage && mPreviewEmbed == other.mPreviewEmbed 0905 && mEmbedCacheExpirationDays == other.mEmbedCacheExpirationDays; 0906 } 0907 0908 void RuqolaServerConfig::loadAccountSettingsFromLocalDataBase(const QByteArray &ba) 0909 { 0910 const QJsonDocument doc = QJsonDocument::fromJson(ba); 0911 const QJsonObject newObj = doc.object(); 0912 deserialize(newObj); 0913 } 0914 0915 #include "moc_ruqolaserverconfig.cpp"