File indexing completed on 2024-05-12 05:04:10
0001 // SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu> 0002 // SPDX-FileCopyrightText: 2023 Rishi Kumar <rsi.dev17@gmail.com> 0003 // SPDX-License-Identifier: GPL-3.0-or-later 0004 0005 #include "adminaccountinfo.h" 0006 0007 #include <KLocalizedString> 0008 0009 #include "abstractaccount.h" 0010 #include "accountmanager.h" 0011 0012 using namespace Qt::Literals::StringLiterals; 0013 0014 QString AdminAccountInfo::role() const 0015 { 0016 return m_role; 0017 } 0018 0019 QString AdminAccountInfo::loginStatus() const 0020 { 0021 if (m_suspended) { 0022 return i18nc("login status", "Suspended"); 0023 } else if (m_silenced) { 0024 return i18nc("login status", "Limited"); 0025 } else if (m_sensitized) { 0026 return i18nc("login status", "Sensitized"); 0027 } else if (m_disabled) { 0028 return i18nc("login status", "Frozen"); 0029 } else if (!m_emailStatus && m_ip != QStringLiteral("")) { 0030 return i18nc("login status", "Email Not confirmed"); 0031 } else if (!m_approved && m_ip != QStringLiteral("")) { 0032 return i18nc("login status", "Not Approved"); 0033 } else { 0034 return i18nc("login status", "No Limits Imposed"); 0035 } 0036 } 0037 0038 QString AdminAccountInfo::inviteRequest() const 0039 { 0040 return m_inviteRequest; 0041 } 0042 0043 bool AdminAccountInfo::emailStatus() const 0044 { 0045 return m_emailStatus; 0046 } 0047 0048 QJsonArray AdminAccountInfo::ips() const 0049 { 0050 return m_ips; 0051 } 0052 0053 Identity *AdminAccountInfo::invitedByIdentity() const 0054 { 0055 return m_invitedByIdentity.get(); 0056 } 0057 0058 Identity *AdminAccountInfo::userLevelIdentity() const 0059 { 0060 return m_userLevelIdentity.get(); 0061 } 0062 0063 Identity *AdminAccountInfo::userLevelIdentityWithVanillaPointer() const 0064 { 0065 return m_userLevelIdentityWithVanillaPointer; 0066 } 0067 0068 bool AdminAccountInfo::suspended() const 0069 { 0070 return m_suspended; 0071 } 0072 0073 void AdminAccountInfo::setSuspended(bool suspended) 0074 { 0075 if (m_suspended == suspended) { 0076 return; 0077 } 0078 m_suspended = suspended; 0079 Q_EMIT adminAccountInfoUpdated(); 0080 } 0081 0082 bool AdminAccountInfo::silenced() const 0083 { 0084 return m_silenced; 0085 } 0086 0087 void AdminAccountInfo::setSilence(bool silenced) 0088 { 0089 if (m_silenced == silenced) { 0090 return; 0091 } 0092 m_silenced = silenced; 0093 Q_EMIT adminAccountInfoUpdated(); 0094 } 0095 0096 bool AdminAccountInfo::sensitized() const 0097 { 0098 return m_sensitized; 0099 } 0100 0101 void AdminAccountInfo::setSensitized(bool sensitized) 0102 { 0103 if (m_sensitized == sensitized) { 0104 return; 0105 } 0106 m_sensitized = sensitized; 0107 Q_EMIT adminAccountInfoUpdated(); 0108 } 0109 0110 bool AdminAccountInfo::disabled() const 0111 { 0112 return m_disabled; 0113 } 0114 0115 void AdminAccountInfo::setDisabled(bool disabled) 0116 { 0117 if (m_disabled == disabled) { 0118 return; 0119 } 0120 m_disabled = disabled; 0121 Q_EMIT adminAccountInfoUpdated(); 0122 } 0123 0124 bool AdminAccountInfo::approved() const 0125 { 0126 return m_approved; 0127 } 0128 0129 void AdminAccountInfo::setApproved(bool approved) 0130 { 0131 if (m_approved == approved) { 0132 return; 0133 } 0134 m_approved = approved; 0135 Q_EMIT adminAccountInfoUpdated(); 0136 } 0137 0138 bool AdminAccountInfo::isLocal() const 0139 { 0140 // hack to determine if an account is local 0141 return m_ip != QStringLiteral(""); 0142 } 0143 0144 int AdminAccountInfo::position() const 0145 { 0146 return m_position; 0147 } 0148 0149 void AdminAccountInfo::reparentAdminAccountInfo(AbstractAccount *parent) 0150 { 0151 m_parent = parent; 0152 } 0153 0154 void AdminAccountInfo::fromSourceData(const QJsonObject &jdoc) 0155 { 0156 auto account = AccountManager::instance().selectedAccount(); 0157 const auto doc = jdoc["account"_L1]; 0158 m_userLevelIdentity = account->identityLookup(doc["id"_L1].toString(), doc.toObject()); 0159 0160 m_role = jdoc["role"_L1]["name"_L1].toString(); 0161 m_ip = jdoc["ip"_L1].toString(); 0162 m_ips = jdoc["ips"_L1].toArray(); 0163 m_email = jdoc["email"_L1].toString(); 0164 m_inviteRequest = jdoc["invite_request"_L1].toString(); 0165 m_emailStatus = jdoc["confirmed"_L1].toBool(); 0166 m_suspended = jdoc["suspended"_L1].toBool(); 0167 m_silenced = jdoc["silenced"_L1].toBool(); 0168 m_sensitized = jdoc["sensitized"_L1].toBool(); 0169 m_disabled = jdoc["disabled"_L1].toBool(); 0170 m_approved = jdoc["approved"_L1].toBool(); 0171 m_locale = jdoc["locale"_L1].toString(); 0172 m_position = jdoc["role"_L1]["position"_L1].toInt(); 0173 m_joined = QDateTime::fromString(jdoc["created_at"_L1].toString(), Qt::ISODate).toLocalTime(); 0174 0175 // logic for last used activity 0176 const QJsonArray ipsArray = jdoc["ips"_L1].toArray(); 0177 calculateRecentActivity(ipsArray); 0178 0179 if (jdoc["email"_L1].toString().length() > 0) { 0180 m_emailProvider = jdoc["email"_L1].toString().split('@'_L1).at(1); 0181 } 0182 0183 auto invited_by_account_id = jdoc["invited_by_account_id"_L1].toString(); 0184 0185 if (invited_by_account_id != QStringLiteral("")) { 0186 QUrl url = account->apiUrl(QStringLiteral("/api/v1/accounts/%1").arg(invited_by_account_id)); 0187 account->get(url, true, this, [this, account, invited_by_account_id](QNetworkReply *reply) { 0188 const auto doc = QJsonDocument::fromJson(reply->readAll()).object(); 0189 m_invitedByIdentity = account->identityLookup(invited_by_account_id, doc); 0190 }); 0191 } 0192 0193 Q_EMIT adminAccountInfoUpdated(); 0194 } 0195 0196 QString AdminAccountInfo::ip() const 0197 { 0198 return m_ip; 0199 } 0200 0201 QString AdminAccountInfo::email() const 0202 { 0203 return m_email; 0204 } 0205 0206 QString AdminAccountInfo::emailProvider() const 0207 { 0208 return m_emailProvider; 0209 } 0210 0211 QString AdminAccountInfo::locale() const 0212 { 0213 return m_locale; 0214 } 0215 0216 QDateTime AdminAccountInfo::joined() const 0217 { 0218 return m_joined; 0219 } 0220 0221 QDateTime AdminAccountInfo::lastActive() const 0222 { 0223 return m_lastActive; 0224 } 0225 0226 void AdminAccountInfo::calculateRecentActivity(const QJsonArray &ipsArray) 0227 { 0228 QDateTime latestDateTime; 0229 for (const auto &ipValue : ipsArray) { 0230 const auto object = ipValue.toObject(); 0231 const QDateTime usedAtTime = QDateTime::fromString(object[QStringLiteral("used_at")].toString(), Qt::ISODate); 0232 if (usedAtTime > latestDateTime) 0233 latestDateTime = usedAtTime; 0234 } 0235 m_lastActive = latestDateTime.toLocalTime(); 0236 } 0237 0238 #include "moc_adminaccountinfo.cpp"