EstEID_Map EstEID_mapClone(EstEID_Map map) {
	EstEID_Map result;
	if (!map) return NULL;
	result = EstEID_mapPut(NULL, map->key, map->value);
	result->next = EstEID_mapClone(map->next);
	return result;
}
bool doGetCertificate(PluginInstance *obj, NPVariant *result) {
	LOG_LOCATION;
	FAIL_IF_NOT_ALLOWED_SITE;    
	char selectedCertID[33];
	int dlg_result = 0;
	
	dlg_result = promptForCertificate(getNativeWindowHandle(obj), selectedCertID);

	EstEID_log("Certificate selection dialog result = %i", dlg_result);
	EstEID_log("Selected certificate ID = %s", selectedCertID);

	if(dlg_result == IDCANCEL) {
		sprintf(EstEID_error, "User canceled");
		EstEID_errorCode = ESTEID_USER_CANCEL;
		EstEID_log("EstEID_error = %s", EstEID_error);
		browserFunctions->setexception(&obj->header, EstEID_error);	
		return false;
	}
	
	CertInstance *certInstance = (CertInstance *)browserFunctions->createobject(obj->npp, certClass());
	certInstance->npp = obj->npp;
	certInstance->certInfo = EstEID_mapClone(EstEID_getNonRepudiationCertById(selectedCertID));
//	certInstance->certInfo = EstEID_mapClone(EstEID_getNonRepudiationCert());

	EstEID_log("certObject=%p", certInstance);
	OBJECT_TO_NPVARIANT((NPObject *)certInstance, *result);
	EstEID_log("result=%p", result);	
	return true;
}
bool doGetCertificates(PluginInstance *obj, NPVariant *result) {
	LOG_LOCATION;
	EstEID_log("obj=%p, name=doGetCertificates", obj);
	NPObject *windowObject = NULL;
	browserFunctions->getvalue(obj->npp, NPNVWindowNPObject, &windowObject);
	NPVariant array;
	browserFunctions->invoke(obj->npp, windowObject, browserFunctions->getstringidentifier("Array"), NULL, 0, &array);
	EstEID_Certs *certs = EstEID_loadCerts();
	for (unsigned i = 0u; i < certs->count; i++) {
		EstEID_Map cert = certs->certs[i];
		if (!EstEID_mapGet(cert, "usageNonRepudiation")) continue;
		CertInstance *certInstance = (CertInstance *)browserFunctions->createobject(obj->npp, certClass());
		certInstance->npp = obj->npp;
		certInstance->certInfo = EstEID_mapClone(cert);
		browserFunctions->retainobject((NPObject *)certInstance);
		EstEID_log("certObject=%p", certInstance);
		NPVariant *arg = (NPVariant *)browserFunctions->memalloc(sizeof(NPVariant));
		OBJECT_TO_NPVARIANT((NPObject *)certInstance, *arg);
		NPVariant ret;
		browserFunctions->invoke(obj->npp, array.value.objectValue, browserFunctions->getstringidentifier("push"), arg, 1, &ret);
	}
	browserFunctions->retainobject(array.value.objectValue);
	OBJECT_TO_NPVARIANT(array.value.objectValue, *result);
	return true;
}
Esempio n. 4
0
bool doGetCertificate(PluginInstance *obj, NPVariant *result) {
	LOG_LOCATION;
	FAIL_IF_NOT_ALLOWED_SITE;
	char selectedCertID[33];
	int dlg_result = 0;
	
#ifdef _WIN32
	HWND ownerWindowHandle = (HWND)getNativeWindowHandle(obj);
	EstEID_log("owner window handle passed to DialogBoxParam() = %08X", ownerWindowHandle);
	dlg_result = (int)DialogBoxParam(pluginInstance, MAKEINTRESOURCE(IDD_CERTIFICATESELECTIONDLG), ownerWindowHandle, CertSelectionDialogProc, (LPARAM)selectedCertID);
#else
	dlg_result = promptForCertificate(getNativeWindowHandle(obj), selectedCertID);
#endif
	EstEID_log("Certificate selection dialog result = %i", dlg_result);
	EstEID_log("Selected certificate ID = %s", selectedCertID);

	if(dlg_result == IDCANCEL) {
		sprintf(EstEID_error, "User canceled");
		EstEID_errorCode = ESTEID_USER_CANCEL;
		EstEID_log("EstEID_error = %s", EstEID_error);
		browserFunctions->setexception(&obj->header, EstEID_error);	
		return false;
	}
	
	CertInstance *certInstance = (CertInstance *)browserFunctions->createobject(obj->npp, certClass());
	certInstance->npp = obj->npp;
	certInstance->certInfo = EstEID_mapClone(EstEID_getNonRepudiationCertById(selectedCertID));
//	certInstance->certInfo = EstEID_mapClone(EstEID_getNonRepudiationCert());

	EstEID_log("certObject=%p", certInstance);
	OBJECT_TO_NPVARIANT((NPObject *)certInstance, *result);
	EstEID_log("result=%p", result);	
	return true;
}
int main(void) {

	EstEID_Map map = NULL;
	assertIntEquals(0, EstEID_mapSize(map));

	map = EstEID_mapPut(map, "foo", "bar");
	assertNotNull(map);
	assertIntEquals(1, EstEID_mapSize(map));

	map = EstEID_mapPut(map, "foo", "FOO");
	assertIntEquals(1, EstEID_mapSize(map));

	char *k = strdup("key");
	char *v = strdup("value");
	map = EstEID_mapPut(map, k, v);
	free(k);
	free(v);
	assertIntEquals(2, EstEID_mapSize(map));
	assertStringEquals("value", EstEID_mapGet(map, "key"));

	assertNull(EstEID_mapGet(map, "xyz"));

	EstEID_mapFree(map);


	EstEID_Map m = EstEID_mapPut(NULL, "a", "A");
	EstEID_mapPut(m, "b", "B");
	EstEID_mapPut(m, "c", "C");

	printf("map:\n");
	EstEID_mapPrint(stdout, m);

	EstEID_Map c = EstEID_mapClone(m);
	EstEID_mapFree(m);

	printf("clone:\n");
	EstEID_mapPrint(stdout, c);
	EstEID_mapFree(c);

}