def get(self):

        isAdmin = False
        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            isAdmin = users.is_current_user_admin()
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'

        parameters = Parameters.get_or_insert('DefaultConfig')

        template_values = {
            'Title': 'HDForwarder documentation',
            'cssHTML': includes.get_CssHTML(),
            'metaHTML': includes.get_MetaHTML(),
            'scriptsHTML': includes.get_ScriptsHTML(),
            'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin),
            'logoHTML': includes.get_LogoHTML(),
            'footerHTML': includes.get_FooterHTML(),
            'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),
        }

        template = JINJA_ENVIRONMENT.get_template('documentation.html')

        self.response.write(template.render(template_values))
Example #2
0
    def get(self):

        isAdmin = False
        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            isAdmin = users.is_current_user_admin()
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'

        parameters = Parameters.get_or_insert('DefaultConfig')

        template_values = {
            'Title': 'Distributer documentation',
            'cssHTML': includes.get_CssHTML(),
            'metaHTML': includes.get_MetaHTML(),
            'scriptsHTML': includes.get_ScriptsHTML(),
            'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin),
            'logoHTML': includes.get_LogoHTML(),
            'footerHTML': includes.get_FooterHTML(),
            'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),
        }

        template = JINJA_ENVIRONMENT.get_template('documentation.html')

        self.response.write(template.render(template_values))
    def get(self):
        parameters = Parameters.get_or_insert('DefaultConfig')

        template_values = {
            'Title':
            'Blockchaindata documentation',
            'cssHTML':
            includes.get_CssHTML(),
            'metaHTML':
            includes.get_MetaHTML(),
            'scriptsHTML':
            includes.get_ScriptsHTML(),
            'navigationHTML':
            includes.get_NavigationHTML(Spellbook(parameters)),
            'logoHTML':
            includes.get_LogoHTML(),
            'footerHTML':
            includes.get_FooterHTML(),
            'googleAnalyticsHTML':
            includes.get_GoogleAnalyticsHTML(parameters.trackingID),
        }

        template = JINJA_ENVIRONMENT.get_template('documentation.html')

        self.response.write(template.render(template_values))
Example #4
0
    def get(self):
        error = ''
        isAdmin = False

        forwarderID = 0
        forwarder = Forwarder(parent=forwarders_key())
        if self.request.get('forwarderID'):
            try:
                forwarderID = int(self.request.get('forwarderID'))
            except ValueError:
                error = 'forwarderID must be an integer'

            if error == '':
                forwarder = Forwarder.get_by_id(forwarderID,
                                                parent=forwarders_key())

        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            isAdmin = users.is_current_user_admin()
            if forwarderID == 0:
                forwarder.userID = users.get_current_user().user_id()
                forwarder.creator = users.get_current_user().nickname()
                forwarder.creatorEmail = users.get_current_user().email()
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'

        parameters = Parameters.get_or_insert('DefaultConfig')
        template_values = {
            'url':
            url,
            'url_linktext':
            url_linktext,
            'forwarder':
            forwarder,
            'forwarderID':
            forwarderID,
            'cssHTML':
            includes.get_CssHTML(),
            'metaHTML':
            includes.get_MetaHTML(),
            'scriptsHTML':
            includes.get_ScriptsHTML(),
            'navigationHTML':
            includes.get_NavigationHTML(url, url_linktext,
                                        Spellbook(parameters), isAdmin),
            'logoHTML':
            includes.get_LogoHTML(),
            'footerHTML':
            includes.get_FooterHTML(),
            'googleAnalyticsHTML':
            includes.get_GoogleAnalyticsHTML(parameters.trackingID),
        }

        template = JINJA_ENVIRONMENT.get_template('forwarder.html')
        self.response.write(template.render(template_values))
Example #5
0
    def get(self):

        forwarderID = 0
        status = 'All'
        if self.request.get('status') in ['Pending', 'Active', 'Disabled']:
            status = self.request.get('status')

        if status != 'All':
            forwarders_query = Forwarder.query(
                Forwarder.status == status).order(-Forwarder.date)
        else:
            forwarders_query = Forwarder.query().order(-Forwarder.date)

        forwarders = forwarders_query.fetch()

        isAdmin = False
        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            isAdmin = users.is_current_user_admin()
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'

        parameters = Parameters.get_or_insert('DefaultConfig')

        template_values = {
            'forwarders':
            forwarders,
            'forwarderID':
            forwarderID,
            'status':
            status,
            'cssHTML':
            includes.get_CssHTML(),
            'metaHTML':
            includes.get_MetaHTML(),
            'scriptsHTML':
            includes.get_ScriptsHTML(),
            'navigationHTML':
            includes.get_NavigationHTML(url, url_linktext,
                                        Spellbook(parameters), isAdmin),
            'logoHTML':
            includes.get_LogoHTML(),
            'footerHTML':
            includes.get_FooterHTML(),
            'googleAnalyticsHTML':
            includes.get_GoogleAnalyticsHTML(parameters.trackingID),
        }

        template = JINJA_ENVIRONMENT.get_template('admin.html')
        self.response.write(template.render(template_values))
    def get(self):
        parameters = Parameters.get_or_insert('DefaultConfig')
        template_values = {
            'Title': 'Blockchaindata',
            'cssHTML': includes.get_CssHTML(),
            'metaHTML': includes.get_MetaHTML(),
            'scriptsHTML': includes.get_ScriptsHTML(),
            'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)),
            'logoHTML': includes.get_LogoHTML(),
            'footerHTML': includes.get_FooterHTML(),
            'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),
        }

        template = JINJA_ENVIRONMENT.get_template('index.html')
        self.response.write(template.render(template_values))
    def get(self):
        error = ''
        isAdmin = False

        forwarderID = 0
        forwarder = Forwarder(parent=forwarders_key())
        if self.request.get('forwarderID'):
            try:
                forwarderID = int(self.request.get('forwarderID'))
            except ValueError:
                error = 'forwarderID must be an integer'

            if error == '':
                forwarder = Forwarder.get_by_id(forwarderID, parent=forwarders_key())

        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            isAdmin = users.is_current_user_admin()
            if forwarderID == 0:
                forwarder.userID = users.get_current_user().user_id()
                forwarder.creator = users.get_current_user().nickname()
                forwarder.creatorEmail = users.get_current_user().email()
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'


        parameters = Parameters.get_or_insert('DefaultConfig')
        template_values = {
            'url': url,
            'url_linktext': url_linktext,

            'forwarder': forwarder,
            'forwarderID': forwarderID,

            'cssHTML': includes.get_CssHTML(),
            'metaHTML': includes.get_MetaHTML(),
            'scriptsHTML': includes.get_ScriptsHTML(),
            'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin),
            'logoHTML': includes.get_LogoHTML(),
            'footerHTML': includes.get_FooterHTML(),
            'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),
        }

        template = JINJA_ENVIRONMENT.get_template('forwarder.html')
        self.response.write(template.render(template_values))
    def get(self):

        forwarderID = 0
        status = 'All'
        if self.request.get('status') in ['Pending', 'Active', 'Disabled']:
            status = self.request.get('status')

        if status != 'All':
            forwarders_query = Forwarder.query(Forwarder.status == status).order(-Forwarder.date)
        else:
            forwarders_query = Forwarder.query().order(-Forwarder.date)

        forwarders = forwarders_query.fetch()

        isAdmin = False
        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            isAdmin = users.is_current_user_admin()
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'

        parameters = Parameters.get_or_insert('DefaultConfig')
            
        template_values = {
            'forwarders': forwarders,
            'forwarderID': forwarderID,
            'status': status,

            'cssHTML': includes.get_CssHTML(),
            'metaHTML': includes.get_MetaHTML(),
            'scriptsHTML': includes.get_ScriptsHTML(),
            'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin),
            'logoHTML': includes.get_LogoHTML(),
            'footerHTML': includes.get_FooterHTML(),
            'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),
        }

        template = JINJA_ENVIRONMENT.get_template('admin.html')
        self.response.write(template.render(template_values))
Example #9
0
    def get(self):
        isAdmin = False
        error = ''
        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            isAdmin = users.is_current_user_admin()
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'

        distributerID = 0
        distributer = Distributer(parent=distributers_key())
        if self.request.get('distributerID'):
            try:
                distributerID = int(self.request.get('distributerID'))
                distributer = Distributer.get_by_id(distributerID, parent=distributers_key())
            except ValueError:
                error = 'distributerID must be a integer'




        parameters = Parameters.get_or_insert('DefaultConfig')
        template_values = {
            'distributer': distributer,
            'distributerID': distributerID,

            'url': url,
            'url_linktext': url_linktext,
            'cssHTML': includes.get_CssHTML(),
            'metaHTML': includes.get_MetaHTML(),
            'scriptsHTML': includes.get_ScriptsHTML(),
            'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin),
            'logoHTML': includes.get_LogoHTML(),
            'footerHTML': includes.get_FooterHTML(),
            'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),
        }

        template = JINJA_ENVIRONMENT.get_template('editDistributer.html')
        self.response.write(template.render(template_values))
