12 |
12 |
13 class PasswordWriter(QXmlStreamWriter): |
13 class PasswordWriter(QXmlStreamWriter): |
14 """ |
14 """ |
15 Class implementing a writer object to generate login data files. |
15 Class implementing a writer object to generate login data files. |
16 """ |
16 """ |
|
17 |
17 def __init__(self): |
18 def __init__(self): |
18 """ |
19 """ |
19 Constructor |
20 Constructor |
20 """ |
21 """ |
21 super().__init__() |
22 super().__init__() |
22 |
23 |
23 self.setAutoFormatting(True) |
24 self.setAutoFormatting(True) |
24 |
25 |
25 def write(self, fileNameOrDevice, logins, forms, nevers): |
26 def write(self, fileNameOrDevice, logins, forms, nevers): |
26 """ |
27 """ |
27 Public method to write an login data file. |
28 Public method to write an login data file. |
28 |
29 |
29 @param fileNameOrDevice name of the file to write (string) |
30 @param fileNameOrDevice name of the file to write (string) |
30 or device to write to (QIODevice) |
31 or device to write to (QIODevice) |
31 @param logins dictionary with login data (user name, password) |
32 @param logins dictionary with login data (user name, password) |
32 @param forms list of forms data (list of LoginForm) |
33 @param forms list of forms data (list of LoginForm) |
33 @param nevers list of URLs to never store data for (list of strings) |
34 @param nevers list of URLs to never store data for (list of strings) |
37 f = fileNameOrDevice |
38 f = fileNameOrDevice |
38 else: |
39 else: |
39 f = QFile(fileNameOrDevice) |
40 f = QFile(fileNameOrDevice) |
40 if not f.open(QIODevice.OpenModeFlag.WriteOnly): |
41 if not f.open(QIODevice.OpenModeFlag.WriteOnly): |
41 return False |
42 return False |
42 |
43 |
43 self.setDevice(f) |
44 self.setDevice(f) |
44 return self.__write(logins, forms, nevers) |
45 return self.__write(logins, forms, nevers) |
45 |
46 |
46 def __write(self, logins, forms, nevers): |
47 def __write(self, logins, forms, nevers): |
47 """ |
48 """ |
48 Private method to write an login data file. |
49 Private method to write an login data file. |
49 |
50 |
50 @param logins dictionary with login data (user name, password) |
51 @param logins dictionary with login data (user name, password) |
51 @param forms list of forms data (list of LoginForm) |
52 @param forms list of forms data (list of LoginForm) |
52 @param nevers list of URLs to never store data for (list of strings) |
53 @param nevers list of URLs to never store data for (list of strings) |
53 @return flag indicating success (boolean) |
54 @return flag indicating success (boolean) |
54 """ |
55 """ |
55 self.writeStartDocument() |
56 self.writeStartDocument() |
56 self.writeDTD("<!DOCTYPE passwords>") |
57 self.writeDTD("<!DOCTYPE passwords>") |
57 self.writeStartElement("Password") |
58 self.writeStartElement("Password") |
58 self.writeAttribute("version", "2.0") |
59 self.writeAttribute("version", "2.0") |
59 |
60 |
60 if logins: |
61 if logins: |
61 self.__writeLogins(logins) |
62 self.__writeLogins(logins) |
62 if forms: |
63 if forms: |
63 self.__writeForms(forms) |
64 self.__writeForms(forms) |
64 if nevers: |
65 if nevers: |
65 self.__writeNevers(nevers) |
66 self.__writeNevers(nevers) |
66 |
67 |
67 self.writeEndDocument() |
68 self.writeEndDocument() |
68 return True |
69 return True |
69 |
70 |
70 def __writeLogins(self, logins): |
71 def __writeLogins(self, logins): |
71 """ |
72 """ |
72 Private method to write the login data. |
73 Private method to write the login data. |
73 |
74 |
74 @param logins dictionary with login data (user name, password) |
75 @param logins dictionary with login data (user name, password) |
75 """ |
76 """ |
76 self.writeStartElement("Logins") |
77 self.writeStartElement("Logins") |
77 for key, login in logins.items(): |
78 for key, login in logins.items(): |
78 self.writeEmptyElement("Login") |
79 self.writeEmptyElement("Login") |
79 self.writeAttribute("key", key) |
80 self.writeAttribute("key", key) |
80 self.writeAttribute("user", login[0]) |
81 self.writeAttribute("user", login[0]) |
81 self.writeAttribute("password", login[1]) |
82 self.writeAttribute("password", login[1]) |
82 self.writeEndElement() |
83 self.writeEndElement() |
83 |
84 |
84 def __writeForms(self, forms): |
85 def __writeForms(self, forms): |
85 """ |
86 """ |
86 Private method to write forms data. |
87 Private method to write forms data. |
87 |
88 |
88 @param forms list of forms data (list of LoginForm) |
89 @param forms list of forms data (list of LoginForm) |
89 """ |
90 """ |
90 self.writeStartElement("Forms") |
91 self.writeStartElement("Forms") |
91 for key, form in forms.items(): |
92 for key, form in forms.items(): |
92 self.writeStartElement("Form") |
93 self.writeStartElement("Form") |
94 self.writeAttribute("url", form.url.toString()) |
95 self.writeAttribute("url", form.url.toString()) |
95 self.writeAttribute("name", str(form.name)) |
96 self.writeAttribute("name", str(form.name)) |
96 self.writeTextElement("PostData", form.postData) |
97 self.writeTextElement("PostData", form.postData) |
97 self.writeEndElement() |
98 self.writeEndElement() |
98 self.writeEndElement() |
99 self.writeEndElement() |
99 |
100 |
100 def __writeNevers(self, nevers): |
101 def __writeNevers(self, nevers): |
101 """ |
102 """ |
102 Private method to write the URLs never to store login data for. |
103 Private method to write the URLs never to store login data for. |
103 |
104 |
104 @param nevers list of URLs to never store data for (list of strings) |
105 @param nevers list of URLs to never store data for (list of strings) |
105 """ |
106 """ |
106 self.writeStartElement("Nevers") |
107 self.writeStartElement("Nevers") |
107 for never in nevers: |
108 for never in nevers: |
108 self.writeEmptyElement("Never") |
109 self.writeEmptyElement("Never") |