~ubuntu-branches/ubuntu/precise/networkmanagement/precise-updates

« back to all changes in this revision

Viewing changes to libs/ui/security/tlswidget.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Michael Biebl, Modestas Vainius, Michael Biebl
  • Date: 2011-05-27 12:18:25 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20110527121825-vfufwquq3vy0k3zn
Tags: 0.1+git20110526.911025d-1
[ Modestas Vainius ]
* Use official KDE branding in the package descriptions.

[ Michael Biebl ]
* New upstream Git snapshot 911025d81fdfbe09b64705e94e5411f521c38e3e.
* debian/control
  - Bump Build-Depends on kdelibs5-dev and kdebase-workspace-dev to
    (>= 4:4.6.0).
  - Bump Build-Depends on network-manager-dev and libnm-util-dev to
    (>= 0.8.1).
  - Bump Depends on network-manager to (>= 0.8.1).

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
published by the Free Software Foundation; either version 2 of
8
8
the License or (at your option) version 3 or any later version
9
9
accepted by the membership of KDE e.V. (or its successor approved
10
 
by the membership of KDE e.V.), which shall act as a proxy 
 
10
by the membership of KDE e.V.), which shall act as a proxy
11
11
defined in Section 14 of version 3 of the license.
12
12
 
13
13
This program is distributed in the hope that it will be useful,
26
26
 
27
27
#include "eapmethod_p.h"
28
28
 
 
29
#include <kfiledialog.h>
 
30
#include <KUser>
 
31
 
29
32
class TlsWidgetPrivate : public EapMethodPrivate
30
33
{
31
34
public:
35
38
 
36
39
    }
37
40
    bool inner;
 
41
    enum Certs {ClientCert = 0, CACert, PrivateKey};
38
42
};
39
43
 
40
44
TlsWidget::TlsWidget(bool isInnerMethod, Knm::Connection* connection, QWidget * parent)
41
45
: EapMethod(*new TlsWidgetPrivate(isInnerMethod), connection, parent)
42
46
{
43
47
    setupUi(this);
 
48
    connect(chkUseSystemCaCerts,SIGNAL(toggled(bool)),this,SLOT(toggleSystemCa(bool)));
 
49
 
 
50
    connect(clientCertLoad,SIGNAL(clicked()),this,SLOT(loadCert()));
 
51
    connect(caCertLoad,SIGNAL(clicked()),this,SLOT(loadCert()));
 
52
    connect(privateKeyLoad,SIGNAL(clicked()),this,SLOT(loadCert()));
 
53
    clientCertLoad->setIcon(KIcon("document-open"));
 
54
    caCertLoad->setIcon(KIcon("document-open"));
 
55
    privateKeyLoad->setIcon(KIcon("document-open"));
44
56
}
45
57
 
46
58
TlsWidget::~TlsWidget()
60
72
    QString value;
61
73
    if (d->setting->useSystemCaCerts()) {
62
74
        chkUseSystemCaCerts->setChecked(true);
63
 
        kurCaCert->setEnabled(false);
64
 
        kurClientCert->clear();
 
75
        caCertLoad->setEnabled(false);
65
76
    } else {
66
 
 
67
 
        if (d->inner) {
68
 
            value = d->setting->phase2capath();
 
77
        if (!d->setting->cacert().isEmpty()) {
 
78
            setText(d->CACert,true);
69
79
        } else {
70
 
            value = d->setting->capath();
 
80
            setText(d->CACert,false);
71
81
        }
72
 
        if (!value.isEmpty())
73
 
            kurCaCert->setUrl(value);
74
 
    }
75
 
 
76
 
    if (d->inner) {
77
 
        value = d->setting->phase2clientcertpath();
78
 
    } else {
79
 
        value = d->setting->clientcertpath();
80
 
    }
81
 
    if (!value.isEmpty())
82
 
        kurClientCert->setUrl(value);
83
 
 
84
 
    if (d->inner) {
85
 
        value = d->setting->phase2privatekeypath();
86
 
    } else {
87
 
        value = d->setting->privatekeypath();
88
 
    }
89
 
    if (!value.isEmpty())
90
 
        kurPrivateKey->setUrl(value);
 
82
    }
 
83
 
 
84
    if (!d->setting->clientcert().isEmpty()) {
 
85
        setText(d->ClientCert,true);
 
86
    } else {
 
87
        setText(d->ClientCert,false);
 
88
    }
 
