- Timestamp:
- 05/28/09 14:30:52 (3 years ago)
- Location:
- trunk/sandbox/jhb
- Files:
-
- 4 modified
-
mobile/ocwallet.py (modified) (14 diffs)
-
oc2/testissuer.py (modified) (1 diff)
-
oc2/transports.py (modified) (2 diffs)
-
oc2/wallet.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/sandbox/jhb/mobile/ocwallet.py
r319 r320 1 1 import appuifw,e32,os,sys 2 3 def error_catched(f): 4 def error_handled(*args,**kwargs): 5 try: 6 f(*args,**kwargs) 7 except: 8 appuifw.note(u'cought error','error') 9 return error_handled 10 2 11 3 12 class WalletClient: … … 131 140 url = appuifw.query(u'url','text',u'http://baach.de:9090') 132 141 self.todo['url'] = url 133 transport = self.getHTTPTransport(url) 142 transport = self.getHTTPTransport(url) 143 if not transport: 144 self.displayActionMenu() 145 return 134 146 self.wallet.addCurrency(transport) 135 147 self.displayWalletMenu() … … 160 172 161 173 transport = self.getHTTPTransport(url) 174 if not transport: 175 self.displayActionMenu() 176 return 177 162 178 self.wallet.mintCoins(transport,amount,target) 163 179 coinsound.play() … … 178 194 179 195 transport = self.getHTTPTransport(url) 196 if not transport: 197 self.displayActionMenu() 198 return 199 180 200 self.wallet.redeemCoins(transport,amount,target) 181 201 self.displayWalletMenu() … … 185 205 cdd,alreadythere = self.getCurrentCurrency() 186 206 transport = self.getHTTPTransport(cdd.issuerServiceLocation) 207 if not transport: 208 self.displayActionMenu() 209 return 210 187 211 self.wallet.freshenUp(transport,cdd) 188 coinsound.play()212 #coinsound.play() 189 213 self.displayWalletMenu() 190 214 … … 197 221 if method ==0: 198 222 transport = self.getHTTPTransport(cdd.issuerServiceLocation) 223 if not transport: 224 self.displayActionMenu() 225 return 226 199 227 self.receiveCoinsBT(transport) 228 200 229 else: 201 230 transport = self.getHTTPTransport(cdd.issuerServiceLocation) 231 if not transport: 232 self.displayActionMenu() 233 return 234 202 235 self.receiveCoinsHTTP(transport,walletport) 203 236 … … 208 241 209 242 def getHTTPTransport(self,url): 210 self.startInternet() 243 if not self.startInternet(): 244 return 211 245 transport = transports.HTTPTransport(url) 212 246 return transport … … 255 289 answer = self.wallet.listenSum(message) 256 290 if message.header == 'SpendRequest': 257 answer = self.wallet.listenSpend( message,transport)291 answer = self.wallet.listenSpend(transport,message) 258 292 self.send_response(200) 259 293 self.send_header("Content-type", "text/plain") … … 265 299 266 300 OCHandler.wallet = self.wallet 267 self.startInternet() 301 if not self.startInternet(): 302 return 268 303 269 304 self.httpd = StoppableHTTPServer(("",port),OCHandler) … … 380 415 url = 'http://%s:%s' % (url,walletport) 381 416 transport = self.getHTTPTransport(url) 417 if not transport: 418 self.displayActionMenu() 419 return 382 420 self.wallet.spendCoins(transport,cdd.currencyId,amount,target) 383 421 else: … … 413 451 aps.sort() 414 452 apid = appuifw.popup_menu(aps,u'select access point') 453 if apid == None: 454 return None 415 455 self.feedback(u'Preparing internet access:setting access point') 416 456 … … 426 466 s.connect(('www.google.com',80)) 427 467 self.ip = s.getsockname()[0] 428 468 return True 429 469 430 470 … … 515 555 #Try to use a password on the data file. Repeat till its sucessfully loaded 516 556 password = '' 517 while 1:557 while 0: #don't use the password protected storage, too slow atm. 518 558 password = appuifw.query(u'password','text') 519 559 … … 530 570 appuifw.note(u'wrong password','error') 531 571 pass 572 storage = oc2storage.Storage() 573 storage.setFilename(storagepath+'wallet.bin') 574 tmp = open(storagepath+'wallet.bin') 575 tmpcontent = tmp.read() 576 tmp.close() 577 if tmpcontent.startswith('salt'): 578 os.remove(storagepath+'wallet.bin') 579 storage.restore() 580 581 582 583 584 532 585 533 586 #Load the rest of the libs -
trunk/sandbox/jhb/oc2/testissuer.py
r296 r320 52 52 return host 53 53 54 print 'Starting up server '54 print 'Starting up server on port %s ' % port 55 55 Handler.issuer = issuer 56 56 Handler.mint = mint -
trunk/sandbox/jhb/oc2/transports.py
r319 r320 69 69 def __init__(self, *args): 70 70 self.results = list(args) 71 71 self.debug = 0 72 72 def __call__(self,message): 73 if self.debug: 74 import pdb; pdb.set_trace() 73 75 result = self.results.pop(0) 74 76 … … 79 81 return method(*args) 80 82 81 elif callable(result):83 elif not isinstance(result,messages.Message) and callable(result): 82 84 return result(message) 83 85 -
trunk/sandbox/jhb/oc2/wallet.py
r319 r320 39 39 self.feedback('Talking to issuer: fetching latest CDD') 40 40 response = transport(messages.AskLatestCDD()) 41 if not isinstance(response,messages.GiveLatestCDD): 42 raise Exception, 'Not a valid message' 43 if not response.cdd.masterPubKey.verifyContainerSignature(response.cdd): 44 raise Exception, 'Could not verify cdd' 41 45 return response.cdd 42 46 43 47 44 def fetchMintKeys(self,transport, denominations=None,keyids=None):48 def fetchMintKeys(self,transport,cdd,denominations=None,keyids=None): 45 49 if denominations and keyids: 46 raise "you can't ask for denominations and keyids at the same time"50 raise Exception, "you can't ask for denominations and keyids at the same time" 47 51 if not (denominations or keyids): 48 raise "you need to ask at least for one"52 raise Exception, "you need to ask at least for one" 49 53 message = messages.FetchMintKeys() 50 message.denominations = [str(d) for d in denominations] 54 denominations = [str(d) for d in denominations] 55 message.denominations = denominations 51 56 message.keyids = keyids 52 57 self.feedback('Talking to issuer: fetching mintkeys') 53 58 response = transport(message) 59 54 60 if response.header == 'MINTING_KEY_FAILURE': 55 61 raise message 56 else: 57 return response.keys 62 63 if not isinstance(response,messages.GiveMintKeys): 64 raise Exception, 'Not a valid message' 65 66 if set(denominations).difference(set([key.denomination for key in response.keys])): 67 raise Exception, 'Not all denominations met' 68 69 for key in response.keys: 70 if not cdd.masterPubKey.verifyContainerSignature(key): 71 raise Exception, 'Could not verify key' 72 return response.keys 73 58 74 59 75 … … 119 135 120 136 121 def listenSpend(self, message,transport=None):137 def listenSpend(self,transport,message): 122 138 tid = message.transactionId 123 139 amount = sum([int(m.denomination) for m in message.coins]) … … 174 190 175 191 def pickForSpending(self,amount,coins): 176 tmp = [( c.denomination,c) for c in coins]192 tmp = [(int(c.denomination),c) for c in coins] 177 193 tmp.sort() 178 194 tmp.reverse() 179 coins = [t[1] for t in tmp]195 mycoins = [t[1] for t in tmp] 180 196 picked = [] 181 for coin in coins:197 for coin in mycoins: 182 198 sumpicked = sum([int(c.denomination) for c in picked]) 183 199 if sumpicked < amount: … … 220 236 def prepareBlanks(self,transport,cdd,values): 221 237 wanted = list(set(values)) #what mkcs do we want 222 keys = self.fetchMintKeys(transport, denominations=wanted)238 keys = self.fetchMintKeys(transport,cdd,denominations=wanted) 223 239 mkcs = {} 224 240 for mkc in keys: 225 241 if not cdd.masterPubKey.verifyContainerSignature(mkc): 226 raise 'Invalid signature onmkc'242 raise Exception, 'Could not verify mkc' 227 243 mkcs[mkc.denomination] = mkc 228 244
