Exemplo n.º 1
0
    def get(self, url_nonce):
        util.EnableCors(self)
        user = model.User.all().filter('url_nonce =', url_nonce).get()
        if user is None:
            self.error(404)
            self.response.write('user not found')
            return

        num_conditional_pledges = 0
        num_donations = 0
        amount_pledges = 0
        amount_donations = 0
        for pledge in model.Pledge.all().filter('email =', user.email):
            if pledge.fundraisingRound == 1:
                continue

            if pledge.pledge_type == 'DONATION':
                num_donations += 1
                amount_donations += pledge.amountCents
            else:
                num_conditional_pledges += 1
                amount_pledges += pledge.amountCents
                pledge.pledge_type = 'DONATION'
                pledge.put()

        template_vars = {
            'num_donations': num_donations,
            'amount_donations': amount_donations / 100,
            'num_conditional_pledges': num_conditional_pledges,
            'amount_pledges': amount_pledges / 100,
            'email': user.email
        }
        template = templates.GetTemplate('donation-update.html')
        self.response.write(template.render(template_vars))
Exemplo n.º 2
0
    def get(self):
        util.EnableCors(self)
        env = self.app.config['env']
        if not env.stripe_public_key:
            raise Error('No stripe public key in DB')
        params = dict(testMode=(env.app_name == u'local'),
                      stripePublicKey=env.stripe_public_key)

        self.response.headers['Content-Type'] = 'application/json'
        json.dump(params, self.response)
Exemplo n.º 3
0
    def post(self):
        """Create a new pledge, and update user info."""
        util.EnableCors(self)
        self.response.headers['Content-Type'] = 'application/json'
        env = self.app.config['env']

        try:
            data = json.loads(self.request.body)
        except ValueError, e:
            logging.warning('Bad JSON request: %s', e)
            self.error(400)
            self.response.write('Invalid request')
            return
Exemplo n.º 4
0
    def get(self, url_nonce):
        util.EnableCors(self)
        user = model.User.all().filter('url_nonce =', url_nonce).get()
        if user is None:
            self.error(404)
            self.response.write('user not found')
            return

        # maybe we should do sum instead?
        biggest_pledge = None
        biggest_amount = 0
        for pledge in itertools.chain(
                model.Pledge.all().filter('email =', user.email),
                model.WpPledge.all().filter('email =', user.email)):
            if (pledge.amountCents or 0) >= biggest_amount:
                biggest_pledge = pledge
                biggest_amount = (pledge.amountCents or 0)

        if biggest_pledge is None:
            self.error(404)
            self.response.write("user not found")
            return

        cc_user_name = None
        cc_zip_code = None
        stripe.api_key = env.get_env().stripe_backend.stripe_private_key
        if biggest_pledge.stripeCustomer:
            cus = stripe.Customer.retrieve(biggest_pledge.stripeCustomer)

            if len(cus.sources.data) > 0:
                cc_user_name = cus.sources.data[0].name
                cc_zip_code = cus.sources.data[0].address_zip

        if user.first_name or user.last_name:
            # TODO(jt): we should backfill this information
            user_name = "%s %s" % (user.first_name or "", user.last_name or "")
        else:
            user_name = cc_user_name

        zip_code = cc_zip_code

        self.response.headers['Content-Type'] = 'application/javascript'
        self.response.write(
            json.dumps({
                "user": {
                    "name": user_name,
                    "email": user.email,
                    "pledge_amount_cents": biggest_amount,
                    "zip_code": zip_code
                }
            }))
Exemplo n.º 5
0
    def post(self):
        data = json.loads(self.request.body)
        ascii_name = data["name"].encode('ascii', errors='ignore')
        ascii_email = data["email"].encode('ascii', errors='ignore')
        ascii_subject = data["subject"].encode('ascii', errors='ignore')
        ascii_body = data["body"].encode('ascii', errors='ignore')

        replyto = '%s <%s>' % (ascii_name, ascii_email)
        message = mail.EmailMessage(
            sender=('MayOne no-reply <noreply@%s.appspotmail.com>' %
                    model.Config.get().app_name),
            reply_to=replyto,
            subject=ascii_subject)
        message.to = "*****@*****.**"
        message.body = 'FROM: %s\n\n%s' % (ascii_email, ascii_body)
        message.send()
        util.EnableCors(self)
        self.response.write('Ok.')
Exemplo n.º 6
0
    def post(self):
        env = self.app.config['env']
        util.EnableCors(self)
        email, candidates = json.loads(self.request.body).popitem()
        for candidate in candidates:
            model.CandidateVote.tally(email, candidate)

        # need to change this to use the actual name
        format_kwargs = {
            'name': email.encode('utf-8'),
        }

        text_body = open('email/voting-thank-you.txt').read().format(
            **format_kwargs)
        html_body = open('email/voting-thank-you.html').read().format(
            **format_kwargs)

        env.mail_sender.Send(to=email.encode('utf-8'),
                             subject='Thanks for voting',
                             text_body=text_body,
                             html_body=html_body)
