Ejemplo n.º 1
0
/**
 * Creates a tree entry for a URL, and links it into the tree
 *
 * \param parent     the node to link to
 * \param url        the URL (copied)
 * \param data	     the URL data to use
 * \param title	     the custom title to use
 * \return the node created, or NULL for failure
 */
struct node *tree_create_URL_node(struct tree *tree, struct node *parent,
		const char *url, const char *title,
		tree_node_user_callback user_callback, void *callback_data)
{
	struct node *node;
	struct node_element *element;
	char *text_cp, *squashed;

	squashed = squash_whitespace(title ? title : url);
	text_cp = strdup(squashed);
	if (text_cp == NULL) {
		LOG(("malloc failed"));
		warn_user("NoMemory", 0);
		return NULL;
	}
	free(squashed);
	node = tree_create_leaf_node(tree, parent, text_cp, true, false,
				     false);
	if (node == NULL) {
		free(text_cp);
		return NULL;
	}

	if (user_callback != NULL)
		tree_set_node_user_callback(node, user_callback,
					    callback_data);

	tree_create_node_element(node, NODE_ELEMENT_BITMAP,
				 TREE_ELEMENT_THUMBNAIL, false);
	tree_create_node_element(node, NODE_ELEMENT_TEXT, TREE_ELEMENT_VISITS,
				 false);
	tree_create_node_element(node, NODE_ELEMENT_TEXT,
				 TREE_ELEMENT_LAST_VISIT, false);
	element = tree_create_node_element(node, NODE_ELEMENT_TEXT,
					   TREE_ELEMENT_URL, true);
	if (element != NULL) {
		text_cp = strdup(url);
		if (text_cp == NULL) {
			tree_delete_node(tree, node, false);
			LOG(("malloc failed"));
			warn_user("NoMemory", 0);
			return NULL;
		}
		tree_update_node_element(tree, element, text_cp, NULL);
	}

	return node;
}
Ejemplo n.º 2
0
/**
 * Creates a read only tree entry for a URL, and links it into the tree.
 *
 * \param parent      the node to link to
 * \param url         the URL
 * \param data	      the URL data to use
 * \return the node created, or NULL for failure
 */
struct node *tree_create_URL_node_readonly(struct tree *tree, 
		struct node *parent, const char *url, 
		const struct url_data *data, 
		tree_node_user_callback user_callback, void *callback_data)
{
	struct node *node;
	struct node_element *element;
	char *title;

	assert(url && data);

	if (data->title != NULL) {
		title = strdup(data->title);
	} else {
		title = strdup(url);
	}

	if (title == NULL)
		return NULL;

	node = tree_create_leaf_node(tree, parent, title, false, false, false);
	if (node == NULL) {
		free(title);
		return NULL;
	}

	if (user_callback != NULL) {
		tree_set_node_user_callback(node, user_callback,
					    callback_data);
	}

	tree_create_node_element(node, NODE_ELEMENT_BITMAP,
				 TREE_ELEMENT_THUMBNAIL, false);
	tree_create_node_element(node, NODE_ELEMENT_TEXT, TREE_ELEMENT_VISITS,
				 false);
	tree_create_node_element(node, NODE_ELEMENT_TEXT,
				 TREE_ELEMENT_LAST_VISIT, false);
	element = tree_create_node_element(node, NODE_ELEMENT_TEXT,
					   TREE_ELEMENT_URL, false);
	if (element != NULL) {
		tree_update_node_element(tree, element, url, NULL);
	}

	tree_update_URL_node(tree, node, url, data);

	return node;
}
Ejemplo n.º 3
0
static struct node *sslcert_create_node(const struct ssl_cert_info *cert)
{
	struct node *node;
	struct node_element *element;
	char *text;

	text = messages_get_buff("SSL_Certificate_Subject", cert->subject);
	if (text == NULL)
		return NULL;

	node = tree_create_leaf_node(NULL, NULL, text, false, false, false);
	if (node == NULL) {
		free(text);
		return NULL;
	}
	tree_set_node_user_callback(node, sslcert_node_callback, NULL);

	/* add issuer node */
	element = tree_create_node_element(node, NODE_ELEMENT_TEXT,
					   TREE_ELEMENT_SSL_ISSUER, false);
	if (element != NULL) {
		text = messages_get_buff("SSL_Certificate_Issuer", cert->issuer);
		if (text == NULL) {
			tree_delete_node(NULL, node, false);
			return NULL;
		}
		tree_update_node_element(NULL, element, text, NULL);
	}

	/* add version node */
	element = tree_create_node_element(node, NODE_ELEMENT_TEXT,
					   TREE_ELEMENT_SSL_VERSION, false);
	if (element != NULL) {
		text = messages_get_buff("SSL_Certificate_Version", cert->version);
		if (text == NULL) {
			tree_delete_node(NULL, node, false);
			return NULL;
		}
		tree_update_node_element(NULL, element, text, NULL);
	}

	/* add valid from node */
	element = tree_create_node_element(node, NODE_ELEMENT_TEXT,
					   TREE_ELEMENT_SSL_VALID_FROM, false);
	if (element != NULL) {
		text = messages_get_buff("SSL_Certificate_ValidFrom", cert->not_before);
		if (text == NULL) {
			tree_delete_node(NULL, node, false);
			return NULL;
		}
		tree_update_node_element(NULL, element, text, NULL);
	}


