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)