21 #include "resourceldapkioconfig.h"
22 #include "resourceldapkio.h"
24 #include <kio/netaccess.h>
25 #include <kacceleratormanager.h>
26 #include <kcombobox.h>
29 #include <klineedit.h>
30 #include <kmessagebox.h>
31 #include <kpagewidget.h>
34 #include <QtCore/QPointer>
35 #include <QtGui/QCheckBox>
36 #include <QtGui/QLabel>
37 #include <QtGui/QLayout>
38 #include <QtGui/QPushButton>
39 #include <QtGui/QSpinBox>
40 #include <QtGui/QRadioButton>
42 #include "resourceldapkioconfig.moc"
46 ResourceLDAPKIOConfig::ResourceLDAPKIOConfig( QWidget *parent )
49 QBoxLayout *mainLayout =
new QVBoxLayout(
this );
50 mainLayout->setMargin( 0 );
52 KPageWidget *pageWidget =
new KPageWidget(
this );
53 pageWidget->setFaceType( KPageView::Tabbed );
55 mCfg =
new KLDAP::LdapConfigWidget(
56 KLDAP::LdapConfigWidget::W_USER |
57 KLDAP::LdapConfigWidget::W_PASS |
58 KLDAP::LdapConfigWidget::W_BINDDN |
59 KLDAP::LdapConfigWidget::W_REALM |
60 KLDAP::LdapConfigWidget::W_HOST |
61 KLDAP::LdapConfigWidget::W_PORT |
62 KLDAP::LdapConfigWidget::W_VER |
63 KLDAP::LdapConfigWidget::W_DN |
64 KLDAP::LdapConfigWidget::W_FILTER |
65 KLDAP::LdapConfigWidget::W_TIMELIMIT |
66 KLDAP::LdapConfigWidget::W_SIZELIMIT,
69 mSecurityCfg =
new KLDAP::LdapConfigWidget(
70 KLDAP::LdapConfigWidget::W_SECBOX |
71 KLDAP::LdapConfigWidget::W_AUTHBOX,
74 pageWidget->addPage( mCfg,
75 i18nc(
"@title:tab general account settings",
"General" ) );
77 pageWidget->addPage( mSecurityCfg,
78 i18nc(
"@title:tab account security settings",
"Security" ) );
80 mSubTree =
new QCheckBox( i18n(
"Sub-tree query" ),
this );
81 KHBox *box =
new KHBox(
this );
82 box->setSpacing( -1 );
83 mEditButton =
new QPushButton( i18n(
"Edit Attributes..." ), box );
84 mCacheButton =
new QPushButton( i18n(
"Offline Use..." ), box );
86 mainLayout->addWidget( pageWidget );
87 mainLayout->addWidget( mSubTree );
88 mainLayout->addWidget( box );
90 connect( mEditButton, SIGNAL(clicked()), SLOT(editAttributes()) );
91 connect( mCacheButton, SIGNAL(clicked()), SLOT(editCache()) );
94 void ResourceLDAPKIOConfig::loadSettings( KRES::Resource *res )
96 ResourceLDAPKIO *resource =
dynamic_cast<ResourceLDAPKIO*
>( res );
99 kDebug() <<
"cast failed";
103 mCfg->setUser( resource->user() );
104 mCfg->setPassword( resource->password() );
105 mCfg->setRealm( resource->realm() );
106 mCfg->setBindDn( resource->bindDN() );
107 mCfg->setHost( resource->host() );
108 mCfg->setPort( resource->port() );
109 mCfg->setVersion( resource->ver() );
110 mCfg->setTimeLimit( resource->timeLimit() );
111 mCfg->setSizeLimit( resource->sizeLimit() );
112 mCfg->setDn( KLDAP::LdapDN( resource->dn() ) );
113 mCfg->setFilter( resource->filter() );
114 mSecurityCfg->setMech( resource->mech() );
115 if ( resource->isTLS() ) {
116 mSecurityCfg->setSecurity( KLDAP::LdapConfigWidget::TLS );
117 }
else if ( resource->isSSL() ) {
118 mSecurityCfg->setSecurity( KLDAP::LdapConfigWidget::SSL );
120 mSecurityCfg->setSecurity( KLDAP::LdapConfigWidget::None );
122 if ( resource->isAnonymous() ) {
123 mSecurityCfg->setAuth( KLDAP::LdapConfigWidget::Anonymous );
124 }
else if ( resource->isSASL() ) {
125 mSecurityCfg->setAuth( KLDAP::LdapConfigWidget::SASL );
127 mSecurityCfg->setAuth( KLDAP::LdapConfigWidget::Simple );
129 mSubTree->setChecked( resource->isSubTree() );
130 mAttributes = resource->attributes();
131 mRDNPrefix = resource->RDNPrefix();
132 mCachePolicy = resource->cachePolicy();
133 mCacheDst = resource->cacheDst();
134 mAutoCache = resource->autoCache();
137 void ResourceLDAPKIOConfig::saveSettings( KRES::Resource *res )
139 ResourceLDAPKIO *resource =
dynamic_cast<ResourceLDAPKIO*
>( res );
142 kDebug() <<
"cast failed";
146 resource->setUser( mCfg->user() );
147 resource->setPassword( mCfg->password() );
148 resource->setRealm( mCfg->realm() );
149 resource->setBindDN( mCfg->bindDn() );
150 resource->setHost( mCfg->host() );
151 resource->setPort( mCfg->port() );
152 resource->setVer( mCfg->version() );
153 resource->setTimeLimit( mCfg->timeLimit() );
154 resource->setSizeLimit( mCfg->sizeLimit() );
155 resource->setDn( mCfg->dn().toString() );
156 resource->setFilter( mCfg->filter() );
157 resource->setIsAnonymous( mSecurityCfg->auth() ==
158 KLDAP::LdapConfigWidget::Anonymous );
159 resource->setIsSASL( mSecurityCfg->auth() == KLDAP::LdapConfigWidget::SASL );
160 resource->setMech( mSecurityCfg->mech() );
161 resource->setIsTLS( mSecurityCfg->security() == KLDAP::LdapConfigWidget::TLS );
162 resource->setIsSSL( mSecurityCfg->security() == KLDAP::LdapConfigWidget::SSL );
163 resource->setIsSubTree( mSubTree->isChecked() );
164 resource->setAttributes( mAttributes );
165 resource->setRDNPrefix( mRDNPrefix );
166 resource->setCachePolicy( mCachePolicy );
171 void ResourceLDAPKIOConfig::editAttributes()
173 QPointer<AttributesDialog> dlg =
new AttributesDialog( mAttributes, mRDNPrefix,
this );
174 if ( dlg->exec() && dlg ) {
175 mAttributes = dlg->attributes();
176 mRDNPrefix = dlg->rdnprefix();
182 void ResourceLDAPKIOConfig::editCache()
188 src.setScope( mSubTree->isChecked() ? KLDAP::LdapUrl::Sub : KLDAP::LdapUrl::One );
189 if ( !mAttributes.empty() ) {
190 QMap<QString,QString>::Iterator it;
192 for ( it = mAttributes.begin(); it != mAttributes.end(); ++it ) {
193 if ( !it.value().isEmpty() && it.key() != QLatin1String(
"objectClass" ) ) {
194 attr.append( it.value() );
197 src.setAttributes( attr );
199 src.setExtension( QLatin1String(
"x-dir" ), QLatin1String(
"base" ) );
201 QPointer<OfflineDialog> dlg =
new OfflineDialog( mAutoCache, mCachePolicy, src, mCacheDst,
this );
202 if ( dlg->exec() && dlg ) {
203 mCachePolicy = dlg->cachePolicy();
204 mAutoCache = dlg->autoCache();
210 AttributesDialog::AttributesDialog(
const QMap<QString, QString> &attributes,
215 setCaption( i18n(
"Attributes Configuration" ) );
216 setButtons( Ok | Cancel );
217 setDefaultButton( Ok );
219 showButtonSeparator(
true );
221 mNameDict.insert( QLatin1String(
"objectClass" ), i18n(
"Object classes" ) );
222 mNameDict.insert( QLatin1String(
"commonName" ), i18n(
"Common name" ) );
223 mNameDict.insert( QLatin1String(
"formattedName" ), i18n(
"Formatted name" ) );
224 mNameDict.insert( QLatin1String(
"familyName" ), i18n(
"Family name" ) );
225 mNameDict.insert( QLatin1String(
"givenName" ), i18n(
"Given name" ) );
226 mNameDict.insert( QLatin1String(
"organization" ), i18n(
"Organization" ) );
227 mNameDict.insert( QLatin1String(
"title" ), i18nc(
"job title",
"Title" ) );
228 mNameDict.insert( QLatin1String(
"street" ), i18n(
"Street" ) );
229 mNameDict.insert( QLatin1String(
"state" ), i18nc(
"state/province",
"State" ) );
230 mNameDict.insert( QLatin1String(
"city" ), i18n(
"City" ) );
231 mNameDict.insert( QLatin1String(
"postalcode" ), i18n(
"Postal code" ) );
232 mNameDict.insert( QLatin1String(
"mail" ), i18nc(
"email address",
"Email" ) );
233 mNameDict.insert( QLatin1String(
"mailAlias" ), i18n(
"Email alias" ) );
234 mNameDict.insert( QLatin1String(
"phoneNumber" ), i18n(
"Telephone number" ) );
235 mNameDict.insert( QLatin1String(
"telephoneNumber" ), i18n(
"Work telephone number" ) );
236 mNameDict.insert( QLatin1String(
"facsimileTelephoneNumber" ), i18n(
"Fax number" ) );
237 mNameDict.insert( QLatin1String(
"mobile" ), i18n(
"Cell phone number" ) );
238 mNameDict.insert( QLatin1String(
"pager" ), i18n(
"Pager" ) );
239 mNameDict.insert( QLatin1String(
"description" ), i18n(
"Note" ) );
240 mNameDict.insert( QLatin1String(
"uid" ), i18n(
"UID" ) );
241 mNameDict.insert( QLatin1String(
"jpegPhoto" ), i18n(
"Photo" ) );
244 mDefaultMap.insert( QLatin1String(
"objectClass" ), QLatin1String(
"inetOrgPerson" ) );
245 mDefaultMap.insert( QLatin1String(
"commonName" ), QLatin1String(
"cn" ) );
246 mDefaultMap.insert( QLatin1String(
"formattedName" ), QLatin1String(
"displayName" ) );
247 mDefaultMap.insert( QLatin1String(
"familyName" ), QLatin1String(
"sn" ) );
248 mDefaultMap.insert( QLatin1String(
"givenName" ), QLatin1String(
"givenName" ) );
249 mDefaultMap.insert( QLatin1String(
"title" ), QLatin1String(
"title" ) );
250 mDefaultMap.insert( QLatin1String(
"street" ), QLatin1String(
"street" ) );
251 mDefaultMap.insert( QLatin1String(
"state" ), QLatin1String(
"st" ) );
252 mDefaultMap.insert( QLatin1String(
"city" ), QLatin1String(
"l" ) );
253 mDefaultMap.insert( QLatin1String(
"organization" ), QLatin1String(
"o" ) );
254 mDefaultMap.insert( QLatin1String(
"postalcode" ), QLatin1String(
"postalCode" ) );
255 mDefaultMap.insert( QLatin1String(
"mail" ), QLatin1String(
"mail" ) );
256 mDefaultMap.insert( QLatin1String(
"mailAlias" ), QString() );
257 mDefaultMap.insert( QLatin1String(
"phoneNumber" ), QLatin1String(
"homePhone" ) );
258 mDefaultMap.insert( QLatin1String(
"telephoneNumber" ), QLatin1String(
"telephoneNumber" ) );
259 mDefaultMap.insert( QLatin1String(
"facsimileTelephoneNumber" ),
260 QLatin1String(
"facsimileTelephoneNumber" ) );
261 mDefaultMap.insert( QLatin1String(
"mobile" ), QLatin1String(
"mobile" ) );
262 mDefaultMap.insert( QLatin1String(
"pager" ), QLatin1String(
"pager" ) );
263 mDefaultMap.insert( QLatin1String(
"description" ), QLatin1String(
"description" ) );
264 mDefaultMap.insert( QLatin1String(
"uid" ), QLatin1String(
"uid" ) );
265 mDefaultMap.insert( QLatin1String(
"jpegPhoto" ), QLatin1String(
"jpegPhoto" ) );
268 QMap<QString, QString> kolabMap, netscapeMap, evolutionMap, outlookMap;
271 kolabMap.insert( QLatin1String(
"formattedName" ), QLatin1String(
"display-name" ) );
272 kolabMap.insert( QLatin1String(
"mailAlias" ), QLatin1String(
"mailalias" ) );
275 evolutionMap.insert( QLatin1String(
"formattedName" ), QLatin1String(
"fileAs" ) );
277 mMapList.append( attributes );
278 mMapList.append( kolabMap );
279 mMapList.append( netscapeMap );
280 mMapList.append( evolutionMap );
281 mMapList.append( outlookMap );
283 QFrame *page =
new QFrame(
this );
284 setMainWidget( page );
285 QGridLayout *layout =
new QGridLayout( page );
287 QLabel *label =
new QLabel( i18n(
"Template:" ), page );
288 layout->addWidget( label, 0, 0 );
289 mMapCombo =
new KComboBox( page );
290 layout->addWidget( mMapCombo, 0, 1 );
292 mMapCombo->addItem( i18n(
"User Defined" ) );
293 mMapCombo->addItem( i18n(
"Kolab" ) );
294 mMapCombo->addItem( i18n(
"Netscape" ) );
295 mMapCombo->addItem( i18n(
"Evolution" ) );
296 mMapCombo->addItem( i18n(
"Outlook" ) );
297 connect( mMapCombo, SIGNAL(activated(
int)), SLOT(mapChanged(
int)) );
299 label =
new QLabel( i18n(
"RDN prefix attribute:" ), page );
300 layout->addWidget( label, 1, 0 );
301 mRDNCombo =
new KComboBox( page );
302 layout->addWidget( mRDNCombo, 1, 1 );
303 mRDNCombo->addItem( i18n(
"commonName" ) );
304 mRDNCombo->addItem( i18n(
"UID" ) );
305 mRDNCombo->setCurrentIndex( rdnprefix );
307 QMap<QString, QString>::ConstIterator it;
309 for ( i = 2, it = attributes.begin(); it != attributes.end(); ++it, ++i ) {
310 if ( mNameDict[ it.key() ].isEmpty() ) {
314 if ( ( i - 2 ) == ( mNameDict.count() >> 1 ) ) {
318 kDebug() <<
"itkey:" << it.key() <<
"i:" << i;
319 label =
new QLabel( mNameDict[ it.key() ] + QLatin1Char(
':' ), page );
320 KLineEdit *lineedit =
new KLineEdit( page );
321 mLineEditDict.insert( it.key(), lineedit );
322 lineedit->setText( it.value() );
323 label->setBuddy( lineedit );
324 layout->addWidget( label, i, j );
325 layout->addWidget( lineedit, i, j+1 );
328 for ( i = 1; i < mMapCombo->count(); ++i ) {
329 QHash<QString,KLineEdit*>::const_iterator it2 = mLineEditDict.constBegin();
330 while ( it2 != mLineEditDict.constEnd() ) {
331 if ( mMapList[ i ].contains( it2.key() ) ) {
332 if ( mMapList[ i ][ it2.key() ] != it2.value()->text() ) {
336 if ( mDefaultMap[ it2.key() ] != it2.value()->text() ) {
342 if ( it2 != mLineEditDict.constEnd() ) {
343 mMapCombo->setCurrentIndex( i );
348 KAcceleratorManager::manage(
this );
351 AttributesDialog::~AttributesDialog()
356 QMap<QString, QString> AttributesDialog::attributes()
const
358 QMap<QString, QString> map;
360 QHash<QString,KLineEdit*>::const_iterator it = mLineEditDict.constBegin();
361 while ( it != mLineEditDict.constEnd() ) {
362 map.insert( it.key(), it.value()->text() );
368 int AttributesDialog::rdnprefix()
const
370 return mRDNCombo->currentIndex();
373 void AttributesDialog::mapChanged(
int pos )
377 QMap<QString, QString>::Iterator it;
378 for ( it = mDefaultMap.begin(); it != mDefaultMap.end(); ++it ) {
379 mLineEditDict[ it.key() ]->setText( it.value() );
382 for ( it = mMapList[ pos ].begin(); it != mMapList[ pos ].end(); ++it ) {
383 if ( !it.value().isEmpty() ) {
384 KLineEdit *le = mLineEditDict[ it.key() ];
386 le->setText( it.value() );
392 OfflineDialog::OfflineDialog(
bool autoCache,
int cachePolicy,
const KUrl &src,
393 const QString &dst, QWidget *parent )
396 setCaption( i18n(
"Offline Configuration" ) );
397 setButtons( Ok | Cancel );
398 setDefaultButton( Ok );
400 showButtonSeparator(
true );
402 QFrame *page =
new QFrame(
this );
403 setMainWidget( page );
404 QVBoxLayout *layout =
new QVBoxLayout( page );
408 mCacheBox =
new QGroupBox( i18n(
"Offline Cache Policy" ), page );
409 QVBoxLayout *cacheBoxLayout =
new QVBoxLayout( mCacheBox );
411 mCacheGroup =
new QButtonGroup(
this );
414 bt =
new QRadioButton( i18n(
"Do not use offline cache" ), mCacheBox );
415 cacheBoxLayout->addWidget( bt );
417 mCacheGroup->addButton( bt );
419 bt =
new QRadioButton( i18n(
"Use local copy if no connection" ), mCacheBox );
420 cacheBoxLayout->addWidget( bt );
421 mCacheGroup->addButton( bt );
423 bt =
new QRadioButton( i18n(
"Always use local copy" ), mCacheBox );
424 cacheBoxLayout->addWidget( bt );
425 mCacheGroup->addButton( bt );
427 if ( mCacheGroup->button( cachePolicy ) ) {
428 mCacheGroup->button( cachePolicy )->setDown(
true );
431 mAutoCache =
new QCheckBox( i18n(
"Refresh offline cache automatically" ),
433 mAutoCache->setChecked( autoCache );
434 mAutoCache->setEnabled( bt->isChecked() );
436 connect( bt, SIGNAL(toggled(
bool)), mAutoCache, SLOT(setEnabled(
bool)) );
438 QPushButton *lcache =
new QPushButton( i18n(
"Load into Cache" ), page );
439 connect( lcache, SIGNAL(clicked()), SLOT(loadCache()) );
441 layout->addWidget( mCacheBox );
442 layout->addWidget( mAutoCache );
443 layout->addWidget( lcache );
446 OfflineDialog::~OfflineDialog()
450 bool OfflineDialog::autoCache()
const
452 return mAutoCache->isChecked();
455 int OfflineDialog::cachePolicy()
const
457 return mCacheGroup->checkedId();
460 void OfflineDialog::loadCache()
462 if ( KIO::NetAccess::download( mSrc, mDst,
this ) ) {
463 KMessageBox::information(
this,
464 i18n(
"Successfully downloaded directory server contents." ) );
466 KMessageBox::error(
this,
467 i18n(
"An error occurred downloading directory server contents into file %1.", mDst ) );