/* TODO: Store cookie in data arg. --jonas*/ void accept_cookie_dialog(struct session *ses, void *data) { /* [gettext_accelerator_context(accept_cookie_dialog)] */ struct cookie *cookie = (struct cookie *)cookie_queries.next; struct string string; assert(ses); if (list_empty(cookie_queries) || !init_string(&string)) return; del_from_list(cookie); add_format_to_string(&string, (const char *)_("Do you want to accept a cookie from %s?", ses->tab->term), cookie->server->host); add_to_string(&string, (const unsigned char *)"\n\n"); add_cookie_info_to_string(&string, cookie, ses->tab->term); msg_box(ses->tab->term, NULL, MSGBOX_FREE_TEXT, N_("Accept cookie?"), ALIGN_LEFT, string.source, cookie, 2, MSG_BOX_BUTTON(N_("~Accept"), accept_cookie_in_msg_box, B_ENTER), MSG_BOX_BUTTON(N_("~Reject"), reject_cookie_in_msg_box, B_ESC)); }
void ses_goto(struct session *ses, struct uri *uri, unsigned char *target_frame, struct location *target_location, enum cache_mode cache_mode, enum task_type task_type, int redir) { /* [gettext_accelerator_context(ses_goto)] */ struct task *task; int referrer_incomplete = 0; int malicious_uri = 0; int confirm_submit = uri->form && get_opt_bool("document.browse.forms" ".confirm_submit", ses); unsigned char *m1 = NULL, *message = NULL; struct memory_list *mlist = NULL; if (ses->doc_view && ses->doc_view->document && ses->doc_view->document->refresh) { kill_document_refresh(ses->doc_view->document->refresh); } assertm(!ses->loading_uri, "Buggy URI reference counting"); /* Reset the redirect counter if this is not a redirect. */ if (!redir) { ses->redirect_cnt = 0; } /* Figure out whether to confirm submit or not */ /* Only confirm submit if we are posting form data or a misleading URI * was detected. */ /* Note uri->post might be empty here but we are still supposely * posting form data so this should be more correct. */ if (uri->user && uri->userlen && get_opt_bool("document.browse.links.warn_malicious", ses) && check_malicious_uri(uri)) { malicious_uri = 1; confirm_submit = 1; } else if (uri->form) { /* First check if the referring URI was incomplete. It * indicates that the posted form data might be incomplete too. * See bug 460. */ if (ses->referrer) { struct cache_entry *cached; cached = find_in_cache(ses->referrer); referrer_incomplete = (cached && cached->incomplete); } if (referrer_incomplete) { confirm_submit = 1; } else if (get_validated_cache_entry(uri, cache_mode)) { confirm_submit = 0; } } if (!confirm_submit) { ses_load(ses, get_uri_reference(uri), target_frame, target_location, cache_mode, task_type); return; } task = mem_alloc(sizeof(*task)); if (!task) return; task->ses = ses; task->uri = get_uri_reference(uri); task->cache_mode = cache_mode; task->session_task.type = task_type; task->session_task.target.frame = null_or_stracpy(target_frame); task->session_task.target.location = target_location; if (malicious_uri) { unsigned char *host = memacpy(uri->host, uri->hostlen); unsigned char *user = memacpy(uri->user, uri->userlen); unsigned char *uristring = get_uri_string(uri, URI_PUBLIC); message = msg_text(ses->tab->term, N_("The URL you are about to follow might be maliciously " "crafted in order to confuse you. By following the URL " "you will be connecting to host \"%s\" as user \"%s\".\n\n" "Do you want to go to URL %s?"), host, user, uristring); mem_free_if(host); mem_free_if(user); mem_free_if(uristring); } else if (redir) { m1 = N_("Do you want to follow the redirect and post form data " "to URL %s?"); } else if (referrer_incomplete) { m1 = N_("The form data you are about to post might be incomplete.\n" "Do you want to post to URL %s?"); } else if (task_type == TASK_FORWARD) { m1 = N_("Do you want to post form data to URL %s?"); } else { m1 = N_("Do you want to repost form data to URL %s?"); } if (!message && m1) { unsigned char *uristring = get_uri_string(uri, URI_PUBLIC); message = msg_text(ses->tab->term, m1, uristring); mem_free_if(uristring); } add_to_ml(&mlist, task, (void *) NULL); if (task->session_task.target.frame) add_to_ml(&mlist, task->session_task.target.frame, (void *) NULL); msg_box(ses->tab->term, mlist, MSGBOX_FREE_TEXT, N_("Warning"), ALIGN_CENTER, message, task, 2, MSG_BOX_BUTTON(N_("~Yes"), post_yes, B_ENTER), MSG_BOX_BUTTON(N_("~No"), post_no, B_ESC)); }
void menu_keys(struct terminal *term, void *d_, void *xxx) { /* [gettext_accelerator_context(menu_keys)] */ int d = (long) d_; /* We scale by main mapping because it has the most actions */ action_id_T action_ids[MAIN_ACTIONS] = { ACT_MAIN_MENU, ACT_MAIN_QUIT, ACT_MAIN_MOVE_LINK_NEXT, ACT_MAIN_MOVE_LINK_PREV, ACT_MAIN_SCROLL_DOWN, ACT_MAIN_SCROLL_UP, ACT_MAIN_SCROLL_LEFT, ACT_MAIN_SCROLL_RIGHT, ACT_MAIN_HISTORY_MOVE_BACK, ACT_MAIN_GOTO_URL, ACT_MAIN_GOTO_URL_CURRENT, ACT_MAIN_DOCUMENT_INFO, ACT_MAIN_HEADER_INFO, ACT_MAIN_SEARCH, ACT_MAIN_SEARCH_BACK, ACT_MAIN_FIND_NEXT, ACT_MAIN_FIND_NEXT_BACK, ACT_MAIN_LINK_FOLLOW, ACT_MAIN_LINK_DOWNLOAD, ACT_MAIN_TOGGLE_HTML_PLAIN, ACT_MAIN_NONE, }; struct string keys; struct keys_toggle_info *info; info = (struct keys_toggle_info *)mem_calloc(1, sizeof(*info)); if (!info || !init_string(&keys)) { mem_free_if(info); return; } info->term = term; info->toggle = d; if (info->toggle) { int action_id; int keymap_id; for (action_id = 0; action_id < MAIN_ACTIONS - 1; action_id++) { action_ids[action_id] = action_id + 1; } for (keymap_id = 0; keymap_id < KEYMAP_MAX; keymap_id++) { add_actions_to_string(&keys, action_ids, keymap_id, term); if (keymap_id + 1 < KEYMAP_MAX) add_to_string(&keys, (const unsigned char *)"\n\n"); /* Just a little reminder that the following code takes * the easy way. */ assert((int) MAIN_ACTIONS > (int) EDIT_ACTIONS); assert((int) EDIT_ACTIONS > (int) MENU_ACTIONS); if (keymap_id == KEYMAP_MAIN) { action_ids[EDIT_ACTIONS] = ACT_EDIT_NONE; } else if (keymap_id == KEYMAP_EDIT) { action_ids[MENU_ACTIONS] = ACT_MENU_NONE; } } } else { add_actions_to_string(&keys, action_ids, KEYMAP_MAIN, term); } msg_box(term, getml(info, (void *) NULL), MSGBOX_FREE_TEXT | MSGBOX_SCROLLABLE, N_("Keys"), ALIGN_LEFT, keys.source, info, 2, MSG_BOX_BUTTON(N_("~OK"), NULL, B_ENTER | B_ESC), MSG_BOX_BUTTON(N_("~Toggle display"), push_toggle_keys_display_button, B_ENTER)); }