1 /* vi: set sw=4 ts=4:
2 *
3 * Copyright (C) 2015 - 2020 Christian Hohnstaedt.
4 *
5 * All rights reserved.
6 */
7
8 #include "lib/pki_temp.h"
9 #include "TempTreeView.h"
10 #include "NewX509.h"
11 #include "XcaDialog.h"
12 #include "MainWindow.h"
13 #include <QAbstractItemModel>
14 #include <QAbstractItemView>
15 #include <QMenu>
16
fillContextMenu(QMenu * menu,QMenu *,const QModelIndex &,QModelIndexList indexes)17 void TempTreeView::fillContextMenu(QMenu *menu, QMenu *,
18 const QModelIndex &, QModelIndexList indexes)
19 {
20 if (indexes.size() != 1)
21 return;
22
23 menu->addAction(tr("Duplicate"), this, SLOT(duplicateTemp()));
24 menu->addAction(tr("Create certificate"), this, SLOT(certFromTemp()));
25 menu->addAction(tr("Create request"), this, SLOT(reqFromTemp()));
26 }
27
duplicateTemp()28 void TempTreeView::duplicateTemp()
29 {
30 pki_temp *temp = db_base::fromIndex<pki_temp>(currentIndex());
31 if (!temp || !basemodel)
32 return;
33 pki_temp *newtemp = new pki_temp(temp);
34 newtemp->setIntName(newtemp->getIntName() + " " + tr("copy"));
35 temps()->insertPKI(newtemp);
36 }
37
certFromTemp()38 void TempTreeView::certFromTemp()
39 {
40 pki_temp *temp = db_base::fromIndex<pki_temp>(currentIndex());
41 if (temp)
42 emit newCert(temp);
43 }
44
reqFromTemp()45 void TempTreeView::reqFromTemp()
46 {
47 pki_temp *temp = db_base::fromIndex<pki_temp>(currentIndex());
48 if (temp)
49 emit newReq(temp);
50 }
51
showPki(pki_base * pki)52 void TempTreeView::showPki(pki_base *pki)
53 {
54 alterTemp(dynamic_cast<pki_temp *>(pki));
55 }
56
runTempDlg(pki_temp * temp)57 bool TempTreeView::runTempDlg(pki_temp *temp)
58 {
59 NewX509 *dlg = new NewX509(this);
60
61 dlg->setTemp(temp);
62 if (!dlg->exec()) {
63 delete dlg;
64 return false;
65 }
66 dlg->toTemplate(temp);
67 delete dlg;
68 return true;
69 }
70
newItem()71 void TempTreeView::newItem()
72 {
73 pki_temp *temp = NULL;
74 QString type;
75
76 if (!basemodel)
77 return;
78
79 itemComboTemp *ic = new itemComboTemp(NULL);
80 ic->insertPkiItems(temps()->getPredefs());
81 XcaDialog *dlg = new XcaDialog(this, tmpl, ic,
82 tr("Preset Template values"), QString());
83 if (dlg->exec()) {
84 temp = new pki_temp(ic->currentPkiItem());
85 if (temp) {
86 temp->pkiSource = generated;
87 if (runTempDlg(temp)) {
88 temp = dynamic_cast<pki_temp *>(
89 temps()->insertPKI(temp));
90 temps()->createSuccess(temp);
91 } else {
92 delete temp;
93 }
94 }
95 }
96 delete dlg;
97 }
98
alterTemp(pki_temp * temp)99 bool TempTreeView::alterTemp(pki_temp *temp)
100 {
101 if (!basemodel || !temp)
102 return false;
103
104 if (!runTempDlg(temp))
105 return false;
106
107 temps()->alterTemp(temp);
108 return true;
109 }
110