annotate ui/certificatetablemodel.cpp @ 502:e551de11d8b6

Properly handle the case that the file does not exist. TRUNCATE makes create file fail if the file does not exist but we need TRUNCATE in the case that the file already exists
author Andre Heinecke <aheinecke@intevation.de>
date Mon, 28 Apr 2014 09:18:07 +0000
parents 5200b8e9b2ae
children 320a64d58e62
rev   line source
404
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 397
diff changeset
1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 397
diff changeset
2 * Software engineering by Intevation GmbH
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 397
diff changeset
3 *
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 397
diff changeset
4 * This file is Free Software under the GNU GPL (v>=2)
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 397
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY!
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 397
diff changeset
6 * See LICENSE.txt for details.
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 397
diff changeset
7 */
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8 #include "certificatetablemodel.h"
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9
397
8752aae8aad8 Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents: 396
diff changeset
10 #include <QFont>
8752aae8aad8 Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents: 396
diff changeset
11
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12 CertificateTabelModel::CertificateTabelModel(QObject *parent)
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13 : QAbstractTableModel(parent)
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 {
342
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
15 header.append("");
380
1220b741cd51 Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents: 378
diff changeset
16 header.append(tr("Subject CN"));
1220b741cd51 Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents: 378
diff changeset
17 header.append(tr("Subject O"));
1220b741cd51 Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents: 378
diff changeset
18 header.append(tr("Issuer CN"));
1220b741cd51 Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents: 378
diff changeset
19 header.append(tr("Issuer O"));
416
847fdfd33a22 Fixed wording in certificate table header.
Raimund Renkert <rrenkert@intevation.de>
parents: 404
diff changeset
20 header.append(tr("Valid from"));
847fdfd33a22 Fixed wording in certificate table header.
Raimund Renkert <rrenkert@intevation.de>
parents: 404
diff changeset
21 header.append(tr("Valid to"));
378
31079bd54036 Add fingerprint to certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents: 376
diff changeset
22 header.append(tr("SHA1 Fingerprint"));
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24 }
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25
358
9ba7b4b4c1de Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents: 353
diff changeset
26 void CertificateTabelModel::addCertificate(const Certificate& certificate,
9ba7b4b4c1de Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents: 353
diff changeset
27 bool editable)
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28 {
342
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
29 beginInsertRows(QModelIndex(), rowCount(), rowCount());
463
5200b8e9b2ae Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents: 416
diff changeset
30 mCertificates.append(certificate);
5200b8e9b2ae Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents: 416
diff changeset
31 mCertificates.last().setEditable(editable);
342
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
32 endInsertRows();
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 }
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34
376
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
35 bool CertificateTabelModel::removeRows(int row, int count,
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
36 const QModelIndex &index)
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
37 {
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
38 beginRemoveRows(QModelIndex(), row, row + count - 1);
463
5200b8e9b2ae Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents: 416
diff changeset
39 if ((row + count - 1) > mCertificates.size()) {
376
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
40 return false;
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
41 }
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
42 for (int i = row + count - 1; i >= row; i--) {
463
5200b8e9b2ae Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents: 416
diff changeset
43 mCertificates.removeAt(i);
376
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
44 }
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
45 endRemoveRows();
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
46 return true;
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
47 }
9731d28b95af Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents: 358
diff changeset
48
396
26651cc0cc47 Remove all certificates if a new list is loaded from file.
Raimund Renkert <rrenkert@intevation.de>
parents: 380
diff changeset
49 bool CertificateTabelModel::removeAll()
26651cc0cc47 Remove all certificates if a new list is loaded from file.
Raimund Renkert <rrenkert@intevation.de>
parents: 380
diff changeset
50 {
463
5200b8e9b2ae Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents: 416
diff changeset
51 return removeRows(0, mCertificates.size(), QModelIndex());
396
26651cc0cc47 Remove all certificates if a new list is loaded from file.
Raimund Renkert <rrenkert@intevation.de>
parents: 380
diff changeset
52 }
26651cc0cc47 Remove all certificates if a new list is loaded from file.
Raimund Renkert <rrenkert@intevation.de>
parents: 380
diff changeset
53
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 QVariant CertificateTabelModel::data(const QModelIndex &index,
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 int role) const
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 {
463
5200b8e9b2ae Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents: 416
diff changeset
57 if (index.row() > mCertificates.size() || index.row() < 0) {
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 return QVariant();
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 }
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60
342
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
61 if (role == Qt::DisplayRole) {
463
5200b8e9b2ae Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents: 416
diff changeset
62 Certificate cert = mCertificates.at(index.row());
342
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
63 QVariant ret;
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
64 switch(index.column()) {
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
65 case 0: ret = cert.isInstallCert(); break;
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
66 case 1: ret = cert.subjectCN(); break;
380
1220b741cd51 Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents: 378
diff changeset
67 case 2: ret = cert.subjectO(); break;
1220b741cd51 Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents: 378
diff changeset
68 case 3: ret = cert.issuerCN(); break;
1220b741cd51 Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents: 378
diff changeset
69 case 4: ret = cert.issuerO(); break;
1220b741cd51 Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents: 378
diff changeset
70 case 5: ret = cert.validFrom(); break;
1220b741cd51 Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents: 378
diff changeset
71 case 6: ret = cert.validTo(); break;
1220b741cd51 Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents: 378
diff changeset
72 case 7: ret = cert.fingerprint(); break;
342
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
73 default: ;
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
74 }
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
75 return ret;
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
76 }
358
9ba7b4b4c1de Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents: 353
diff changeset
77 if (role == Qt::UserRole) {
463
5200b8e9b2ae Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents: 416
diff changeset
78 Certificate cert = mCertificates.at(index.row());
358
9ba7b4b4c1de Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents: 353
diff changeset
79 return cert.isEditable();
9ba7b4b4c1de Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents: 353
diff changeset
80 }
397
8752aae8aad8 Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents: 396
diff changeset
81 if (role == Qt::FontRole && index.column() == 7) {
8752aae8aad8 Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents: 396
diff changeset
82 QFont block("DejaVu Sans Mono");
8752aae8aad8 Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents: 396
diff changeset
83 return block;
8752aae8aad8 Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents: 396
diff changeset
84 }
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
85
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
86 return QVariant();
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
87 }
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
88
348
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
89 bool CertificateTabelModel::setData(const QModelIndex &index,
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
90 const QVariant &value, int role)
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
91 {
463
5200b8e9b2ae Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents: 416
diff changeset
92 if (index.row() > mCertificates.size() || index.row() < 0) {
353
666abcfab229 Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 348
diff changeset
93 return false;
666abcfab229 Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 348
diff changeset
94 }
666abcfab229 Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 348
diff changeset
95
666abcfab229 Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 348
diff changeset
96 bool newValue = value.toBool();
463
5200b8e9b2ae Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents: 416
diff changeset
97 Certificate &cert = mCertificates[index.row()];
358
9ba7b4b4c1de Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents: 353
diff changeset
98 if (!cert.isEditable()) {
9ba7b4b4c1de Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents: 353
diff changeset
99 return false;
9ba7b4b4c1de Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents: 353
diff changeset
100 }
353
666abcfab229 Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 348
diff changeset
101 cert.setInstallCert(newValue);
666abcfab229 Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 348
diff changeset
102
666abcfab229 Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 348
diff changeset
103 emit dataChanged(index, index);
666abcfab229 Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 348
diff changeset
104
348
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
105 return true;
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
106 }
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
107
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
108 QVariant CertificateTabelModel::headerData(int section,
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
109 Qt::Orientation orientation, int role) const
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
110 {
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
111 if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
342
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
112 return header.at(section);
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
113 }
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
114 return QVariant();
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
115 }
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
116
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
117 int CertificateTabelModel::rowCount(const QModelIndex&) const
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
118 {
463
5200b8e9b2ae Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents: 416
diff changeset
119 return mCertificates.size();
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
120 }
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
121
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
122 int CertificateTabelModel::columnCount(const QModelIndex&) const
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
123 {
342
fba80767fd7a Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents: 334
diff changeset
124 return header.size();
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
125 }
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
126
348
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
127 Qt::ItemFlags CertificateTabelModel::flags(const QModelIndex &index) const
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
128 {
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
129 if (!index.isValid ())
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
130 return Qt::ItemIsSelectable;
334
36be67070dcb Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
131
348
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
132 if (index.column() == 0) {
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
133 return QAbstractTableModel::flags(index) | Qt::ItemIsEditable;
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
134 }
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
135
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
136 return QAbstractTableModel::flags(index);
e6aa82466420 Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents: 342
diff changeset
137 }

http://wald.intevation.org/projects/trustbridge/