Exemplo n.º 7
0
    def post(self):
        env = self.app.config['env']
        util.EnableCors(self)
        email, issues = json.loads(self.request.body).popitem()
        for issue in issues:
            model.IssueVote.tally(email, issue)

        # need to change this to use the actual name
        format_kwargs = {
            'name': email.encode('utf-8'),
        }

        text_body = open('email/issue-survey-response.txt').read().format(
            **format_kwargs)
        html_body = open('email/issue-survey-response.html').read().format(
            **format_kwargs)

        env.mail_sender.Send(to=email.encode('utf-8'),
                             subject='Thank you for making your voice heard',
                             text_body=text_body,
                             html_body=html_body)
Exemplo n.º 8
0
    def get(self, url_nonce):
        util.EnableCors(self)
        user = model.User.all().filter('url_nonce =', url_nonce).get()
        if user is None:
            self.error(404)
            self.response.write('user not found')
            return

        num_donations = 0
        amount_donations = 0

        for pledge in model.Pledge.all().filter('email =', user.email):
            num_donations += 1
            amount_donations += pledge.amountCents
            pledge.allowUpton = True
            pledge.put()

        template_vars = {
            'num_donations': num_donations,
            'amount_donations': amount_donations / 100,
            'email': user.email
        }
        template = templates.GetTemplate('upton-update.html')
        self.response.write(template.render(template_vars))
Exemplo n.º 9
0
    def post(self):
        util.EnableCors(self)
        env = self.app.config['env']

        logging.info('body: %s' % self.request.body)

        email_input = cgi.escape(self.request.get('email'))
        if len(email_input) == 0:
            logging.warning("Bad Request: required field (email) missing.")
            self.error(400)
            return

        redirect_input = cgi.escape(self.request.get('redirect'))
        dont_redirect = cgi.escape(self.request.get('dont_redirect'))

        if dont_redirect != '':
            dont_redirect = True
        if redirect_input != '':
            dont_redirect = False

        is_supporter = cgi.escape(self.request.get('is_supporter'))
        if type(is_supporter) != bool:
            is_supporter = False

        first_name = cgi.escape(self.request.get('first_name'))
        if len(first_name) == 0:
            first_name = None

        last_name = cgi.escape(self.request.get('last_name'))
        if len(last_name) == 0:
            last_name = None

        phone_input = cgi.escape(self.request.get('phone'))
        if len(phone_input) == 0:
            phone_input = None

        zipcode_input = cgi.escape(self.request.get('zipcode'))
        if len(zipcode_input) == 0:
            zipcode_input = None

        phone_input = cgi.escape(self.request.get('phone'))
        if len(phone_input) == 0:
            phone_input = None

        volunteer_input = cgi.escape(
            self.request.get('volunteer'))  # "YES" or "NO"
        if volunteer_input == 'Yes':
            volunteer_input = 'Yes'
            format_kwargs = {'name': email_input.encode('utf-8')}

            if first_name != '':
                format_kwargs['name'] = first_name

            text_body = open('email/volunteer-thank-you.txt').read().format(
                **format_kwargs)
            html_body = open('email/volunteer-thank-you.html').read().format(
                **format_kwargs)

            env.mail_sender.Send(
                to=email_input.encode('utf-8'),
                subject='Thank you for signing up to volunteer',
                text_body=text_body,
                html_body=html_body)

        elif volunteer_input == 'off':
            volunteer_input = ''

        # Free text, limited to 255 char
        skills_input = cgi.escape(self.request.get('skills'))
        if len(skills_input) == 0:
            skills_input = None

        rootstrikers_input = cgi.escape(
            self.request.get('rootstrikers'))  # Free text, limited to 255 char
        if rootstrikers_input == 'on':
            rootstrikers_input = 'Yes'
        elif rootstrikers_input == 'off':
            rootstrikers_input = ''

        source_input = cgi.escape(self.request.get('source'))
        if len(source_input) == 0:
            source_input = 'subscribe'

        pledgePageSlug_input = cgi.escape(self.request.get('pledgePageSlug'))
        if len(pledgePageSlug_input) == 0:
            pledgePageSlug_input = ''

        otherVars = {}
        # get any parameter that looks like MERGE something
        for argName in self.request.arguments():
            if argName.startswith('MERGE'):
                arg = self.request.get(argName)
                otherVars[argName] = arg
        NationBuilderVars = {}
        for argName in self.request.arguments():
            if argName.startswith('NationBuilder'):
                arg = self.request.get(argName)
                NationBuilderVars[argName[13:]] = arg

        env.mailing_list_subscriber.Subscribe(
            email=email_input,
            first_name=first_name,
            last_name=last_name,
            amount_cents=None,
            ip_addr=self.request.remote_addr,
            time=datetime.datetime.now(),
            source=source_input,
            phone=phone_input,
            zipcode=zipcode_input,
            volunteer=volunteer_input,
            skills=skills_input,
            rootstrikers=rootstrikers_input,
            pledgePageSlug=pledgePageSlug_input,
            otherVars=otherVars,
            is_supporter=is_supporter,
            nationBuilderVars=NationBuilderVars)

        if dont_redirect == False:
            if len(redirect_input) > 0:
                redirect_url = '%s?email=%s&source=%s' % (
                    redirect_input, email_input, source_input)
            else:
                redirect_url = '/donate?email=%s' % email_input
            self.redirect(str(redirect_url))
        else:
            pass
