Mercurial > hg > easyhg
comparison easyhg2.py @ 434:f8aa7ac57993
Refactor load/save config
author | Chris Cannam |
---|---|
date | Tue, 28 Jun 2011 13:07:28 +0100 |
parents | c20da4213406 |
children | 74047159a044 |
comparison
equal
deleted
inserted
replaced
433:c20da4213406 | 434:f8aa7ac57993 |
---|---|
97 """ | 97 """ |
98 parsed_url = urlparse.urlparse(authuri) | 98 parsed_url = urlparse.urlparse(authuri) |
99 return "%s://%s%s" % (parsed_url.scheme, parsed_url.netloc, | 99 return "%s://%s%s" % (parsed_url.scheme, parsed_url.netloc, |
100 parsed_url.path) | 100 parsed_url.path) |
101 | 101 |
102 def load_config(pfile): | |
103 fp = None | |
104 try: | |
105 fp = open(pfile) | |
106 except: | |
107 self.ui.write("failed to open authfile %s\n" % pfile) | |
108 if fp: | |
109 pcfg.readfp(fp) | |
110 fp.close() | |
111 | |
112 def save_config(pcfg, pfile): | |
113 ofp = None | |
114 try: | |
115 ofp = open(pfile, 'w') | |
116 except: | |
117 self.ui.write("failed to open authfile %s for writing\n" % pfile) | |
118 raise | |
119 try: | |
120 os.fchmod(ofp.fileno(), stat.S_IRUSR | stat.S_IWUSR) #!!! Windows equivalent? | |
121 except: | |
122 ofp.close() | |
123 ofp = None | |
124 self.ui.write("failed to set proper permissions on authfile %s\n" % pfile) | |
125 raise | |
126 pcfg.write(ofp) | |
127 ofp.close() | |
128 | |
102 @monkeypatch_method(passwordmgr) | 129 @monkeypatch_method(passwordmgr) |
103 def find_user_password(self, realm, authuri): | 130 def find_user_password(self, realm, authuri): |
104 | 131 |
105 if not self.ui.interactive(): | 132 if not self.ui.interactive(): |
106 return orig_find(self, realm, authuri) | 133 return orig_find(self, realm, authuri) |
118 | 145 |
119 uri = canonical_url(authuri) | 146 uri = canonical_url(authuri) |
120 | 147 |
121 pkey = base64.b64encode('%s@@%s' % (uri, user)).replace('=', '_') | 148 pkey = base64.b64encode('%s@@%s' % (uri, user)).replace('=', '_') |
122 pekey = self.ui.config('easyhg', 'authkey') | 149 pekey = self.ui.config('easyhg', 'authkey') |
123 pfile = os.path.expanduser(self.ui.config('easyhg', 'authfile')) | 150 pfile = self.ui.config('easyhg', 'authfile') |
151 if pfile: pfile = os.path.expanduser(pfile) | |
124 pdata = None | 152 pdata = None |
125 | 153 |
126 self.ui.write("pekey is %s\n" % pekey) | 154 self.ui.write("pekey is %s\n" % pekey) |
127 self.ui.write("pfile is %s\n" % pfile) | 155 self.ui.write("pfile is %s\n" % pfile) |
128 | 156 |
149 pcfg = None | 177 pcfg = None |
150 | 178 |
151 if pekey and pfile: | 179 if pekey and pfile: |
152 # load pwd from our cache file, decrypt with given key | 180 # load pwd from our cache file, decrypt with given key |
153 pcfg = ConfigParser.RawConfigParser() | 181 pcfg = ConfigParser.RawConfigParser() |
154 fp = None | |
155 remember_default = False | 182 remember_default = False |
183 load_config(pcfg, pfile) | |
156 try: | 184 try: |
157 fp = open(pfile) | 185 remember_default = pcfg.getboolean('preferences', 'remember') |
158 except: | 186 except: |
159 self.ui.write("failed to open authfile %s\n" % pfile) | 187 remember_default = False |
160 if fp and not passwd: | 188 try: |
161 pcfg.readfp(fp) | 189 pdata = pcfg.get('auth', pkey) |
162 try: | 190 except ConfigParser.NoOptionError: |
163 remember_default = pcfg.getboolean('preferences', 'remember') | 191 pdata = None |
164 except: | 192 if pdata: |
165 remember_default = False | 193 cachedpwd = decrypt(pdata, pekey) |
166 try: | 194 passfield.setText(cachedpwd) |
167 pdata = pcfg.get('auth', pkey) | |
168 except ConfigParser.NoOptionError: | |
169 pdata = None | |
170 if pdata: | |
171 cachedpwd = decrypt(pdata, pekey) | |
172 passfield.setText(cachedpwd) | |
173 fp.close() | |
174 remember = QtGui.QCheckBox() | 195 remember = QtGui.QCheckBox() |
175 remember.setChecked(remember_default) | 196 remember.setChecked(remember_default) |
176 remember.setText(_('Remember this password until EasyMercurial exits')) | 197 remember.setText(_('Remember this password until EasyMercurial exits')) |
177 layout.addWidget(remember, 3, 1) | 198 layout.addWidget(remember, 3, 1) |
178 | 199 |
201 user = userfield.text() | 222 user = userfield.text() |
202 passwd = passfield.text() | 223 passwd = passfield.text() |
203 | 224 |
204 if pekey and pfile and remember: | 225 if pekey and pfile and remember: |
205 | 226 |
206 ofp = None | |
207 | |
208 try: | |
209 ofp = open(pfile, 'w') | |
210 except: | |
211 self.ui.write("failed to open authfile %s for writing\n" % pfile) | |
212 raise | |
213 | |
214 try: | |
215 os.fchmod(ofp.fileno(), stat.S_IRUSR | stat.S_IWUSR) #!!! Windows equivalent? | |
216 except: | |
217 ofp.close() | |
218 ofp = None | |
219 self.ui.write("failed to set proper permissions on authfile %s\n" % pfile) | |
220 raise | |
221 | |
222 #!!! add these sections first... | 227 #!!! add these sections first... |
223 | 228 |
224 if remember.isChecked(): | 229 if remember.isChecked(): |
225 pdata = encrypt(passwd, pekey) | 230 pdata = encrypt(passwd, pekey) |
226 pcfg.set('auth', pkey, pdata) | 231 pcfg.set('auth', pkey, pdata) |
227 else: | 232 else: |
228 pcfg.set('auth', pkey, '') | 233 pcfg.set('auth', pkey, '') |
229 | 234 |
230 pcfg.set('preferences', 'remember', remember.isChecked()) | 235 pcfg.set('preferences', 'remember', remember.isChecked()) |
231 pcfg.write(ofp) | 236 |
232 ofp.close() | 237 save_config(pcfg, pfile) |
233 | 238 |
234 # if passwd and keyring_key != '' and not from_keyring: | 239 # if passwd and keyring_key != '' and not from_keyring: |
235 # keyring_key = '%s@@%s' % (uri, user) | 240 # keyring_key = '%s@@%s' % (uri, user) |
236 ## keyring.set_password('Mercurial', keyring_key, passwd) | 241 ## keyring.set_password('Mercurial', keyring_key, passwd) |
237 self.add_password(realm, authuri, user, passwd) | 242 self.add_password(realm, authuri, user, passwd) |