Sun, 29 Jun 2014 20:13:56 +0200
Started porting eric5 to PyQt5.
1685
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
3160
209a07d7e401
Updated copyright for 2014.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3002
diff
changeset
|
3 | # Copyright (c) 2012 - 2014 Detlev Offenbach <detlev@die-offenbachs.de> |
1685
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a class to write login data files. |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
3145
a9de05d4a22f
# __IGNORE_WARNING__ added/ removed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3057
diff
changeset
|
10 | from __future__ import unicode_literals |
2525
8b507a9a2d40
Script changes: Future import added, super calls modified and unicode behavior for str.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2302
diff
changeset
|
11 | |
3656
441956d8fce5
Started porting eric5 to PyQt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3178
diff
changeset
|
12 | from PyQt5.QtCore import QXmlStreamWriter, QIODevice, QFile |
1685
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | class PasswordWriter(QXmlStreamWriter): |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | Class implementing a writer object to generate login data files. |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | def __init__(self): |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | Constructor |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | """ |
2525
8b507a9a2d40
Script changes: Future import added, super calls modified and unicode behavior for str.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2302
diff
changeset
|
23 | super(PasswordWriter, self).__init__() |
1685
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | self.setAutoFormatting(True) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | def write(self, fileNameOrDevice, logins, forms, nevers): |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | Public method to write an login data file. |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | @param fileNameOrDevice name of the file to write (string) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | or device to write to (QIODevice) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | @param logins dictionary with login data (user name, password) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | @param forms list of forms data (list of LoginForm) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | @param nevers list of URLs to never store data for (list of strings) |
2954
bf0215fe12d1
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
36 | @return flag indicating success (boolean) |
1685
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | if isinstance(fileNameOrDevice, QIODevice): |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | f = fileNameOrDevice |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | else: |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | f = QFile(fileNameOrDevice) |
1704
02ae6c55b35b
Fixed an issue in the new XML writers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1686
diff
changeset
|
42 | if not f.open(QFile.WriteOnly): |
1685
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | return False |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | self.setDevice(f) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | return self.__write(logins, forms, nevers) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | def __write(self, logins, forms, nevers): |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | Private method to write an login data file. |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | @param logins dictionary with login data (user name, password) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | @param forms list of forms data (list of LoginForm) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | @param nevers list of URLs to never store data for (list of strings) |
1686
bd756cb42d5b
Fixed a few typos in the password reader/writer source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1685
diff
changeset
|
55 | @return flag indicating success (boolean) |
1685
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | self.writeStartDocument() |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | self.writeDTD("<!DOCTYPE passwords>") |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | self.writeStartElement("Password") |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | self.writeAttribute("version", "1.0") |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | if logins: |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | self.__writeLogins(logins) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | if forms: |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | self.__writeForms(forms) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | if nevers: |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | self.__writeNevers(nevers) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | self.writeEndDocument() |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | return True |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | def __writeLogins(self, logins): |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | Private method to write the login data. |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | @param logins dictionary with login data (user name, password) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | self.writeStartElement("Logins") |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | for key, login in logins.items(): |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | self.writeEmptyElement("Login") |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | self.writeAttribute("key", key) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | self.writeAttribute("user", login[0]) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | self.writeAttribute("password", login[1]) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | self.writeEndElement() |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | def __writeForms(self, forms): |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | Private method to write forms data. |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | @param forms list of forms data (list of LoginForm) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | self.writeStartElement("Forms") |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | for key, form in forms.items(): |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | self.writeStartElement("Form") |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | self.writeAttribute("key", key) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | self.writeAttribute("url", form.url.toString()) |
1917
c73052b6b65e
Fixed an issue with failed logins for certain files by implementing a referer whitelist. All hosts in this list will get a referer header.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1704
diff
changeset
|
97 | self.writeAttribute("name", str(form.name)) |
3002
6ffc581f00f1
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2954
diff
changeset
|
98 | self.writeAttribute( |
6ffc581f00f1
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2954
diff
changeset
|
99 | "password", "yes" if form.hasAPassword else "no") |
1685
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | if form.elements: |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | self.writeStartElement("Elements") |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | for element in form.elements: |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | self.writeEmptyElement("Element") |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | self.writeAttribute("name", element[0]) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | self.writeAttribute("value", element[1]) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | self.writeEndElement() |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | self.writeEndElement() |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | self.writeEndElement() |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | def __writeNevers(self, nevers): |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | Private method to write the URLs never to store login data for. |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | @param nevers list of URLs to never store data for (list of strings) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | """ |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | self.writeStartElement("Nevers") |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | for never in nevers: |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | self.writeEmptyElement("Never") |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | self.writeAttribute("url", never) |
7640d5500966
Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | self.writeEndElement() |