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,116 +18,100 @@
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) { if (message.isEmpty())
kDebug() << "Associating the dialog with " << parent << " this dialog is " << winId(); {
kdWarning() << "Could not get action message for action." << endl;
// Set the parent m_authWidget->lblHeader->hide();
KWindowSystem::setMainWindow(this, parent); }
else
// Set modal {
KWindowSystem::setState(winId(), NET::Modal); kdDebug() << "Message of action: " << message << endl;
} m_authWidget->lblHeader->setText("<h3>" + message + "</h3>");
setCaption(message);
setupUi(mainWidget()); m_message = message;
setButtons(Ok | Cancel | Details); }
if (message.isEmpty()) { // loads the standard key icon
kWarning() << "Could not get action message for action."; TQPixmap icon = TDEGlobal::iconLoader()->loadIcon("password", TDEIcon::NoGroup,
lblHeader->hide(); TDEIcon::SizeHuge, TDEIcon::DefaultState);
} else { // create a painter to paint the action icon over the key icon
kDebug() << "Message of action: " << message; TQPainter painter(&icon);
lblHeader->setText("<h3>" + message + "</h3>"); const int iconSize = icon.size().width();
setCaption(message); int overlaySize = 32;
m_message = message; const TQPixmap pixmap = TDEGlobal::iconLoader()->loadIcon(iconName, TDEIcon::NoGroup,
} overlaySize, TDEIcon::DefaultState, 0, true);
if (!pixmap.isNull())
// loads the standard key icon {
TQPixmap icon = TDEIconLoader::global()->loadIcon("dialog-password", // bottom right corner
TDEIconLoader::NoGroup, TQPoint startPoint = TQPoint(iconSize - overlaySize - 2, iconSize - overlaySize - 2);
TDEIconLoader::SizeHuge, painter.drawPixmap(startPoint, pixmap);
TDEIconLoader::DefaultState); }
// create a painter to paint the action icon over the key icon
TQPainter painter(&icon); setIcon(icon);
const int iconSize = icon.size().width(); m_authWidget->lblPixmap->setPixmap(icon);
// the the emblem icon to size 32
int overlaySize = 32; // find action description for actionId
// try to load the action icon for (const ActionDescription &desc : Authority::instance()->enumerateActionsSync())
const TQPixmap pixmap = TDEIconLoader::global()->loadIcon(iconName, {
TDEIconLoader::NoGroup, if (actionId == desc.actionId())
overlaySize, {
TDEIconLoader::DefaultState, m_actionDescription = desc;
TQStringList(), kdDebug() << "Action description has been found" << endl;
0, break;
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);
} }
}
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() AuthDialog::~AuthDialog()
@ -136,242 +120,229 @@ 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()) {
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);
} }
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() 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 {
userCB->clear(); // Clears the combobox in the case some user be added
m_authWidget->userCB->clear();
// Adds a Dummy user m_userData.clear();
userCB->addItem(i18n("Select User"), qVariantFromValue<TQString> (TQString()));
qobject_cast<TQStandardItemModel *>(userCB->model())->item(userCB->count()-1)->setEnabled(false); // Adds a Dummy user
m_authWidget->userCB->insertItem(i18n("Select User"));
// For each user m_userData.append(TQString::null);
int index = 1; // Start at 1 because of the "Select User" entry
int currentUserIndex = -1; // For each user
const KUser currentUser; int index = 1; // Start at 1 because of the "Select User" entry
foreach(const PolkitTQt1::Identity &identity, identities) { int currentUserIndex = -1;
// First check to see if the user is valid const KUser currentUser;
kDebug() << "User: " << identity.toString(); for (const Identity &identity : identities)
const KUser user(identity.toString().remove("unix-user:")); {
if (!user.isValid()) { // First check to see if the user is valid
kWarning() << "User invalid: " << user.loginName(); kdDebug() << "User: " << identity.toString() << endl;
continue; const KUser user(identity.toString().remove("unix-user:"));
} if (!user.isValid())
{
// Display user Full Name IF available kdWarning() << "User invalid: " << user.loginName() << endl;
TQString display; continue;
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 full Name if available
display = user.loginName(); TQString display;
} if (!user.fullName().isEmpty())
{
TDEIcon icon; display = user.fullName() + " (" + user.loginName() + ")";
// load user icon face }
if (!user.faceIconPath().isEmpty()) { else
icon = TDEIcon(user.faceIconPath()); {
} else { display = user.loginName();
icon = TDEIcon("user-identity"); }
} m_authWidget->userCB->insertItem(display);
// appends the user item m_userData.append(identity.toString());
userCB->addItem(icon, display, qVariantFromValue<TQString> (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(); }
if (id.isEmpty())
return PolkitTQt1::Identity(); TQString id = m_userData[m_authWidget->userCB->currentItem()];
return PolkitTQt1::Identity::fromString(id); if (id.isEmpty())
{
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); {
// We need this to restart the auth with the new user m_authWidget->lePassword->setEnabled(true);
emit adminUserSelected(identity); m_authWidget->lblPassword->setEnabled(true);
// git password label focus enableButtonOK(true);
lePassword->setFocus(); // 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 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); app_label->setText(appname);
if (winId() != KWindowSystem::activeWindow())
{ for (const TQString &key : details.keys())
KNotification *notification = new KNotification("authenticate", this, {
KNotification::Persistent | KNotification::CloseWhenWidgetActivated); int row = AuthDetailsWidgetLayout->numRows() + 1;
kDebug() << "Notificate: " << notification->eventId();
notification->setText(m_message); TQLabel *keyLabel = new TQLabel(this);
TQPixmap icon = TDEIconLoader::global()->loadIcon("dialog-password", keyLabel->setText(key);
TDEIconLoader::NoGroup, AuthDetailsWidgetLayout->addWidget(keyLabel, row, 0);
TDEIconLoader::SizeHuge,
TDEIconLoader::DefaultState); TQLabel *valueLabel = new TQLabel(this);
notification->setPixmap(icon); valueLabel->setText(details.lookup(key));
notification->setActions(TQStringList() << i18n("Switch to dialog") << i18n("Cancel")); AuthDetailsWidgetLayout->addWidget(valueLabel, row, 1);
}
connect(notification, SIGNAL(activated(uint)), this, SLOT(notificationActivated(uint)));
notification->sendEvent(); 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; kapp->invokeBrowser(url);
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);
} }
#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
DESTINATION ${BIN_INSTALL_DIR} LINK tdecore-shared tdeui-shared polkit-tqt-core polkit-tqt-agent
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,37 +22,25 @@
#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[])
{ {
TDEAboutData aboutData("polkit-agent-tde", I18N_NOOP("Polkit-Agent-TDE"), "0.99.1", 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("A Polkit authentication agent for TDE"), TDEAboutData::License_GPL,
I18N_NOOP("(c) 2009 Red Hat, Inc.")); I18N_NOOP("(c) 2009 Red Hat, Inc."));
aboutData.addAuthor(I18N_NOOP("Jaroslav Reznik"), I18N_NOOP("Maintainer"), "jreznik@redhat.com"); aboutData.addAuthor(I18N_NOOP("Jaroslav Reznik"), I18N_NOOP("Maintainer"), "jreznik@redhat.com");
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())); return 0;
pbQuit->show(); }
return app.exec();
PolkitAgentTDE agent;
/* agent.disableSessionManagement();
if (!PolicyKitKDE::start()) { return agent.exec();
tqWarning("PolicyKitKDE is already running!\n");
return 0;
}
TDECrash::setFlags(TDECrash::AutoRestart);
PolicyKitKDE agent;
agent.disableSessionManagement();
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