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"