summaryrefslogtreecommitdiffstats
path: root/kabc/ldapconfigwidget.h
blob: 01074292ed6b497dccbab48a4c5bc5cda586d354 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
/*
    This file is part of libkabc.
    Copyright (c) 2004 Szombathelyi György <gyurco@freemail.hu>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library 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 LDAPCONFIGWIDGET_H
#define LDAPCONFIGWIDGET_H

#include <tqwidget.h>
#include <tqmap.h>
#include <tqstring.h>

#include <kabc/ldapurl.h>
#include <kabc/ldif.h>
#include <tdeio/job.h>

class TQGridLayout;
class TQSpinBox;
class TQPushButton;
class TQCheckBox;
class TQRadioButton;
class KComboBox;
class KLineEdit;
class KProgressDialog;

namespace KABC {

  /**
    @short LDAP Configuration widget
 
    This class can be used to query the user for LDAP connection parameters. 
    It's TDEConfigXT compatible, using widget names starting with kcfg_
  */

  class KABC_EXPORT LdapConfigWidget : public TQWidget
  {
    Q_OBJECT
    
    TQ_PROPERTY( LCW_Flags flags READ flagsProp WRITE setFlagsProp )
    TQ_PROPERTY( TQString user READ user WRITE setUser )
    TQ_PROPERTY( TQString password READ password WRITE setPassword )
    TQ_PROPERTY( TQString bindDN READ bindDN WRITE setBindDN )
    TQ_PROPERTY( TQString realm READ realm WRITE setRealm )
    TQ_PROPERTY( TQString host READ host WRITE setHost )
    TQ_PROPERTY( int port READ port WRITE setPort )
    TQ_PROPERTY( int ver READ ver WRITE setVer )
    TQ_PROPERTY( TQString dn READ dn WRITE setDn )
    TQ_PROPERTY( TQString filter READ filter WRITE setFilter )
    TQ_PROPERTY( TQString mech READ mech WRITE setMech )
    TQ_PROPERTY( bool secNO READ isSecNO WRITE setSecNO )
    TQ_PROPERTY( bool secSSL READ isSecSSL WRITE setSecSSL )
    TQ_PROPERTY( bool secTLS READ isSecSSL WRITE setSecTLS )
    TQ_PROPERTY( bool authAnon READ isAuthAnon WRITE setAuthAnon )
    TQ_PROPERTY( bool authSimple READ isAuthSimple WRITE setAuthSimple )
    TQ_PROPERTY( bool authSASL READ isAuthSASL WRITE setAuthSASL )
    TQ_PROPERTY( int sizeLimit READ sizeLimit WRITE setSizeLimit )
    TQ_PROPERTY( int timeLimit READ timeLimit WRITE setTimeLimit )
    TQ_SETS ( LCW_Flags )
        
    public:
    
      enum LCW_Flags {
        W_USER = 0x1,
        W_PASS = 0x2,
        W_BINDDN = 0x4,
        W_REALM = 0x8,
        W_HOST = 0x10,
        W_PORT = 0x20,
        W_VER = 0x40,
        W_DN = 0x80,
        W_FILTER = 0x100,
        W_SECBOX = 0x400,
        W_AUTHBOX = 0x800,
        W_TIMELIMIT = 0x1000,
        W_SIZELIMIT = 0x2000,
        W_ALL = 0xFFFFFFF
      };
      
      /** Constructs an empty configuration widget.
       * You need to call setFlags() after this.
       */
      LdapConfigWidget( TQWidget* parent = 0, 
        const char* name = 0, WFlags fl = 0 );
      /** Constructs a configuration widget */
      LdapConfigWidget( int flags, TQWidget* parent = 0,
        const char* name = 0, WFlags fl = 0 );
      /** Destructs a configuration widget */
      virtual ~LdapConfigWidget();

      /** Sets the user name. Kconfig widget name: kcfg_ldapuser */
      void setUser( const TQString &user );
      /** Gets the user name. Kconfig widget name: kcfg_ldapuser */
      TQString user() const;

      /** Sets the password. Kconfig widget name: kcfg_ldappassword */
      void setPassword( const TQString &password );
      /** Gets the password. Kconfig widget name: kcfg_ldappassword */
      TQString password() const;

      /**
       * Sets the bind dn. Useful for SASL proxy auth.
       * Kconfig widget name: kcfg_ldapbinddn
       */
      void setBindDN( const TQString &binddn );
      /** Gets the bind dn. Kconfig widget name: kcfg_ldapbinddn*/
      TQString bindDN() const;

      /** Sets the SASL realm. Kconfig widget name: kcfg_ldaprealm */
      void setRealm( const TQString &realm );
      /** Gets the SASL realm. Kconfig widget name: kcfg_ldaprealm */
      TQString realm() const;

      /** Sets the host name. Kconfig widget name: kcfg_ldaphost */
      void setHost( const TQString &host );
      /** Gets the host name. Kconfig widget name: kcfg_ldaphost */
      TQString host() const;

      /** Sets the LDAP port. Kconfig widget name: kcfg_ldapport */
      void setPort( int port );
      /** Gets the LDAP port. Kconfig widget name: kcfg_ldapport */
      int port() const;

      /** Sets the LDAP protocol version. Kconfig widget name: kcfg_ldapver */
      void setVer( int ver );
      /** Gets the LDAP protocol version. Kconfig widget name: kcfg_ldapver */
      int ver() const;

      /** Sets the LDAP Base DN. Kconfig widget name: kcfg_ldapdn */
      void setDn( const TQString &dn );
      /** Gets the LDAP Base DN. Kconfig widget name: kcfg_ldapdn */
      TQString dn() const;

      /** Sets the LDAP Filter. Kconfig widget name: kcfg_ldapfilter */
      void setFilter( const TQString &filter );
      /** Gets the LDAP Filter. Kconfig widget name: kcfg_ldapfilter */
      TQString filter() const;

      /** Sets the SASL Mechanism. Kconfig widget name: kcfg_ldapsaslmech */
      void setMech( const TQString &mech );
      /** Gets the SASL Mechanism. Kconfig widget name: kcfg_ldapsaslmech */
      TQString mech() const;

      /**
       * Sets the configuration to no transport security.
       * Kconfig widget name: kcfg_ldapnosec
       */
      void setSecNO( bool b = true );
      /**
       * Returns true if no transport security selected.
       * Kconfig widget name: kcfg_ldapnosec
       */
      bool isSecNO() const;

      /**
       * Sets the configuration to TLS.
       * Kconfig widget name: kcfg_ldaptls
       */
      void setSecTLS( bool b = true );
      /**
       * Returns true if TLS selected.
       * Kconfig widget name: kcfg_ldaptls
       */
      bool isSecTLS() const;

      /**
       * Sets the configuration to SSL.
       * Kconfig widget name: kcfg_ldapssl
       */
      void setSecSSL( bool b = true );
      /**
       * Returns true if SSL selected.
       * Kconfig widget name: kcfg_ldapssl
       */
      bool isSecSSL() const;

      /**
       * Sets the authentication to anonymous.
       * Kconfig widget name: kcfg_ldapanon
       */
      void setAuthAnon( bool b = true );
      /**
       * Returns true if Anonymous authentication selected.
       * Kconfig widget name: kcfg_ldapanon
       */
      bool isAuthAnon() const;

      /**
       * Sets the authentication to simple.
       * Kconfig widget name: kcfg_ldapsimple
       */
      void setAuthSimple( bool b = true );
      /**
       * Returns true if Simple authentication selected.
       * Kconfig widget name: kcfg_ldapsimple
       */
      bool isAuthSimple() const;

      /**
       * Sets the authentication to SASL.
       * Kconfig widget name: kcfg_ldapsasl
       */
      void setAuthSASL( bool b = true );
      /**
       * Returns true if SASL authentication selected.
       * Kconfig widget name: kcfg_ldapsasl
       */
      bool isAuthSASL() const;

      /**
       * Sets the size limit.
       * TDEConfig widget name: kcfg_ldapsizelimit
       */
      void setSizeLimit( int sizelimit );
      /**
       * Returns the size limit.
       * TDEConfig widget name: kcfg_ldapsizelimit
       */
      int sizeLimit() const;

      /**
       * Sets the time limit.
       * TDEConfig widget name: kcfg_ldaptimelimit
       */
      void setTimeLimit( int timelimit );
      /**
       * Returns the time limit.
       * TDEConfig widget name: kcfg_ldaptimelimit
       */
      int timeLimit() const;

      int flags() const;
      void setFlags( int flags );
      inline LCW_Flags flagsProp() const { return (LCW_Flags)flags(); }
      inline void setFlagsProp( LCW_Flags flags ) { setFlags((int)flags); }

      /**
       * Returns a LDAP Url constructed from the settings given.
       * Extensions are filled for use in the LDAP ioslave
       */
      KABC::LDAPUrl url() const;

    private slots:
      void setLDAPPort();
      void setLDAPSPort();
      void setAnonymous( int state );
      void setSimple( int state );
      void setSASL( int state );
      void mQueryDNClicked();
      void mQueryMechClicked();
      void loadData( TDEIO::Job*, const TQByteArray& );
      void loadResult( TDEIO::Job* );  
    private:

      int mFlags;
      LDIF mLdif;
      TQStringList mQResult;
      TQString mAttr;

      KLineEdit *mUser;
      KLineEdit *mPassword;
      KLineEdit *mHost;
      TQSpinBox  *mPort, *mVer, *mSizeLimit, *mTimeLimit;
      KLineEdit *mDn, *mBindDN, *mRealm;
      KLineEdit *mFilter;
      TQRadioButton *mAnonymous,*mSimple,*mSASL;
      TQCheckBox *mSubTree;
      TQPushButton *mEditButton;
      TQPushButton *mQueryMech;
      TQRadioButton *mSecNO,*mSecTLS,*mSecSSL;
      KComboBox *mMech;

      TQString mErrorMsg;
      bool mCancelled;
      KProgressDialog *mProg;

      TQGridLayout *mainLayout;
      class LDAPConfigWidgetPrivate;
      LDAPConfigWidgetPrivate *d;

      void sendQuery();
      void initWidget();
  };
}

#endif