	/* add valid to node */
	element = tree_create_node_element(node, NODE_ELEMENT_TEXT,
					   TREE_ELEMENT_SSL_VALID_TO, false);
	if (element != NULL) {
		text = messages_get_buff("SSL_Certificate_ValidTo", cert->not_after);
		if (text == NULL) {
			tree_delete_node(NULL, node, false);
			return NULL;
		}
		tree_update_node_element(NULL, element, text, NULL);
	}

	/* add certificate type */
	element = tree_create_node_element(node, NODE_ELEMENT_TEXT,
					   TREE_ELEMENT_SSL_CERT_TYPE, false);
	if (element != NULL) {
		text = messages_get_buff("SSL_Certificate_Type", cert->cert_type);
		if (text == NULL) {
			tree_delete_node(NULL, node, false);
			return NULL;
		}
		tree_update_node_element(NULL, element, text, NULL);
	}

	/* add serial node */
	element = tree_create_node_element(node, NODE_ELEMENT_TEXT,
					   TREE_ELEMENT_SSL_SERIAL, false);
	if (element != NULL) {
		text = messages_get_buff("SSL_Certificate_Serial", cert->serial);
		if (text == NULL) {
			tree_delete_node(NULL, node, false);
			return NULL;
		}
		tree_update_node_element(NULL, element, text, NULL);
	}

	/* set the display icon */
	tree_set_node_icon(NULL, node, sslcert_icon);

	return node;
}
Ejemplo n.º 4
0
void gui_cert_verify(struct browser_window *bw, hlcache_handle *c,
		const struct ssl_cert_info *certs, unsigned long num)
{
	const struct ssl_cert_info *from;
	struct session_cert *to;
	struct session_data *data;
	struct tree *tree;
	struct node *node;
	long i;
	STRPTR yesorno,reqcontents;
	int res = 0;
	struct treeview_window *twin;

	assert(bw && c && certs);

	/* copy the certificate information */
	data = calloc(1, sizeof(struct session_data));
	if (!data) {
		warn_user("NoMemory", 0);
		return;
	}
	data->url = strdup(content_get_url(c));
	if (!data->url) {
		free(data);
		warn_user("NoMemory", 0);
		return;
	}
	data->bw = bw;
	data->num = num;
	data->certs = calloc(num, sizeof(struct session_cert));
	if (!data->certs) {
		free(data->url);
		free(data);
		warn_user("NoMemory", 0);
		return;
	}
	for (i = 0; i < (long)num; i++) {
		to = &data->certs[i];
		from = &certs[i];
		to->subject_t = strdup(from->subject);
		to->issuer_t = strdup(from->issuer);
		if ((!to->subject_t) || (!to->issuer_t)) {
			for (; i >= 0; i--) {
				to = &data->certs[i];
				free(to->subject_t);
				free(to->issuer_t);
			}
			free(data->certs);
			free(data->url);
			free(data);
			warn_user("NoMemory", 0);
			return;
		}
		snprintf(to->version, sizeof data->certs->version, "%ld",
				from->version);
		snprintf(to->valid_from, sizeof data->certs->valid_from, "%s",
				from->not_before);
		snprintf(to->type, sizeof data->certs->type, "%d",
				from->cert_type);
		snprintf(to->valid_to, sizeof data->certs->valid_to, "%s",
				from->not_after);
		snprintf(to->serial, sizeof data->certs->serial, "%ld",
				from->serial);
	}

	tree = calloc(sizeof(struct tree), 1);
	if (!tree) {
		//ro_gui_cert_close(ssl_w);
		warn_user("NoMemory", 0);
		return;
	}
	tree->root = tree_create_folder_node(NULL, "Root");
	if (!tree->root) {
//		ro_gui_cert_close(ssl_w);
		warn_user("NoMemory", 0);
		free(tree);
		tree = NULL;
		return;
	}
	tree->root->expanded = true;
	tree->handle = 0;
	tree->movable = false;
	tree->no_drag = true;
	tree->no_vscroll = true;
	tree->no_furniture = true;
	tree->single_selection = true;
	data->tree = tree;

	/* put the SSL names in the tree */
	for (i = 0; i < (long)num; i++) {
		node = tree_create_leaf_node(tree->root, certs[i].subject);
		if (node) {
			node->data.data = TREE_ELEMENT_SSL;
			tree_set_node_sprite(node, "small_xxx", "small_xxx");
		}
	}
	tree_initialise(tree);

	ami_open_tree(tree,AMI_TREE_SSLCERT);
	twin = (struct treeview_window *)data->tree->handle;

	if(yesorno = ASPrintf("%s|%s",messages_get("Accept"),messages_get("Reject")))
	{
		if(reqcontents = ASPrintf("%s\n\n%s: %s\n%s: %s\n%s: %s\n%s: %s\n%s: %s",
							messages_get("SSLError"),
							messages_get("Subject"),
							to->subject_t,
							messages_get("Issuer"),
							to->issuer_t,
							messages_get("Version"),
							to->version,
							messages_get("ValidFrom"),
							to->valid_from,
							messages_get("ValidTo"),
							to->valid_to))
		{
			res = TimedDosRequesterTags(TDR_ImageType,TDRIMAGE_QUESTION,
							TDR_Window,twin->win,
							TDR_TitleString,messages_get("NetSurf"),
							TDR_GadgetString,yesorno,
							TDR_FormatString,reqcontents,
							TAG_DONE);

			FreeVec(reqcontents);
		}

		FreeVec(yesorno);
	}

	if(res == 1)
	{
		ami_gui_cert_apply(data);
	}
	ami_gui_cert_close(data);

}