Conversion of package functionality.

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
r14.0.x
Michele Calgaro 3 years ago
parent ab12cfe230
commit eb684d7fa3
Signed by: MicheleC
GPG Key ID: 2A75B7CA8ADED5CF

@ -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 )

@ -0,0 +1,94 @@
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>AuthDetailsWidget</class>
<widget class="TQWidget">
<property name="name">
<cstring>AuthDetailsWidget</cstring>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>273</width>
<height>80</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>3</hsizetype>
<vsizetype>3</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<grid>
<property name="name">
<cstring>gridLayout</cstring>
</property>
<widget class="TQLabel" row="1" column="0">
<property name="name">
<cstring>label</cstring>
</property>
<property name="text">
<string>Application:</string>
</property>
</widget>
<widget class="TQLabel" row="2" column="0">
<property name="name">
<cstring>label_3</cstring>
</property>
<property name="text">
<string>Action:</string>
</property>
</widget>
<widget class="TQLabel" row="3" column="0">
<property name="name">
<cstring>vendorL</cstring>
</property>
<property name="text">
<string>Vendor:</string>
</property>
</widget>
<widget class="TQLabel" row="2" column="1" colspan="3">
<property name="name">
<cstring>action_label</cstring>
</property>
<property name="text">
<string>Action:</string>
</property>
</widget>
<widget class="KURLLabel" row="3" column="1" colspan="3">
<property name="name">
<cstring>vendorUL</cstring>
</property>
<property name="text">
<string>Vendor:</string>
</property>
<property name="tipText">
<string/>
</property>
<property name="useTips">
<bool>true</bool>
</property>
</widget>
<widget class="Line" row="0" column="0" colspan="4">
<property name="name">
<cstring>line</cstring>
</property>
<property name="orientation">
<enum>Horizontal</enum>
</property>
</widget>
<widget class="TQLabel" row="1" column="1" colspan="3">
<property name="name">
<cstring>app_label</cstring>
</property>
<property name="text">
<string>Application:</string>
</property>
</widget>
</grid>
</widget>
<includes>
<include location="global" impldecl="in implementation">kurllabel.h</include>
</includes>
</UI>