89
 
 
90
    if (!d->setting->privatekey().isEmpty()) {
 
91
        setText(d->PrivateKey,true);
 
92
    } else {
 
93
        setText(d->PrivateKey,false);
 
94
    }
91
95
}
92
96
 
93
97
void TlsWidget::writeConfig()
96
100
    if (!d->inner) {
97
101
        // make it TLS
98
102
        d->setting->setEapFlags(Knm::Security8021xSetting::tls);
 
103
        d->setting->addToCertToDelete(Knm::Security8021xSetting::Phase2CACert);
 
104
        d->setting->addToCertToDelete(Knm::Security8021xSetting::Phase2ClientCert);
 
105
        d->setting->addToCertToDelete(Knm::Security8021xSetting::Phase2PrivateKey);
 
106
        d->setting->setPhase2cacerttoimport("");
 
107
        d->setting->setPhase2clientcerttoimport("");
 
108
        d->setting->setPhase2privatekeytoimport("");
 
109
    } else {
 
110
        d->setting->addToCertToDelete(Knm::Security8021xSetting::CACert);
 
111
        d->setting->addToCertToDelete(Knm::Security8021xSetting::ClientCert);
 
112
        d->setting->addToCertToDelete(Knm::Security8021xSetting::PrivateKey);
 
113
        d->setting->setCacerttoimport("");
 
114
        d->setting->setClientcerttoimport("");
 
115
        d->setting->setPrivatekeytoimport("");
99
116
    }
100
117
 
101
118
    // TLS specifics
105
122
    KUrl url;
106
123
    if (chkUseSystemCaCerts->isChecked()) {
107
124
        d->setting->setUseSystemCaCerts(true);
108
 
        d->setting->setPhase2capath("");
109
 
        d->setting->setCapath("");
110
 
    } else {
111
 
        url = kurCaCert->url();
112
 
        if (!url.directory().isEmpty() && !url.fileName().isEmpty()) {
113
 
            QString path = url.directory() + '/' + url.fileName();
114
 
            if (d->inner) {
115
 
                d->setting->setPhase2capath(path);
116
 
            } else {
117
 
                d->setting->setCapath(path);
118
 
            }
119
 
        }
120
 
    }
121
 
 
122
 
    url = kurClientCert->url();
123
 
    if (!url.directory().isEmpty() && !url.fileName().isEmpty()) {
124
 
        QString path = url.directory() + '/' + url.fileName();
125
 
        if (d->inner) {
126
 
            d->setting->setPhase2clientcertpath(path);
127
 
        } else {
128
 
            d->setting->setClientcertpath(path);
129
 
        }
130
 
    }
131
 
 
132
 
    url = kurPrivateKey->url();
133
 
    if (!url.directory().isEmpty() && !url.fileName().isEmpty()) {
134
 
        QString path = url.directory() + '/' + url.fileName();
135
 
        if (d->inner) {
136
 
            d->setting->setPhase2privatekeypath(path);
137
 
        } else {
138
 
            d->setting->setPrivatekeypath(path);
139
 
        }
140
 
    }
141
 
    if (d->inner) {
142
 
        d->setting->setPhase2privatekeypassword(lePrivateKeyPassword->text());
143
 
    } else {
144
 
        d->setting->setPrivatekeypassword(lePrivateKeyPassword->text());
 
125
        d->setting->addToCertToDelete(Knm::Security8021xSetting::CACert);
 
126
        d->setting->addToCertToDelete(Knm::Security8021xSetting::Phase2CACert);
 
127
    } else {
 
128
        d->setting->setUseSystemCaCerts(false);
145
129
    }
146
130
}
147
131
 
160
144
    lePrivateKeyPassword->setPasswordMode(!on);
161
145
}
162
146
 
 
147
void TlsWidget::loadCert()
 
