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

@ -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) 2008 Daniel Nicoletti <dantti85-pk@yahoo.com.br>
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
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef AUTHDIALOG_H
#define AUTHDIALOG_H
#include "ui_AuthDialog.h"
#include "ui_authdetails.h"
#include <kdialogbase.h>
#include "AuthDetailsWidget.h"
#include <PolkitTQt1/Identity>
#include <PolkitTQt1/ActionDescription>
#include <PolkitTQt/Identity>
#include <PolkitTQt/ActionDescription>
namespace PolkitTQt1
namespace PolkitTQt
{
class Details;
}
class AuthDialog : public KDialog, private Ui::AuthDialog
class AuthDialogWidget;
class AuthDialog : public KDialogBase
{
Q_OBJECT
public:
AuthDialog(const TQString &actionId,
const TQString &message,
const TQString &iconName,
const PolkitTQt1::Details &details,
const PolkitTQt1::Identity::List &identities,
WId parent);
public:
AuthDialog(const TQString &actionId, const TQString &message,
const TQString &iconName, const PolkitTQt::Details &details,
const PolkitTQt::Identity::List &identities);
~AuthDialog();
void setRequest(const TQString &request, bool requiresAdmin);
void setOptions();
TQString password() const;
void authenticationFailure();
TQString password() const;
PolkitTQt::Identity adminUserSelected() const;
PolkitTQt1::Identity adminUserSelected() const;
PolkitTQt1::ActionDescription m_actionDescription;
PolkitTQt::ActionDescription m_actionDescription;
signals:
void adminUserSelected(PolkitTQt1::Identity);
signals:
void adminUserSelected(const PolkitTQt::Identity&);
public slots:
public slots:
virtual void accept();
private slots:
private slots:
void on_userCB_currentIndexChanged(int index);
void notificationActivated(unsigned int action);
private:
private:
TQString m_appname;
TQString m_message;
AuthDialogWidget *m_authWidget;
TQStringList m_userData;
void createUserCB(const PolkitTQt1::Identity::List &identities);
void showEvent(TQShowEvent *);
void createUserCB(const PolkitTQt::Identity::List &identities);
};
class AuthDetails : public TQWidget, private Ui::AuthDetails
class AuthDetails : public AuthDetailsWidget
{
Q_OBJECT
public:
AuthDetails(const PolkitTQt1::Details &details,
const PolkitTQt1::ActionDescription &actionDescription,
const TQString &appname,
TQWidget *parent);
private slots:
void openUrl(const TQString&);
void openAction(const TQString&);
public:
AuthDetails(const PolkitTQt::Details &details,
const PolkitTQt::ActionDescription &actionDescription,
const TQString &appname, TQWidget *parent);
private slots:
void openUrl(const TQString &url);
};
#endif // AUTHDIALOG_H
#endif

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

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

@ -4,8 +4,6 @@
<method name="ObtainAuthorization" >
<!-- IN: PolicyKit action identifier; see PolKitAction -->
<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 -->
<arg direction="in" type="u" name="pid" />
<!-- 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
#define POLICYKITKDE_H
#include "polkit-agent-tde.h"
#include <KUniqueApplication>
#include "policykitlistener.h"
class PolicyKitKDE : public KUniqueApplication
PolkitAgentTDE::PolkitAgentTDE() : m_listener(new PolkitListener(this))
{
Q_OBJECT
public:
PolicyKitKDE();
virtual ~PolicyKitKDE();
private:
PolicyKitListener *m_listener;
};
}
#endif
PolkitAgentTDE::~PolkitAgentTDE()
{
if (m_listener)
{
delete m_listener;
}
}

@ -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>
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 <PolkitTQt1/Subject>
#include <kuniqueapplication.h>
PolicyKitKDE::PolicyKitKDE()
: m_listener(new PolicyKitListener(this))
{
setQuitOnLastWindowClosed(false);
PolkitTQt1::UnixSessionSubject session(getpid());
#include "polkit-listener.h"
bool result = m_listener->registerListener(session, "/org/kde/PolicyKit1/AuthenticationAgent");
class PolkitAgentTDE : public KUniqueApplication
{
public:
PolkitAgentTDE();
virtual ~PolkitAgentTDE();
kDebug() << result;
private:
PolkitListener *m_listener;
};
if (!result) {
kDebug() << "Couldn't register listener!";
exit(1);
}
}
#endif
PolicyKitKDE::~PolicyKitKDE()
{
m_listener->deleteLater();
}

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