diff --git a/core/browser.py b/core/browser.py index d7b1e62..a9d977c 100644 --- a/core/browser.py +++ b/core/browser.py @@ -33,6 +33,7 @@ import subprocess import re import base64 from functools import partial +import sqlite3 MOUSE_BACK_BUTTON = 8 @@ -178,6 +179,27 @@ class BrowserView(QWebEngineView): self.load_adblocker() self.buffer.message_to_emacs.emit("Successfully enabled adblocker!") + @interactive() + def record_form_data(self): + ''' Record form data.''' + self.buffer.add_password_entry() + self.buffer.message_to_emacs.emit("Successfully recorded form data!") + + @interactive() + def toggle_autofill(self): + ''' Toggle Autofill status and data''' + if self.buffer.emacs_var_dict["eaf-browser-enable-autofill"] == "false": + self.buffer.set_emacs_var.emit("eaf-browser-enable-autofill", "true", "true") + self.buffer.autofill_id = self.buffer.auto_fill(0) + self.buffer.message_to_emacs.emit("Successfully enabled autofill!") + else: + self.buffer.autofill_id = self.buffer.auto_fill(self.buffer.autofill_id) + if self.buffer.autofill_id == 0: + self.buffer.set_emacs_var.emit("eaf-browser-enable-autofill", "false", "true") + self.buffer.message_to_emacs.emit("Successfully disabled autofill!") + else: + self.buffer.message_to_emacs.emit("Successfully changed autofill data!") + @interactive() def search_text_forward(self): ''' Forward Search Text.''' @@ -549,6 +571,9 @@ class BrowserBuffer(Buffer): self.config_dir = config_dir self.page_closed = False + self.autofill = PasswordDb(os.path.join(os.path.dirname(config_dir), "browser", "password.db")) + self.autofill_id = 0 + self.history_list = [] if self.emacs_var_dict["eaf-browser-remember-history"] == "true": self.history_log_file_path = os.path.join(self.config_dir, "browser", "history", "log.txt") @@ -612,6 +637,51 @@ class BrowserBuffer(Buffer): self.build_interactive_method(self.buffer_widget, "back", "history_backward", insert_or_do=True) self.build_interactive_method(self.buffer_widget, "forward", "history_forward", insert_or_do=True) + def add_password_entry(self): + password, form_data = self.buffer_widget.execute_js(""" + var password = ""; + var form_data = {}; + var input_list=document.getElementsByTagName("input"); + for(var i=0;i0: + self._conn.execute(""" + UPDATE autofill SET password=? + WHERE host=? and form_data=? + """, (password, host, str(form_data))) + else: + self._conn.execute(""" + INSERT INTO autofill (host, password, form_data) + VALUES (?, ?, ?) + """, (host, password, str(form_data))) + self._conn.commit() + + def get_entries(self, host, id): + return self._conn.execute(""" + SELECT id, host, password, form_data FROM autofill + WHERE host=? and id>? ORDER BY id + """, (host, id)) diff --git a/eaf.el b/eaf.el index 96222a0..6948f16 100644 --- a/eaf.el +++ b/eaf.el @@ -258,6 +258,7 @@ It must defined at `eaf-browser-search-engines'." '((eaf-camera-save-path . "~/Downloads") (eaf-browser-enable-plugin . "true") (eaf-browser-enable-adblocker . "false") + (eaf-browser-enable-autofill . "false") (eaf-browser-enable-javascript . "true") (eaf-browser-remember-history . "true") (eaf-browser-default-zoom . "1.0") @@ -302,6 +303,8 @@ Try not to modify this alist directly. Use `eaf-setq' to modify instead." ("M-f" . "history_forward") ("M-b" . "history_backward") ("M-q" . "clear_cookies") + ("C-t" . "toggle_autofill") + ("C-d" . "record_form_data") ("M-a" . "toggle_adblocker") ("C-M-q" . "clear_history") ("M-v" . "scroll_down_page")