~ubuntu-sdk-team/qtcreator-plugin-remotelinux/trunk

« back to all changes in this revision

Viewing changes to src/qnx/blackberrysigningutils.cpp

  • Committer: CI bot
  • Author(s): Benjamin Zeller
  • Date: 2014-06-16 10:28:43 UTC
  • mfrom: (4.2.4 remotelinux)
  • Revision ID: ps-jenkins@lists.canonical.com-20140616102843-8juvmjvzwlzsboyw
Migrating to Qt5.3 and QtC 3.1 

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
 
32
32
#include "blackberrysigningutils.h"
33
33
#include "blackberrycertificate.h"
34
 
#include "blackberryconfiguration.h"
35
34
#include "blackberryconfigurationmanager.h"
36
 
 
 
35
#include "blackberrycreatecertificatedialog.h"
 
36
#include "blackberrydebugtokenreader.h"
 
37
 
 
38
#include <coreplugin/icore.h>
 
39
 
 
40
#include <QDialog>
37
41
#include <QFileInfo>
38
42
#include <QString>
39
43
#include <QFile>
42
46
 
43
47
using namespace Qnx::Internal;
44
48
 
 
49
namespace {
 
50
const QLatin1String DebugTokensGroup("DebugTokens");
 
51
const QLatin1String DebugTokensPath("DebugTokenPath");
 
52
}
 
53
 
45
54
BlackBerrySigningUtils & BlackBerrySigningUtils::instance()
46
55
{
47
56
    static BlackBerrySigningUtils utils;
51
60
 
52
61
BlackBerrySigningUtils::BlackBerrySigningUtils(QObject *parent) :
53
62
    QObject(parent),
54
 
    m_defaultCertificate(0)
 
63
    m_defaultCertificate(0),
 
64
    m_defaultCertificateStatus(NotOpened)
55
65
{
 
66
    loadDebugTokens();
56
67
}
57
68
 
58
69
bool BlackBerrySigningUtils::hasRegisteredKeys()
59
70
{
60
 
    BlackBerryConfigurationManager &configuration = BlackBerryConfigurationManager::instance();
61
 
 
62
 
    QFileInfo cskFile(configuration.idTokenPath());
 
71
    QFileInfo cskFile(BlackBerryConfigurationManager::instance()->idTokenPath());
63
72
 
64
73
    return cskFile.exists();
65
74
}
66
75
 
67
76
bool BlackBerrySigningUtils::hasLegacyKeys()
68
77
{
69
 
    BlackBerryConfigurationManager &configuration = BlackBerryConfigurationManager::instance();
70
 
 
71
 
    QFileInfo cskFile(configuration.barsignerCskPath());
 
78
    QFileInfo cskFile(BlackBerryConfigurationManager::instance()->barsignerCskPath());
72
79
 
73
80
    return cskFile.exists();
74
81
}
75
82
 
76
83
bool BlackBerrySigningUtils::hasDefaultCertificate()
77
84
{
78
 
    BlackBerryConfigurationManager &configuration = BlackBerryConfigurationManager::instance();
79
 
 
80
 
    QFileInfo keystore(configuration.defaultKeystorePath());
 
85
    QFileInfo keystore(BlackBerryConfigurationManager::instance()->defaultKeystorePath());
81
86
 
82
87
    return keystore.exists();
83
88
}
84
89
 
85
 
QString BlackBerrySigningUtils::cskPassword()
 
90
QString BlackBerrySigningUtils::cskPassword(QWidget *passwordPromptParent, bool *ok)
86
91
{
87
92
    if (m_cskPassword.isEmpty())
88
 
        m_cskPassword = promptPassword(tr("Please provide your bbidtoken.csk PIN."));
 
93
        m_cskPassword = promptPassword(tr("Please provide your BlackBerry ID Token PIN."), passwordPromptParent, ok);
 
94
    else if (ok)
 
95
        *ok = true;
89
96
 
90
97
    return m_cskPassword;
91
98
}
92
99
 
93
 
QString BlackBerrySigningUtils::certificatePassword()
 
100
QString BlackBerrySigningUtils::certificatePassword(QWidget *passwordPromptParent, bool *ok)
94
101
{
95
 
    if (m_certificatePassword.isEmpty())
96
 
        m_certificatePassword = promptPassword(tr("Please enter your certificate password."));
 
102
    if (m_certificatePassword.isEmpty()) {
 
103
        m_certificatePassword =
 
104
            promptPassword(tr("Please enter your certificate password."), passwordPromptParent, ok);
 
105
    } else if (ok) {
 
106
        *ok = true;
 
107
    }
97
108
 
98
109
    return m_certificatePassword;
99
110
}
103
114
    return m_defaultCertificate;
104
115
}
105
116
 
