File indexing completed on 2024-02-25 16:44:39

0001 /*
0002    SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "personalaccesstokeninfosmodel.h"
0008 #include <KLocalizedString>
0009 
0010 PersonalAccessTokenInfosModel::PersonalAccessTokenInfosModel(QObject *parent)
0011     : QAbstractListModel{parent}
0012 {
0013 }
0014 
0015 PersonalAccessTokenInfosModel::~PersonalAccessTokenInfosModel() = default;
0016 
0017 int PersonalAccessTokenInfosModel::rowCount(const QModelIndex &parent) const
0018 {
0019     Q_UNUSED(parent)
0020     return mPersonalAccessTokenInfos.count();
0021 }
0022 
0023 QVariant PersonalAccessTokenInfosModel::data(const QModelIndex &index, int role) const
0024 {
0025     if (index.row() < 0 || index.row() >= mPersonalAccessTokenInfos.count()) {
0026         return {};
0027     }
0028     if (role != Qt::DisplayRole) {
0029         return {};
0030     }
0031 
0032     const auto &info = mPersonalAccessTokenInfos.at(index.row());
0033     const int col = index.column();
0034     switch (col) {
0035     case PersonalAccessTokenInfosModel::CreateAt: {
0036         return info.createAtDisplayDateTime();
0037     }
0038     case PersonalAccessTokenInfosModel::CreateAtDateTime: {
0039         return info.createdAt();
0040     }
0041     case PersonalAccessTokenInfosModel::LastTokenPart: {
0042         return info.lastTokenPart();
0043     }
0044     case PersonalAccessTokenInfosModel::ByPassTwoFactor: {
0045         return info.bypassTwoFactor() ? i18n("Ignored") : i18n("Required");
0046     }
0047     case PersonalAccessTokenInfosModel::Name: {
0048         return info.name();
0049     }
0050     }
0051     return {};
0052 }
0053 
0054 void PersonalAccessTokenInfosModel::clear()
0055 {
0056     if (!mPersonalAccessTokenInfos.isEmpty()) {
0057         beginResetModel();
0058         mPersonalAccessTokenInfos.clear();
0059         endResetModel();
0060     }
0061 }
0062 
0063 void PersonalAccessTokenInfosModel::insertPersonalAccessTokenInfos(const PersonalAccessTokenInfos &infos)
0064 {
0065     clear();
0066     if (!infos.isEmpty()) {
0067         beginInsertRows(QModelIndex(), 0, infos.count() - 1);
0068         mPersonalAccessTokenInfos = infos;
0069         endInsertRows();
0070     }
0071 }
0072 
0073 QVariant PersonalAccessTokenInfosModel::headerData(int section, Qt::Orientation orientation, int role) const
0074 {
0075     if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
0076         switch (static_cast<PersonalAccessTokenInfosRoles>(section)) {
0077         case PersonalAccessTokenInfosModel::Name:
0078             return i18n("Name");
0079         case PersonalAccessTokenInfosModel::CreateAt:
0080             return i18n("Create At");
0081         case PersonalAccessTokenInfosModel::ByPassTwoFactor:
0082             return i18n("Two Factor Authentication");
0083         case PersonalAccessTokenInfosModel::LastTokenPart:
0084             return i18n("Last token part");
0085         case PersonalAccessTokenInfosModel::CreateAtDateTime:
0086             return {};
0087         }
0088     }
0089     return {};
0090 }
0091 
0092 int PersonalAccessTokenInfosModel::columnCount(const QModelIndex &parent) const
0093 {
0094     Q_UNUSED(parent)
0095     constexpr int val = static_cast<int>(PersonalAccessTokenInfosModel::LastColumn) + 1;
0096     return val;
0097 }
0098 
0099 void PersonalAccessTokenInfosModel::removeToken(const QString &tokenName)
0100 {
0101     const int roomCount = mPersonalAccessTokenInfos.count();
0102     for (int i = 0; i < roomCount; ++i) {
0103         if (mPersonalAccessTokenInfos.at(i).name() == tokenName) {
0104             beginRemoveRows(QModelIndex(), i, i);
0105             mPersonalAccessTokenInfos.removeAt(i);
0106             endRemoveRows();
0107             break;
0108         }
0109     }
0110 }
0111 
0112 #include "moc_personalaccesstokeninfosmodel.cpp"