Example #10
0
    def get(self):
        error = ''
        parameters = Parameters.get_or_insert('DefaultConfig')
        self.address = ''
        self.regBlock = 0
        distribution = []
        if self.request.get('address') != '':
            address = self.request.get('address')
            if validAddress(address):
                self.address = self.request.get('address')
            else:
                error = "Invalid address: " + address

        if self.request.get('regBlock') != '':
            try:
                self.regBlock = int(self.request.get('regBlock'))
            except ValueError:
                error = "Block for SIL must be a positive integer"

        url = parameters.blockchaindataURL + '/latestBlock'
        try:
            ret = urllib2.urlopen(urllib2.Request(url))
            data = json.loads(ret.read())
        except:
            data = {}

        latestBlock = 0
        if 'success' in data and data['success'] == 1:
            latestBlock = data['latestBlock']['height']
        else:
            error = 'Unable to retrieve latest block'
            logging.error(error)

        self.block = 0
        if self.request.get('block') != '':
            try:
                self.block = int(self.request.get('block'))
            except:
                error = "Block must be a positive integer"
        else:
            self.block = latestBlock

        hash = ''
        intHash = ''
        if latestBlock >= self.block and latestBlock > 0 and error == '':
            url = parameters.blockchaindataURL + '/block?block=' + str(
                self.block)
            try:
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
            except:
                data = {}

            if 'success' in data and data['success'] == 1:
                hash = data['block']['hash']
                intHash = int(hash, 16)
            else:
                error = 'Unable to retrieve hash'
                logging.error(error)

        self.xpub = ''
        if self.request.get('xpub') != '':
            xpub = self.request.get('xpub')
            if validXPUB(xpub):
                self.xpub = self.request.get('xpub')
            else:
                error = "Invalid XPUB key: " + xpub

        self.metric = 'SIL'
        if self.request.get('metric') != '' and self.request.get('metric') in [
                'LBL', 'LRL', 'LSL'
        ]:
            self.metric = self.request.get('metric')

        if self.address != '' and error == '':
            distribution = self.getDistribution(self.address, self.regBlock,
                                                self.xpub, self.metric)
            distribution = self.addCumulative(distribution)

        nDistribution = len(distribution)

        strFloat = '0.'
        for i in range(len(str(intHash)) - 1, -1, -1):
            strFloat += str(intHash)[i]
        rand = float(strFloat)

        winnerIndex = -1
        winnerAddress = ''
        values = []
        totalValue = 0
        if nDistribution > 0 and latestBlock >= self.block:
            values = self.extractValues(distribution)
            totalValue = sum(values)
            winnerIndex = getWinnerIndex(rand, values)
            winnerAddress = distribution[winnerIndex][0]

        if self.request.get('format') == 'json' and error == '':
            self.response.write(
                json.dumps({
                    'success': 1,
                    'winner': {
                        'distribution': distribution,
                        'winnerAddress': winnerAddress,
                        'winnerIndex': winnerIndex,
                        'intHash': intHash,
                        'random': rand,
                        'target': totalValue * rand
                    }
                }))

        elif self.request.get('format') == 'json' and error != '':
            self.response.write(json.dumps({'success': 0, 'error': error}))

        else:
            parameters = Parameters.get_or_insert('DefaultConfig')
            template_values = {
                'Title':
                'Proportional Random',
                'address':
                self.address,
                'regBlock':
                self.regBlock,
                'block':
                self.block,
                'xpub':
                self.xpub,
                'metric':
                self.metric,
                'latestBlock':
                latestBlock,
                'hash':
                hash,
                'intHash':
                intHash,
                'rand':
                rand,
                'totalValue':
                totalValue,
                'winnerIndex':
                winnerIndex,
                'winnerAddress':
                winnerAddress,
                'distribution':
                distribution,
                'nDistribution':
                nDistribution,
                'error':
                error,
                'cssHTML':
                includes.get_CssHTML(),
                'metaHTML':
                includes.get_MetaHTML(),
                'scriptsHTML':
                includes.get_ScriptsHTML(),
                'navigationHTML':
                includes.get_NavigationHTML(Spellbook(parameters)),
                'logoHTML':
                includes.get_LogoHTML(),
                'footerHTML':
                includes.get_FooterHTML(),
                'googleAnalyticsHTML':
                includes.get_GoogleAnalyticsHTML(parameters.trackingID),
            }

            template = JINJA_ENVIRONMENT.get_template('index.html')

            self.response.write(template.render(template_values))
Example #11
0
    def get(self):
        parameters = Parameters.get_or_insert('DefaultConfig')
        error = ''

        self.proposalAddress = ''
        if self.request.get('proposalAddress') != '':
            address = self.request.get('proposalAddress')
            if validAddress(address):
                self.proposalAddress = address
            else:
                error = "Invalid address: " + address

        url = parameters.blockchaindataURL + '/latestBlock'
        data = {}
        try:
            ret = urllib2.urlopen(urllib2.Request(url))
            data = json.loads(ret.read())
        except:
            data = {}

        latestBlock = 0
        if 'success' in data and data['success'] == 1:
            latestBlock = data['latestBlock']['height']
        else:
            error = 'Unable to retrieve latest block'

        proposalBlock = 0
        if self.request.get('proposalBlock') != '':
            try:
                proposalBlock = int(self.request.get('proposalBlock'))
            except ValueError:
                error = "proposalBlock must be a positive integer"
        else:
            proposalBlock = latestBlock

        weights = ''
        if self.request.get('weights') in [
                'Value', 'Equal', 'SIL', 'LBL', 'LRL', 'LSL'
        ]:
            weights = self.request.get('weights')
        elif self.request.get('weights') != '':
            error = 'Incorrect weights'

        self.registrationAddress = ''
        if self.request.get('regAddress') != '':
            regAddress = self.request.get('regAddress')
            if validAddress(regAddress):
                self.registrationAddress = self.request.get('regAddress')
            else:
                error = "Invalid regAddress: " + regAddress

        self.registrationBlockHeight = latestBlock
        if self.request.get('regBlock') != '':
            try:
                self.registrationBlockHeight = int(
                    self.request.get('regBlock'))
            except ValueError:
                error = "regBlock must be a positive integer"
        if self.registrationBlockHeight < 0:
            error = "regBlock must be a positive integer"

        self.registrationXPUB = ''
        if self.request.get('regXPUB') != '':
            regXPUB = self.request.get('regXPUB')
            if validXPUB(regXPUB):
                self.registrationXPUB = regXPUB
            else:
                error = "Invalid regXPUB: " + regXPUB

        self.weightValues = []
        if weights == 'SIL' and self.registrationAddress != '' and self.registrationBlockHeight != 0:

            url = parameters.simplifiedInputsListURL + '/SIL?format=json&address=' + self.registrationAddress + '&block=' + str(
                self.registrationBlockHeight)
            data = {}
            try:
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
            except:
                error = 'Unable to retrieve SIL'

            if 'success' in data and data['success'] == 1:
                self.weightValues = data['SIL']

        elif weights in [
                'LBL', 'LRL', 'LSL'
        ] and self.registrationAddress != '' and self.registrationBlockHeight != 0 and self.registrationXPUB != '':
            url = parameters.blocklinkerURL + '/LinkedList?format=json&address=' + self.registrationAddress + '&block=' + str(
                self.registrationBlockHeight
            ) + '&xpub=' + self.registrationXPUB + '&metric=' + weights
            data = {}
            try:
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
            except:
                error = 'Unable to retrieve Linked values'

            if 'success' in data and data['success'] == 1:
                if weights == 'LBL':
                    self.weightValues = data['LBL']
                elif weights == 'LRL':
                    self.weightValues = data['LRL']
                elif weights == 'LSL':
                    self.weightValues = data['LSL']

        digits = 1
        if self.request.get('digits') != '':
            try:
                digits = int(self.request.get('digits'))
            except ValueError:
                error = "Digits must be a positive integer"
        if digits <= 0:
            error = "Digits must be a positive integer"
            digits = 1

        self.proposal = ''
        if self.request.get('proposal') != '':
            self.proposal = self.request.get('proposal')

        self.options = []
        self.optionsDict = {}
        strOptions = ''
        if self.request.get('options') != '':
            strOptions = self.request.get('options')
            self.options = strOptions.split('|')
            i = 0
            for option in self.options:
                self.optionsDict[str(i)] = option
                i += 1

        TXS = []
        if self.proposalAddress != '':
            url = parameters.blockchaindataURL + '/transactions?format=json&address=' + self.proposalAddress + '&block=' + str(
                proposalBlock)
            data = {}
            try:
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
            except:
                data = {}

            if 'success' in data and data['success'] == 1:
                TXS = data['TXS']
            else:
                error = 'Unable to retrieve transactions'

        votes = self.convertTXs2Votes(TXS, proposalBlock, digits)
        nVotes = len(votes)
        results = self.calcResults(votes, weights)
        nResults = len(results)

        rows = {}
        toggle = 'Odd'
        for option in sorted(results):
            rows[option] = toggle

            if toggle == 'Odd':
                toggle = 'Even'
            elif toggle == 'Even':
                toggle = 'Odd'

        proposalHash = getProposalHash(self.proposalAddress, self.proposal,
                                       strOptions)

        if self.request.get('format') == 'json' and error == '':
            response = {'success': 1}
            response['results'] = results
            response['options'] = self.optionsDict

            response['digits'] = digits
            response['block'] = proposalBlock
            if self.proposal != '':
                response['proposal'] = self.proposal
            if self.proposalAddress != '':
                response['proposalAddress'] = self.proposalAddress
            if self.registrationAddress != '':
                response['regAddress'] = self.registrationAddress
            if self.registrationBlockHeight != '':
                response['regBlock'] = self.registrationBlockHeight
            if self.registrationXPUB != '':
                response['regXPUB'] = self.registrationXPUB
            if weights != '':
                response['weights'] = weights

            response['proposalHash'] = proposalHash

            self.response.write(json.dumps(response))

        elif self.request.get('format') == 'json' and error != '':
            self.response.write(json.dumps({'success': 0, 'error': error}))

        else:
            parameters = Parameters.get_or_insert('DefaultConfig')
            template_values = {
                'Title':
                'Bitvoter',
                'proposalAddress':
                self.proposalAddress,
                'proposalBlock':
                proposalBlock,
                'regAddress':
                self.registrationAddress,
                'regBlock':
                self.registrationBlockHeight,
                'regXPUB':
                self.registrationXPUB,
                'proposal':
                self.proposal,
                'options':
                self.optionsDict,
                'strOptions':
                strOptions,
                'latestBlock':
                latestBlock,
                'votes':
                votes,
                'nVotes':
                nVotes,
                'optionIDs':
                sorted(results, key=lambda x: int(x)),
                'results':
                results,
                'nResults':
                nResults,
                'weights':
                weights,
                'digits':
                digits,
                'evenRow':
                0,
                'error':
                error,
                'rows':
                rows,
                'cssHTML':
                includes.get_CssHTML(),
                'metaHTML':
                includes.get_MetaHTML(),
                'scriptsHTML':
                includes.get_ScriptsHTML(),
                'navigationHTML':
                includes.get_NavigationHTML(Spellbook(parameters)),
                'logoHTML':
                includes.get_LogoHTML(),
                'footerHTML':
                includes.get_FooterHTML(),
                'googleAnalyticsHTML':
                includes.get_GoogleAnalyticsHTML(parameters.trackingID),
            }

            template = JINJA_ENVIRONMENT.get_template('index.html')

            self.response.write(template.render(template_values))