106
 
void BlackBerrySigningUtils::openDefaultCertificate()
107
 
{
108
 
    if (m_defaultCertificate) {
 
117
BlackBerrySigningUtils::Status BlackBerrySigningUtils::defaultCertificateOpeningStatus() const
 
118
{
 
119
    return m_defaultCertificateStatus;
 
120
}
 
121
 
 
122
void BlackBerrySigningUtils::openDefaultCertificate(QWidget *passwordPromptParent)
 
123
{
 
124
    switch (m_defaultCertificateStatus) {
 
125
    case Opening:
 
126
        return;
 
127
    case Opened:
109
128
        emit defaultCertificateLoaded(BlackBerryCertificate::Success);
110
129
        return;
111
 
    }
112
 
 
113
 
    const QString password = certificatePassword();
114
 
 
115
 
    BlackBerryConfigurationManager &configManager = BlackBerryConfigurationManager::instance();
116
 
 
117
 
    m_defaultCertificate = new BlackBerryCertificate(configManager.defaultKeystorePath(),
 
130
    default:
 
131
        m_defaultCertificateStatus = Opening;
 
132
    }
 
133
 
 
134
    bool ok;
 
135
    const QString password = certificatePassword(passwordPromptParent, &ok);
 
136
 
 
137
    // action has been canceled
 
138
    if (!ok) {
 
139
        m_defaultCertificateStatus = NotOpened;
 
140
        return;
 
141
    }
 
142
 
 
143
    if (m_defaultCertificate)
 
144
        m_defaultCertificate->deleteLater();
 
145
 
 
146
    m_defaultCertificate = new BlackBerryCertificate(BlackBerryConfigurationManager::instance()->defaultKeystorePath(),
118
147
            QString(), password, this);
119
148
 
120
149
    connect(m_defaultCertificate, SIGNAL(finished(int)), this, SLOT(certificateLoaded(int)));
129
158
 
130
159
    certificate->setParent(this);
131
160
    m_defaultCertificate = certificate;
 
161
    m_defaultCertificateStatus = Opened;
132
162
}
133
163
 
134
164
void BlackBerrySigningUtils::clearCskPassword()
146
176
    clearCertificatePassword();
147
177
    m_defaultCertificate->deleteLater();
148
178
    m_defaultCertificate = 0;
149
 
 
150
 
    BlackBerryConfigurationManager &configuration = BlackBerryConfigurationManager::instance();
151
 
 
152
 
    QFile::remove(configuration.defaultKeystorePath());
 
179
    m_defaultCertificateStatus = NotOpened;
 
180
 
 
181
    QFile::remove(BlackBerryConfigurationManager::instance()->defaultKeystorePath());
 
182
}
 
183
 
 
184
QStringList BlackBerrySigningUtils::debugTokens() const
 
185
{
 
186
    return m_debugTokens;
 
187
}
 
188
 
 
189
void BlackBerrySigningUtils::addDebugToken(const QString &dt)
 
190
{
 
191
    if (m_debugTokens.contains(dt) || !QFileInfo(dt).exists())
 
192
        return;
 
193
 
 
194
    m_debugTokens << dt;
 
195
    emit debugTokenListChanged();
 
196
}
 
197
 
 
198
void BlackBerrySigningUtils::removeDebugToken(const QString &dt)
 
199
{
 
200
    m_debugTokens.removeOne(dt);
 
201
    emit debugTokenListChanged();
 
202
}
 
203
 
 
204
bool BlackBerrySigningUtils::createCertificate()
 
205
{
 
206
    BlackBerryCreateCertificateDialog dialog;
 
207
 
 
208
    const int result = dialog.exec();
 
209
 
 
210
    if (result == QDialog::Rejected)
 
211
        return false;
 
212
 
 
213
    BlackBerryCertificate *certificate = dialog.certificate();
 
214
 
 
215
    if (certificate)
 
216
        setDefaultCertificate(certificate);
 
217
 
 
218
    return certificate;
153
219
}
154
220
 
155
221
void BlackBerrySigningUtils::certificateLoaded(int status)
156
222
{
157
223
    if (status != BlackBerryCertificate::Success) {
 
224
        m_defaultCertificateStatus = NotOpened;
158
225
        m_defaultCertificate->deleteLater();
159
226
        m_defaultCertificate = 0;
160
227
 
161
 
        if (status == BlackBerryCertificate::WrongPassword)
162
 
            clearCertificatePassword();
163
 
    }
 
228
        // we have clear the password under any error since we are not able to distinquish
 
229
        // if password is correct or not in case BlackBerryCertificate::Error status happens
 
230
        clearCertificatePassword();
 
231
    } else
 
232
        m_defaultCertificateStatus = Opened;
 
233
 
164
234
 
165
235
    emit defaultCertificateLoaded(status);
166
236
}
167
237
 
