File indexing completed on 2024-12-01 04:36:52

0001 /*
0002    SPDX-FileCopyrightText: 2021-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "myaccount2fadisabletotpwidget.h"
0008 #include "ddpapi/ddpclient.h"
0009 #include "rocketchataccount.h"
0010 #include <KLineEditEventHandler>
0011 #include <KLocalizedString>
0012 #include <KMessageBox>
0013 #include <QLabel>
0014 #include <QLineEdit>
0015 #include <QPushButton>
0016 #include <QVBoxLayout>
0017 
0018 MyAccount2FaDisableTotpWidget::MyAccount2FaDisableTotpWidget(RocketChatAccount *account, QWidget *parent)
0019     : QWidget{parent}
0020     , mRocketChatAccount(account)
0021     , mDisableCodeLineEdit(new QLineEdit(this))
0022 {
0023     auto mainLayout = new QVBoxLayout(this);
0024     mainLayout->setObjectName(QStringLiteral("mainLayout"));
0025     mainLayout->setContentsMargins({});
0026 
0027     auto label = new QLabel(i18n("Open your authentication app and enter the code.\nYou can also use one of your backup codes."), this);
0028     label->setObjectName(QStringLiteral("label"));
0029     mainLayout->addWidget(label);
0030 
0031     auto hboxLayout = new QHBoxLayout;
0032     hboxLayout->setObjectName(QStringLiteral("hboxLayout"));
0033     hboxLayout->setContentsMargins({});
0034     mainLayout->addLayout(hboxLayout);
0035 
0036     mDisableCodeLineEdit->setObjectName(QStringLiteral("mDisableCodeLineEdit"));
0037     mDisableCodeLineEdit->setPlaceholderText(i18n("Enter authentication code"));
0038     KLineEditEventHandler::catchReturnKey(mDisableCodeLineEdit);
0039     hboxLayout->addWidget(mDisableCodeLineEdit);
0040 
0041     auto verifyButton = new QPushButton(i18n("Verify"), this);
0042     verifyButton->setObjectName(QStringLiteral("verifyButton"));
0043     hboxLayout->addWidget(verifyButton);
0044     verifyButton->setEnabled(false);
0045     connect(verifyButton, &QPushButton::clicked, this, &MyAccount2FaDisableTotpWidget::slotVerify);
0046     connect(mDisableCodeLineEdit, &QLineEdit::textChanged, this, [verifyButton](const QString &str) {
0047         verifyButton->setEnabled(!str.trimmed().isEmpty());
0048     });
0049 
0050     auto regenerateCode = new QPushButton(i18n("Regenerate Code"), this);
0051     regenerateCode->setObjectName(QStringLiteral("regenerateCode"));
0052     mainLayout->addWidget(regenerateCode);
0053     connect(regenerateCode, &QPushButton::clicked, this, &MyAccount2FaDisableTotpWidget::slotRegenerateCode);
0054     mainLayout->addStretch(1);
0055     if (mRocketChatAccount) {
0056         connect(mRocketChatAccount, &RocketChatAccount::disabledTotpValid, this, &MyAccount2FaDisableTotpWidget::slotTotpInvalid);
0057     }
0058 }
0059 
0060 MyAccount2FaDisableTotpWidget::~MyAccount2FaDisableTotpWidget() = default;
0061 
0062 void MyAccount2FaDisableTotpWidget::slotTotpInvalid(bool check)
0063 {
0064     if (check) {
0065         Q_EMIT hide2FaDisableTotpWidget();
0066     } else {
0067         KMessageBox::error(this, i18n("Invalid two factor code."), i18n("Check Two Factor Code"));
0068     }
0069 }
0070 
0071 void MyAccount2FaDisableTotpWidget::slotVerify()
0072 {
0073     mRocketChatAccount->ddp()->disable2fa(mDisableCodeLineEdit->text());
0074 }
0075 
0076 void MyAccount2FaDisableTotpWidget::slotRegenerateCode()
0077 {
0078     mRocketChatAccount->ddp()->regenerateCodes2fa(mDisableCodeLineEdit->text());
0079 }
0080 
0081 #include "moc_myaccount2fadisabletotpwidget.cpp"