62 Public method to save the form data to a file. |
62 Public method to save the form data to a file. |
63 |
63 |
64 @param f file or file like object open for writing |
64 @param f file or file like object open for writing |
65 @return flag indicating success (booelan) |
65 @return flag indicating success (booelan) |
66 """ |
66 """ |
67 f.write("%s\n" % self.url.toString()) |
67 f.write("{0}\n".format(self.url.toString())) |
68 f.write("%s\n" % self.name) |
68 f.write("{0}\n".format(self.name)) |
69 f.write("%s\n" % self.hasAPassword) |
69 f.write("{0}\n".format(self.hasAPassword)) |
70 for element in self.elements: |
70 for element in self.elements: |
71 f.write("%s = %s\n" % (element[0], element[1])) |
71 f.write("{0} = {1}\n".format(element[0], element[1])) |
72 |
72 |
73 class PasswordManager(QObject): |
73 class PasswordManager(QObject): |
74 """ |
74 """ |
75 Class implementing the password manager. |
75 Class implementing the password manager. |
76 |
76 |
151 @param url URL to get the credentials for (QUrl) |
151 @param url URL to get the credentials for (QUrl) |
152 @param realm realm to get the credentials for (string) |
152 @param realm realm to get the credentials for (string) |
153 @return key string (string) |
153 @return key string (string) |
154 """ |
154 """ |
155 if realm: |
155 if realm: |
156 key = "%s://%s (%s)" % (url.scheme(), url.authority(), realm) |
156 key = "{0}://{1} ({2})".format(url.scheme(), url.authority(), realm) |
157 else: |
157 else: |
158 key = "%s://%s" % (url.scheme(), url.authority()) |
158 key = "{0}://{1}".format(url.scheme(), url.authority()) |
159 return key |
159 return key |
160 |
160 |
161 def save(self): |
161 def save(self): |
162 """ |
162 """ |
163 Public slot to save the login entries to disk. |
163 Public slot to save the login entries to disk. |
167 |
167 |
168 loginFile = os.path.join(Utilities.getConfigDir(), "browser", "logins") |
168 loginFile = os.path.join(Utilities.getConfigDir(), "browser", "logins") |
169 try: |
169 try: |
170 f = open(loginFile, "w", encoding = "utf-8") |
170 f = open(loginFile, "w", encoding = "utf-8") |
171 for key, login in list(self.__logins.items()): |
171 for key, login in list(self.__logins.items()): |
172 f.write("%s\n" % key) |
172 f.write("{0}\n".format(key)) |
173 f.write("%s\n" % login[0]) |
173 f.write("{0}\n".format(login[0])) |
174 f.write("%s\n" % login[1]) |
174 f.write("{0}\n".format(login[1])) |
175 f.write("%s\n" % self.SEPARATOR) |
175 f.write("{0}\n".format(self.SEPARATOR)) |
176 if self.__loginForms: |
176 if self.__loginForms: |
177 f.write("%s\n" % self.FORMS) |
177 f.write("{0}\n".format(self.FORMS)) |
178 for key, form in list(self.__loginForms.items()): |
178 for key, form in list(self.__loginForms.items()): |
179 f.write("%s\n" % key) |
179 f.write("{0}\n".format(key)) |
180 form.save(f) |
180 form.save(f) |
181 f.write("%s\n" % self.SEPARATOR) |
181 f.write("{0}\n".format(self.SEPARATOR)) |
182 if self.__never: |
182 if self.__never: |
183 f.write("%s\n" % self.NEVER) |
183 f.write("{0}\n".format(self.NEVER)) |
184 for key in self.__never: |
184 for key in self.__never: |
185 f.write("%s\n") % key |
185 f.write("{0}\n".format(key)) |
186 f.close() |
186 f.close() |
187 except IOError as err: |
187 except IOError as err: |
188 QMessageBox.critical(None, |
188 QMessageBox.critical(None, |
189 self.trUtf8("Saving login data"), |
189 self.trUtf8("Saving login data"), |
190 self.trUtf8("""<p>Login data could not be saved to <b>{0}</b></p>""" |
190 self.trUtf8("""<p>Login data could not be saved to <b>{0}</b></p>""" |
529 |
529 |
530 if form.name == "": |
530 if form.name == "": |
531 formName = "0" |
531 formName = "0" |
532 else: |
532 else: |
533 try: |
533 try: |
534 formName = "%d" % int(form.name) |
534 formName = "{0:d}".format(int(form.name)) |
535 except ValueError: |
535 except ValueError: |
536 formName = '"%s"' % form.name |
536 formName = '"{0}"'.format(form.name) |
537 for element in form.elements: |
537 for element in form.elements: |
538 name = element[0] |
538 name = element[0] |
539 value = element[1] |
539 value = element[1] |
540 |
540 |
541 disabled = page.mainFrame().evaluateJavaScript( |
541 disabled = page.mainFrame().evaluateJavaScript( |
542 'document.forms[%s].elements["%s"].disabled' % (formName, name)) |
542 'document.forms[{0}].elements["{1}"].disabled'.format(formName, name)) |
543 if disabled: |
543 if disabled: |
544 continue |
544 continue |
545 |
545 |
546 readOnly = page.mainFrame().evaluateJavaScript( |
546 readOnly = page.mainFrame().evaluateJavaScript( |
547 'document.forms[%s].elements["%s"].readOnly' % (formName, name)) |
547 'document.forms[{0}].elements["{1}"].readOnly'.format(formName, name)) |
548 if readOnly: |
548 if readOnly: |
549 continue |
549 continue |
550 |
550 |
551 type_ = page.mainFrame().evaluateJavaScript( |
551 type_ = page.mainFrame().evaluateJavaScript( |
552 'document.forms[%s].elements["%s"].type' % (formName, name)) |
552 'document.forms[{0}].elements["{1}"].type'.format(formName, name)) |
553 if type_ == "" or \ |
553 if type_ == "" or \ |
554 type_ in ["hidden", "reset", "submit"]: |
554 type_ in ["hidden", "reset", "submit"]: |
555 continue |
555 continue |
556 if type_ == "password": |
556 if type_ == "password": |
557 value = Utilities.pwDecode(self.__logins[key][1]) |
557 value = Utilities.pwDecode(self.__logins[key][1]) |
558 setType = type_ == "checkbox" and "checked" or "value" |
558 setType = type_ == "checkbox" and "checked" or "value" |
559 value = value.replace("\\", "\\\\") |
559 value = value.replace("\\", "\\\\") |
560 value = value.replace('"', '\\"') |
560 value = value.replace('"', '\\"') |
561 javascript = 'document.forms[%s].elements["%s"].%s="%s";' % \ |
561 javascript = 'document.forms[{0}].elements["{1}"].{2}="{3}";'.format( |
562 (formName, name, setType, value) |
562 formName, name, setType, value) |
563 page.mainFrame().evaluateJavaScript(javascript) |
563 page.mainFrame().evaluateJavaScript(javascript) |