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 };