Mercurial > hg > easyhg
comparison easyhg2.py @ 436:b7a740eef696
Refactor config get/set
author | Chris Cannam |
---|---|
date | Tue, 28 Jun 2011 13:27:05 +0100 |
parents | 74047159a044 |
children | 765255e9cc92 |
comparison
equal
deleted
inserted
replaced
435:74047159a044 | 436:b7a740eef696 |
---|---|
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): | 102 def load_config(pcfg, pfile): |
103 fp = None | 103 fp = None |
104 try: | 104 try: |
105 fp = open(pfile) | 105 fp = open(pfile) |
106 except: | 106 except: |
107 self.ui.write("failed to open authfile %s\n" % pfile) | 107 pass |
108 if fp: | 108 if fp: |
109 pcfg.readfp(fp) | 109 pcfg.readfp(fp) |
110 fp.close() | 110 fp.close() |
111 | 111 |
112 def save_config(pcfg, pfile): | 112 def save_config(pcfg, pfile): |
113 ofp = None | 113 ofp = None |
114 try: | 114 try: |
115 ofp = open(pfile, 'w') | 115 ofp = open(pfile, 'w') |
124 self.ui.write("failed to set proper permissions on authfile %s\n" % pfile) | 124 self.ui.write("failed to set proper permissions on authfile %s\n" % pfile) |
125 raise | 125 raise |
126 pcfg.write(ofp) | 126 pcfg.write(ofp) |
127 ofp.close() | 127 ofp.close() |
128 | 128 |
129 def get_from_config(pcfg, sect, key): | |
130 data = None | |
131 try: | |
132 data = pcfg.get(sect, key) | |
133 except (ConfigParser.NoOptionError, ConfigParser.NoSectionError): | |
134 pass | |
135 return data | |
136 | |
137 def get_boolean_from_config(pcfg, sect, key, deflt): | |
138 data = deflt | |
139 try: | |
140 data = pcfg.getboolean(sect, key) | |
141 except (ConfigParser.NoOptionError, ConfigParser.NoSectionError): | |
142 pass | |
143 return data | |
144 | |
145 def set_to_config(pcfg, sect, key, data): | |
146 if not pcfg.has_section(sect): | |
147 pcfg.add_section(sect) | |
148 pcfg.set(sect, key, data) | |
149 | |
129 @monkeypatch_method(passwordmgr) | 150 @monkeypatch_method(passwordmgr) |
130 def find_user_password(self, realm, authuri): | 151 def find_user_password(self, realm, authuri): |
131 | 152 |
132 if not self.ui.interactive(): | 153 if not self.ui.interactive(): |
133 return orig_find(self, realm, authuri) | 154 return orig_find(self, realm, authuri) |
146 uri = canonical_url(authuri) | 167 uri = canonical_url(authuri) |
147 | 168 |
148 pkey = base64.b64encode('%s@@%s' % (uri, user)).replace('=', '_') | 169 pkey = base64.b64encode('%s@@%s' % (uri, user)).replace('=', '_') |
149 pekey = self.ui.config('easyhg', 'authkey') | 170 pekey = self.ui.config('easyhg', 'authkey') |
150 pfile = self.ui.config('easyhg', 'authfile') | 171 pfile = self.ui.config('easyhg', 'authfile') |
172 use_authfile = (pekey and pfile) | |
151 if pfile: pfile = os.path.expanduser(pfile) | 173 if pfile: pfile = os.path.expanduser(pfile) |
152 pdata = None | 174 pdata = None |
153 | 175 |
154 self.ui.write("pekey is %s\n" % pekey) | 176 self.ui.write("pekey is %s\n" % pekey) |
155 self.ui.write("pfile is %s\n" % pfile) | 177 self.ui.write("pfile is %s\n" % pfile) |
176 userfield.connect(userfield, Qt.SIGNAL("textChanged(QString)"), passfield, Qt.SLOT("clear()")) | 198 userfield.connect(userfield, Qt.SIGNAL("textChanged(QString)"), passfield, Qt.SLOT("clear()")) |
177 | 199 |
178 remember = None | 200 remember = None |
179 pcfg = None | 201 pcfg = None |
180 | 202 |
181 if pekey and pfile: | 203 if use_authfile: |
182 # load pwd from our cache file, decrypt with given key | 204 # load pwd from our cache file, decrypt with given key |
183 pcfg = ConfigParser.RawConfigParser() | 205 pcfg = ConfigParser.RawConfigParser() |
184 remember_default = False | |
185 load_config(pcfg, pfile) | 206 load_config(pcfg, pfile) |
186 try: | 207 remember_default = get_boolean_from_config(pcfg, 'preferences', 'remember', False) |
187 remember_default = pcfg.getboolean('preferences', 'remember') | 208 pdata = get_from_config(pcfg, 'auth', pkey) |
188 except: | |
189 remember_default = False | |
190 try: | |
191 pdata = pcfg.get('auth', pkey) | |
192 except ConfigParser.NoOptionError: | |
193 pdata = None | |
194 if pdata: | 209 if pdata: |
195 cachedpwd = decrypt(pdata, pekey) | 210 cachedpwd = decrypt(pdata, pekey) |
196 passfield.setText(cachedpwd) | 211 passfield.setText(cachedpwd) |
197 remember = QtGui.QCheckBox() | 212 remember = QtGui.QCheckBox() |
198 remember.setChecked(remember_default) | 213 remember.setChecked(remember_default) |
217 elif not passwd: | 232 elif not passwd: |
218 passfield.setFocus(True) | 233 passfield.setFocus(True) |
219 | 234 |
220 dialog.raise_() | 235 dialog.raise_() |
221 ok = dialog.exec_() | 236 ok = dialog.exec_() |
222 if ok: | 237 if not ok: |
223 self.ui.write('Dialog accepted\n') | |
224 user = userfield.text() | |
225 passwd = passfield.text() | |
226 | |
227 if pekey and pfile and remember: | |
228 | |
229 #!!! add these sections first... | |
230 | |
231 if remember.isChecked(): | |
232 pdata = encrypt(passwd, pekey) | |
233 pcfg.set('auth', pkey, pdata) | |
234 else: | |
235 pcfg.set('auth', pkey, '') | |
236 | |
237 pcfg.set('preferences', 'remember', remember.isChecked()) | |
238 | |
239 save_config(pcfg, pfile) | |
240 | |
241 # if passwd and keyring_key != '' and not from_keyring: | |
242 # keyring_key = '%s@@%s' % (uri, user) | |
243 ## keyring.set_password('Mercurial', keyring_key, passwd) | |
244 self.add_password(realm, authuri, user, passwd) | |
245 else: | |
246 raise util.Abort(_('password entry cancelled')) | 238 raise util.Abort(_('password entry cancelled')) |
239 | |
240 self.ui.write('Dialog accepted\n') | |
241 user = userfield.text() | |
242 passwd = passfield.text() | |
243 | |
244 if use_authfile: | |
245 set_to_config(pcfg, 'preferences', 'remember', remember.isChecked()) | |
246 if remember.isChecked(): | |
247 pdata = encrypt(passwd, pekey) | |
248 set_to_config(pcfg, 'auth', pkey, pdata) | |
249 else: | |
250 set_to_config(pcfg, 'auth', pkey, '') | |
251 save_config(pcfg, pfile) | |
252 | |
253 self.add_password(realm, authuri, user, passwd) | |
247 return (user, passwd) | 254 return (user, passwd) |
248 | 255 |
249 | 256 |
250 |