Example #12
0
    def get(self):
        error = ''
        self.address = ''
        self.block = 0

        SIL = []

        if self.request.get('address') != '':
            self.address = self.request.get('address')

        if validAddress(self.address) or self.address == '':
            parameters = Parameters.get_or_insert('DefaultConfig')
            url = parameters.blockchaindataURL + '/latestBlock'
            try:
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
            except:
                data = {}

            latestBlock = 0
            if 'success' in data and data['success'] == 1:
                latestBlock = data['latestBlock']['height']
            else:
                error = 'Unable to retrieve latest block'

            self.block = latestBlock
            if self.request.get('block') != '' and self.request.get(
                    'block') != '0':
                try:
                    self.block = int(self.request.get('block'))
                except ValueError:
                    self.block = 0
                    error = "block must be a positive integer"

            txs = []
            if self.address != '' and self.block != 0:
                url = parameters.blockchaindataURL + '/transactions?format=json&address=' + self.address + '&block=' + str(
                    self.block)
                try:
                    ret = urllib2.urlopen(urllib2.Request(url))
                    data = json.loads(ret.read())
                except:
                    data = {}

                txs = []
                if 'success' in data and data['success'] == 1:
                    txs = data['TXS']

                else:
                    error = 'Unable to retrieve transactions'

            SIL = self.TXS2SIL(txs, self.block)

        else:
            error = 'Invalid address: ' + self.address

        if self.request.get('format') == 'json' and error == '':
            self.response.write(json.dumps({'success': 1, 'SIL': SIL}))

        elif self.request.get('format') == 'json' and error != '':
            self.response.write(json.dumps({'success': 0, 'error': error}))

        else:
            parameters = Parameters.get_or_insert('DefaultConfig')
            template_values = {
                'Title':
                'Simplified Inputs List',
                'address':
                self.address,
                'block':
                self.block,
                'SIL':
                SIL,
                'error':
                error,
                'nSIL':
                len(SIL),
                'totalReceived':
                self.totalReceived(SIL),
                'cssHTML':
                includes.get_CssHTML(),
                'metaHTML':
                includes.get_MetaHTML(),
                'scriptsHTML':
                includes.get_ScriptsHTML(),
                'navigationHTML':
                includes.get_NavigationHTML(Spellbook(parameters)),
                'logoHTML':
                includes.get_LogoHTML(),
                'footerHTML':
                includes.get_FooterHTML(),
                'googleAnalyticsHTML':
                includes.get_GoogleAnalyticsHTML(parameters.trackingID),
            }

            template = JINJA_ENVIRONMENT.get_template('index.html')

            self.response.write(template.render(template_values))
    def get(self):
        error = ''
        self.address = ''
        self.block = 0

        SIL = []

        if self.request.get('address') != '':
            self.address = self.request.get('address')


        if validAddress(self.address) or self.address == '':
            parameters = Parameters.get_or_insert('DefaultConfig')
            url = parameters.blockchaindataURL + '/latestBlock'
            try:
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
            except:
                data = {}


            latestBlock = 0
            if 'success' in data and data['success'] == 1:
                latestBlock = data['latestBlock']['height']
            else:
                error = 'Unable to retrieve latest block'

            self.block = latestBlock
            if self.request.get('block') != '' and self.request.get('block') != '0':
                try:
                    self.block = int(self.request.get('block'))
                except ValueError:
                    self.block = 0
                    error = "block must be a positive integer"


            txs = []
            if self.address != '' and self.block != 0:
                url = parameters.blockchaindataURL + '/transactions?format=json&address=' + self.address + '&block=' + str(self.block)
                try:
                    ret = urllib2.urlopen(urllib2.Request(url))
                    data = json.loads(ret.read())
                except:
                    data = {}


                txs = []
                if 'success' in data and data['success'] == 1:
                    txs = data['TXS']

                else:
                    error = 'Unable to retrieve transactions'


            SIL = self.TXS2SIL(txs, self.block)

        else:
            error = 'Invalid address: ' + self.address

        if self.request.get('format') == 'json' and error == '':
            self.response.write(json.dumps({'success': 1, 'SIL': SIL}))

        elif self.request.get('format') == 'json' and error != '':
            self.response.write(json.dumps({'success': 0, 'error': error}))

        else:
            parameters = Parameters.get_or_insert('DefaultConfig')
            template_values = {
                'Title': 'Simplified Inputs List',
                'address': self.address,
                'block': self.block,
                'SIL': SIL,
                'error': error,
                'nSIL': len(SIL),
                'totalReceived': self.totalReceived(SIL),

                'cssHTML': includes.get_CssHTML(),
                'metaHTML': includes.get_MetaHTML(),
                'scriptsHTML': includes.get_ScriptsHTML(),
                'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)),
                'logoHTML': includes.get_LogoHTML(),
                'footerHTML': includes.get_FooterHTML(),
                'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),
            }

            template = JINJA_ENVIRONMENT.get_template('index.html')

            self.response.write(template.render(template_values))