@ -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 <gokcen@pardus.org.tr> Copyright (C) 2007-2008 Gökçen Eraslan <gokcen@pardus.org.tr>
Copyright (C) 2008 Dirk Mueller <mueller@kde.org> Copyright (C) 2008 Dirk Mueller <mueller@kde.org>
Copyright (C) 2008 Daniel Nicoletti <dantti85-pk@yahoo.com.br> Copyright (C) 2008 Daniel Nicoletti <dantti85-pk@yahoo.com.br>
@ -18,94 +18,76 @@
along with this library; see the file COPYING.LIB. If not, write to along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. Boston, MA 02110-1301, USA.
*/ */
#include "AuthDialog.h" #include "AuthDialog.h"
#include "AuthDialogWidget.h"
#include <TQtCore/TQProcess>
#include <TQtGui/TQPainter> #include <tqlabel.h>
#include <TQtGui/TQStandardItemModel> #include <tqprocess.h>
#include <KDebug> #include <tqpainter.h>
#include <TDEToolInvocation> #include <kcombobox.h>
#include <KUser> #include <kdebug.h>
#include <kiconloader.h>
#include <PolkitTQt1/Authority> #include <klineedit.h>
#include <PolkitTQt1/Details> #include "kuniqueapplication.h"
#include <kurllabel.h>
#include <KWindowSystem> #include <kuser.h>
#include <KNotification> #include <tdelocale.h>
AuthDialog::AuthDialog(const TQString &actionId, #include <PolkitTQt/Authority>
const TQString &message, #include <PolkitTQt/Details>
const TQString &iconName,
const PolkitTQt1::Details &details, using namespace PolkitTQt;
const PolkitTQt1::Identity::List &identities,
WId parent) AuthDialog::AuthDialog(const TQString &actionId, const TQString &message,
: KDialog(0) 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. setMainWidget(m_authWidget);
// 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 if (message.isEmpty())
KWindowSystem::setMainWindow(this, parent); {
kdWarning() << "Could not get action message for action." << endl;
// Set modal m_authWidget->lblHeader->hide();
KWindowSystem::setState(winId(), NET::Modal);
} }
else
setupUi(mainWidget()); {
setButtons(Ok | Cancel | Details); kdDebug() << "Message of action: " << message << endl;
m_authWidget->lblHeader->setText("<h3>" + message + "</h3>");
if (message.isEmpty()) {
kWarning() << "Could not get action message for action.";
lblHeader->hide();
} else {
kDebug() << "Message of action: " << message;
lblHeader->setText("<h3>" + message + "</h3>");
setCaption(message); setCaption(message);
m_message = message; m_message = message;
} }
// loads the standard key icon // loads the standard key icon
TQPixmap icon = TDEIconLoader::global()->loadIcon("dialog-password", TQPixmap icon = TDEGlobal::iconLoader()->loadIcon("password", TDEIcon::NoGroup,
TDEIconLoader::NoGroup, TDEIcon::SizeHuge, TDEIcon::DefaultState);
TDEIconLoader::SizeHuge,
TDEIconLoader::DefaultState);
// create a painter to paint the action icon over the key icon // create a painter to paint the action icon over the key icon
TQPainter painter(&icon); TQPainter painter(&icon);
const int iconSize = icon.size().width(); const int iconSize = icon.size().width();
// the the emblem icon to size 32
int overlaySize = 32; int overlaySize = 32;
// try to load the action icon const TQPixmap pixmap = TDEGlobal::iconLoader()->loadIcon(iconName, TDEIcon::NoGroup,
const TQPixmap pixmap = TDEIconLoader::global()->loadIcon(iconName, overlaySize, TDEIcon::DefaultState, 0, true);
TDEIconLoader::NoGroup, if (!pixmap.isNull())
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 // bottom right corner
startPoint = TQPoint(iconSize - overlaySize - 2, TQPoint startPoint = TQPoint(iconSize - overlaySize - 2, iconSize - overlaySize - 2);
iconSize - overlaySize - 2);
painter.drawPixmap(startPoint, pixmap); painter.drawPixmap(startPoint, pixmap);
} }
setWindowIcon(icon); setIcon(icon);
lblPixmap->setPixmap(icon); m_authWidget->lblPixmap->setPixmap(icon);
// find action description for actionId // find action description for actionId
foreach(const PolkitTQt1::ActionDescription &desc, PolkitTQt1::Authority::instance()->enumerateActionsSync()) { for (const ActionDescription &desc : Authority::instance()->enumerateActionsSync())
if (actionId == desc.actionId()) { {
if (actionId == desc.actionId())
{
m_actionDescription = desc; m_actionDescription = desc;
kDebug() << "Action description has been found" ; kdDebug() << "Action description has been found" << endl;
break; break;
} }
} }
@ -113,20 +95,22 @@ AuthDialog::AuthDialog(const TQString &actionId,
AuthDetails *detailsDialog = new AuthDetails(details, m_actionDescription, m_appname, this); AuthDetails *detailsDialog = new AuthDetails(details, m_actionDescription, m_appname, this);
setDetailsWidget(detailsDialog); setDetailsWidget(detailsDialog);
userCB->hide(); m_authWidget->userCB->hide();
lePassword->setFocus(); m_authWidget->lePassword->setFocus();
m_authWidget->errorMessageKTW->hide();
errorMessageKTW->hide();
// If there is more than 1 identity we will show the combobox for user selection // If there is more than 1 identity we will show the combobox for user selection
if (identities.size() > 1) { if (identities.size() > 1)
connect(userCB, SIGNAL(currentIndexChanged(int)), {
connect(m_authWidget->userCB, SIGNAL(activated(int)),
this, SLOT(on_userCB_currentIndexChanged(int))); this, SLOT(on_userCB_currentIndexChanged(int)));
createUserCB(identities); createUserCB(identities);
} else { }
userCB->addItem("", TQVariant(identities[0].toString())); else
userCB->setCurrentIndex(0); {
m_authWidget->userCB->insertItem("");
m_userData.append(identities[0].toString());
m_authWidget->userCB->setCurrentItem(0);
} }
} }
@ -137,241 +121,228 @@ AuthDialog::~AuthDialog()
void AuthDialog::accept() void AuthDialog::accept()
{ {
// Do nothing, do not close the dialog. This is needed so that the dialog stays // Do nothing, do not close the dialog. This is needed so that the dialog stays
lePassword->setEnabled(false); m_authWidget->lePassword->setEnabled(false);
return; return;
} }
void AuthDialog::setRequest(const TQString &request, bool requiresAdmin) void AuthDialog::setRequest(const TQString &request, bool requiresAdmin)
{ {
kDebug() << request; kdDebug() << request << endl;
PolkitTQt1::Identity identity = adminUserSelected(); Identity identity = adminUserSelected();
if (request.startsWith(TQLatin1String("password:"), TQt::CaseInsensitive)) { if (request.startsWith("password:", false))
if (requiresAdmin) { {
if (!identity.isValid()) { if (requiresAdmin)
lblPassword->setText(i18n("Password for root:")); {
} else { if (!identity.isValid())
lblPassword->setText(i18n("Password for %1:", {
identity.toString().remove("unix-user:"))); m_authWidget->lblPassword->setText(i18n("Password for root:"));
} }
} else { else
lblPassword->setText(i18n("Password:")); {
} TQString username = identity.toString().remove("unix-user:");
} else if (request.startsWith(TQLatin1String("password or swipe finger:"), m_authWidget->lblPassword->setText(i18n("Password for %1:").arg(username));
TQt::CaseInsensitive)) { }
if (requiresAdmin) { }
if (!identity.isValid()) { else
lblPassword->setText(i18n("Password or swipe finger for root:")); {
} else { m_authWidget->lblPassword->setText(i18n("Password:"));
lblPassword->setText(i18n("Password or swipe finger for %1:", }
identity.toString().remove("unix-user:"))); }
} else if (request.startsWith("password or swipe finger:"), false)
} else { {
lblPassword->setText(i18n("Password or swipe finger:")); if (requiresAdmin)
} {
} else { if (!identity.isValid())
lblPassword->setText(request); {
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() void AuthDialog::setOptions()
{ {
lblContent->setText(i18n("An application is attempting to perform an action that requires privileges." m_authWidget->lblContent->setText(i18n("An application is attempting to perform an action "
" Authentication is required to perform this 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 /* 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 * doing it again.. (this is mainly used when the user entered the
* wrong password and the dialog is recycled) * wrong password and the dialog is recycled)
*/ */
if (identities.count() && (userCB->count() - 1) != identities.count()) { if (identities.count() && (m_authWidget->userCB->count() - 1) != identities.count())
{
// Clears the combobox in the case some user be added // Clears the combobox in the case some user be added
userCB->clear(); m_authWidget->userCB->clear();
m_userData.clear();
// Adds a Dummy user // Adds a Dummy user
userCB->addItem(i18n("Select User"), qVariantFromValue<TQString> (TQString())); m_authWidget->userCB->insertItem(i18n("Select User"));
qobject_cast<TQStandardItemModel *>(userCB->model())->item(userCB->count()-1)->setEnabled(false); m_userData.append(TQString::null);
// For each user // For each user
int index = 1; // Start at 1 because of the "Select User" entry int index = 1; // Start at 1 because of the "Select User" entry
int currentUserIndex = -1; int currentUserIndex = -1;
const KUser currentUser; const KUser currentUser;
foreach(const PolkitTQt1::Identity &identity, identities) { for (const Identity &identity : identities)
{
// First check to see if the user is valid // First check to see if the user is valid
kDebug() << "User: " << identity.toString(); kdDebug() << "User: " << identity.toString() << endl;
const KUser user(identity.toString().remove("unix-user:")); const KUser user(identity.toString().remove("unix-user:"));
if (!user.isValid()) { if (!user.isValid())
kWarning() << "User invalid: " << user.loginName(); {
kdWarning() << "User invalid: " << user.loginName() << endl;
continue; continue;
} }
// Display user Full Name IF available // Display user full Name if available
TQString display; TQString display;
if (!user.property(KUser::FullName).toString().isEmpty()) { if (!user.fullName().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.fullName() + " (" + user.loginName() + ")";
display = user.loginName();
} }
else
TDEIcon icon; {
// load user icon face display = user.loginName();
if (!user.faceIconPath().isEmpty()) {
icon = TDEIcon(user.faceIconPath());
} else {
icon = TDEIcon("user-identity");
} }
// appends the user item m_authWidget->userCB->insertItem(display);
userCB->addItem(icon, display, qVariantFromValue<TQString> (identity.toString())); m_userData.append(identity.toString());
if (user == currentUser) { if (user == currentUser)
{
currentUserIndex = index; currentUserIndex = index;
} }
++index; ++index;
} }
// Show the widget and set focus // Show the widget and set focus
if (currentUserIndex != -1) { if (currentUserIndex != -1)
userCB->setCurrentIndex(currentUserIndex); {
m_authWidget->userCB->setCurrentItem(currentUserIndex);
} }
userCB->show(); m_authWidget->userCB->show();
} }
} }
PolkitTQt1::Identity AuthDialog::adminUserSelected() const Identity AuthDialog::adminUserSelected() const
{ {
if (userCB->currentIndex() == -1) if (m_authWidget->userCB->currentItem() == -1)
return PolkitTQt1::Identity(); {
return Identity();
}
TQString id = userCB->itemData(userCB->currentIndex()).toString(); TQString id = m_userData[m_authWidget->userCB->currentItem()];
if (id.isEmpty()) if (id.isEmpty())
return PolkitTQt1::Identity(); {
return PolkitTQt1::Identity::fromString(id); return Identity();
}
return Identity::fromString(id);
} }
void AuthDialog::on_userCB_currentIndexChanged(int /*index*/) void AuthDialog::on_userCB_currentIndexChanged(int /*index*/)
{ {
PolkitTQt1::Identity identity = adminUserSelected(); Identity identity = adminUserSelected();
// itemData is Null when "Select user" is selected // identity is now valid when "Select user" is selected
if (!identity.isValid()) { if (!identity.isValid())
lePassword->setEnabled(false); {
lblPassword->setEnabled(false); m_authWidget->lePassword->setEnabled(false);
enableButtonOk(false); m_authWidget->lblPassword->setEnabled(false);
} else { enableButtonOK(false);
lePassword->setEnabled(true); }
lblPassword->setEnabled(true); else
enableButtonOk(true); {
m_authWidget->lePassword->setEnabled(true);
m_authWidget->lblPassword->setEnabled(true);
enableButtonOK(true);
// We need this to restart the auth with the new user // We need this to restart the auth with the new user
emit adminUserSelected(identity); emit adminUserSelected(identity);
// git password label focus // give password label focus
lePassword->setFocus(); m_authWidget->lePassword->setFocus();
} }
} }
TQString AuthDialog::password() const TQString AuthDialog::password() const
{ {
return lePassword->text(); return m_authWidget->lePassword->text();
} }
void AuthDialog::authenticationFailure() void AuthDialog::authenticationFailure()
{ {
errorMessageKTW->setText(i18n("Authentication failure, please try again."), KTitleWidget::ErrorMessage); // TODO errorMessageKTW->setText(i18n("Authentication failure, please try again."), KTitleWidget::ErrorMessage);
TQFont bold = font(); TQFont bold = font();
bold.setBold(true); bold.setBold(true);
lblPassword->setFont(bold); m_authWidget->errorMessageKTW->setText(i18n("Authentication failure, please try again."));
lePassword->setEnabled(true); m_authWidget->errorMessageKTW->setFont(bold);
lePassword->clear(); m_authWidget->errorMessageKTW->show();
lePassword->setFocus(); 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();
}
}
void AuthDialog::notificationActivated(unsigned int action)
{
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); app_label->setText(appname);
foreach(const TQString &key, details.keys()) { //krazy:exclude=foreach (Details is not a map/hash, but rather a method) for (const TQString &key : details.keys())
int row = gridLayout->rowCount() + 1; {
int row = AuthDetailsWidgetLayout->numRows() + 1;
TQLabel *keyLabel = new TQLabel(this); TQLabel *keyLabel = new TQLabel(this);
keyLabel->setText(i18nc("%1 is the name of a detail about the current action " keyLabel->setText(key);
"provided by polkit", "%1:", key)); AuthDetailsWidgetLayout->addWidget(keyLabel, row, 0);
gridLayout->addWidget(keyLabel, row, 0);
TQLabel *valueLabel = new TQLabel(this); TQLabel *valueLabel = new TQLabel(this);
valueLabel->setText(details.lookup(key)); valueLabel->setText(details.lookup(key));
gridLayout->addWidget(valueLabel, row, 1); AuthDetailsWidgetLayout->addWidget(valueLabel, row, 1);
} }
action_label->setText(actionDescription.description()); 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 vendor = actionDescription.vendorName();
TQString vendorUrl = actionDescription.vendorUrl(); TQString vendorUrl = actionDescription.vendorUrl();
if (!vendor.isEmpty()) { if (!vendor.isEmpty())
{
vendorUL->setText(vendor); vendorUL->setText(vendor);
vendorUL->setTipText(i18n("Click to open %1", vendorUrl)); vendorUL->setTipText(vendorUrl);
vendorUL->setUrl(vendorUrl); vendorUL->setURL(vendorUrl);
} else if (!vendorUrl.isEmpty()) { }
else if (!vendorUrl.isEmpty())
{
vendorUL->setText(vendorUrl); vendorUL->setText(vendorUrl);
vendorUL->setTipText(i18n("Click to open %1", vendorUrl)); vendorUL->setTipText(vendorUrl);
vendorUL->setUrl(vendorUrl); vendorUL->setURL(vendorUrl);
} else { }
else
{
vendorL->hide(); vendorL->hide();
vendorUL->hide(); vendorUL->hide();
} }
connect(vendorUL, SIGNAL(leftClickedUrl(TQString)), SLOT(openUrl(TQString))); connect(vendorUL, TQT_SIGNAL(leftClickedURL(const TQString&)),
connect(action_label, SIGNAL(leftClickedUrl(TQString)), SLOT(openAction(TQString))); TQT_SLOT(openUrl(const TQString&)));
} }
void AuthDetails::openUrl(const TQString& url) void AuthDetails::openUrl(const TQString &url)
{ {
TDEToolInvocation::invokeBrowser(url); kapp->invokeBrowser(url);
}
void AuthDetails::openAction(const TQString &url)
{
TQProcess::startDetached("polkit-kde-authorization", TQStringList() << url);
} }
#include "AuthDialog.moc" #include "AuthDialog.moc"

@ -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 <gokcen@pardus.org.tr> Copyright (C) 2007-2008 Gökçen Eraslan <gokcen@pardus.org.tr>
Copyright (C) 2008 Daniel Nicoletti <dantti85-pk@yahoo.com.br> Copyright (C) 2008 Daniel Nicoletti <dantti85-pk@yahoo.com.br>
Copyright (C) 2010 Dario Freddi <drf@kde.org> Copyright (C) 2010 Dario Freddi <drf@kde.org>
@ -17,74 +17,72 @@
along with this library; see the file COPYING.LIB. If not, write to along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. Boston, MA 02110-1301, USA.
*/ */
#ifndef AUTHDIALOG_H #ifndef AUTHDIALOG_H
#define AUTHDIALOG_H #define AUTHDIALOG_H
#include "ui_AuthDialog.h" #include <kdialogbase.h>
#include "ui_authdetails.h" #include "AuthDetailsWidget.h"
#include <PolkitTQt1/Identity> #include <PolkitTQt/Identity>
#include <PolkitTQt1/ActionDescription> #include <PolkitTQt/ActionDescription>
namespace PolkitTQt1 namespace PolkitTQt
{ {
class Details; class Details;
} }
class AuthDialog : public KDialog, private Ui::AuthDialog class AuthDialogWidget;
class AuthDialog : public KDialogBase
{ {
Q_OBJECT Q_OBJECT
public:
AuthDialog(const TQString &actionId, public:
const TQString &message, AuthDialog(const TQString &actionId, const TQString &message,
const TQString &iconName, const TQString &iconName, const PolkitTQt::Details &details,
const PolkitTQt1::Details &details, const PolkitTQt::Identity::List &identities);
const PolkitTQt1::Identity::List &identities,
WId parent);
~AuthDialog(); ~AuthDialog();
void setRequest(const TQString &request, bool requiresAdmin); void setRequest(const TQString &request, bool requiresAdmin);
void setOptions(); void setOptions();
TQString password() const;
void authenticationFailure(); void authenticationFailure();
TQString password() const;
PolkitTQt::Identity adminUserSelected() const;
PolkitTQt1::Identity adminUserSelected() const; PolkitTQt::ActionDescription m_actionDescription;
PolkitTQt1::ActionDescription m_actionDescription;
signals: signals:
void adminUserSelected(PolkitTQt1::Identity); void adminUserSelected(const PolkitTQt::Identity&);
public slots: public slots:
virtual void accept(); virtual void accept();
private slots: private slots:
void on_userCB_currentIndexChanged(int index); void on_userCB_currentIndexChanged(int index);
void notificationActivated(unsigned int action);
private: private:
TQString m_appname; TQString m_appname;
TQString m_message; TQString m_message;
AuthDialogWidget *m_authWidget;
TQStringList m_userData;
void createUserCB(const PolkitTQt1::Identity::List &identities); void createUserCB(const PolkitTQt::Identity::List &identities);
void showEvent(TQShowEvent *);
}; };
class AuthDetails : public TQWidget, private Ui::AuthDetails class AuthDetails : public AuthDetailsWidget
{ {
Q_OBJECT Q_OBJECT
public:
AuthDetails(const PolkitTQt1::Details &details, public:
const PolkitTQt1::ActionDescription &actionDescription, AuthDetails(const PolkitTQt::Details &details,
const TQString &appname, const PolkitTQt::ActionDescription &actionDescription,
TQWidget *parent); const TQString &appname, TQWidget *parent);
private slots: private slots:
void openUrl(const TQString&); void openUrl(const TQString &url);
void openAction(const TQString&);
}; };
#endif // AUTHDIALOG_H #endif

@ -1,171 +0,0 @@
<ui version="4.0" >
<class>AuthDialog</class>
<widget class="TQWidget" name="AuthDialog" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>335</width>
<height>193</height>
</rect>
</property>
<property name="sizePolicy" >
<sizepolicy vsizetype="MinimumExpanding" hsizetype="MinimumExpanding" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="TQGridLayout" name="gridLayout" >
<item rowspan="6" row="0" column="0" >
<layout class="TQVBoxLayout" name="verticalLayout" >
<item>
<widget class="TQLabel" name="lblPixmap" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string notr="true">Lock Icon here</string>
</property>
<property name="wordWrap" >
<bool>false</bool>
</property>
<property name="buddy" >
<cstring>lePassword</cstring>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer" >
<property name="orientation" >
<enum>TQt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>92</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="0" column="1" colspan="3" >
<layout class="TQVBoxLayout" name="verticalLayout_2" >
<item>
<widget class="TQLabel" name="lblHeader" >
<property name="sizePolicy" >
<sizepolicy vsizetype="MinimumExpanding" hsizetype="MinimumExpanding" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string notr="true">&lt;b>Header is here!&lt;/b></string>
</property>
<property name="wordWrap" >
<bool>true</bool>
</property>
<property name="buddy" >
<cstring>lePassword</cstring>
</property>
</widget>
</item>
<item>
<widget class="TQLabel" name="lblContent" >
<property name="sizePolicy" >
<sizepolicy vsizetype="MinimumExpanding" hsizetype="MinimumExpanding" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string notr="true">&lt;i>Content&lt;/i></string>
</property>
<property name="wordWrap" >
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="1" colspan="3" >
<widget class="KTitleWidget" name="errorMessageKTW" />
</item>
<item row="3" column="1" colspan="2" >
<widget class="TQLabel" name="lblPassword" >
<property name="text" >
<string>Password:</string>
</property>
<property name="buddy" >
<cstring>lePassword</cstring>
</property>
</widget>
</item>
<item row="3" column="3" >
<widget class="KLineEdit" name="lePassword" >
<property name="echoMode" >
<enum>TQLineEdit::Password</enum>
</property>
<property name="passwordMode" >
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1" colspan="3" >
<widget class="KComboBox" name="userCB" />
</item>
</layout>
<zorder>errorMessageKTW</zorder>
<zorder>lblPassword</zorder>
<zorder>lePassword</zorder>
<zorder>cbRemember</zorder>
<zorder>cbSessionOnly</zorder>
<zorder>horizontalSpacer</zorder>
<zorder>userCB</zorder>
</widget>
<customwidgets>
<customwidget>
<class>KComboBox</class>
<extends>TQComboBox</extends>
<header>kcombobox.h</header>
</customwidget>
<customwidget>
<class>KLineEdit</class>
<extends>TQLineEdit</extends>
<header>klineedit.h</header>
</customwidget>
<customwidget>
<class>KTitleWidget</class>
<extends>TQWidget</extends>
<header>ktitlewidget.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>userCB</tabstop>
<tabstop>lePassword</tabstop>
<tabstop>cbRemember</tabstop>
<tabstop>cbSessionOnly</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>cbRemember</sender>
<signal>toggled(bool)</signal>
<receiver>cbSessionOnly</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel" >
<x>259</x>
<y>161</y>
</hint>
<hint type="destinationlabel" >
<x>161</x>
<y>169</y>
</hint>
</hints>
</connection>
</connections>
</ui>

@ -0,0 +1,168 @@
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>AuthDialogWidget</class>
<widget class="TQWidget">
<property name="name">
<cstring>AuthDialogWidget</cstring>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>335</width>
<height>193</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>3</hsizetype>
<vsizetype>3</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<grid>
<property name="name">
<cstring>gridLayout</cstring>
</property>
<widget class="TQLayoutWidget" rowspan="6" row="0" column="0">
<property name="name">
<cstring>verticalLayout</cstring>
</property>
<vbox>
<widget class="TQLabel">
<property name="name">
<cstring>lblPixmap</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>5</hsizetype>
<vsizetype>5</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Lock Icon here</string>
</property>
<property name="alignment">
<set>WordBreak</set>
</property>
<property name="buddy">
<cstring>lePassword</cstring>
</property>
</widget>
<spacer>
<property name="name">
<cstring>verticalSpacer</cstring>
</property>
<property name="orientation">
<enum>Vertical</enum>
</property>
<property name="sizeHint">
<size>
<width>20</width>
<height>92</height>
</size>
</property>
</spacer>
</vbox>
</widget>
<widget class="TQLayoutWidget" row="0" column="1" colspan="3">
<property name="name">
<cstring>verticalLayout_2</cstring>
</property>
<vbox>
<widget class="TQLabel">
<property name="name">
<cstring>lblHeader</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>3</hsizetype>
<vsizetype>3</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>&lt;b>Header is here!&lt;/b></string>
</property>
<property name="alignment">
<set>WordBreak</set>
</property>
<property name="buddy">
<cstring>lePassword</cstring>
</property>
</widget>
<widget class="TQLabel">
<property name="name">
<cstring>lblContent</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>3</hsizetype>
<vsizetype>3</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string notr="true">&lt;i>Content&lt;/i></string>
</property>
<property name="alignment">
<set>WordBreak</set>
</property>
</widget>
</vbox>
</widget>
<widget class="TQLabel" row="2" column="1" colspan="3">
<property name="name">
<cstring>errorMessageKTW</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>3</hsizetype>
<vsizetype>3</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
<widget class="TQLabel" row="3" column="1" colspan="2">
<property name="name">
<cstring>lblPassword</cstring>
</property>
<property name="text">
<string>Password:</string>
</property>
<property name="buddy">
<cstring>lePassword</cstring>
</property>
</widget>
<widget class="KLineEdit" row="3" column="3">
<property name="name">
<cstring>lePassword</cstring>
</property>
<property name="echoMode">
<enum>Password</enum>
</property>
</widget>
<widget class="KComboBox" row="1" column="1" colspan="3">
<property name="name">
<cstring>userCB</cstring>
</property>
</widget>
</grid>
</widget>
<!--customwidgets>
<customwidget>
<class>KTitleWidget</class>
<extends>TQWidget</extends>
<header>ktitlewidget.h</header>
</customwidget>
</customwidgets-->
<tabstops>
<tabstop>userCB</tabstop>
<tabstop>lePassword</tabstop>
</tabstops>
</UI>

@ -12,10 +12,12 @@
include_directories( include_directories(
${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}
${TQT_INCLUDE_DIRS} ${TQT_INCLUDE_DIRS}
${TDE_INCLUDE_DIR} ${TDE_INCLUDE_DIR}
${POLKIT_TQT_INCLUDE_DIRS}
) )
link_directories( link_directories(
@ -26,7 +28,8 @@ link_directories(
##### executables ######################### ##### executables #########################
tde_add_executable( polkit-agent-tde AUTOMOC tde_add_executable( polkit-agent-tde AUTOMOC
SOURCES main.cpp SOURCES AuthDialogWidget.ui AuthDetailsWidget.ui AuthDialog.h AuthDialog.cpp
LINK tdecore-shared tdeui-shared 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} DESTINATION ${BIN_INSTALL_DIR}
) )

@ -1,91 +0,0 @@
<ui version="4.0" >
<class>AuthDetails</class>
<widget class="TQWidget" name="AuthDetails" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>273</width>
<height>80</height>
</rect>
</property>
<property name="sizePolicy" >
<sizepolicy vsizetype="MinimumExpanding" hsizetype="MinimumExpanding" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="TQGridLayout" name="gridLayout" >
<item row="1" column="0" >
<widget class="TQLabel" name="label" >
<property name="text" >
<string>Application:</string>
</property>
</widget>
</item>
<item row="2" column="0" >
<widget class="TQLabel" name="label_3" >
<property name="text" >
<string>Action:</string>
</property>
</widget>
</item>
<item row="3" column="0" >
<widget class="TQLabel" name="vendorL" >
<property name="text" >
<string>Vendor:</string>
</property>
</widget>
</item>
<item row="3" column="1" colspan="3" >
<widget class="KUrlLabel" name="vendorUL" >
<property name="text" >
<string>Vendor:</string>
</property>
<property name="tipText" >
<string/>
</property>
<property name="useTips" >
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="1" colspan="3" >
<widget class="KUrlLabel" name="action_label" >
<property name="text" >
<string>Action:</string>
</property>
<property name="tipText" >
<string/>
</property>
<property name="useTips" >
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0" colspan="4" >
<widget class="Line" name="line" >
<property name="orientation" >
<enum>TQt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="1" colspan="3" >
<widget class="TQLabel" name="app_label" >
<property name="text" >
<string>Application:</string>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>KUrlLabel</class>
<extends>TQLabel</extends>
<header>kurllabel.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

@ -22,9 +22,7 @@
#include <tdecmdlineargs.h> #include <tdecmdlineargs.h>
#include <tdelocale.h> #include <tdelocale.h>
#include <tqpushbutton.h> #include "polkit-agent-tde.h"
#include <tdeapplication.h>
//#include "policykitkde.h"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
@ -35,24 +33,14 @@ int main(int argc, char *argv[])
aboutData.setProductName("policykit-agent-tde"); aboutData.setProductName("policykit-agent-tde");
TDECmdLineArgs::init(argc, argv, &aboutData); TDECmdLineArgs::init(argc, argv, &aboutData);
TDEApplication app;
TQPushButton *pbQuit = new TQPushButton("Quit", 0); if (!PolkitAgentTDE::start())
app.setMainWidget(pbQuit); {
app.connect(&app, TQT_SIGNAL(lastWindowClosed()), TQT_SLOT(quit())); tqWarning("PolkitAgentTDE is already running!\n");
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; return 0;
} }
TDECrash::setFlags(TDECrash::AutoRestart); PolkitAgentTDE agent;
PolicyKitKDE agent;
agent.disableSessionManagement(); agent.disableSessionManagement();
agent.exec(); return agent.exec();
*/
} }

@ -4,8 +4,6 @@
<method name="ObtainAuthorization" > <method name="ObtainAuthorization" >
<!-- IN: PolicyKit action identifier; see PolKitAction --> <!-- IN: PolicyKit action identifier; see PolKitAction -->
<arg direction="in" type="s" name="action_id" /> <arg direction="in" type="s" name="action_id" />
<!-- IN: X11 window ID for the top-level X11 window the dialog will be transient for. -->
<arg direction="in" type="u" name="xid" />
<!-- IN: Process ID to grant authorization to --> <!-- IN: Process ID to grant authorization to -->
<arg direction="in" type="u" name="pid" /> <arg direction="in" type="u" name="pid" />
<!-- OUT: whether the user gained the authorization --> <!-- OUT: whether the user gained the authorization -->

@ -1,10 +0,0 @@
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="org.kde.Polkit1AuthAgent">
<method name="setWIdForAction">
<arg type="s" direction="in" />
<arg type="t" direction="in" />
</method>
</interface>
</node>

@ -1,237 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2009 Jaroslav Reznik <jreznik@redhat.com>
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 <KDebug>
#include <KWindowSystem>
#include <PolkitTQt1/Agent/Listener>
#include <PolkitTQt1/Agent/Session>
#include <PolkitTQt1/Subject>
#include <PolkitTQt1/Identity>
#include <PolkitTQt1/Details>
#include <TQtDBus/TQDBusConnection>
#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();
}

@ -1,80 +0,0 @@
#ifndef POLICYKITLISTENER_H
#define POLICYKITLISTENER_H
/* This file is part of the KDE project
Copyright (C) 2009 Jaroslav Reznik <jreznik@redhat.com>
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 <PolkitTQt1/Agent/Listener>
#include <TQtCore/TQWeakPointer>
#include <TQtCore/TQHash>
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<AuthDialog> m_dialog;
TQWeakPointer<Session> 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

@ -18,21 +18,16 @@
*/ */
#ifndef POLICYKITKDE_H #include "polkit-agent-tde.h"
#define POLICYKITKDE_H
#include <KUniqueApplication> PolkitAgentTDE::PolkitAgentTDE() : m_listener(new PolkitListener(this))
#include "policykitlistener.h"
class PolicyKitKDE : public KUniqueApplication
{ {
Q_OBJECT }
public:
PolicyKitKDE();
virtual ~PolicyKitKDE();
private:
PolicyKitListener *m_listener;
};
#endif PolkitAgentTDE::~PolkitAgentTDE()
{
if (m_listener)
{
delete m_listener;
}
}

@ -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 <jreznik@redhat.com> Copyright (C) 2009 Jaroslav Reznik <jreznik@redhat.com>
This program is free software; you can redistribute it and/or 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 <KDebug> #include <kuniqueapplication.h>
#include <PolkitTQt1/Subject>
PolicyKitKDE::PolicyKitKDE() #include "polkit-listener.h"
: m_listener(new PolicyKitListener(this))
{
setQuitOnLastWindowClosed(false);
PolkitTQt1::UnixSessionSubject session(getpid());
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) { #endif
kDebug() << "Couldn't register listener!";
exit(1);
}
}
PolicyKitKDE::~PolicyKitKDE()
{
m_listener->deleteLater();
}

@ -0,0 +1,226 @@
/* This file is part of the KDE project
Copyright (C) 2009 Jaroslav Reznik <jreznik@redhat.com>
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 <kdebug.h>
#include <tdelocale.h>
#include <PolkitTQt/Agent/Listener>
#include <PolkitTQt/Agent/Session>
#include <PolkitTQt/Subject>
#include <PolkitTQt/Identity>
#include <PolkitTQt/Details>
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"

@ -0,0 +1,71 @@
/* This file is part of the TDE project
Copyright (C) 2009 Jaroslav Reznik <jreznik@redhat.com>
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 <PolkitTQt/Agent/Listener>
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
Loading…
Cancel
Save