예제 #1
0
bool certGetProperty(CertInstance *obj, NPIdentifier name, NPVariant *variant) {
	NPUTF8* nameString = browserFunctions->utf8fromidentifier(name);
	EstEID_log("name=%s", (char *)nameString);
	if(isSameIdentifier(name, "id")){
		return copyStringToNPVariant(EstEID_getCertHash(obj->certificate), variant);
	}
	if(isSameIdentifier(name, "certificateAsHex") || isSameIdentifier(name, "cert")){
		return copyStringToNPVariant(obj->certificateAsHex, variant);
	}
	if(isSameIdentifier(name, "issuerCN")){
		return copyStringToNPVariant(obj->issuerCN, variant);
	}
	if(isSameIdentifier(name, "CN")){
		EstEID_log("CN=%s", obj->CN);
		return copyStringToNPVariant(obj->CN, variant);
	}
	if(isSameIdentifier(name, "validTo")){
		return copyStringToNPVariant(obj->validTo, variant);
	}
	if(isSameIdentifier(name, "validFrom")){
		return copyStringToNPVariant(obj->validFrom, variant);
	}
	if(isSameIdentifier(name, "keyUsage")){
		return copyStringToNPVariant("Non-Repudiation", variant);
	}
	return false;
}
bool certHasProperty(NPClass *theClass, NPIdentifier name) {
	FAIL_IF_NOT_ALLOWED_SITE
	static char *certProperties[] = {"id", "cert", "CN", "issuerCN", "keyUsage", "validFrom", "validTo", "certSerialNumber", "certificateAsPEM", "certificateAsHex"};
	for (unsigned i = 0u; i < sizeof(certProperties) / sizeof(char *); i++) {
		if (isSameIdentifier(name, certProperties[i])) return true;
	}
	return false;
}
bool pluginInvoke(PluginInstance *obj, NPIdentifier name, NPVariant *args, unsigned argCount, NPVariant *result) {	
	LOG_LOCATION;
	EstEID_clear_error();
	EstEID_setLocale(pluginLanguage);

	if (isSameIdentifier(name, "sign")) {
		return doSign(obj, args, argCount, result);
	}
	if (isSameIdentifier(name, "getCertificate")) {
		return doGetCertificate(obj, result);
	}
	if (isSameIdentifier(name, "getVersion")) {
		return pluginGetProperty(obj, browserFunctions->getstringidentifier("version"), result);
	}
	EstEID_log("obj=%p, name=%p, argCount=%u", obj, name, argCount);
	return false;
}
bool pluginSetProperty(PluginInstance *obj, NPIdentifier name, const NPVariant *variant) {
	LOG_LOCATION;
	if(isSameIdentifier(name, "pluginLanguage")) {
		memset(pluginLanguage, '\0', 3);
		if(NPVARIANT_IS_STRING(*variant)) {
			strncpy(pluginLanguage, NPVARIANT_TO_STRING(*variant).UTF8Characters, 2);
			return true;
		}
		return true;
	}
	return false;
}
bool pluginHasProperty(NPClass *theClass, NPIdentifier name) {
	return 
		isSameIdentifier(name, "version") ||
		isSameIdentifier(name, "errorMessage") ||
		isSameIdentifier(name, "errorCode") ||
		isSameIdentifier(name, "authCert") ||
		isSameIdentifier(name, "pluginLanguage") ||
		isSameIdentifier(name, "signCert");
}
bool pluginGetProperty(PluginInstance *obj, NPIdentifier name, NPVariant *variant) {
	LOG_LOCATION;
	if (isSameIdentifier(name, "version"))
		return copyStringToNPVariant(ESTEID_PLUGIN_VERSION, variant);
	else if (isSameIdentifier(name, "errorMessage")){
		EstEID_log("Reading error message: %s", EstEID_error);
		return copyStringToNPVariant(EstEID_error, variant);
	}
	else if (isSameIdentifier(name, "errorCode")) {
		INT32_TO_NPVARIANT(EstEID_errorCode, *variant);
		EstEID_log("returning errorCode=%i", EstEID_errorCode);
		return true;
	}
	else if (isSameIdentifier(name, "authCert") || isSameIdentifier(name, "signCert")){
		return doGetCertificate(obj, variant);
	}
	else if (isSameIdentifier(name, "pluginLanguage")){
		return copyStringToNPVariant(pluginLanguage, variant);
	}
	EstEID_log("returning false");
	return false;
}
bool certInvoke(CertInstance *obj, NPIdentifier name, NPVariant *args, uint32_t argCount, NPVariant *result) {
	if (isSameIdentifier(name, "toString")) {
		return certGetProperty(obj, browserFunctions->getstringidentifier("CN"), result);
	}
	return false;
}
bool certHasMethod(NPObject *npobj, NPIdentifier name) {
	return isSameIdentifier(name, "toString");
}
bool pluginHasMethod(PluginInstance *obj, NPIdentifier name) {
	return 
		isSameIdentifier(name, "sign") ||
		isSameIdentifier(name, "getCertificate") ||		
		isSameIdentifier(name, "getVersion");
}