Changeset 327 for trunk

Show
Ignore:
Timestamp:
06/15/09 02:46:06 (3 years ago)
Author:
ocjhb
Message:

webwallet can now do basic actions

Location:
trunk/sandbox/jhb
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/sandbox/jhb/mobile/ocwallet.py

    r324 r327  
    434434 
    435435        if method == 1: 
    436             url = appuifw.query(u'address','text',u'192.168.2.105') 
     436            url = appuifw.query(u'address','text',u'192.168.2.105:%s' % walletport) 
    437437            if not url: 
    438438                return                 
    439439            else:      
    440                 url = 'http://%s:%s' % (url,walletport) 
     440                url = 'http://%s' % (url) 
    441441            transport = self.getHTTPTransport(url) 
    442442            if not transport: 
  • trunk/sandbox/jhb/oc2/testwallet.py

    r279 r327  
    44>>> w = wallet.Wallet(storage.Storage().setFilename('data/test.bin')) 
    55>>> import transports 
    6 >>> transport = transports.HTTPTransport('http://localhost:9090/') 
    7 >>> w.buyCoins(transport,97,'foobar') 
    8  
     6>>> transport = transports.HTTPTransport('http://baach.de:9090/') 
     7>>> w.addCurrency(transport) 
     8>>> w.mintCoins(transport,13,'foobar') 
     9>>> transport = transports.HTTPTransport('http://localhost:9091/wallet.cgi') 
     10>>> w.spendCoins(transport,'BaachBuck',5,'foobar') 
    911 
    1012""" 
  • trunk/sandbox/jhb/oc2/wallet.py

    r322 r327  
    44import messages 
    55import coinsplitting 
     6import sys 
    67 
    78class Wallet(Entity): 
     
    3031    def addIncoming(self,message): 
    3132        self.storage.setdefault('incoming',{})[message.transactionId] = message 
    32          
     33        #sys.stderr.write(str(self.storage.filename)) 
     34 
    3335    def getIncoming(self,tid): 
    34         return self.storage.setdefault('incoming',{}).get(tid,None) 
     36        #sys.stderr.write(str(tid))  
     37        #sys.stderr.write(str(self.storage.filename))  
     38        transaction = self.storage.setdefault('incoming',{}).get(tid,None) 
     39        if transaction != None: 
     40            del(self.storage['incoming'][tid]) 
     41        return transaction             
    3542 
    3643         
     
    180187                out.append((cdd,amount)) 
    181188            except: 
    182                 del(self.storage[key]) 
     189                #del(self.storage[key]) XXX why was that? 
     190                pass 
    183191        return out             
    184192 
     
    333341         
    334342        self.feedback(u'Spending coins: wating for confirmation') 
    335         self.announceSum(transport,tid,amount,target) 
     343        response = self.announceSum(transport,tid,amount,target) 
    336344        self.feedback(u'Spending coins: wating for other side') 
    337345        response = self.requestSpend(transport,tid,picked) 
  • trunk/sandbox/jhb/webwallet/cgi/wallet.cgi

    r326 r327  
    2222        self.wallet = wallet.Wallet(storage) 
    2323        self.output = [] 
     24        self.mimetype = 'text/html' 
    2425 
    2526    def out(self,text): 
    2627        if type(text) != type(''): 
    2728            text = str(text) 
    28         self.output.append(text+'<br/>') 
     29        self.output.append(text) 
    2930         
    3031    def printout(self): 
    31         print """Content-type:text/html""" 
    32         print 
    33         print '\n'.join(self.output) 
     32        print """Content-type:%s""" % self.mimetype 
     33        print "\r" 
     34        if self.mimetype == 'text/html': 
     35            print '<br/>\n'.join(self.output) 
     36        else: 
     37            print '\n'.join(self.output) 
    3438 
    3539    def getCurrency(self,currencyId): 
     
    3741 
    3842    def getCurrencies(self): 
    39         return [(cdd.currencyId,(cdd,amount)) for cdd,amount in w.wallet.listCurrencies()] 
     43        return [(cdd.currencyId,(cdd,amount)) for cdd,amount in self.wallet.listCurrencies()] 
    4044 
    4145    def dispatchRequest(self): 
     
    4448        self.action = action = self.form.getfirst('action','') 
    4549        self.method = method = self.env['REQUEST_METHOD'].lower() 
    46          
     50        
     51        postmapping = dict(addcurrency = self.addCurrency, 
     52                           mint = self.mintCoins, 
     53                           redeem = self.redeemCoins, 
     54                           delcurrency = self.delCurrency, 
     55                           spend = self.spendCoins) 
     56 
     57        getmapping = dict(addcurrency = self.displayAddCurrency, 
     58                          mint = self.displayMint, 
     59                          redeem = self.displayRedeem, 
     60                          spend = self.displaySpend, 
     61                          delcurrency = self.displayDelCurrency, 
     62                          freshenup = self.freshenUp) 
    4763 
    4864        if method == 'post': 
    49             if action == 'addcurrency': 
    50                 self.addCurrency() 
    51             elif action == 'mint': 
    52                 self.mintCoins() 
    53             elif action == '': 
    54                 pass  
     65            if postmapping.has_key(action): 
     66                postmapping[action]() 
     67            else: 
     68                self.receiveCoins() 
    5569 
    5670        elif method == 'get': 
    57             if action == '': 
    58                 #basically nothing happened 
     71            if getmapping.has_key(action): 
     72                getmapping[action]() 
     73            else: 
    5974                self.displayMain() 
    60             elif action == 'addcurrency': 
    61                 self.displayAddCurrency() 
    62             elif action == 'mint': 
    63                 self.displayMint() 
    64  
    65  
    66     def addCurrency(self): 
    67         url = self.form.getfirst('url','') 
    68         if url: 
    69             transport = transports.HTTPTransport(url) 
    70             w.wallet.addCurrency(transport) 
    71             storage.save() 
    72         self.displayMain()         
    73  
    74  
    75     def mintCoins(self): 
    76         amount = int(self.form.getfirst('amount',1)) 
    77         reference = self.form.getfirst('reference') 
    78         cdd,wehave = self.getCurrency(self.form.getfirst('currencyId')) 
    79         transport = transports.HTTPTransport(cdd.issuerServiceLocation) 
    80         self.wallet.mintCoins(transport,amount,reference) 
    81         self.storage.save() 
    82         self.displayMain() 
     75 
     76 
     77################################ main ################################################ 
    8378 
    8479 
     
    9085        for cdd,amount in currencies: 
    9186            entry = """ 
    92             <p>%s <b href='%s'>%ss</b><br/> 
    93                 <a href='%s?action=mint&currencyId=%s'>Withdraw</a> 
     87            <p>%(amount)s <b href='%(isl)s'>%(cid)ss</b><br/> 
     88                <a href='%(baseurl)s?action=spend&currencyId=%(cid)s'>Pay</a> 
     89                <a href='%(baseurl)s?action=freshenup&currencyId=%(cid)s'>Refresh</a> 
     90                <a href='%(baseurl)s?action=mint&currencyId=%(cid)s'>Withdraw</a> 
     91                <a href='%(baseurl)s?action=redeem&currencyId=%(cid)s'>Redeem</a> 
     92                <a href='%(baseurl)s?action=delcurrency&currencyId=%(cid)s'>Remove</a> 
    9493            </p> 
    95             """ % (amount,cdd.issuerServiceLocation,cdd.currencyId,baseurl,cdd.currencyId) 
     94            """ % dict(amount=amount, 
     95                       isl=cdd.issuerServiceLocation, 
     96                       cid=cdd.currencyId, 
     97                       baseurl=baseurl) 
    9698            items.append(entry) 
    9799        items = '\n'.join(items) 
     
    106108        self.out(html) 
    107109 
     110############################### add a currency #################################### 
     111 
     112 
     113    def addCurrency(self): 
     114        url = self.form.getfirst('url','') 
     115        if url: 
     116            transport = transports.HTTPTransport(url) 
     117            self.wallet.addCurrency(transport) 
     118            self.storage.save() 
     119        self.displayMain()         
     120 
    108121    def displayAddCurrency(self): 
    109122        html=""" 
     
    120133        self.out(html) 
    121134 
     135 
     136 
     137############################### delete a currency #################################### 
     138 
     139    def displayDelCurrency(self): 
     140        currencyId = self.form.getfirst('currencyId','') 
     141        cdd,amount = self.getCurrency(currencyId) 
     142        html=""" 
     143        <html><body> 
     144        <h2>Remove  %s</h2> 
     145        <form action='%s' method='post'> 
     146            <p>Really really delete %s with %s coins - there is no way to recover</p> 
     147            <p><input type='submit' value='Remove %ss'/> 
     148            or 
     149             
     150            <a href='%s'>go back to main screen</a> 
     151            </p> 
     152            <input type='hidden' name='action' value='delcurrency'/> 
     153            <input type='hidden' name='currencyId' value='%s'/> 
     154        </form> 
     155        </body></html> 
     156        """ % (currencyId,baseurl,currencyId,amount,currencyId,baseurl,currencyId) 
     157        self.out(html) 
     158 
     159    def delCurrency(self): 
     160        id = self.form.getfirst('currencyId','') 
     161        self.wallet.deleteCurrency(id) 
     162        self.storage.save() 
     163        self.displayMain() 
     164 
     165 
     166############################### minting #################################### 
     167 
     168    def mintCoins(self): 
     169        amount = int(self.form.getfirst('amount',1)) 
     170        reference = self.form.getfirst('reference') 
     171        cdd,wehave = self.getCurrency(self.form.getfirst('currencyId')) 
     172        transport = transports.HTTPTransport(cdd.issuerServiceLocation) 
     173        self.wallet.mintCoins(transport,amount,reference) 
     174        self.storage.save() 
     175        self.displayMain() 
     176 
     177 
    122178    def displayMint(self): 
    123179        currencyId = self.form.getfirst('currencyId','coin') 
     
    127183        <form action='%s' method='post'> 
    128184            How many <b>%ss</b><br> 
    129             <input type='text' name='amount' value='1' /><br> 
    130             Reference<br> 
     185            <input type='number' name='amount' value='1' /><br> 
     186            Optional message<br> 
    131187            <input type='text' name='reference' value='secret' /><br> 
    132188            <input type='submit' /> 
     
    139195        self.out(html) 
    140196 
    141          
     197############################### redeem #################################### 
     198 
     199    def redeemCoins(self): 
     200        amount = int(self.form.getfirst('amount',1)) 
     201        reference = self.form.getfirst('reference') 
     202        cdd,wehave = self.getCurrency(self.form.getfirst('currencyId')) 
     203        transport = transports.HTTPTransport(cdd.issuerServiceLocation) 
     204        self.wallet.redeemCoins(transport,amount,reference) 
     205        self.storage.save() 
     206        self.displayMain() 
     207 
     208 
     209    def displayRedeem(self): 
     210        currencyId = self.form.getfirst('currencyId','coin') 
     211        html=""" 
     212        <html><body> 
     213        <h2>Redeem coins</h2> 
     214        <form action='%s' method='post'> 
     215            How many <b>%ss</b><br> 
     216            <input type='number' name='amount' value='1' /><br> 
     217            Optional message<br> 
     218            <input type='text' name='reference' value='secret' /><br> 
     219            <input type='submit' /> 
     220            <input type='hidden' name='action' value='redeem'/> 
     221            <input type='hidden' name='currencyId' value='%s'/> 
     222        </form> 
     223        </body></html> 
     224 
     225        """ % (baseurl,currencyId,currencyId) 
     226        self.out(html) 
     227 
     228############################### spend #################################### 
     229 
     230    def spendCoins(self): 
     231        amount = int(self.form.getfirst('amount',1)) 
     232        reference = self.form.getfirst('reference') 
     233        url = self.form.getfirst('url') 
     234        url = 'http://%s:9091' % url 
     235        cid = self.form.getfirst('currencyId') 
     236        transport = transports.HTTPTransport(url) 
     237        self.wallet.spendCoins(transport,cid,amount,reference) 
     238        self.storage.save() 
     239        self.displayMain() 
     240 
     241 
     242    def displaySpend(self): 
     243        currencyId = self.form.getfirst('currencyId','coin') 
     244        html=""" 
     245        <html><body> 
     246        <h2>Pay someone</h2> 
     247        <form action='%s' method='post'> 
     248            Recipient<br/> 
     249            <input type='text' name='url' value='192.168.1.66' /><br> 
     250            How many <b>%ss</b><br> 
     251            <input type='number' name='amount' value='1' /><br> 
     252            Optional message<br> 
     253            <input type='text' name='reference' value='secret' /><br> 
     254            Please make sure the other side is ready to accept!<br> 
     255            <input type='submit' /> 
     256            <input type='hidden' name='action' value='spend'/> 
     257            <input type='hidden' name='currencyId' value='%s'/> 
     258        </form> 
     259        </body></html> 
     260 
     261        """ % (baseurl,currencyId,currencyId) 
     262        self.out(html) 
     263 
     264############################### freshenUp #################################### 
     265 
     266    def freshenUp(self): 
     267        cdd,wehave = self.getCurrency(self.form.getfirst('currencyId')) 
     268        transport = transports.HTTPTransport(cdd.issuerServiceLocation) 
     269        self.wallet.freshenUp(transport,cdd) 
     270        self.storage.save() 
     271        self.displayMain() 
     272 
     273 
     274############################### freshenUp #################################### 
     275 
     276    def receiveCoins(self): 
     277        message = transports.createMessage(self.form.list[0].name) 
     278 
     279        if message.header == 'SumAnnounce': 
     280            answer = self.wallet.listenSum(message) 
     281        if message.header == 'SpendRequest': 
     282            cdd,wehave = self.getCurrency(message.coins[0].currencyId) 
     283            transport = transports.HTTPTransport(cdd.issuerServiceLocation) 
     284            answer = self.wallet.listenSpend(transport,message) 
     285        self.storage.save() 
     286        self.mimetype='text/plain' 
     287        self.out(answer.toString(True)) 
     288 
    142289baseserver = "http://%s:%s" % (os.environ['SERVER_NAME'],os.environ['SERVER_PORT']) 
    143290baseurl = os.environ['SCRIPT_NAME'] 
    144  
    145  
    146291 
    147292storage = oc2storage.Storage() 
     
    150295w = CGIWallet(storage) 
    151296w.dispatchRequest() 
    152  
    153 #out('=' * 80) 
    154 #for key,value in sorted(env.items()): 
    155 #    #out("%50s: %s" % (key,value)) 
    156 #    pass 
    157 #out(form.list) 
    158297w.printout() 
  • trunk/sandbox/jhb/webwallet/cgiserver.py

    r325 r327  
    1414Handler.address_string = address_string 
    1515 
    16 PORT = 8000 
     16PORT = 9091 
    1717 
    1818