From eb684d7fa3c107977074672615c957086e7e9088 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Tue, 28 Dec 2021 09:48:56 +0900 Subject: [PATCH] Conversion of package functionality. Signed-off-by: Michele Calgaro --- CMakeLists.txt.ORI | 17 + src/AuthDetailsWidget.ui | 94 +++ src/AuthDialog.cpp | 587 +++++++++--------- src/AuthDialog.h | 78 ++- src/AuthDialog.ui | 171 ----- src/AuthDialogWidget.ui | 168 +++++ src/CMakeLists.txt | 9 +- src/authdetails.ui | 91 --- src/main.cpp | 48 +- ...edesktop.PolicyKit.AuthenticationAgent.xml | 2 - src/org.kde.Polkit1AuthAgent.xml | 10 - src/policykitlistener.cpp | 237 ------- src/policykitlistener.h | 80 --- src/{policykitkde.h => polkit-agent-tde.cpp} | 25 +- src/{policykitkde.cpp => polkit-agent-tde.h} | 35 +- src/polkit-listener.cpp | 226 +++++++ src/polkit-listener.h | 71 +++ 17 files changed, 941 insertions(+), 1008 deletions(-) create mode 100644 CMakeLists.txt.ORI create mode 100644 src/AuthDetailsWidget.ui delete mode 100644 src/AuthDialog.ui create mode 100644 src/AuthDialogWidget.ui delete mode 100644 src/authdetails.ui delete mode 100644 src/org.kde.Polkit1AuthAgent.xml delete mode 100644 src/policykitlistener.cpp delete mode 100644 src/policykitlistener.h rename src/{policykitkde.h => polkit-agent-tde.cpp} (75%) rename src/{policykitkde.cpp => polkit-agent-tde.h} (59%) create mode 100644 src/polkit-listener.cpp create mode 100644 src/polkit-listener.h diff --git a/CMakeLists.txt.ORI b/CMakeLists.txt.ORI new file mode 100644 index 0000000..8b2ebe7 --- /dev/null +++ b/CMakeLists.txt.ORI @@ -0,0 +1,17 @@ +kde4_add_executable(polkit-kde-authentication-agent-1 ${policykit_SRCS}) + +target_link_libraries(polkit-kde-authentication-agent-1 + ${KDE4_TDEUI_LIBS} + ${POLKITQT-1_LIBRARIES} +) + +configure_file(polkit-kde-authentication-agent-1.desktop.in ${CMAKE_BINARY_DIR}/polkit-kde-authentication-agent-1.desktop) + +install(TARGETS polkit-kde-authentication-agent-1 DESTINATION ${LIBEXEC_INSTALL_DIR}) + +install(FILES ${CMAKE_BINARY_DIR}/polkit-kde-authentication-agent-1.desktop DESTINATION ${AUTOSTART_INSTALL_DIR}) + +install(FILES policykit1-kde.notifyrc DESTINATION ${DATA_INSTALL_DIR}/policykit1-kde) + +include(MacroOptionalAddSubdirectory) +macro_optional_add_subdirectory( po ) diff --git a/src/AuthDetailsWidget.ui b/src/AuthDetailsWidget.ui new file mode 100644 index 0000000..cf2976d --- /dev/null +++ b/src/AuthDetailsWidget.ui @@ -0,0 +1,94 @@ + + AuthDetailsWidget + + + AuthDetailsWidget + + + + 0 + 0 + 273 + 80 + + + + + 3 + 3 + 0 + 0 + + + + + gridLayout + + + + label + + + Application: + + + + + label_3 + + + Action: + + + + + vendorL + + + Vendor: + + + + + action_label + + + Action: + + + + + vendorUL + + + Vendor: + + + + + + true + + + + + line + + + Horizontal + + + + + app_label + + + Application: + + + + + + kurllabel.h + + diff --git a/src/AuthDialog.cpp b/src/AuthDialog.cpp index e90a851..2079bca 100644 --- a/src/AuthDialog.cpp +++ b/src/AuthDialog.cpp @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (C) 2007-2008 Gökçen Eraslan Copyright (C) 2008 Dirk Mueller Copyright (C) 2008 Daniel Nicoletti @@ -18,116 +18,100 @@ along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ #include "AuthDialog.h" - -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include - -AuthDialog::AuthDialog(const TQString &actionId, - const TQString &message, - const TQString &iconName, - const PolkitTQt1::Details &details, - const PolkitTQt1::Identity::List &identities, - WId parent) - : KDialog(0) +#include "AuthDialogWidget.h" + +#include +#include +#include + +#include +#include +#include +#include +#include "kuniqueapplication.h" +#include +#include +#include + +#include +#include + +using namespace PolkitTQt; + +AuthDialog::AuthDialog(const TQString &actionId, const TQString &message, + const TQString &iconName, const PolkitTQt::Details &details, + const Identity::List &identities) : + KDialogBase(0, 0, true, TQString::null, Ok|Cancel|Details, Ok), + m_authWidget(new AuthDialogWidget(this)) { - // KAuth is able to circumvent polkit's limitations, and manages to send the wId to the auth agent. - // If we received it, we use KWindowSystem to associate this dialog correctly. - if (parent > 0) { - kDebug() << "Associating the dialog with " << parent << " this dialog is " << winId(); - - // Set the parent - KWindowSystem::setMainWindow(this, parent); - - // Set modal - KWindowSystem::setState(winId(), NET::Modal); - } - - setupUi(mainWidget()); - setButtons(Ok | Cancel | Details); - - if (message.isEmpty()) { - kWarning() << "Could not get action message for action."; - lblHeader->hide(); - } else { - kDebug() << "Message of action: " << message; - lblHeader->setText("

" + message + "

