mainwindow.cpp

来自「一个精简的CA程序」· C++ 代码 · 共 614 行 · 第 1/2 页

CPP
614
字号
/* vi: set sw=4 ts=4: *//* * Copyright (C) 2001 Christian Hohnstaedt. * *  All rights reserved. * * *  Redistribution and use in source and binary forms, with or without  *  modification, are permitted provided that the following conditions are met: * *  - Redistributions of source code must retain the above copyright notice, *    this list of conditions and the following disclaimer. *  - Redistributions in binary form must reproduce the above copyright notice, *    this list of conditions and the following disclaimer in the documentation *    and/or other materials provided with the distribution. *  - Neither the name of the author nor the names of its contributors may be  *    used to endorse or promote products derived from this software without *    specific prior written permission. * * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * This program links to software with different licenses from: * *	http://www.openssl.org which includes cryptographic software * 	written by Eric Young (eay@cryptsoft.com)" * *	http://www.sleepycat.com * *	http://www.trolltech.com *  * * * http://www.hohnstaedt.de/xca * email: christian@hohnstaedt.de * * $Id: MainWindow.cpp,v 1.33 2003/11/25 19:34:02 chris2511 Exp $  * */                           #include "MainWindow.h"#include "ImportMulti.h"#include <qapplication.h>#include <qclipboard.h>#include <qmessagebox.h>#include <qlabel.h>#include <qpushbutton.h>#include <qlistview.h>#include <qlineedit.h>#include "lib/exception.h"#include "lib/pki_pkcs12.h"#include "view/KeyView.h"#include "view/ReqView.h"#include "view/CertView.h"#include "view/TempView.h"#include "view/CrlView.h"#include "lib/pass_info.h"#include "lib/func.h"#include "ui/PassRead.h"#include "ui/PassWrite.h"#ifdef WIN32#include <Shlobj.h>#endifQPixmap *MainWindow::keyImg = NULL, *MainWindow::csrImg = NULL,	*MainWindow::certImg = NULL, *MainWindow::tempImg = NULL,	*MainWindow::nsImg = NULL, *MainWindow::revImg = NULL,	*MainWindow::appIco = NULL;db_key *MainWindow::keys = NULL;db_x509req *MainWindow::reqs = NULL;db_x509	*MainWindow::certs = NULL;db_temp	*MainWindow::temps = NULL;db_base	*MainWindow::settings = NULL;db_crl	*MainWindow::crls = NULL;DbEnv *MainWindow::dbenv = NULL;extern void initOIDs(void);MainWindow::MainWindow(QWidget *parent, const char *name ) 	:MainWindow_UI(parent, name){	connect( (QObject *)quitApp, SIGNAL(clicked()), (QObject *)qApp, SLOT(quit()) );	QString cpr = "(c) 2002 by Christian@Hohnstaedt.de - Version: ";	copyright->setText(cpr + VER);	setCaption(tr(XCA_TITLE));	dbfile="xca.db";	dbenv = NULL;	global_tid = NULL;	getBaseDir();	QDir d(baseDir);        if ( ! d.exists() && !d.mkdir(baseDir)) {		QMessageBox::warning(this,tr(XCA_TITLE), QString::fromLatin1("Could not create ") + baseDir);		qFatal(  QString::fromLatin1("Couldnt create: ") +  baseDir );	}	init_images();		connect( keyList, SIGNAL(init_database()), this, SLOT(init_database()));	connect( reqList, SIGNAL(init_database()), this, SLOT(init_database()));	connect( certList, SIGNAL(init_database()), this, SLOT(init_database()));	connect( tempList, SIGNAL(init_database()), this, SLOT(init_database()));	connect( crlList, SIGNAL(init_database()), this, SLOT(init_database()));	connect( BNnewKey, SIGNAL(clicked()), keyList, SLOT(newItem()));	connect( BNexportKey, SIGNAL(clicked()), keyList, SLOT(store()));	connect( BNimportKey, SIGNAL(clicked()), keyList, SLOT(load()));	connect( BNdetailsKey, SIGNAL(clicked()), keyList, SLOT(showItem()));	connect( BNdeleteKey, SIGNAL(clicked()), keyList, SLOT(deleteItem()));	connect( BNchangePass, SIGNAL(clicked()), keyList, SLOT(changePasswd()));		connect( BNnewReq, SIGNAL(clicked()), reqList, SLOT(newItem()));	connect( BNimportReq, SIGNAL(clicked()), reqList, SLOT(load()));	connect( BNdetailsReq, SIGNAL(clicked()), reqList, SLOT(showItem()));	connect( BNdeleteReq, SIGNAL(clicked()), reqList, SLOT(deleteItem()));	connect( BNnewCert, SIGNAL(clicked()), certList, SLOT(newItem()));	connect( BNimportCert, SIGNAL(clicked()), certList, SLOT(load()));	connect( BNexportCert, SIGNAL(clicked()), certList, SLOT(store()));	connect( BNdetailsCert, SIGNAL(clicked()), certList, SLOT(showItem()));	connect( BNdeleteCert, SIGNAL(clicked()), certList, SLOT(deleteItem()));	connect( BNimportPKCS12, SIGNAL(clicked()), certList, SLOT(loadPKCS12()));	connect( BNimportPFX, SIGNAL(clicked()), certList, SLOT(loadPKCS12()));	connect( BNimportPKCS7, SIGNAL(clicked()), certList, SLOT(loadPKCS7()));	connect( BNviewState, SIGNAL(clicked()), this, SLOT(changeView()));		connect( BNemptyTemp, SIGNAL(clicked()), tempList, SLOT(newEmptyTemp()));	connect( BNcaTemp, SIGNAL(clicked()), tempList, SLOT(newCaTemp()));	connect( BNclientTemp, SIGNAL(clicked()), tempList, SLOT(newClientTemp()));	connect( BNserverTemp, SIGNAL(clicked()), tempList, SLOT(newServerTemp()));	connect( BNdeleteTemp, SIGNAL(clicked()), tempList, SLOT(deleteItem()));	connect( BNchangeTemp, SIGNAL(clicked()), tempList, SLOT(alterTemp()));	connect( BNimportTemp, SIGNAL(clicked()), tempList, SLOT(load()));	connect( BNexportTemp, SIGNAL(clicked()), tempList, SLOT(store()));		connect( BNimportCrl, SIGNAL(clicked()), crlList, SLOT(load()));	connect( BNdetailsCrl, SIGNAL(clicked()), crlList, SLOT(showItem()));	connect( BNdeleteCrl, SIGNAL(clicked()), crlList, SLOT(deleteItem()));		connect( certList, SIGNAL(connNewX509(NewX509 *)), this, SLOT(connNewX509(NewX509 *)) );	connect( reqList, SIGNAL(connNewX509(NewX509 *)), this, SLOT(connNewX509(NewX509 *)) );		connect( reqList, SIGNAL(newCert(pki_x509req *)),		certList, SLOT(newCert(pki_x509req *)) );	connect( certList, SIGNAL(genCrl(pki_x509 *)),		crlList, SLOT(newItem(pki_x509 *)) );	connect( tempList, SIGNAL(newCert(pki_temp *)),		certList, SLOT(newCert(pki_temp *)) );	connect( tempList, SIGNAL(newReq(pki_temp *)),		reqList, SLOT(newItem(pki_temp *)) );		ERR_load_crypto_strings();	OpenSSL_add_all_algorithms();	/* read in all out own OIDs */	initOIDs();		read_cmdline();	//if (!exitApp)}void MainWindow::init_images(){		keyImg = loadImg("bigkey.png");	csrImg = loadImg("bigcsr.png");	certImg = loadImg("bigcert.png");	tempImg = loadImg("bigtemp.png");	nsImg = loadImg("netscape.png");	revImg = loadImg("bigcrl.png");	appIco = loadImg("key.xpm");	bigKey->setPixmap(*keyImg);	bigCsr->setPixmap(*csrImg);	bigCert->setPixmap(*certImg);	bigTemp->setPixmap(*tempImg);	bigRev->setPixmap(*revImg);	setIcon(*appIco);	pki_key::icon[0] = loadImg("key.png");	pki_key::icon[1] = loadImg("halfkey.png");	pki_x509req::icon[0] = loadImg("req.png");	pki_x509req::icon[1] = loadImg("reqkey.png");	pki_x509req::icon[2] = loadImg("spki.png");	pki_x509::icon[0] = loadImg("validcert.png");	pki_x509::icon[1] = loadImg("validcertkey.png");	pki_x509::icon[2] = loadImg("invalidcert.png");	pki_x509::icon[3] = loadImg("invalidcertkey.png");	pki_temp::icon = loadImg("template.png");			     	pki_crl::icon = loadImg("crl.png");			     }			void MainWindow::read_cmdline(){	int cnt = 1, opt;	char *arg = NULL;	pki_base *item = NULL;	load_base *lb = NULL;	load_cert *lc = new load_cert();	load_req *lr = new load_req();	load_key *lk = new load_key();	load_pkcs12 *lp12 = new load_pkcs12();	load_pkcs7 *lp7 = new load_pkcs7();	load_crl *lcr = new load_crl();	load_temp *lt = new load_temp();	exitApp = 0;		ImportMulti *dlgi = NULL;	dlgi = new ImportMulti(this, NULL, true); 		while (cnt < qApp->argc()) {		arg = qApp->argv()[cnt];		if (arg[0] == '-') { // option			opt = 1; lb = NULL;			switch (arg[1]) {				case 'c' : lb = lc; break;				case 'r' : lb = lr; break;				case 'k' : lb = lk; break;				case 'p' : lb = lp12; break;				case '7' : lb = lp7; break;				case 'l' : lb = lcr; break;				case 't' : lb = lt; break;				case 'd' : lb = NULL; break;				case 'v' : printf("%s Version %s\n", XCA_TITLE, VER); opt=0; break;				case 'x' : exitApp = 1; opt=0; break;				default  : cmd_help("defa");			}			if (arg[2] != '\0' && opt==1) {				 arg+=2;			}			else {				cnt++;				continue;			}		}		if (lb) {			item = NULL;			try {				item = lb->loadItem(arg);				dlgi->addItem(item);			}			catch (errorEx &err) {				Error(err);				if (item) {					delete item;					item = NULL;				}			}		}		else {			dbfile = arg;		}				cnt++;	}	init_database();		dlgi->execute(1); /* force showing of import dialog */	delete dlgi;	delete lt;	delete lcr;	delete lp7;	delete lp12;   	delete lk;	delete lr;	delete lc;		}	void MainWindow::cmd_help(const char* msg) {printf(" -v show version information and exit -k expect all following non-option arguments to be RSA keys -r expect all following non-option arguments to be    Certificate signing requests or SPKAC requests -c expect all following non-option arguments to be Certificates -p expect all following non-option arguments to be PKCS#12 files -7 expect all following non-option arguments to be PKCS#7 files -l expect all following non-option arguments to be Revokation lists -t expect all following non-option arguments to be XCA templates -x Exit after processing all commandline options");qFatal("Cmdline Error (%s)\n", msg);}void MainWindow::init_database() {		if (dbenv) return; // already initialized....	try {		dbenv = new DbEnv(0);		dbenv->set_errcall(&MainWindow::dberr);		dbenv->open(QFile::encodeName(baseDir), DB_RECOVER | DB_INIT_TXN | \				DB_INIT_MPOOL | DB_INIT_LOG | DB_INIT_LOCK | \				DB_CREATE | DB_PRIVATE , 0600 );

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?