148
{
 
149
    Q_D(TlsWidget);
 
150
    QString objectname = sender()->objectName();
 
151
    if (d->inner) {
 
152
        if (objectname == QLatin1String("clientCertLoad")) {
 
153
            QString newcert = KFileDialog::getOpenFileName(KUser().homeDir(),"",this,i18nc("File chooser dialog title for certificate loading","Load Certificate"));
 
154
            if (!newcert.isEmpty()) {
 
155
                d->setting->setPhase2clientcerttoimport(newcert);
 
156
                setText(d->ClientCert,true);
 
157
            }
 
158
        } else if (objectname == QLatin1String("caCertLoad")) {
 
159
            QString newcert = KFileDialog::getOpenFileName(KUser().homeDir(),"",this,i18nc("File chooser dialog title for certificate loading","Load Certificate"));
 
160
            if (!newcert.isEmpty()) {
 
161
                d->setting->setPhase2cacerttoimport(newcert);
 
162
                setText(d->CACert,true);
 
163
            }
 
164
        } else if (objectname == QLatin1String("privateKeyLoad")) {
 
165
            QString newcert = KFileDialog::getOpenFileName(KUser().homeDir(),"",this,i18nc("File chooser dialog title for certificate loading","Load Certificate"));
 
166
            if (!newcert.isEmpty()) {
 
167
                d->setting->setPhase2privatekeytoimport(newcert);
 
168
                setText(d->PrivateKey,true);
 
169
            }
 
170
        }
 
171
    } else {
 
172
        if (objectname == QLatin1String("clientCertLoad")) {
 
173
            QString newcert = KFileDialog::getOpenFileName(KUser().homeDir(),"",this,i18nc("File chooser dialog title for certificate loading","Load Certificate"));
 
174
            if (!newcert.isEmpty()) {
 
175
                d->setting->setClientcerttoimport(newcert);
 
176
                setText(d->ClientCert,true);
 
177
            }
 
178
        } else if (objectname == QLatin1String("caCertLoad")) {
 
179
            QString newcert = KFileDialog::getOpenFileName(KUser().homeDir(),"",this,i18nc("File chooser dialog title for certificate loading","Load Certificate"));
 
180
            if (!newcert.isEmpty()) {
 
181
                d->setting->setCacerttoimport(newcert);
 
182
                setText(d->CACert,true);
 
183
            }
 
184
        } else if (objectname == QLatin1String("privateKeyLoad")) {
 
185
            QString newcert = KFileDialog::getOpenFileName(KUser().homeDir(),"",this,i18nc("File chooser dialog title for certificate loading","Load Certificate"));
 
186
            if (!newcert.isEmpty()) {
 
187
                d->setting->setPrivatekeytoimport(newcert);
 
188
                setText(d->PrivateKey,true);
 
189
            }
 
190
        }
 
191
    }
 
192
}
 
193
 
 
194
void TlsWidget::toggleSystemCa(bool toggled)
 
195
{
 
196
    Q_D(TlsWidget);
 
197
    if (toggled)
 
198
        setText(TlsWidgetPrivate::CACert,false);
 
199
    else if (d->inner && !d->setting->phase2cacert().isEmpty())
 
200
        setText(TlsWidgetPrivate::CACert,true);
 
201
    else if (!d->setting->cacert().isEmpty())
 
202
        setText(TlsWidgetPrivate::CACert,true);
 
203
}
 
204
 
 
205
void TlsWidget::setText(int cert, bool loaded)
 
206
{
 
207
    KPushButton *button;
 
208
    QLabel *label;
 
209
    KLed *led;
 
210
    switch (cert)
 
211
    {
 
212
        case TlsWidgetPrivate::ClientCert:
 
213
            button = clientCertLoad;
 
214
            label = clientCertLoadedLabel;
 
215
            led = clientCertLed;
 
216
            break;
 
217
        case TlsWidgetPrivate::CACert:
 
218
            button = caCertLoad;
 
219
            label = caCertLoadedLabel;
 
220
            led = caCertLed;
 
221
            break;
 
222
        case TlsWidgetPrivate::PrivateKey:
 
223
        default:
 
224
            button = privateKeyLoad;
 
225
            label = privateKeyLoadedLabel;
 
226
            led = privateKeyLed;
 
227
            break;
 
228
    }
 
229
    if (loaded) {
 
230
        button->setText(i18nc("Text to display on certificate button a certificate is already loaded","Load new"));
 
231
        label->setText(i18nc("Text to display on CA certificate LED label when certificate is already loaded","Loaded"));
 
232
        led->setState(KLed::On);
 
233
    } else {
 
234
        button->setText(i18nc("Text to display on CA certificate button when no certificate is loaded yet","Load"));
 
235
        label->setText("");
 
236
        led->setState(KLed::Off);
 
237
    }
 
238
}
 
239
 
163
240
// vim: sw=4 sts=4 et tw=100