Example #14
0
    def get(self):
        error = ''
        forwarderID = 0
        LBL = []
        LAL = []
        beneficiaryAddress = ''
        beneficiaryBalance = 0
        beneficiaryShare = 0
        linkedAddress = ''

        forwardingAddress = ''
        forwardingAddressBalance = 0
        forwardingAddressBeneficiary = ''
        forwardingBeneficiaryShare = 0

        showWarning = True

        parameters = Parameters.get_or_insert('DefaultConfig')

        if self.request.get('forwarderID'):
            try:
                forwarderID = int(self.request.get('forwarderID'))
            except ValueError:
                error = 'forwarderID must be an integer'

            if error == '':
                forwarders = [
                    Forwarder.get_by_id(forwarderID, parent=forwarders_key())
                ]

                url = parameters.blocklinkerURL + '/LinkedList?format=json&address=' + forwarders[
                    0].address + '&xpub=' + forwarders[
                        0].xpub + '&metric=LBL,LAL'
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
                if 'success' in data and data['success'] == 1:
                    LBL = data['LBL']
                    LAL = data['LAL']

                if self.request.get('address'):
                    address = self.request.get('address')

                    totalShares = 0
                    for i in range(0, len(LAL)):
                        totalShares += LBL[i][1]
                        if LAL[i][0] == address:
                            beneficiaryAddress = address
                            beneficiaryBalance = LBL[i][1]
                            linkedAddress = LAL[i][1]
                            showWarning = False

                        if LAL[i][1] == address:
                            forwardingAddress = LAL[i][1]
                            forwardingAddressBalance = LBL[i][1]
                            forwardingAddressBeneficiary = LAL[i][0]
                            showWarning = False

                    if totalShares > 0:
                        beneficiaryShare = beneficiaryBalance / float(
                            totalShares) * 100
                        forwardingBeneficiaryShare = forwardingAddressBalance / float(
                            totalShares) * 100

                else:
                    showWarning = False

        else:
            showWarning = False
            forwarders_query = Forwarder.query(
                Forwarder.visibility == 'Public',
                Forwarder.status == 'Active').order(-Forwarder.date)
            forwarders = forwarders_query.fetch()

        isAdmin = False
        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            isAdmin = users.is_current_user_admin()
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'

        if self.request.get('forwarderID') and self.request.get(
                'format') == 'json':
            response = {'success': 1, 'forwarder': {}}
            if len(forwarders) == 1:
                forwarder = forwarders[0]
                tmpForwarder = {}
                tmpForwarder['ID'] = forwarder.key.id()
                tmpForwarder['Name'] = forwarder.name
                tmpForwarder['Address'] = forwarder.address
                tmpForwarder['Description'] = forwarder.description
                tmpForwarder['Creator'] = forwarder.creator
                tmpForwarder['CreatorEmail'] = forwarder.creatorEmail
                tmpForwarder['Youtube'] = forwarder.youtube
                tmpForwarder['Status'] = forwarder.status
                tmpForwarder['ConfirmAmount'] = forwarder.confirmAmount
                tmpForwarder['FeeAddress'] = forwarder.feeAddress
                tmpForwarder['FeePercent'] = forwarder.feePercent
                tmpForwarder['MinimumAmount'] = forwarder.minimumAmount
                tmpForwarder['XPUB'] = forwarder.xpub
                tmpForwarder['Visibility'] = forwarder.visibility
                tmpForwarder['Date'] = int(
                    time.mktime(forwarder.date.timetuple()))
                response['forwarder'] = tmpForwarder

            self.response.write(json.dumps(response))

        elif not self.request.get('forwarderID') and self.request.get(
                'format') == 'json':
            response = {'success': 1, 'forwarders': []}
            for forwarder in forwarders:
                tmpForwarder = {}
                tmpForwarder['ID'] = forwarder.key.id()
                tmpForwarder['Name'] = forwarder.name
                tmpForwarder['Address'] = forwarder.address
                tmpForwarder['Description'] = forwarder.description
                tmpForwarder['Creator'] = forwarder.creator
                tmpForwarder['CreatorEmail'] = forwarder.creatorEmail
                tmpForwarder['Youtube'] = forwarder.youtube
                tmpForwarder['Status'] = forwarder.status
                tmpForwarder['ConfirmAmount'] = forwarder.confirmAmount
                tmpForwarder['FeeAddress'] = forwarder.feeAddress
                tmpForwarder['FeePercent'] = forwarder.feePercent
                tmpForwarder['MinimumAmount'] = forwarder.minimumAmount
                tmpForwarder['XPUB'] = forwarder.xpub
                tmpForwarder['Visibility'] = forwarder.visibility
                tmpForwarder['Date'] = int(
                    time.mktime(forwarder.date.timetuple()))
                response['forwarders'].append(tmpForwarder)

            self.response.write(json.dumps(response))

        else:
            template_values = {
                'url':
                url,
                'url_linktext':
                url_linktext,
                'forwarders':
                forwarders,
                'forwarderID':
                forwarderID,
                'showWarning':
                showWarning,
                'beneficiaryAddress':
                beneficiaryAddress,
                'beneficiaryBalance':
                beneficiaryBalance,
                'beneficiaryShare':
                '%.2f' % beneficiaryShare,
                'linkedAddress':
                linkedAddress,
                'forwardingAddress':
                forwardingAddress,
                'forwardingAddressBalance':
                forwardingAddressBalance,
                'forwardingAddressBeneficiary':
                forwardingAddressBeneficiary,
                'forwardingBeneficiaryShare':
                '%.2f' % forwardingBeneficiaryShare,
                'cssHTML':
                includes.get_CssHTML(),
                'metaHTML':
                includes.get_MetaHTML(),
                'scriptsHTML':
                includes.get_ScriptsHTML(),
                'navigationHTML':
                includes.get_NavigationHTML(url, url_linktext,
                                            Spellbook(parameters), isAdmin),
                'logoHTML':
                includes.get_LogoHTML(),
                'footerHTML':
                includes.get_FooterHTML(),
                'googleAnalyticsHTML':
                includes.get_GoogleAnalyticsHTML(parameters.trackingID),
                'socialButtons':
                SOCIALBUTTONS_ENABLED,
            }

            template = JINJA_ENVIRONMENT.get_template('index.html')

            self.response.write(template.render(template_values))
    def get(self):
        self.address = ''
        self.block = 0
        self.xpub = ''
        metrics = ['LBL']  #default metric(s)
        linkedAddresses = []
        balances = []
        error = ''

        if self.request.get('address') != '':
            address = self.request.get('address')
            if validAddress(address):
                self.address = address
            else:
                error = "Invalid address: " + address

        if self.request.get('xpub') != '':
            xpub = self.request.get('xpub')
            if validXPUB(xpub):
                self.xpub = xpub
            else:
                error = "Invalid XPUB key: " + xpub

        if self.request.get('block') != '':
            try:
                self.block = int(self.request.get('block'))
            except ValueError:
                error = "Block must be a positive integer"

        if self.request.get('metric') != '':
            metrics = str(self.request.get('metric')).split(",")

        SIL = []
        data = {}
        if self.address != '' and self.xpub != '' and error == '':
            parameters = Parameters.get_or_insert('DefaultConfig')
            url = parameters.simplifiedInputsListURL + '/SIL?format=json&address=' + self.address

            if self.block != 0:
                url += '&block=' + str(self.block)

            try:
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
            except:
                data = {}

            if 'success' in data and data['success'] == 1:
                SIL = data['SIL']
                linkedAddresses = self.getAddressesFromXPUB(
                    self.xpub, len(SIL))
                balances = self.getBalances(linkedAddresses)

        LAL = []  #Linked Address List
        LBL = []  #Linked Balance List
        LRL = []  #Linked Received List
        LSL = []  #Linked Sent List

        response = {}

        if self.request.get('format') == 'json' and error == '':
            for i in range(0, len(SIL)):
                if 'LAL' in metrics:
                    LAL.append([SIL[i][0], linkedAddresses[i]])

                if 'LBL' in metrics:
                    LBL.append(
                        [SIL[i][0], balances[linkedAddresses[i]]['balance']])

                if 'LRL' in metrics:
                    LRL.append(
                        [SIL[i][0], balances[linkedAddresses[i]]['received']])

                if 'LSL' in metrics:
                    LSL.append(
                        [SIL[i][0], balances[linkedAddresses[i]]['sent']])

            if 'LAL' in metrics:
                response['LAL'] = LAL

            if 'LBL' in metrics:
                response['LBL'] = LBL

            if 'LRL' in metrics:
                response['LRL'] = LRL

            if 'LSL' in metrics:
                response['LSL'] = LSL

            response['success'] = 1
            self.response.write(json.dumps(response))

        elif self.request.get('format') == 'json' and error != '':
            self.response.write(json.dumps({'success': 0, 'error': error}))

        else:
            parameters = Parameters.get_or_insert('DefaultConfig')
            template_values = {
                'Title':
                'Blocklinker',
                'data':
                data,
                'address':
                self.address,
                'xpub':
                self.xpub,
                'block':
                self.block,
                'SIL':
                SIL,
                'error':
                error,
                'nSIL':
                len(SIL),
                'linkedAddresses':
                linkedAddresses,
                'balances':
                balances,
                'metric':
                metrics[0],
                'cssHTML':
                includes.get_CssHTML(),
                'metaHTML':
                includes.get_MetaHTML(),
                'scriptsHTML':
                includes.get_ScriptsHTML(),
                'navigationHTML':
                includes.get_NavigationHTML(Spellbook(parameters)),
                'logoHTML':
                includes.get_LogoHTML(),
                'footerHTML':
                includes.get_FooterHTML(),
                'googleAnalyticsHTML':
                includes.get_GoogleAnalyticsHTML(parameters.trackingID),
            }

            template = JINJA_ENVIRONMENT.get_template('index.html')

            self.response.write(template.render(template_values))
    def get(self):
        error = ''
        parameters = Parameters.get_or_insert('DefaultConfig')
        self.address = ''
        self.regBlock = 0
        distribution = []
        if self.request.get('address') != '':
            address = self.request.get('address')
            if validAddress(address):
                self.address = self.request.get('address')
            else:
                error = "Invalid address: " + address


        if self.request.get('regBlock') != '':
            try:
                self.regBlock = int(self.request.get('regBlock'))
            except ValueError:
                error = "Block for SIL must be a positive integer"

        url = parameters.blockchaindataURL + '/latestBlock'
        try:
            ret = urllib2.urlopen(urllib2.Request(url))
            data = json.loads(ret.read())
        except:
            data = {}

        latestBlock = 0
        if 'success' in data and data['success'] == 1:
            latestBlock = data['latestBlock']['height']
        else:
            error = 'Unable to retrieve latest block'
            logging.error(error)

        self.block = 0
        if self.request.get('block') != '':
            try:
                self.block = int(self.request.get('block'))
            except:
                error = "Block must be a positive integer"
        else:
            self.block = latestBlock

        hash = ''
        intHash = ''
        if latestBlock >= self.block and latestBlock > 0 and error == '':
            url = parameters.blockchaindataURL + '/block?block=' + str(self.block)
            try:
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
            except:
                data = {}

            if 'success' in data and data['success'] == 1:
                hash = data['block']['hash']
                intHash = int(hash, 16)
            else:
                error = 'Unable to retrieve hash'
                logging.error(error)

        self.xpub = ''
        if self.request.get('xpub') != '':
            xpub = self.request.get('xpub')
            if validXPUB(xpub):
                self.xpub = self.request.get('xpub')
            else:
                error = "Invalid XPUB key: " + xpub

        self.metric = 'SIL'
        if self.request.get('metric') != '' and self.request.get('metric') in ['LBL', 'LRL', 'LSL']:
            self.metric = self.request.get('metric')



        if self.address != '' and error == '':
            distribution = self.getDistribution(self.address, self.regBlock, self.xpub, self.metric)
            distribution = self.addCumulative(distribution)

        nDistribution = len(distribution)

        strFloat = '0.'
        for i in range(len(str(intHash))-1, -1, -1):
            strFloat += str(intHash)[i]
        rand = float(strFloat)

        winnerIndex = -1
        winnerAddress = ''
        values = []
        totalValue = 0
        if nDistribution > 0 and latestBlock >= self.block:
            values = self.extractValues(distribution)
            totalValue = sum(values)
            winnerIndex = getWinnerIndex(rand, values)
            winnerAddress = distribution[winnerIndex][0]



        if self.request.get('format') == 'json' and error == '':
            self.response.write(json.dumps({'success': 1, 'winner': {'distribution': distribution, 'winnerAddress': winnerAddress, 'winnerIndex': winnerIndex, 'intHash': intHash, 'random': rand, 'target': totalValue*rand}}))

        elif self.request.get('format') == 'json' and error != '':
            self.response.write(json.dumps({'success': 0, 'error': error}))

        else:
            parameters = Parameters.get_or_insert('DefaultConfig')
            template_values = {
                'Title': 'Proportional Random',
                'address': self.address,
                'regBlock': self.regBlock,
                'block': self.block,
                'xpub': self.xpub,
                'metric': self.metric,
                'latestBlock': latestBlock,
                'hash': hash,
                'intHash': intHash,
                'rand': rand,
                'totalValue': totalValue,
                'winnerIndex': winnerIndex,
                'winnerAddress': winnerAddress,
                'distribution': distribution,
                'nDistribution': nDistribution,
                'error': error,

                'cssHTML': includes.get_CssHTML(),
                'metaHTML': includes.get_MetaHTML(),
                'scriptsHTML': includes.get_ScriptsHTML(),
                'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)),
                'logoHTML': includes.get_LogoHTML(),
                'footerHTML': includes.get_FooterHTML(),
                'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),
            }

            template = JINJA_ENVIRONMENT.get_template('index.html')

            self.response.write(template.render(template_values))
    def get(self):
        parameters = Parameters.get_or_insert('DefaultConfig')
        error = ''

        self.proposalAddress = ''
        if self.request.get('proposalAddress') != '':
            address = self.request.get('proposalAddress')
            if validAddress(address):
                self.proposalAddress = address
            else:
                error = "Invalid address: " + address

        url = parameters.blockchaindataURL + '/latestBlock'
        data = {}
        try:
            ret = urllib2.urlopen(urllib2.Request(url))
            data = json.loads(ret.read())
        except:
            data = {}

        latestBlock = 0
        if 'success' in data and data['success'] == 1:
            latestBlock = data['latestBlock']['height']
        else:
            error = 'Unable to retrieve latest block'


        proposalBlock = 0
        if self.request.get('proposalBlock') != '':
            try:
                proposalBlock = int(self.request.get('proposalBlock'))
            except ValueError:
                error = "proposalBlock must be a positive integer"
        else:
            proposalBlock = latestBlock


        weights = ''
        if self.request.get('weights') in ['Value', 'Equal', 'SIL', 'LBL', 'LRL', 'LSL']:
            weights = self.request.get('weights')
        elif self.request.get('weights') != '':
            error = 'Incorrect weights'

        self.registrationAddress = ''
        if self.request.get('regAddress') != '':
            regAddress = self.request.get('regAddress')
            if validAddress(regAddress):
                self.registrationAddress = self.request.get('regAddress')
            else:
                error = "Invalid regAddress: " + regAddress

        self.registrationBlockHeight = latestBlock
        if self.request.get('regBlock') != '':
            try:
                self.registrationBlockHeight = int(self.request.get('regBlock'))
            except ValueError:
                error = "regBlock must be a positive integer"
        if self.registrationBlockHeight < 0:
            error = "regBlock must be a positive integer"


        self.registrationXPUB = ''
        if self.request.get('regXPUB') != '':
            regXPUB = self.request.get('regXPUB')
            if validXPUB(regXPUB):
                self.registrationXPUB = regXPUB
            else:
                error = "Invalid regXPUB: " + regXPUB

        self.weightValues = []
        if weights == 'SIL' and self.registrationAddress != '' and self.registrationBlockHeight != 0:

            url = parameters.simplifiedInputsListURL + '/SIL?format=json&address=' + self.registrationAddress + '&block=' + str(self.registrationBlockHeight)
            data = {}
            try:
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
            except:
                error = 'Unable to retrieve SIL'

            if 'success' in data and data['success'] == 1:
                self.weightValues = data['SIL']

        elif weights in ['LBL', 'LRL', 'LSL'] and self.registrationAddress != '' and self.registrationBlockHeight != 0 and self.registrationXPUB != '':
            url = parameters.blocklinkerURL + '/LinkedList?format=json&address=' + self.registrationAddress + '&block=' + str(self.registrationBlockHeight) + '&xpub=' + self.registrationXPUB + '&metric=' + weights
            data = {}
            try:
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
            except:
                error = 'Unable to retrieve Linked values'

            if 'success' in data and data['success'] == 1:
                if weights == 'LBL':
                    self.weightValues = data['LBL']
                elif weights == 'LRL':
                    self.weightValues = data['LRL']
                elif weights == 'LSL':
                    self.weightValues = data['LSL']


        digits = 1
        if self.request.get('digits') != '':
            try:
                digits = int(self.request.get('digits'))
            except ValueError:
                error = "Digits must be a positive integer"
        if digits <= 0:
            error = "Digits must be a positive integer"
            digits = 1


        self.proposal = ''
        if self.request.get('proposal') != '':
            self.proposal = self.request.get('proposal')

        self.options = []
        self.optionsDict = {}
        strOptions = ''
        if self.request.get('options') != '':
            strOptions = self.request.get('options')
            self.options = strOptions.split('|')
            i = 0
            for option in self.options:
                self.optionsDict[str(i)] = option
                i += 1




        TXS = []
        if self.proposalAddress != '':
            url = parameters.blockchaindataURL + '/transactions?format=json&address=' + self.proposalAddress + '&block=' + str(proposalBlock)
            data = {}
            try:
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
            except:
                data = {}

            if 'success' in data and data['success'] == 1:
                TXS = data['TXS']
            else:
                error = 'Unable to retrieve transactions'

        votes = self.convertTXs2Votes(TXS, proposalBlock, digits)
        nVotes = len(votes)
        results = self.calcResults(votes, weights)
        nResults = len(results)

        rows = {}
        toggle = 'Odd'
        for option in sorted(results):
            rows[option] = toggle

            if toggle == 'Odd':
                toggle = 'Even'
            elif toggle == 'Even':
                toggle = 'Odd'

        proposalHash = getProposalHash(self.proposalAddress, self.proposal, strOptions)

        if self.request.get('format') == 'json' and error == '':
            response = {'success': 1}
            response['results'] = results
            response['options'] = self.optionsDict

            response['digits'] = digits
            response['block'] = proposalBlock
            if self.proposal != '':
                response['proposal'] = self.proposal
            if self.proposalAddress != '':
                response['proposalAddress'] = self.proposalAddress
            if self.registrationAddress != '':
                response['regAddress'] = self.registrationAddress
            if self.registrationBlockHeight != '':
                response['regBlock'] = self.registrationBlockHeight
            if self.registrationXPUB != '':
                response['regXPUB'] = self.registrationXPUB
            if weights != '':
                response['weights'] = weights

            response['proposalHash'] = proposalHash

            self.response.write(json.dumps(response))

        elif self.request.get('format') == 'json' and error != '':
            self.response.write(json.dumps({'success': 0, 'error': error}))

        else:
            parameters = Parameters.get_or_insert('DefaultConfig')
            template_values = {
                'Title': 'Bitvoter',
                'proposalAddress': self.proposalAddress,
                'proposalBlock': proposalBlock,
                'regAddress': self.registrationAddress,
                'regBlock': self.registrationBlockHeight,
                'regXPUB': self.registrationXPUB,

                'proposal': self.proposal,
                'options': self.optionsDict,
                'strOptions': strOptions,

                'latestBlock': latestBlock,
                'votes': votes,
                'nVotes': nVotes,
                'optionIDs': sorted(results , key=lambda x: int(x)),
                'results': results,
                'nResults': nResults,
                'weights': weights,
                'digits': digits,
                'evenRow': 0,
                'error': error,
                'rows': rows,

                'cssHTML': includes.get_CssHTML(),
                'metaHTML': includes.get_MetaHTML(),
                'scriptsHTML': includes.get_ScriptsHTML(),
                'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)),
                'logoHTML': includes.get_LogoHTML(),
                'footerHTML': includes.get_FooterHTML(),
                'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),

            }

            template = JINJA_ENVIRONMENT.get_template('index.html')

            self.response.write(template.render(template_values))
