1 /* vi: set sw=4 ts=4:
2  *
3  * Copyright (C) 2001 - 2020 Christian Hohnstaedt.
4  *
5  * All rights reserved.
6  */
7 
8 #ifndef __PKI_TEMP_H
9 #define __PKI_TEMP_H
10 
11 #include "pki_base.h"
12 #include "x509name.h"
13 #include "asn1time.h"
14 #include "pki_x509super.h"
15 
16 #define D5 "-----"
17 #define PEM_STRING_XCA_TEMPLATE "XCA TEMPLATE"
18 #define TMPL_VERSION 10
19 
20 #define CHECK_TMPL_KEY if (!tmpl_keys.contains(key)) { qFatal("Unknown template key: %s(%s)",  __func__, CCHAR(key)); }
21 
22 #define VIEW_temp_version 6
23 #define VIEW_temp_template 7
24 
25 class pki_temp: public pki_x509name
26 {
27 		Q_OBJECT
28 	protected:
29 		static const QList<QString> tmpl_keys;
30 		int dataSize();
31 		void try_fload(XFile &file);
32 		bool pre_defined;
33 		x509name xname;
34 		QMap<QString, QString> settings;
35 		QString adv_ext;
36 		void fromExtList(extList *el, int nid, const char *item);
37 
38 	public:
39 		pki_temp(const pki_temp *pk);
40 		pki_temp(const QString &d = QString());
41 		~pki_temp();
42 
getSetting(QString key)43 		QString getSetting(QString key)
44 		{
45 			CHECK_TMPL_KEY
46 			return settings[key];
47 		}
getSettingInt(QString key)48 		int getSettingInt(QString key)
49 		{
50 			CHECK_TMPL_KEY
51 			return settings[key].toInt();
52 		}
setSetting(QString key,QString value)53 		void setSetting(QString key, QString value)
54 		{
55 			CHECK_TMPL_KEY
56 			settings[key] = value;
57 		}
setSetting(QString key,int value)58 		void setSetting(QString key, int value)
59 		{
60 			CHECK_TMPL_KEY
61 			settings[key] = QString::number(value);
62 		}
63 		void fload(const QString &fname);
64 		void writeDefault(const QString &dirname) const ;
65 		void fromData(const unsigned char *p, int size, int version);
66 		void old_fromData(const unsigned char *p, int size, int version);
67 		void fromData(const unsigned char *p, db_header_t *head );
68 		void fromData(QByteArray &ba, int version);
setAsPreDefined()69 		void setAsPreDefined()
70 		{
71 			pre_defined = true;
72 		}
73 		QString comboText() const;
74 		QByteArray toData() const;
toB64Data()75 		QString toB64Data()
76 		{
77 			return QString::fromLatin1(toData().toBase64());
78 		}
79 		bool compare(const pki_base *ref) const;
80 		void writeTemp(XFile &file) const;
81 		QVariant getIcon(const dbheader *hd) const;
82 		QString getMsg(msg_type msg) const;
83 		x509name getSubject() const;
setSubject(x509name n)84 		void setSubject(x509name n)
85 		{
86 			xname = n;
87 		}
88 		bool pem(BioByteArray &, int);
89 		QByteArray toExportData() const;
90 		void fromPEM_BIO(BIO *, const QString &);
91 		void fromExportData(QByteArray data);
92 		extList fromCert(pki_x509super *cert_or_req);
93 		QSqlError insertSqlData();
94 		QSqlError deleteSqlData();
95 		void restoreSql(const QSqlRecord &rec);
96 };
97 
98 Q_DECLARE_METATYPE(pki_temp *);
99 #endif
100