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_BASE_H 9 #define __PKI_BASE_H 10 11 #include <QString> 12 #include <QRegExp> 13 #include <QVariant> 14 #include <QByteArray> 15 #include "BioByteArray.h" 16 #include "asn1time.h" 17 #include "pkcs11_lib.h" 18 #include "base.h" 19 #include "db.h" 20 #include "pki_lookup.h" 21 #include "headerlist.h" 22 #include "sql.h" 23 #include "xfile.h" 24 25 #define pki_openssl_error() _openssl_error(*this, C_FILE, __LINE__) 26 #define pki_ign_openssl_error() _ign_openssl_error(*this, C_FILE, __LINE__) 27 28 enum pki_source { 29 unknown, 30 imported, 31 generated, 32 transformed, 33 token, 34 legacy_db, 35 renewed 36 }; 37 38 #define VIEW_item_id 0 39 #define VIEW_item_name 1 40 #define VIEW_item_type 2 41 #define VIEW_item_date 3 42 #define VIEW_item_source 4 43 #define VIEW_item_comment 5 44 45 extern pki_lookup Store; 46 47 class pki_base : public QObject 48 { 49 Q_OBJECT 50 51 public: /* static */ 52 static QRegExp limitPattern; 53 static QString rmslashdot(const QString &fname); 54 static unsigned hash(const QByteArray &ba); 55 static bool pem_comment; 56 static int count; 57 static QList<pki_base*> allitems; 58 59 protected: 60 QVariant sqlItemId; 61 QString desc, comment; 62 a1time insertion_date; 63 enum pki_type pkiType; 64 /* model data */ 65 pki_base *parent; 66 void my_error(const QString &error) const; 67 QString filename; 68 virtual void PEM_file_comment(XFile &file) const; 69 virtual void collect_properties(QMap<QString, QString> &) const; 70 QList<pki_base*> childItems; 71 72 public: 73 enum msg_type { 74 msg_import, 75 msg_delete, 76 msg_delete_multi, 77 msg_create, 78 }; 79 enum print_opt { 80 print_openssl_txt, 81 print_pem, 82 print_coloured, 83 }; 84 enum pki_source pkiSource; 85 86 pki_base(const QString &d = QString(), pki_base *p = NULL); 87 pki_base(const pki_base *p); 88 virtual ~pki_base(); 89 90 QList<pki_base*> getChildItems() const; 91 void clear(); getIntName()92 QString getIntName() const 93 { 94 return desc; 95 } setFilename(const QString & s)96 void setFilename(const QString &s) 97 { 98 filename = s; 99 } getFilename()100 QString getFilename() const 101 { 102 return filename; 103 } inheritFilename(pki_base * pki)104 void inheritFilename(pki_base *pki) const 105 { 106 pki->setFilename(getFilename()); 107 } 108 virtual QString comboText() const; 109 virtual void print(BioByteArray &b, enum print_opt opt) const; 110 QString getUnderlinedName() const; setIntName(const QString & d)111 void setIntName(const QString &d) 112 { 113 desc = d; 114 } 115 virtual void autoIntName(const QString &file); getComment()116 QString getComment() const 117 { 118 return comment; 119 } setComment(const QString & c)120 void setComment(const QString &c) 121 { 122 comment = c; 123 } getSqlItemId()124 QVariant getSqlItemId() const 125 { 126 return sqlItemId; 127 } getType()128 enum pki_type getType() const 129 { 130 return pkiType; 131 } i2d_b64()132 QString i2d_b64() const 133 { 134 return QString::fromLatin1(i2d().toBase64()); 135 } getInsertionDate()136 a1time getInsertionDate() const 137 { 138 return insertion_date; 139 } 140 virtual QByteArray i2d() const; 141 virtual bool compare(const pki_base *) const; 142 virtual QString getMsg(msg_type msg) const; 143 virtual const char *getClassName() const; 144 145 /* Tree View management */ 146 void setParent(pki_base *p); 147 pki_base *getParent() const; 148 pki_base *child(int row); 149 void insert(pki_base *item); 150 int childCount() const; 151 void takeChild(pki_base *pki); 152 pki_base *takeFirst(); 153 int indexOf(const pki_base *child) const; 154 155 /* Token handling */ 156 virtual void deleteFromToken(); 157 virtual void deleteFromToken(const slotid &); 158 virtual int renameOnToken(const slotid &, const QString &); 159 160 /* Import / Export management */ 161 virtual bool pem(BioByteArray &b, int format=0); 162 virtual void fromPEM_BIO(BIO *, const QString &); 163 virtual void fromPEMbyteArray(const QByteArray &, const QString &); 164 virtual void fload(const QString &); 165 virtual void writeDefault(const QString&) const; 166 167 /* Old database management methods */ fromData(const unsigned char *,db_header_t *)168 virtual void fromData(const unsigned char *, db_header_t *) {}; 169 /* Qt Model-View methods */ bg_color(const dbheader * hd)170 virtual QVariant bg_color(const dbheader *hd) const 171 { 172 (void)hd; 173 return QVariant(); 174 } 175 virtual QVariant column_data(const dbheader *hd) const; 176 virtual QVariant getIcon(const dbheader *hd) const; 177 virtual QVariant column_tooltip(const dbheader *hd) const; 178 virtual a1time column_a1time(const dbheader *hd) const; 179 virtual bool visible() const; 180 int isVisible(); 181 bool childVisible() const; 182 183 /* SQL management methods */ 184 QSqlError insertSql(); insertSqlData()185 virtual QSqlError insertSqlData() 186 { 187 return QSqlError(); 188 } 189 QSqlError deleteSql(); deleteSqlData()190 virtual QSqlError deleteSqlData() 191 { 192 return QSqlError(); 193 } 194 virtual void restoreSql(const QSqlRecord &rec); 195 QSqlError sqlItemNotFound(QVariant sqlId) const; 196 unsigned hash() const; 197 QString pki_source_name() const; 198 QString get_dump_filename(const QString &dirname, 199 const QString &ext) const; 200 void selfComment(QString msg); 201 QStringList icsVEVENT(const a1time &expires, 202 const QString &summary, const QString &description) const; QString()203 operator QString() const 204 { 205 return QString("(%1[%2]:%3)").arg(getClassName()) 206 .arg(getSqlItemId().toString()).arg(getIntName()); 207 } 208 }; 209 210 Q_DECLARE_METATYPE(pki_base *); 211 #endif 212