Example #18
0
    def get(self):
        error = ''
        self.address = ''
        self.resultsURL = '/results?'
        if self.request.get('address') != '':
            address = self.request.get('address')
            if validAddress(address):
                self.address = address
                self.resultsURL += 'proposalAddress=' + self.address
            else:
                error = "Invalid address: " + address

        self.proposal = ''
        if self.request.get('proposal') != '':
            self.proposal = self.request.get('proposal')
            self.resultsURL += '&proposal=' + self.proposal

        self.options = []
        strOptions = ''
        if self.request.get('options') != '':
            strOptions = self.request.get('options')
            self.options = strOptions.split('|')
            self.resultsURL += '&options=' + self.request.get('options')

        self.cost = 50000  #default cost to cast a vote in Satoshis
        if self.request.get('cost') != '':
            try:
                self.cost = int(self.request.get('cost'))
                self.resultsURL += '&cost=' + str(self.cost)
            except ValueError:
                error = "cost must be a positive integer"
        if self.cost <= 0:
            error = "cost must be a positive integer"

        self.digits = 1
        if self.request.get('digits') != '':
            try:
                self.digits = int(self.request.get('digits'))
                self.resultsURL += '&digits=' + str(self.digits)
            except ValueError:
                error = "Digits must be a positive integer"
        if self.digits <= 0:
            error = "Digits must be a positive integer"

        self.weights = 'Value'
        if self.request.get('weights') in [
                "Equal", "Value", "SIL", "LBL", "LRL", "LSL"
        ]:
            self.weights = self.request.get('weights')
        self.resultsURL += '&weights=' + self.weights

        self.registrationAddress = ''
        if self.request.get('regAddress') != '':
            regAddress = self.request.get('regAddress')
            if validAddress(regAddress):
                self.registrationAddress = regAddress
                self.resultsURL += '&regAddress=' + self.registrationAddress

        self.registrationXPUB = ''
        if self.request.get('regXPUB') != '':
            regXPUB = self.request.get('regXPUB')
            if validXPUB(regXPUB):
                self.registrationXPUB = self.request.get('regXPUB')
                self.resultsURL += '&regXPUB=' + self.registrationXPUB

        self.registrationBlock = 0
        if self.request.get('regBlock') != '':
            try:
                self.registrationBlock = int(self.request.get('regBlock'))
                self.resultsURL += '&regBlock=' + str(self.registrationBlock)
            except ValueError:
                error = "regBlock must be a positive integer"
        if self.registrationBlock < 0:
            error = "regBlock must be a positive integer"

        rows = {}
        amounts = {}
        for i in range(0, len(self.options)):
            amounts[self.options[i]] = (self.cost + i) / 1e8
            if i % 2 == 0:
                rows[self.options[i]] = 'Even'
            else:
                rows[self.options[i]] = 'Odd'

        proposalHash = getProposalHash(self.address, self.proposal, strOptions)

        if self.request.get('format') == 'json' and error == '':
            proposal = {}
            proposal['address'] = self.address
            proposal['proposal'] = self.proposal
            proposal['options'] = getOptions(self.address, self.options,
                                             self.cost)
            proposal['cost'] = self.cost
            proposal['digits'] = self.digits
            if self.weights != '':
                proposal['weights'] = self.weights
            if self.registrationAddress != '':
                proposal['regAddress'] = self.registrationAddress
            if self.registrationXPUB != '':
                proposal['regXPUB'] = self.registrationXPUB
            if self.registrationBlock != 0:
                proposal['regBlock'] = self.registrationBlock

            proposal['proposalHash'] = proposalHash

            self.response.write(
                json.dumps({
                    'success': 1,
                    'proposal': proposal
                }))

        elif self.request.get('format') == 'json' and error != '':
            self.response.write(json.dumps({'success': 0, 'error': error}))

        else:
            parameters = Parameters.get_or_insert('DefaultConfig')
            template_values = {
                'Title':
                'Proposal',
                'address':
                self.address,
                'proposal':
                self.proposal,
                'proposalHash':
                proposalHash,
                'cost':
                self.cost,
                'digits':
                self.digits,
                'options':
                getOptions(self.address, self.options, self.cost),
                'weights':
                self.weights,
                'regAddress':
                self.registrationAddress,
                'regXPUB':
                self.registrationXPUB,
                'regBlock':
                self.registrationBlock,
                'error':
                error,
                'resultsURL':
                self.resultsURL,
                'nOptions':
                len(self.options),
                'amounts':
                amounts,
                'rows':
                rows,
                'cssHTML':
                includes.get_CssHTML(),
                'metaHTML':
                includes.get_MetaHTML(),
                'scriptsHTML':
                includes.get_ScriptsHTML(),
                'navigationHTML':
                includes.get_NavigationHTML(Spellbook(parameters)),
                'logoHTML':
                includes.get_LogoHTML(),
                'footerHTML':
                includes.get_FooterHTML(),
                'googleAnalyticsHTML':
                includes.get_GoogleAnalyticsHTML(parameters.trackingID),
            }

            template = JINJA_ENVIRONMENT.get_template('proposal.html')

            self.response.write(template.render(template_values))
    def get(self):
        error = ''
        self.address = ''
        self.resultsURL = '/results?'
        if self.request.get('address') != '':
            address = self.request.get('address')
            if validAddress(address):
                self.address = address
                self.resultsURL += 'proposalAddress=' + self.address
            else:
                error = "Invalid address: " + address

        self.proposal = ''
        if self.request.get('proposal') != '':
            self.proposal = self.request.get('proposal')
            self.resultsURL += '&proposal=' + self.proposal

        self.options = []
        strOptions = ''
        if self.request.get('options') != '':
            strOptions = self.request.get('options')
            self.options = strOptions.split('|')
            self.resultsURL += '&options=' + self.request.get('options')

        self.cost = 50000 #default cost to cast a vote in Satoshis
        if self.request.get('cost') != '':
            try:
                self.cost = int(self.request.get('cost'))
                self.resultsURL += '&cost=' + str(self.cost)
            except ValueError:
                error = "cost must be a positive integer"
        if self.cost <= 0:
            error = "cost must be a positive integer"


        self.digits = 1
        if self.request.get('digits') != '':
            try:
                self.digits = int(self.request.get('digits'))
                self.resultsURL += '&digits=' + str(self.digits)
            except ValueError:
                error = "Digits must be a positive integer"
        if self.digits <= 0:
            error = "Digits must be a positive integer"


        self.weights = 'Value'
        if self.request.get('weights') in ["Equal", "Value", "SIL", "LBL", "LRL", "LSL"]:
            self.weights = self.request.get('weights')
        self.resultsURL += '&weights=' + self.weights

        self.registrationAddress = ''
        if self.request.get('regAddress') != '':
            regAddress = self.request.get('regAddress')
            if validAddress(regAddress):
                self.registrationAddress = regAddress
                self.resultsURL += '&regAddress=' + self.registrationAddress

        self.registrationXPUB = ''
        if self.request.get('regXPUB') != '':
            regXPUB = self.request.get('regXPUB')
            if validXPUB(regXPUB):
                self.registrationXPUB = self.request.get('regXPUB')
                self.resultsURL += '&regXPUB=' + self.registrationXPUB

        self.registrationBlock = 0
        if self.request.get('regBlock') != '':
            try:
                self.registrationBlock = int(self.request.get('regBlock'))
                self.resultsURL += '&regBlock=' + str(self.registrationBlock)
            except ValueError:
                error = "regBlock must be a positive integer"
        if self.registrationBlock < 0:
            error = "regBlock must be a positive integer"


        rows = {}
        amounts = {}
        for i in range(0, len(self.options)):
            amounts[self.options[i]] = (self.cost + i)/1e8
            if i%2 == 0:
                rows[self.options[i]] = 'Even'
            else:
                rows[self.options[i]] = 'Odd'

        proposalHash = getProposalHash(self.address, self.proposal, strOptions)

        if self.request.get('format') == 'json' and error == '':
            proposal = {}
            proposal['address'] = self.address
            proposal['proposal'] = self.proposal
            proposal['options'] = getOptions(self.address, self.options, self.cost)
            proposal['cost'] = self.cost
            proposal['digits'] = self.digits
            if self.weights != '':
                proposal['weights'] = self.weights
            if self.registrationAddress != '':
                proposal['regAddress'] = self.registrationAddress
            if self.registrationXPUB != '':
                proposal['regXPUB'] = self.registrationXPUB
            if self.registrationBlock != 0:
                proposal['regBlock'] = self.registrationBlock

            proposal['proposalHash'] = proposalHash

            self.response.write(json.dumps({'success': 1, 'proposal': proposal}))

        elif self.request.get('format') == 'json' and error != '':
            self.response.write(json.dumps({'success': 0, 'error': error}))

        else:
            parameters = Parameters.get_or_insert('DefaultConfig')
            template_values = {
                'Title': 'Proposal',
                'address': self.address,
                'proposal': self.proposal,
                'proposalHash': proposalHash,
                'cost': self.cost,
                'digits': self.digits,
                'options': getOptions(self.address, self.options, self.cost),
                'weights': self.weights,
                'regAddress': self.registrationAddress,
                'regXPUB': self.registrationXPUB,
                'regBlock': self.registrationBlock,
                'error': error,
                'resultsURL': self.resultsURL,

                'nOptions': len(self.options),
                'amounts': amounts,
                'rows': rows,

                'cssHTML': includes.get_CssHTML(),
                'metaHTML': includes.get_MetaHTML(),
                'scriptsHTML': includes.get_ScriptsHTML(),
                'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)),
                'logoHTML': includes.get_LogoHTML(),
                'footerHTML': includes.get_FooterHTML(),
                'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),

            }

            template = JINJA_ENVIRONMENT.get_template('proposal.html')

            self.response.write(template.render(template_values))
    def get(self):
        error = ''
        forwarderID = 0
        LBL = []
        LAL = []
        beneficiaryAddress = ''
        beneficiaryBalance = 0
        beneficiaryShare = 0
        linkedAddress = ''

        forwardingAddress = ''
        forwardingAddressBalance = 0
        forwardingAddressBeneficiary = ''
        forwardingBeneficiaryShare = 0

        showWarning = True

        parameters = Parameters.get_or_insert('DefaultConfig')

        if self.request.get('forwarderID'):
            try:
                forwarderID = int(self.request.get('forwarderID'))
            except ValueError:
                error = 'forwarderID must be an integer'

            if error == '':
                forwarders = [Forwarder.get_by_id(forwarderID, parent=forwarders_key())]


                url = parameters.blocklinkerURL + '/LinkedList?format=json&address=' + forwarders[0].address + '&xpub=' + forwarders[0].xpub + '&metric=LBL,LAL'
                ret = urllib2.urlopen(urllib2.Request(url))
                data = json.loads(ret.read())
                if 'success' in data and data['success'] == 1:
                    LBL = data['LBL']
                    LAL = data['LAL']



                if self.request.get('address'):
                    address = self.request.get('address')

                    totalShares = 0
                    for i in range(0, len(LAL)):
                        totalShares += LBL[i][1]
                        if LAL[i][0] == address:
                            beneficiaryAddress = address
                            beneficiaryBalance = LBL[i][1]
                            linkedAddress = LAL[i][1]
                            showWarning = False

                        if LAL[i][1] == address:
                            forwardingAddress = LAL[i][1]
                            forwardingAddressBalance = LBL[i][1]
                            forwardingAddressBeneficiary = LAL[i][0]
                            showWarning = False


                    if totalShares > 0:
                        beneficiaryShare = beneficiaryBalance/float(totalShares)*100
                        forwardingBeneficiaryShare = forwardingAddressBalance/float(totalShares)*100

                else:
                    showWarning = False

        else:
            showWarning = False
            forwarders_query = Forwarder.query(Forwarder.visibility == 'Public', Forwarder.status == 'Active').order(-Forwarder.date)
            forwarders = forwarders_query.fetch()

        isAdmin = False
        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            isAdmin = users.is_current_user_admin()
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'

        if self.request.get('forwarderID') and self.request.get('format') == 'json':
            response = {'success': 1, 'forwarder': {}}
            if len(forwarders) == 1:
                forwarder = forwarders[0]
                tmpForwarder = {}
                tmpForwarder['ID'] = forwarder.key.id()
                tmpForwarder['Name'] = forwarder.name
                tmpForwarder['Address'] = forwarder.address
                tmpForwarder['Description'] = forwarder.description
                tmpForwarder['Creator'] = forwarder.creator
                tmpForwarder['CreatorEmail'] = forwarder.creatorEmail
                tmpForwarder['Youtube'] = forwarder.youtube
                tmpForwarder['Status'] = forwarder.status
                tmpForwarder['ConfirmAmount'] = forwarder.confirmAmount
                tmpForwarder['FeeAddress'] = forwarder.feeAddress
                tmpForwarder['FeePercent'] = forwarder.feePercent
                tmpForwarder['MinimumAmount'] = forwarder.minimumAmount
                tmpForwarder['XPUB'] = forwarder.xpub
                tmpForwarder['Visibility'] = forwarder.visibility
                tmpForwarder['Date'] = int(time.mktime(forwarder.date.timetuple()))
                response['forwarder'] = tmpForwarder


            self.response.write(json.dumps(response))

        elif not self.request.get('forwarderID') and self.request.get('format') == 'json':
            response = {'success': 1, 'forwarders': []}
            for forwarder in forwarders:
                tmpForwarder = {}
                tmpForwarder['ID'] = forwarder.key.id()
                tmpForwarder['Name'] = forwarder.name
                tmpForwarder['Address'] = forwarder.address
                tmpForwarder['Description'] = forwarder.description
                tmpForwarder['Creator'] = forwarder.creator
                tmpForwarder['CreatorEmail'] = forwarder.creatorEmail
                tmpForwarder['Youtube'] = forwarder.youtube
                tmpForwarder['Status'] = forwarder.status
                tmpForwarder['ConfirmAmount'] = forwarder.confirmAmount
                tmpForwarder['FeeAddress'] = forwarder.feeAddress
                tmpForwarder['FeePercent'] = forwarder.feePercent
                tmpForwarder['MinimumAmount'] = forwarder.minimumAmount
                tmpForwarder['XPUB'] = forwarder.xpub
                tmpForwarder['Visibility'] = forwarder.visibility
                tmpForwarder['Date'] = int(time.mktime(forwarder.date.timetuple()))
                response['forwarders'].append(tmpForwarder)


            self.response.write(json.dumps(response))

        else:
            template_values = {
                'url': url,
                'url_linktext': url_linktext,

                'forwarders': forwarders,
                'forwarderID': forwarderID,

                'showWarning': showWarning,

                'beneficiaryAddress': beneficiaryAddress,
                'beneficiaryBalance' : beneficiaryBalance,
                'beneficiaryShare': '%.2f' % beneficiaryShare,
                'linkedAddress': linkedAddress,

                'forwardingAddress': forwardingAddress,
                'forwardingAddressBalance' : forwardingAddressBalance,
                'forwardingAddressBeneficiary':  forwardingAddressBeneficiary,
                'forwardingBeneficiaryShare': '%.2f' % forwardingBeneficiaryShare,


                'cssHTML': includes.get_CssHTML(),
                'metaHTML': includes.get_MetaHTML(),
                'scriptsHTML': includes.get_ScriptsHTML(),
                'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin),
                'logoHTML': includes.get_LogoHTML(),
                'footerHTML': includes.get_FooterHTML(),
                'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),

                'socialButtons': SOCIALBUTTONS_ENABLED,


            }


            template = JINJA_ENVIRONMENT.get_template('index.html')

            self.response.write(template.render(template_values))
