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-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 
0005 #pragma once
0006 
0007 #include <QtQml>
0008 
0009 class AbstractAccount;
0010 class Identity;
0011 
0012 class AdminAccountInfo : public QObject
0013 {
0014     Q_OBJECT
0015     QML_ELEMENT
0016     QML_UNCREATABLE("Enum")
0017 
0018     Q_PROPERTY(bool emailStatus READ emailStatus NOTIFY adminAccountInfoUpdated)
0019     Q_PROPERTY(bool suspended READ suspended WRITE setSuspended NOTIFY adminAccountInfoUpdated)
0020     Q_PROPERTY(bool silenced READ silenced WRITE setSilence NOTIFY adminAccountInfoUpdated)
0021     Q_PROPERTY(bool sensitized READ sensitized WRITE setSensitized NOTIFY adminAccountInfoUpdated)
0022     Q_PROPERTY(bool disabled READ disabled WRITE setDisabled NOTIFY adminAccountInfoUpdated)
0023     Q_PROPERTY(bool approved READ approved WRITE setApproved NOTIFY adminAccountInfoUpdated)
0024     Q_PROPERTY(bool isLocal READ isLocal NOTIFY adminAccountInfoUpdated)
0025     Q_PROPERTY(QString loginStatus READ loginStatus NOTIFY adminAccountInfoUpdated)
0026     Q_PROPERTY(QString inviteRequest READ inviteRequest NOTIFY adminAccountInfoUpdated)
0027     Q_PROPERTY(QString ip READ ip NOTIFY adminAccountInfoUpdated)
0028     Q_PROPERTY(QString email READ email NOTIFY adminAccountInfoUpdated)
0029     Q_PROPERTY(QString emailProvider READ emailProvider NOTIFY adminAccountInfoUpdated)
0030     Q_PROPERTY(QString locale READ locale NOTIFY adminAccountInfoUpdated)
0031     Q_PROPERTY(QDateTime joined READ joined NOTIFY adminAccountInfoUpdated)
0032     Q_PROPERTY(QDateTime lastActive READ lastActive NOTIFY adminAccountInfoUpdated)
0033     Q_PROPERTY(QString role READ role NOTIFY adminAccountInfoUpdated)
0034     Q_PROPERTY(QJsonArray ips READ ips NOTIFY adminAccountInfoUpdated)
0035     Q_PROPERTY(Identity *invitedByIdentity READ invitedByIdentity NOTIFY adminAccountInfoUpdated)
0036     Q_PROPERTY(Identity *userLevelIdentity READ userLevelIdentity NOTIFY adminAccountInfoUpdated)
0037     Q_PROPERTY(int position READ position NOTIFY adminAccountInfoUpdated)
0038 
0039 public:
0040     enum Permission {
0041         Administrator = 0x1,
0042         Devops = 0x2,
0043         ViewAuditLog = 0x4,
0044         ViewDashboard = 0x8,
0045         ManageReports = 0x10,
0046         ManageFederation = 0x20,
0047         ManageSettings = 0x40,
0048         ManageBlocks = 0x80,
0049         ManageTaxonomies = 0x100,
0050         ManageAppeals = 0x200,
0051         ManageUsers = 0x400,
0052         ManageInvites = 0x800,
0053         ManageRules = 0x1000,
0054         ManageAnnouncements = 0x2000,
0055         ManageCustomEmojis = 0x4000,
0056         ManageWebhooks = 0x8000,
0057         InviteUsers = 0x10000,
0058         ManageRoles = 0x20000,
0059         ManageUserAccess = 0x40000,
0060         DeleteUserData = 0x80000,
0061         ModerationToolAccess = Administrator | Devops | ViewAuditLog | ViewDashboard | ManageReports | ManageFederation | ManageSettings | ManageBlocks
0062             | ManageTaxonomies | ManageAppeals | ManageUsers | ManageInvites | ManageRules | ManageAnnouncements | ManageCustomEmojis | ManageWebhooks
0063             | InviteUsers | ManageRoles | ManageUserAccess | DeleteUserData
0064     };
0065 
0066     Q_DECLARE_FLAGS(Permissions, Permission)
0067     Q_ENUM(Permission)
0068     QString ip() const;
0069     QString email() const;
0070     QString emailProvider() const;
0071     QString locale() const;
0072     QDateTime joined() const;
0073     QDateTime lastActive() const;
0074     QString role() const;
0075     QString loginStatus() const;
0076     QString inviteRequest() const;
0077     bool emailStatus() const;
0078     bool suspended() const;
0079     void setSuspended(bool suspended);
0080     bool silenced() const;
0081     void setSilence(bool silenced);
0082     bool sensitized() const;
0083     void setSensitized(bool sensitized);
0084     bool disabled() const;
0085     void setDisabled(bool disabled);
0086     bool approved() const;
0087     void setApproved(bool approved);
0088     bool isLocal() const;
0089     int position() const;
0090 
0091     QJsonArray fields() const;
0092     QJsonArray ips() const;
0093 
0094     void fromSourceData(const QJsonObject &jdoc);
0095     void reparentAdminAccountInfo(AbstractAccount *parent);
0096 
0097     Identity *invitedByIdentity() const;
0098     Identity *userLevelIdentity() const;
0099     Identity *userLevelIdentityWithVanillaPointer() const;
0100 
0101 Q_SIGNALS:
0102     void adminAccountInfoUpdated();
0103 
0104 private:
0105     QString m_ip;
0106     QString m_email;
0107     QString m_emailProvider;
0108     QString m_locale;
0109     QDateTime m_joined;
0110     QDateTime m_lastActive;
0111     QString m_role;
0112     QString m_inviteRequest;
0113     bool m_emailStatus;
0114     bool m_suspended;
0115     bool m_silenced;
0116     bool m_sensitized;
0117     bool m_disabled;
0118     bool m_approved;
0119     int m_position;
0120     QJsonArray m_ips;
0121     std::shared_ptr<Identity> m_invitedByIdentity;
0122     std::shared_ptr<Identity> m_userLevelIdentity;
0123     Identity *m_userLevelIdentityWithVanillaPointer;
0124     AbstractAccount *m_parent = nullptr;
0125 
0126     void calculateRecentActivity(const QJsonArray &ipsArray);
0127 };