"); - setCaption(message); - m_message = message; - } - - // loads the standard key icon - TQPixmap icon = TDEIconLoader::global()->loadIcon("dialog-password", - TDEIconLoader::NoGroup, - TDEIconLoader::SizeHuge, - TDEIconLoader::DefaultState); - // create a painter to paint the action icon over the key icon - TQPainter painter(&icon); - const int iconSize = icon.size().width(); - // the the emblem icon to size 32 - int overlaySize = 32; - // try to load the action icon - const TQPixmap pixmap = TDEIconLoader::global()->loadIcon(iconName, - TDEIconLoader::NoGroup, - overlaySize, - TDEIconLoader::DefaultState, - TQStringList(), - 0, - true); - // if we're able to load the action icon paint it over the - // key icon. - if (!pixmap.isNull()) { - TQPoint startPoint; - // bottom right corner - startPoint = TQPoint(iconSize - overlaySize - 2, - iconSize - overlaySize - 2); - painter.drawPixmap(startPoint, pixmap); - } - - setWindowIcon(icon); - lblPixmap->setPixmap(icon); - - // find action description for actionId - foreach(const PolkitTQt1::ActionDescription &desc, PolkitTQt1::Authority::instance()->enumerateActionsSync()) { - if (actionId == desc.actionId()) { - m_actionDescription = desc; - kDebug() << "Action description has been found" ; - break; - } - } - - AuthDetails *detailsDialog = new AuthDetails(details, m_actionDescription, m_appname, this); - setDetailsWidget(detailsDialog); - - userCB->hide(); - lePassword->setFocus(); - - errorMessageKTW->hide(); - - // If there is more than 1 identity we will show the combobox for user selection - if (identities.size() > 1) { - connect(userCB, SIGNAL(currentIndexChanged(int)), - this, SLOT(on_userCB_currentIndexChanged(int))); - - createUserCB(identities); - } else { - userCB->addItem("", TQVariant(identities[0].toString())); - userCB->setCurrentIndex(0); + setMainWidget(m_authWidget); + + if (message.isEmpty()) + { + kdWarning() << "Could not get action message for action." << endl; + m_authWidget->lblHeader->hide(); + } + else + { + kdDebug() << "Message of action: " << message << endl; + m_authWidget->lblHeader->setText("

" + message + "