Example #21
0
    def get(self):
        distribution = []
        distributerID = 0
        beneficiaryAddress = ''
        beneficiaryBalance = 0
        beneficiaryShare = 0

        showWarning = True

        parameters = Parameters.get_or_insert('DefaultConfig')

        if self.request.get('distributerID'):
            distributerID = int(self.request.get('distributerID'))
            distributers = [Distributer.get_by_id(distributerID, parent=distributers_key())]


            if distributers[0].distributionSource == 'Custom':
                distribution = json.loads(distributers[0].custom)
            else:
                if distributers[0].distributionSource in ['LBL', 'LRL', 'LSL']:
                    url = parameters.blocklinkerURL + '/LinkedList?format=json&address=' + distributers[0].registrationAddress + '&xpub=' + distributers[0].registrationXPUB + '&block=' + str(distributers[0].registrationBlockheight) + '&metric=LAL,' + distributers[0].distributionSource
                elif distributers[0].distributionSource == 'SIL':
                    url = parameters.simplifiedInputsListURL + '/SIL?format=json&address=' + distributers[0].registrationAddress + '&block=' + str(distributers[0].registrationBlockheight)

                data = {}
                try:
                    ret = urllib2.urlopen(urllib2.Request(url))
                    data = json.loads(ret.read())
                except:
                    data = {}

                if 'success' in data and data['success'] == 1:
                    if 'SIL' in data:
                        distribution = data['SIL']
                    elif 'LBL' in data:
                        distribution = data['LBL']
                    elif 'LRL' in data:
                        distribution = data['LRL']
                    elif 'LSL' in data:
                        distribution = data['LSL']


            if self.request.get('address'):
                address = self.request.get('address')

                totalShares = 0
                beneficiaryValue = 0
                for i in range(0, len(distribution)):
                    totalShares += distribution[i][1]
                    if distribution[i][0] == address:
                        beneficiaryAddress = address
                        beneficiaryValue = distribution[i][1]
                        showWarning = False


                if totalShares > 0:
                    beneficiaryShare = beneficiaryValue/float(totalShares)*100


            else:
                showWarning = False

        else:
            showWarning = False
            distributers_query = Distributer.query(Distributer.visibility == 'Public', Distributer.status == 'Active').order(-Distributer.date)
            distributers = distributers_query.fetch()

        isAdmin = False
        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            isAdmin = users.is_current_user_admin()
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'


        if self.request.get('distributerID') and self.request.get('format') == 'json':
            response = {'success': 1, 'distributer': []}
            if len(distributers) == 1:
                distributer = distributers[0]
                tmpDistributer = {}
                tmpDistributer['ID'] = distributer.key.id()
                tmpDistributer['Name'] = distributer.name
                tmpDistributer['Address'] = distributer.address
                tmpDistributer['Description'] = distributer.description
                tmpDistributer['Creator'] = distributer.creator
                tmpDistributer['CreatorEmail'] = distributer.creatorEmail
                tmpDistributer['Youtube'] = distributer.youtube
                tmpDistributer['Status'] = distributer.status
                tmpDistributer['FeeAddress'] = distributer.feeAddress
                tmpDistributer['FeePercent'] = distributer.feePercent
                tmpDistributer['Custom'] = distributer.custom
                tmpDistributer['DistributionSource'] = distributer.distributionSource
                tmpDistributer['Threshold'] = distributer.threshold
                tmpDistributer['MinimumAmount'] = distributer.minimumAmount
                tmpDistributer['TransactionFee'] = distributer.transactionFee
                tmpDistributer['RegistrationAddress'] = distributer.registrationAddress
                tmpDistributer['RegistrationBlockheight'] = distributer.registrationBlockheight
                tmpDistributer['RegistrationXPUB'] = distributer.registrationXPUB
                tmpDistributer['Visibility'] = distributer.visibility
                tmpDistributer['Date'] = int(time.mktime(distributer.date.timetuple()))
                response['distributer'] = tmpDistributer


            self.response.write(json.dumps(response))

        elif not self.request.get('distributerID') and self.request.get('format') == 'json':
            response = {'success': 1, 'distributers': []}
            for distributer in distributers:
                tmpDistributer = {}
                tmpDistributer['ID'] = distributer.key.id()
                tmpDistributer['Name'] = distributer.name
                tmpDistributer['Address'] = distributer.address
                tmpDistributer['Description'] = distributer.description
                tmpDistributer['Creator'] = distributer.creator
                tmpDistributer['CreatorEmail'] = distributer.creatorEmail
                tmpDistributer['Youtube'] = distributer.youtube
                tmpDistributer['Status'] = distributer.status
                tmpDistributer['FeeAddress'] = distributer.feeAddress
                tmpDistributer['FeePercent'] = distributer.feePercent
                tmpDistributer['Custom'] = distributer.custom
                tmpDistributer['DistributionSource'] = distributer.distributionSource
                tmpDistributer['Threshold'] = distributer.threshold
                tmpDistributer['MinimumAmount'] = distributer.minimumAmount
                tmpDistributer['TransactionFee'] = distributer.transactionFee
                tmpDistributer['RegistrationAddress'] = distributer.registrationAddress
                tmpDistributer['RegistrationBlockheight'] = distributer.registrationBlockheight
                tmpDistributer['RegistrationXPUB'] = distributer.registrationXPUB
                tmpDistributer['Visibility'] = distributer.visibility
                tmpDistributer['Date'] = int(time.mktime(distributer.date.timetuple()))
                response['distributers'].append(tmpDistributer)


            self.response.write(json.dumps(response))

        else:
            template_values = {
                'url': url,
                'url_linktext': url_linktext,

                'distributers': distributers,
                'distributerID': distributerID,
                'distribution': distribution,
                'nDistribution': len(distribution),

                'showWarning': showWarning,

                'beneficiaryAddress': beneficiaryAddress,
                'beneficiaryBalance' : beneficiaryBalance,
                'beneficiaryShare': '%.2f' % beneficiaryShare,


                'cssHTML': includes.get_CssHTML(),
                'metaHTML': includes.get_MetaHTML(),
                'scriptsHTML': includes.get_ScriptsHTML(),
                'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin),
                'logoHTML': includes.get_LogoHTML(),
                'footerHTML': includes.get_FooterHTML(),
                'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID),

                'socialButtons': SOCIALBUTTONS_ENABLED,


            }


            template = JINJA_ENVIRONMENT.get_template('index.html')

            self.response.write(template.render(template_values))