168
 
QString BlackBerrySigningUtils::promptPassword(const QString &message) const
169
 
{
170
 
    QInputDialog dialog;
 
238
void BlackBerrySigningUtils::saveDebugTokens()
 
239
{
 
240
    if (m_debugTokens.isEmpty())
 
241
        return;
 
242
 
 
243
    QSettings *settings = Core::ICore::settings();
 
244
    settings->beginGroup(DebugTokensGroup);
 
245
 
 
246
    int count = 0;
 
247
    foreach (QString dt, m_debugTokens) {
 
248
        settings->beginGroup(QString::fromLatin1("debugToken_%1").arg(++count));
 
249
        settings->setValue(DebugTokensPath, dt);
 
250
        settings->endGroup();
 
251
    }
 
252
 
 
253
    settings->endGroup();
 
254
}
 
255
 
 
256
void BlackBerrySigningUtils::loadDebugTokens()
 
257
{
 
258
    QSettings *settings = Core::ICore::settings();
 
259
    settings->beginGroup(DebugTokensGroup);
 
260
 
 
261
    foreach (const QString &dt, settings->childGroups()) {
 
262
        settings->beginGroup(dt);
 
263
        m_debugTokens << settings->value(DebugTokensPath).toString();
 
264
        settings->endGroup();
 
265
    }
 
266
 
 
267
    settings->endGroup();
 
268
}
 
269
 
 
270
QString BlackBerrySigningUtils::promptPassword(const QString &message,
 
271
                                               QWidget *dialogParent, bool *ok) const
 
272
{
 
273
    QInputDialog dialog(dialogParent);
171
274
    dialog.setWindowTitle(tr("Qt Creator"));
172
275
    dialog.setInputMode(QInputDialog::TextInput);
173
276
    dialog.setLabelText(message);
174
277
    dialog.setTextEchoMode(QLineEdit::Password);
175
278
 
176
 
    if (dialog.exec() == QDialog::Rejected)
 
279
    if (dialog.exec() == QDialog::Rejected) {
 
280
        if (ok)
 
281
            *ok = false;
 
282
 
177
283
        return QString();
 
284
    }
 
285
 
 
286
    if (ok)
 
287
        *ok = true;
178
288
 
179
289
    return dialog.textValue();
180
290
}