Exemplo n.º 10
0
 def options(self):
     util.EnableCors(self)
Exemplo n.º 11
0
 def get(self):
     util.EnableCors(self)
     self.response.headers['Content-Type'] = 'application/json'
     json.dump(dict({}), self.response)  # TODO -- return something sensible
Exemplo n.º 12
0
 def post(self):
     util.EnableCors(self)
     email, candidates = json.loads(self.request.body).popitem()
     for candidate in candidates:
         model.CandidateVote.tally(email, candidate)
Exemplo n.º 13
0
 def post(self):
     util.EnableCors(self)
     email, issues = json.loads(self.request.body).popitem()
     for issue in issues:
         model.IssueVote.tally(email, issue)
Exemplo n.º 14
0
    def post(self):
        env = self.app.config['env']

        logging.info('body: %s' % self.request.body)

        email_input = cgi.escape(self.request.get('email'))
        if len(email_input) == 0:
            logging.warning("Bad Request: required field (email) missing.")
            self.error(400)
            return

        first_name = cgi.escape(self.request.get('first_name'))
        if len(first_name) == 0:
            first_name = None

        last_name = cgi.escape(self.request.get('last_name'))
        if len(last_name) == 0:
            last_name = None

        phone_input = cgi.escape(self.request.get('phone'))
        if len(phone_input) == 0:
            phone_input = None

        zipcode_input = cgi.escape(self.request.get('zipcode'))
        if len(zipcode_input) == 0:
            zipcode_input = None

        phone_input = cgi.escape(self.request.get('phone'))
        if len(phone_input) == 0:
            phone_input = None

        volunteer_input = cgi.escape(
            self.request.get('volunteer'))  # "YES" or "NO"
        if volunteer_input == 'on':
            volunteer_input = 'Yes'
        elif volunteer_input == 'off':
            volunteer_input = ''

        skills_input = cgi.escape(
            self.request.get('skills'))  #Free text, limited to 255 char
        if len(skills_input) == 0:
            skills_input = None

        rootstrikers_input = cgi.escape(
            self.request.get('rootstrikers'))  #Free text, limited to 255 char
        if rootstrikers_input == 'on':
            rootstrikers_input = 'Yes'
        elif rootstrikers_input == 'off':
            rootstrikers_input = ''

        source_input = cgi.escape(self.request.get('source'))
        if len(source_input) == 0:
            source_input = 'subscribe'

        pledgePageSlug_input = cgi.escape(self.request.get('pledgePageSlug'))
        if len(pledgePageSlug_input) == 0:
            pledgePageSlug_input = ''

        otherVars = {}
        # get any parameter that looks like MERGE something
        for argName in self.request.arguments():
            if argName.startswith('MERGE'):
                arg = self.request.get(argName)
                otherVars[argName] = arg

        env.mailing_list_subscriber.Subscribe(
            email=email_input,
            first_name=first_name,
            last_name=last_name,
            amount_cents=None,
            ip_addr=self.request.remote_addr,
            time=datetime.datetime.now(),
            source=source_input,
            phone=phone_input,
            zipcode=zipcode_input,
            volunteer=volunteer_input,
            skills=skills_input,
            rootstrikers=rootstrikers_input,
            pledgePageSlug=pledgePageSlug_input,
            otherVars=otherVars)

        util.EnableCors(self)
        redirect_input = cgi.escape(self.request.get('redirect'))
        if len(redirect_input) > 0:
            redirect_url = '%s?email=%s&source=%s' % (
                redirect_input, email_input, source_input)
        else:
            redirect_url = '/pledge?email=%s' % email_input
        self.redirect(str(redirect_url))