"); + setCaption(message); + m_message = message; + } + + // loads the standard key icon + TQPixmap icon = TDEGlobal::iconLoader()->loadIcon("password", TDEIcon::NoGroup, + TDEIcon::SizeHuge, TDEIcon::DefaultState); + // create a painter to paint the action icon over the key icon + TQPainter painter(&icon); + const int iconSize = icon.size().width(); + int overlaySize = 32; + const TQPixmap pixmap = TDEGlobal::iconLoader()->loadIcon(iconName, TDEIcon::NoGroup, + overlaySize, TDEIcon::DefaultState, 0, true); + if (!pixmap.isNull()) + { + // bottom right corner + TQPoint startPoint = TQPoint(iconSize - overlaySize - 2, iconSize - overlaySize - 2); + painter.drawPixmap(startPoint, pixmap); + } + + setIcon(icon); + m_authWidget->lblPixmap->setPixmap(icon); + + // find action description for actionId + for (const ActionDescription &desc : Authority::instance()->enumerateActionsSync()) + { + if (actionId == desc.actionId()) + { + m_actionDescription = desc; + kdDebug() << "Action description has been found" << endl; + break; } + } + + AuthDetails *detailsDialog = new AuthDetails(details, m_actionDescription, m_appname, this); + setDetailsWidget(detailsDialog); + + m_authWidget->userCB->hide(); + m_authWidget->lePassword->setFocus(); + m_authWidget->errorMessageKTW->hide(); + + // If there is more than 1 identity we will show the combobox for user selection + if (identities.size() > 1) + { + connect(m_authWidget->userCB, SIGNAL(activated(int)), + this, SLOT(on_userCB_currentIndexChanged(int))); + createUserCB(identities); + } + else + { + m_authWidget->userCB->insertItem(""); + m_userData.append(identities[0].toString()); + m_authWidget->userCB->setCurrentItem(0); + } } AuthDialog::~AuthDialog() @@ -136,242 +120,229 @@ AuthDialog::~AuthDialog() void AuthDialog::accept() { - // Do nothing, do not close the dialog. This is needed so that the dialog stays - lePassword->setEnabled(false); - return; + // Do nothing, do not close the dialog. This is needed so that the dialog stays + m_authWidget->lePassword->setEnabled(false); + return; } void AuthDialog::setRequest(const TQString &request, bool requiresAdmin) { - kDebug() << request; - PolkitTQt1::Identity identity = adminUserSelected(); - if (request.startsWith(TQLatin1String("password:"), TQt::CaseInsensitive)) { - if (requiresAdmin) { - if (!identity.isValid()) { - lblPassword->setText(i18n("Password for root:")); - } else { - lblPassword->setText(i18n("Password for %1:", - identity.toString().remove("unix-user:"))); - } - } else { - lblPassword->setText(i18n("Password:")); - } - } else if (request.startsWith(TQLatin1String("password or swipe finger:"), - TQt::CaseInsensitive)) { - if (requiresAdmin) { - if (!identity.isValid()) { - lblPassword->setText(i18n("Password or swipe finger for root:")); - } else { - lblPassword->setText(i18n("Password or swipe finger for %1:", - identity.toString().remove("unix-user:"))); - } - } else { - lblPassword->setText(i18n("Password or swipe finger:")); - } - } else { - lblPassword->setText(request); + kdDebug() << request << endl; + Identity identity = adminUserSelected(); + if (request.startsWith("password:", false)) + { + if (requiresAdmin) + { + if (!identity.isValid()) + { + m_authWidget->lblPassword->setText(i18n("Password for root:")); + } + else + { + TQString username = identity.toString().remove("unix-user:"); + m_authWidget->lblPassword->setText(i18n("Password for %1:").arg(username)); + } } - + else + { + m_authWidget->lblPassword->setText(i18n("Password:")); + } + } + else if (request.startsWith("password or swipe finger:"), false) + { + if (requiresAdmin) + { + if (!identity.isValid()) + { + m_authWidget->lblPassword->setText(i18n("Password or swipe finger for root:")); + } + else + { + TQString username = identity.toString().remove("unix-user:"); + m_authWidget->lblPassword->setText(i18n("Password or swipe finger for %1:").arg(username)); + } + } + else + { + m_authWidget->lblPassword->setText(i18n("Password or swipe finger:")); + } + } + else + { + m_authWidget->lblPassword->setText(request); + } } void AuthDialog::setOptions() { - lblContent->setText(i18n("An application is attempting to perform an action that requires privileges." - " Authentication is required to perform this action.")); + m_authWidget->lblContent->setText(i18n("An application is attempting to perform an action " + "that requires privileges. Authentication is required to perform this action.")); } -void AuthDialog::createUserCB(const PolkitTQt1::Identity::List &identities) +void AuthDialog::createUserCB(const Identity::List &identities) { - /* if we've already built the list of admin users once, then avoid - * doing it again.. (this is mainly used when the user entered the - * wrong password and the dialog is recycled) - */ - if (identities.count() && (userCB->count() - 1) != identities.count()) { - // Clears the combobox in the case some user be added - userCB->clear(); - - // Adds a Dummy user - userCB->addItem(i18n("Select User"), qVariantFromValue (TQString())); - qobject_cast(userCB->model())->item(userCB->count()-1)->setEnabled(false); - - // For each user - int index = 1; // Start at 1 because of the "Select User" entry - int currentUserIndex = -1; - const KUser currentUser; - foreach(const PolkitTQt1::Identity &identity, identities) { - // First check to see if the user is valid - kDebug() << "User: " << identity.toString(); - const KUser user(identity.toString().remove("unix-user:")); - if (!user.isValid()) { - kWarning() << "User invalid: " << user.loginName(); - continue; - } - - // Display user Full Name IF available - TQString display; - if (!user.property(KUser::FullName).toString().isEmpty()) { - display = i18nc("%1 is the full user name, %2 is the user login name", "%1 (%2)", user.property(KUser::FullName).toString(), user.loginName()); - } else { - display = user.loginName(); - } - - TDEIcon icon; - // load user icon face - if (!user.faceIconPath().isEmpty()) { - icon = TDEIcon(user.faceIconPath()); - } else { - icon = TDEIcon("user-identity"); - } - // appends the user item - userCB->addItem(icon, display, qVariantFromValue (identity.toString())); - - if (user == currentUser) { - currentUserIndex = index; - } - ++index; - } - - // Show the widget and set focus - if (currentUserIndex != -1) { - userCB->setCurrentIndex(currentUserIndex); - } - userCB->show(); + /* if we've already built the list of admin users once, then avoid + * doing it again.. (this is mainly used when the user entered the + * wrong password and the dialog is recycled) + */ + if (identities.count() && (m_authWidget->userCB->count() - 1) != identities.count()) + { + // Clears the combobox in the case some user be added + m_authWidget->userCB->clear(); + m_userData.clear(); + + // Adds a Dummy user + m_authWidget->userCB->insertItem(i18n("Select User")); + m_userData.append(TQString::null); + + // For each user + int index = 1; // Start at 1 because of the "Select User" entry + int currentUserIndex = -1; + const KUser currentUser; + for (const Identity &identity : identities) + { + // First check to see if the user is valid + kdDebug() << "User: " << identity.toString() << endl; + const KUser user(identity.toString().remove("unix-user:")); + if (!user.isValid()) + { + kdWarning() << "User invalid: " << user.loginName() << endl; + continue; + } + + // Display user full Name if available + TQString display; + if (!user.fullName().isEmpty()) + { + display = user.fullName() + " (" + user.loginName() + ")"; + } + else + { + display = user.loginName(); + } + m_authWidget->userCB->insertItem(display); + m_userData.append(identity.toString()); + + if (user == currentUser) + { + currentUserIndex = index; + } + ++index; + } + + // Show the widget and set focus + if (currentUserIndex != -1) + { + m_authWidget->userCB->setCurrentItem(currentUserIndex); } + m_authWidget->userCB->show(); + } } -PolkitTQt1::Identity AuthDialog::adminUserSelected() const +Identity AuthDialog::adminUserSelected() const { - if (userCB->currentIndex() == -1) - return PolkitTQt1::Identity(); - - TQString id = userCB->itemData(userCB->currentIndex()).toString(); - if (id.isEmpty()) - return PolkitTQt1::Identity(); - return PolkitTQt1::Identity::fromString(id); + if (m_authWidget->userCB->currentItem() == -1) + { + return Identity(); + } + + TQString id = m_userData[m_authWidget->userCB->currentItem()]; + if (id.isEmpty()) + { + return Identity(); + } + return Identity::fromString(id); } void AuthDialog::on_userCB_currentIndexChanged(int /*index*/) { - PolkitTQt1::Identity identity = adminUserSelected(); - // itemData is Null when "Select user" is selected - if (!identity.isValid()) { - lePassword->setEnabled(false); - lblPassword->setEnabled(false); - enableButtonOk(false); - } else { - lePassword->setEnabled(true); - lblPassword->setEnabled(true); - enableButtonOk(true); - // We need this to restart the auth with the new user - emit adminUserSelected(identity); - // git password label focus - lePassword->setFocus(); - } + Identity identity = adminUserSelected(); + // identity is now valid when "Select user" is selected + if (!identity.isValid()) + { + m_authWidget->lePassword->setEnabled(false); + m_authWidget->lblPassword->setEnabled(false); + enableButtonOK(false); + } + else + { + m_authWidget->lePassword->setEnabled(true); + m_authWidget->lblPassword->setEnabled(true); + enableButtonOK(true); + // We need this to restart the auth with the new user + emit adminUserSelected(identity); + // give password label focus + m_authWidget->lePassword->setFocus(); + } } TQString AuthDialog::password() const { - return lePassword->text(); + return m_authWidget->lePassword->text(); } void AuthDialog::authenticationFailure() { - errorMessageKTW->setText(i18n("Authentication failure, please try again."), KTitleWidget::ErrorMessage); - TQFont bold = font(); - bold.setBold(true); - lblPassword->setFont(bold); - lePassword->setEnabled(true); - lePassword->clear(); - lePassword->setFocus(); + // TODO errorMessageKTW->setText(i18n("Authentication failure, please try again."), KTitleWidget::ErrorMessage); + TQFont bold = font(); + bold.setBold(true); + m_authWidget->errorMessageKTW->setText(i18n("Authentication failure, please try again.")); + m_authWidget->errorMessageKTW->setFont(bold); + m_authWidget->errorMessageKTW->show(); + m_authWidget->lePassword->setEnabled(true); + m_authWidget->lePassword->clear(); + m_authWidget->lePassword->setFocus(); } -void AuthDialog::showEvent(TQShowEvent *event) +AuthDetails::AuthDetails(const Details &details, const ActionDescription &actionDescription, + const TQString &appname, TQWidget *parent) : AuthDetailsWidget(parent) { - KDialog::showEvent(event); - if (winId() != KWindowSystem::activeWindow()) - { - KNotification *notification = new KNotification("authenticate", this, - KNotification::Persistent | KNotification::CloseWhenWidgetActivated); - kDebug() << "Notificate: " << notification->eventId(); - notification->setText(m_message); - TQPixmap icon = TDEIconLoader::global()->loadIcon("dialog-password", - TDEIconLoader::NoGroup, - TDEIconLoader::SizeHuge, - TDEIconLoader::DefaultState); - notification->setPixmap(icon); - notification->setActions(TQStringList() << i18n("Switch to dialog") << i18n("Cancel")); - - connect(notification, SIGNAL(activated(uint)), this, SLOT(notificationActivated(uint))); - notification->sendEvent(); - } - + app_label->setText(appname); + + for (const TQString &key : details.keys()) + { + int row = AuthDetailsWidgetLayout->numRows() + 1; + + TQLabel *keyLabel = new TQLabel(this); + keyLabel->setText(key); + AuthDetailsWidgetLayout->addWidget(keyLabel, row, 0); + + TQLabel *valueLabel = new TQLabel(this); + valueLabel->setText(details.lookup(key)); + AuthDetailsWidgetLayout->addWidget(valueLabel, row, 1); + } + + action_label->setText(actionDescription.description()); + + TQString vendor = actionDescription.vendorName(); + TQString vendorUrl = actionDescription.vendorUrl(); + + if (!vendor.isEmpty()) + { + vendorUL->setText(vendor); + vendorUL->setTipText(vendorUrl); + vendorUL->setURL(vendorUrl); + } + else if (!vendorUrl.isEmpty()) + { + vendorUL->setText(vendorUrl); + vendorUL->setTipText(vendorUrl); + vendorUL->setURL(vendorUrl); + } + else + { + vendorL->hide(); + vendorUL->hide(); + } + + connect(vendorUL, TQT_SIGNAL(leftClickedURL(const TQString&)), + TQT_SLOT(openUrl(const TQString&))); } -void AuthDialog::notificationActivated(unsigned int action) +void AuthDetails::openUrl(const TQString &url) { - kDebug() << "notificationActivated: " << action; - if (action == 1) - { - KWindowSystem::forceActiveWindow(winId()); - } -} - -AuthDetails::AuthDetails(const PolkitTQt1::Details &details, - const PolkitTQt1::ActionDescription &actionDescription, - const TQString &appname, - TQWidget *parent) - : TQWidget(parent) -{ - setupUi(this); - - app_label->setText(appname); - - foreach(const TQString &key, details.keys()) { //krazy:exclude=foreach (Details is not a map/hash, but rather a method) - int row = gridLayout->rowCount() + 1; - - TQLabel *keyLabel = new TQLabel(this); - keyLabel->setText(i18nc("%1 is the name of a detail about the current action " - "provided by polkit", "%1:", key)); - gridLayout->addWidget(keyLabel, row, 0); - - TQLabel *valueLabel = new TQLabel(this); - valueLabel->setText(details.lookup(key)); - gridLayout->addWidget(valueLabel, row, 1); - } - - action_label->setText(actionDescription.description()); - - action_label->setTipText(i18n("Click to edit %1", actionDescription.actionId())); - action_label->setUrl(actionDescription.actionId()); - - TQString vendor = actionDescription.vendorName(); - TQString vendorUrl = actionDescription.vendorUrl(); - - if (!vendor.isEmpty()) { - vendorUL->setText(vendor); - vendorUL->setTipText(i18n("Click to open %1", vendorUrl)); - vendorUL->setUrl(vendorUrl); - } else if (!vendorUrl.isEmpty()) { - vendorUL->setText(vendorUrl); - vendorUL->setTipText(i18n("Click to open %1", vendorUrl)); - vendorUL->setUrl(vendorUrl); - } else { - vendorL->hide(); - vendorUL->hide(); - } - - connect(vendorUL, SIGNAL(leftClickedUrl(TQString)), SLOT(openUrl(TQString))); - connect(action_label, SIGNAL(leftClickedUrl(TQString)), SLOT(openAction(TQString))); -} - -void AuthDetails::openUrl(const TQString& url) -{ - TDEToolInvocation::invokeBrowser(url); -} - -void AuthDetails::openAction(const TQString &url) -{ - TQProcess::startDetached("polkit-kde-authorization", TQStringList() << url); + kapp->invokeBrowser(url); } #include "AuthDialog.moc" + diff --git a/src/AuthDialog.h b/src/AuthDialog.h index 7aa42eb..9c8cb65 100644 --- a/src/AuthDialog.h +++ b/src/AuthDialog.h @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (C) 2007-2008 Gökçen Eraslan Copyright (C) 2008 Daniel Nicoletti Copyright (C) 2010 Dario Freddi @@ -17,74 +17,72 @@ along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ #ifndef AUTHDIALOG_H #define AUTHDIALOG_H -#include "ui_AuthDialog.h" -#include "ui_authdetails.h" +#include +#include "AuthDetailsWidget.h" -#include -#include +#include +#include -namespace PolkitTQt1 +namespace PolkitTQt { class Details; } -class AuthDialog : public KDialog, private Ui::AuthDialog +class AuthDialogWidget; + +class AuthDialog : public KDialogBase { - Q_OBJECT -public: - AuthDialog(const TQString &actionId, - const TQString &message, - const TQString &iconName, - const PolkitTQt1::Details &details, - const PolkitTQt1::Identity::List &identities, - WId parent); + Q_OBJECT + + public: + AuthDialog(const TQString &actionId, const TQString &message, + const TQString &iconName, const PolkitTQt::Details &details, + const PolkitTQt::Identity::List &identities); ~AuthDialog(); void setRequest(const TQString &request, bool requiresAdmin); void setOptions(); - TQString password() const; void authenticationFailure(); + TQString password() const; + PolkitTQt::Identity adminUserSelected() const; - PolkitTQt1::Identity adminUserSelected() const; - - PolkitTQt1::ActionDescription m_actionDescription; + PolkitTQt::ActionDescription m_actionDescription; -signals: - void adminUserSelected(PolkitTQt1::Identity); + signals: + void adminUserSelected(const PolkitTQt::Identity&); -public slots: + public slots: virtual void accept(); -private slots: + private slots: void on_userCB_currentIndexChanged(int index); - void notificationActivated(unsigned int action); -private: + private: TQString m_appname; TQString m_message; + AuthDialogWidget *m_authWidget; + TQStringList m_userData; - void createUserCB(const PolkitTQt1::Identity::List &identities); - void showEvent(TQShowEvent *); + void createUserCB(const PolkitTQt::Identity::List &identities); }; -class AuthDetails : public TQWidget, private Ui::AuthDetails +class AuthDetails : public AuthDetailsWidget { - Q_OBJECT -public: - AuthDetails(const PolkitTQt1::Details &details, - const PolkitTQt1::ActionDescription &actionDescription, - const TQString &appname, - TQWidget *parent); - -private slots: - void openUrl(const TQString&); - void openAction(const TQString&); + Q_OBJECT + + public: + AuthDetails(const PolkitTQt::Details &details, + const PolkitTQt::ActionDescription &actionDescription, + const TQString &appname, TQWidget *parent); + + private slots: + void openUrl(const TQString &url); }; -#endif // AUTHDIALOG_H +#endif + diff --git a/src/AuthDialog.ui b/src/AuthDialog.ui deleted file mode 100644 index 43282f1..0000000 --- a/src/AuthDialog.ui +++ /dev/null @@ -1,171 +0,0 @@ - - AuthDialog - - - - 0 - 0 - 335 - 193 - - - - - 0 - 0 - - - - - - - - - - 0 - 0 - - - - Lock Icon here - - - false - - - lePassword - - - - - - - TQt::Vertical - - - - 20 - 92 - - - - - - - - - - - - - 0 - 0 - - - - <b>Header is here!</b> - - - true - - - lePassword - - - - - - - - 0 - 0 - - - - <i>Content</i> - - - true - - - - - - - - - - - - Password: - - - lePassword - - - - - - - TQLineEdit::Password - - - true - - - - - - - - errorMessageKTW - lblPassword - lePassword - cbRemember - cbSessionOnly - horizontalSpacer - userCB - - - - KComboBox - TQComboBox -
kcombobox.h
-
- - KLineEdit - TQLineEdit -
klineedit.h
-
- - KTitleWidget - TQWidget -
ktitlewidget.h
-
-
- - userCB - lePassword - cbRemember - cbSessionOnly - - - - - cbRemember - toggled(bool) - cbSessionOnly - setEnabled(bool) - - - 259 - 161 - - - 161 - 169 - - - - -
diff --git a/src/AuthDialogWidget.ui b/src/AuthDialogWidget.ui new file mode 100644 index 0000000..0425eb1 --- /dev/null +++ b/src/AuthDialogWidget.ui @@ -0,0 +1,168 @@ + + AuthDialogWidget + + + AuthDialogWidget + + + + 0 + 0 + 335 + 193 + + + + + 3 + 3 + 0 + 0 + + + + + gridLayout + + + + verticalLayout + + + + + lblPixmap + + + + 5 + 5 + 0 + 0 + + + + Lock Icon here + + + WordBreak + + + lePassword + + + + + verticalSpacer + + + Vertical + + + + 20 + 92 + + + + + + + + verticalLayout_2 + + + + + lblHeader + + + + 3 + 3 + 0 + 0 + + + + <b>Header is here!</b> + + + WordBreak + + + lePassword + + + + + lblContent + + + + 3 + 3 + 0 + 0 + + + + <i>Content</i> + + + WordBreak + + + + + + + errorMessageKTW + + + + 3 + 3 + 0 + 0 + + + + + + lblPassword + + + Password: + + + lePassword + + + + + lePassword + + + Password + + + + + userCB + + + + + + + userCB + lePassword + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0f1b794..c6d65bf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -12,10 +12,12 @@ include_directories( ${CMAKE_SOURCE_DIR} + ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${TQT_INCLUDE_DIRS} ${TDE_INCLUDE_DIR} + ${POLKIT_TQT_INCLUDE_DIRS} ) link_directories( @@ -26,7 +28,8 @@ link_directories( ##### executables ######################### tde_add_executable( polkit-agent-tde AUTOMOC - SOURCES main.cpp - LINK tdecore-shared tdeui-shared - DESTINATION ${BIN_INSTALL_DIR} + SOURCES AuthDialogWidget.ui AuthDetailsWidget.ui AuthDialog.h AuthDialog.cpp + polkit-listener.h polkit-listener.cpp polkit-agent-tde.h polkit-agent-tde.cpp main.cpp + LINK tdecore-shared tdeui-shared polkit-tqt-core polkit-tqt-agent + DESTINATION ${BIN_INSTALL_DIR} ) diff --git a/src/authdetails.ui b/src/authdetails.ui deleted file mode 100644 index 04a2957..0000000 --- a/src/authdetails.ui +++ /dev/null @@ -1,91 +0,0 @@ - - AuthDetails - - - - 0 - 0 - 273 - 80 - - - - - 0 - 0 - - - - - - - Application: - - - - - - - Action: - - - - - - - Vendor: - - - - - - - Vendor: - - - - - - true - - - - - - - Action: - - - - - - true - - - - - - - TQt::Horizontal - - - - - - - Application: - - - - - - - - KUrlLabel - TQLabel -
kurllabel.h
-
-
- - -
diff --git a/src/main.cpp b/src/main.cpp index 11a62c5..041413b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,37 +22,25 @@ #include #include -#include -#include -//#include "policykitkde.h" +#include "polkit-agent-tde.h" int main(int argc, char *argv[]) { - TDEAboutData aboutData("polkit-agent-tde", I18N_NOOP("Polkit-Agent-TDE"), "0.99.1", - I18N_NOOP("A Polkit authentication agent for TDE"), TDEAboutData::License_GPL, - I18N_NOOP("(c) 2009 Red Hat, Inc.")); - aboutData.addAuthor(I18N_NOOP("Jaroslav Reznik"), I18N_NOOP("Maintainer"), "jreznik@redhat.com"); - aboutData.setProductName("policykit-agent-tde"); - - TDECmdLineArgs::init(argc, argv, &aboutData); - TDEApplication app; - TQPushButton *pbQuit = new TQPushButton("Quit", 0); - app.setMainWidget(pbQuit); - app.connect(&app, TQT_SIGNAL(lastWindowClosed()), TQT_SLOT(quit())); - app.connect(pbQuit, TQT_SIGNAL(clicked()), &app, TQT_SLOT(quit())); - pbQuit->show(); - return app.exec(); - - /* - if (!PolicyKitKDE::start()) { - tqWarning("PolicyKitKDE is already running!\n"); - return 0; - } - - TDECrash::setFlags(TDECrash::AutoRestart); - - PolicyKitKDE agent; - agent.disableSessionManagement(); - agent.exec(); - */ + TDEAboutData aboutData("polkit-agent-tde", I18N_NOOP("Polkit-Agent-TDE"), "0.99.1", + I18N_NOOP("A Polkit authentication agent for TDE"), TDEAboutData::License_GPL, + I18N_NOOP("(c) 2009 Red Hat, Inc.")); + aboutData.addAuthor(I18N_NOOP("Jaroslav Reznik"), I18N_NOOP("Maintainer"), "jreznik@redhat.com"); + aboutData.setProductName("policykit-agent-tde"); + + TDECmdLineArgs::init(argc, argv, &aboutData); + + if (!PolkitAgentTDE::start()) + { + tqWarning("PolkitAgentTDE is already running!\n"); + return 0; + } + + PolkitAgentTDE agent; + agent.disableSessionManagement(); + return agent.exec(); } diff --git a/src/org.freedesktop.PolicyKit.AuthenticationAgent.xml b/src/org.freedesktop.PolicyKit.AuthenticationAgent.xml index f5aa8ef..8881b62 100644 --- a/src/org.freedesktop.PolicyKit.AuthenticationAgent.xml +++ b/src/org.freedesktop.PolicyKit.AuthenticationAgent.xml @@ -4,8 +4,6 @@ - - diff --git a/src/org.kde.Polkit1AuthAgent.xml b/src/org.kde.Polkit1AuthAgent.xml deleted file mode 100644 index 0aa39de..0000000 --- a/src/org.kde.Polkit1AuthAgent.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - diff --git a/src/policykitlistener.cpp b/src/policykitlistener.cpp deleted file mode 100644 index c2ea924..0000000 --- a/src/policykitlistener.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/* This file is part of the KDE project - Copyright (C) 2009 Jaroslav Reznik - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - -*/ - -#include "policykitlistener.h" -#include "AuthDialog.h" - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "polkit1authagentadaptor.h" - -PolicyKitListener::PolicyKitListener(TQObject *parent) - : Listener(parent) - , m_inProgress(false) - , m_selectedUser(0) -{ - (void) new Polkit1AuthAgentAdaptor(this); - - if (!TQDBusConnection::sessionBus().registerObject("/org/kde/Polkit1AuthAgent", this, - TQDBusConnection::ExportScriptableSlots | - TQDBusConnection::ExportScriptableProperties | - TQDBusConnection::ExportAdaptors)) { - kWarning() << "Could not initiate DBus helper!"; - } - - kDebug() << "Listener online"; -} - -PolicyKitListener::~PolicyKitListener() -{ -} - -void PolicyKitListener::setWIdForAction(const TQString& action, qulonglong wID) -{ - kDebug() << "On to the handshake"; - m_actionsToWID[action] = wID; -} - -void PolicyKitListener::initiateAuthentication(const TQString &actionId, - const TQString &message, - const TQString &iconName, - const PolkitTQt1::Details &details, - const TQString &cookie, - const PolkitTQt1::Identity::List &identities, - PolkitTQt1::Agent::AsyncResult* result) -{ - kDebug() << "Initiating authentication"; - - if (m_inProgress) { - result->setError(i18n("Another client is already authenticating, please try again later.")); - result->setCompleted(); - kDebug() << "Another client is already authenticating, please try again later."; - return; - } - - m_identities = identities; - m_cookie = cookie; - m_result = result; - m_session.clear(); - - m_inProgress = true; - - WId parentId = 0; - - if (m_actionsToWID.contains(actionId)) { - parentId = m_actionsToWID[actionId]; - } - - m_dialog = new AuthDialog(actionId, message, iconName, details, identities, parentId); - connect(m_dialog.data(), SIGNAL(okClicked()), SLOT(dialogAccepted())); - connect(m_dialog.data(), SIGNAL(cancelClicked()), SLOT(dialogCanceled())); - connect(m_dialog.data(), SIGNAL(adminUserSelected(PolkitTQt1::Identity)), SLOT(userSelected(PolkitTQt1::Identity))); - - kDebug() << "WinId of the dialog is " << m_dialog.data()->winId() << m_dialog.data()->effectiveWinId(); - m_dialog.data()->setOptions(); - m_dialog.data()->show(); - KWindowSystem::forceActiveWindow(m_dialog.data()->winId()); - kDebug() << "WinId of the shown dialog is " << m_dialog.data()->winId() << m_dialog.data()->effectiveWinId(); - - if (identities.length() == 1) { - m_selectedUser = identities[0]; - } else { - m_selectedUser = m_dialog.data()->adminUserSelected(); - } - - m_numTries = 0; - tryAgain(); -} - -void PolicyKitListener::tryAgain() -{ - kDebug() << "Trying again"; -// test!!! - m_wasCancelled = false; - - // We will create new session only when some user is selected - if (m_selectedUser.isValid()) { - m_session = new Session(m_selectedUser, m_cookie, m_result); - connect(m_session.data(), SIGNAL(request(TQString,bool)), this, SLOT(request(TQString,bool))); - connect(m_session.data(), SIGNAL(completed(bool)), this, SLOT(completed(bool))); - connect(m_session.data(), SIGNAL(showError(TQString)), this, SLOT(showError(TQString))); - - m_session.data()->initiate(); - } - -} - -void PolicyKitListener::finishObtainPrivilege() -{ - kDebug() << "Finishing obtaining privileges"; - - // Number of tries increase only when some user is selected - if (m_selectedUser.isValid()) { - m_numTries++; - } - - if (!m_gainedAuthorization && !m_wasCancelled && !m_dialog.isNull()) { - m_dialog.data()->authenticationFailure(); - - if (m_numTries < 3) { - m_session.data()->deleteLater(); - - tryAgain(); - return; - } - } - - if (!m_session.isNull()) { - m_session.data()->result()->setCompleted(); - } else { - m_result->setCompleted(); - } - m_session.data()->deleteLater(); - - if (!m_dialog.isNull()) { - m_dialog.data()->hide(); - m_dialog.data()->deleteLater(); - } - - m_inProgress = false; - - kDebug() << "Finish obtain authorization:" << m_gainedAuthorization; -} - -bool PolicyKitListener::initiateAuthenticationFinish() -{ - kDebug() << "Finishing authentication"; - return true; -} - -void PolicyKitListener::cancelAuthentication() -{ - kDebug() << "Cancelling authentication"; - - m_wasCancelled = true; - finishObtainPrivilege(); -} - -void PolicyKitListener::request(const TQString &request, bool echo) -{ - Q_UNUSED(echo); - kDebug() << "Request: " << request; - - if (!m_dialog.isNull()) { - m_dialog.data()->setRequest(request, m_selectedUser.isValid() && - m_selectedUser.toString() == "unix-user:root"); - } -} - -void PolicyKitListener::completed(bool gainedAuthorization) -{ - kDebug() << "Completed: " << gainedAuthorization; - - m_gainedAuthorization = gainedAuthorization; - - finishObtainPrivilege(); -} - -void PolicyKitListener::showError(const TQString &text) -{ - kDebug() << "Error: " << text; -} - -void PolicyKitListener::dialogAccepted() -{ - kDebug() << "Dialog accepted"; - - if (!m_dialog.isNull()) { - m_session.data()->setResponse(m_dialog.data()->password()); - } -} - -void PolicyKitListener::dialogCanceled() -{ - kDebug() << "Dialog cancelled"; - - m_wasCancelled = true; - if (!m_session.isNull()) { - m_session.data()->cancel(); - } - - finishObtainPrivilege(); -} - -void PolicyKitListener::userSelected(const PolkitTQt1::Identity &identity) -{ - m_selectedUser = identity; - // If some user is selected we must destroy existing session - if (!m_session.isNull()) { - m_session.data()->deleteLater(); - } - tryAgain(); -} diff --git a/src/policykitlistener.h b/src/policykitlistener.h deleted file mode 100644 index f7906e4..0000000 --- a/src/policykitlistener.h +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef POLICYKITLISTENER_H -#define POLICYKITLISTENER_H - -/* This file is part of the KDE project - Copyright (C) 2009 Jaroslav Reznik - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - -*/ - -#include - -#include -#include - -class AuthDialog; - -using namespace PolkitTQt1::Agent; - -class PolicyKitListener : public Listener -{ - Q_OBJECT - TQ_CLASSINFO("D-Bus Interface", "org.kde.Polkit1AuthAgent") -public: - PolicyKitListener(TQObject *parent = 0); - virtual ~PolicyKitListener(); - -public slots: - void initiateAuthentication(const TQString &actionId, - const TQString &message, - const TQString &iconName, - const PolkitTQt1::Details &details, - const TQString &cookie, - const PolkitTQt1::Identity::List &identities, - PolkitTQt1::Agent::AsyncResult* result); - bool initiateAuthenticationFinish(); - void cancelAuthentication(); - - void tryAgain(); - void finishObtainPrivilege(); - - void request(const TQString &request, bool echo); - void completed(bool gainedAuthorization); - void showError(const TQString &text); - - void setWIdForAction(const TQString &action, qulonglong wID); - /* void showInfo(const TQString &text); */ -private: - TQWeakPointer m_dialog; - TQWeakPointer m_session; - bool m_inProgress; - bool m_gainedAuthorization; - bool m_wasCancelled; - int m_numTries; - PolkitTQt1::Identity::List m_identities; - PolkitTQt1::Agent::AsyncResult* m_result; - TQString m_cookie; - PolkitTQt1::Identity m_selectedUser; - TQHash< TQString, qulonglong > m_actionsToWID; - -private slots: - void dialogAccepted(); - void dialogCanceled(); - void userSelected(const PolkitTQt1::Identity &identity); -}; - -#endif diff --git a/src/policykitkde.h b/src/polkit-agent-tde.cpp similarity index 75% rename from src/policykitkde.h rename to src/polkit-agent-tde.cpp index 85ce6b2..6fa9e74 100644 --- a/src/policykitkde.h +++ b/src/polkit-agent-tde.cpp @@ -18,21 +18,16 @@ */ -#ifndef POLICYKITKDE_H -#define POLICYKITKDE_H +#include "polkit-agent-tde.h" -#include - -#include "policykitlistener.h" - -class PolicyKitKDE : public KUniqueApplication +PolkitAgentTDE::PolkitAgentTDE() : m_listener(new PolkitListener(this)) { - Q_OBJECT -public: - PolicyKitKDE(); - virtual ~PolicyKitKDE(); -private: - PolicyKitListener *m_listener; -}; +} -#endif +PolkitAgentTDE::~PolkitAgentTDE() +{ + if (m_listener) + { + delete m_listener; + } +} diff --git a/src/policykitkde.cpp b/src/polkit-agent-tde.h similarity index 59% rename from src/policykitkde.cpp rename to src/polkit-agent-tde.h index a6727c8..ba25556 100644 --- a/src/policykitkde.cpp +++ b/src/polkit-agent-tde.h @@ -1,4 +1,4 @@ -/* This file is part of the KDE project +/* This file is part of the TDE project Copyright (C) 2009 Jaroslav Reznik This program is free software; you can redistribute it and/or @@ -18,29 +18,22 @@ */ -#include "policykitkde.h" +#ifndef POLKIT_AGENT_TDE_H +#define POLKIT_AGENT_TDE_H -#include -#include +#include -PolicyKitKDE::PolicyKitKDE() - : m_listener(new PolicyKitListener(this)) -{ - setQuitOnLastWindowClosed(false); - - PolkitTQt1::UnixSessionSubject session(getpid()); +#include "polkit-listener.h" - bool result = m_listener->registerListener(session, "/org/kde/PolicyKit1/AuthenticationAgent"); +class PolkitAgentTDE : public KUniqueApplication +{ + public: + PolkitAgentTDE(); + virtual ~PolkitAgentTDE(); - kDebug() << result; + private: + PolkitListener *m_listener; +}; - if (!result) { - kDebug() << "Couldn't register listener!"; - exit(1); - } -} +#endif -PolicyKitKDE::~PolicyKitKDE() -{ - m_listener->deleteLater(); -} diff --git a/src/polkit-listener.cpp b/src/polkit-listener.cpp new file mode 100644 index 0000000..efd5261 --- /dev/null +++ b/src/polkit-listener.cpp @@ -0,0 +1,226 @@ +/* This file is part of the KDE project + Copyright (C) 2009 Jaroslav Reznik + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +*/ + +#include "polkit-listener.h" +#include "AuthDialog.h" + +#include +#include + +#include +#include +#include +#include +#include + +using namespace PolkitTQt; +using namespace PolkitTQt::Agent; + +PolkitListener::PolkitListener(TQObject *parent) : Listener(parent), m_inProgress(false), + m_selectedUser(0), m_result(nullptr), m_session(nullptr) +{ + PolkitTQt::UnixSessionSubject session(getpid()); + if (!registerListener(session, "/org/trinitydesktop/PolKit1AuthAgent")) + { + kdWarning() << "Could not initiate DBus listener!" << endl; + } + kdDebug() << "Listener online" << endl; +} + +void PolkitListener::clearSession() +{ + if (m_session) + { + m_session->deleteLater(); + m_session = nullptr; + } +} + +void PolkitListener::initiateAuthentication(const TQString &actionId, const TQString &message, + const TQString &iconName, const PolkitTQt::Details &details, + const TQString &cookie, const Identity::List &identities, AsyncResult* result) +{ + kdDebug() << "Initiating authentication" << endl; + + if (m_inProgress) + { + result->setError(i18n("Another client is already authenticating, please try again later.")); + result->setCompleted(); + kdDebug() << "Another client is already authenticating, please try again later." << endl; + return; + } + + m_identities = identities; + m_cookie = cookie; + m_result = result; + clearSession(); + + m_inProgress = true; + + m_dialog = new AuthDialog(actionId, message, iconName, details, identities); + connect(m_dialog, TQT_SIGNAL(okClicked()), TQT_SLOT(dialogAccepted())); + connect(m_dialog, TQT_SIGNAL(cancelClicked()), TQT_SLOT(dialogCanceled())); + connect(m_dialog, TQT_SIGNAL(adminUserSelected(const PolkitTQt::Identity&)), + TQT_SLOT(userSelected(const PolkitTQt::Identity&))); + + m_dialog->setOptions(); + m_dialog->show(); + + if (identities.count() == 1) + { + m_selectedUser = identities[0]; + } + else + { + m_selectedUser = m_dialog->adminUserSelected(); + } + + m_numTries = 0; + tryAgain(); +} + +void PolkitListener::tryAgain() +{ + kdDebug() << "Trying again" << endl; + // test!!! + m_wasCancelled = false; + + // We will create new session only when some user is selected + if (m_selectedUser.isValid()) + { + m_session = new Session(m_selectedUser, m_cookie, m_result); + connect(m_session, TQT_SIGNAL(request(const TQString&, bool)), this, + TQT_SLOT(request(const TQString&, bool))); + connect(m_session, TQT_SIGNAL(completed(bool)), this, TQT_SLOT(completed(bool))); + connect(m_session, TQT_SIGNAL(showError(const TQString&)), this, + TQT_SLOT(showError(const TQString&))); + m_session->initiate(); + } +} + +void PolkitListener::finishObtainPrivilege() +{ + kdDebug() << "Finishing obtaining privileges" << endl; + + // Number of tries increase only when some user is selected + if (m_selectedUser.isValid()) + { + m_numTries++; + } + + if (!m_gainedAuthorization && !m_wasCancelled && m_dialog) + { + m_dialog->authenticationFailure(); + + if (m_numTries < 3) + { + clearSession(); + tryAgain(); + return; + } + } + + if (m_session) + { + m_session->result()->setCompleted(); + } + else + { + m_result->setCompleted(); + } + clearSession(); + + if (m_dialog) + { + m_dialog->hide(); + m_dialog->deleteLater(); + m_dialog = nullptr; + } + + m_inProgress = false; + + kdDebug() << "Finish obtain authorization:" << m_gainedAuthorization << endl; +} + +bool PolkitListener::initiateAuthenticationFinish() +{ + kdDebug() << "Finishing authentication" << endl; + return true; +} + +void PolkitListener::cancelAuthentication() +{ + kdDebug() << "Cancelling authentication" << endl; + m_wasCancelled = true; + finishObtainPrivilege(); +} + +void PolkitListener::request(const TQString &request, bool _) +{ + kdDebug() << "Request: " << request << endl; + if (m_dialog) + { + m_dialog->setRequest(request, m_selectedUser.isValid() && + m_selectedUser.toString() == "unix-user:root"); + } +} + +void PolkitListener::completed(bool gainedAuthorization) +{ + kdDebug() << "Completed: " << gainedAuthorization << endl; + m_gainedAuthorization = gainedAuthorization; + finishObtainPrivilege(); +} + +void PolkitListener::showError(const TQString &text) +{ + kdDebug() << "Error: " << text << endl; +} + +void PolkitListener::dialogAccepted() +{ + kdDebug() << "Dialog accepted" << endl; + if (m_session) + { + m_session->setResponse(m_dialog->password()); + } +} + +void PolkitListener::dialogCanceled() +{ + kdDebug() << "Dialog cancelled" << endl; + m_wasCancelled = true; + if (m_session) + { + m_session->cancel(); + } + finishObtainPrivilege(); +} + +void PolkitListener::userSelected(const PolkitTQt::Identity &identity) +{ + m_selectedUser = identity; + // If some user is selected we must destroy existing session + clearSession(); + tryAgain(); +} + +#include "polkit-listener.moc" + diff --git a/src/polkit-listener.h b/src/polkit-listener.h new file mode 100644 index 0000000..bffd21a --- /dev/null +++ b/src/polkit-listener.h @@ -0,0 +1,71 @@ +/* This file is part of the TDE project + Copyright (C) 2009 Jaroslav Reznik + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +*/ + +#ifndef POLKIT_LISTENER_H +#define POLKIT_LISTENER_H + +#include + +class AuthDialog; + +class PolkitListener : public PolkitTQt::Agent::Listener +{ + Q_OBJECT + + public: + PolkitListener(TQObject *parent = 0); + + public slots: + void initiateAuthentication(const TQString &actionId, const TQString &message, + const TQString &iconName, const PolkitTQt::Details &details, + const TQString &cookie, const PolkitTQt::Identity::List &identities, + PolkitTQt::Agent::AsyncResult* result); + bool initiateAuthenticationFinish(); + void cancelAuthentication(); + + void tryAgain(); + void finishObtainPrivilege(); + + void request(const TQString &request, bool _); + void completed(bool gainedAuthorization); + void showError(const TQString &text); + + private: + void clearSession(); + + AuthDialog *m_dialog; + bool m_inProgress; + bool m_gainedAuthorization; + bool m_wasCancelled; + int m_numTries; + TQString m_cookie; + PolkitTQt::Identity::List m_identities; + PolkitTQt::Identity m_selectedUser; + PolkitTQt::Agent::AsyncResult* m_result; + PolkitTQt::Agent::Session *m_session; + + private slots: + void dialogAccepted(); + void dialogCanceled(); + void userSelected(const PolkitTQt::Identity &identity); +}; + +#endif +