Helpviewer/Passwords/PasswordWriter.py

Tue, 17 Jun 2014 19:46:24 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 17 Jun 2014 19:46:24 +0200
changeset 3638
cede64100e13
parent 3178
f25fc1364c88
child 3656
441956d8fce5
permissions
-rw-r--r--

Added code to the multi project 'Add Project' dialog to ensure, that the filename returned is absolute. If a relative one is entered it is concatenated with the path of the multi project file or the 'workspace', if it hasn't been saved yet.

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
1685
7640d5500966 Changed file format for saved login data to XML.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt4.QtCore import QXmlStreamWriter, QIODevice, QFile
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()

eric ide

mercurial