def post(self): game_id = self.request.get("game") voter_id = self.request.get("player") voter = Player.get_by_id(int(voter_id)) game = Game.get_by_id(int(game_id)) value = base64.urlsafe_b64encode(os.urandom(16)) token = Token(value=value, voter=voter.key, game=game.key, used=False) token.put() url = "http://vote.ouarfc.co.uk/vote/" + value self.response.out.write(url)
def post(self): token_string = self.request.get("token") token = Token.query(Token.value == token_string).get() if not token: template = jinja_environment.get_template("templates/error.html") self.response.out.write(template.render({'errmsg': "invalid voting token"})) return if token.used: template = jinja_environment.get_template("templates/error.html") self.response.out.write(template.render({'errmsg': "You've already voted!"})) return game = token.game voter = token.voter three = self.request.get("three") two = self.request.get("two") one = self.request.get("one") if one in [two, three] or two == three: return self.redirect("/vote/" + token.value + "?err=" + str(ERROR_DUPLICATE_VOTE)) if str(voter.id()) in [one, two, three]: return self.redirect("/vote/" + token.value + "?err=" + str(ERROR_VOTE_FOR_SELF)) three_player = Player.get_by_id(int(three)) two_player = Player.get_by_id(int(two)) one_player = Player.get_by_id(int(one)) vote = Vote(game=game, three=three_player.key, two=two_player.key, one=one_player.key) token.used = True vote.put() token.put() template = jinja_environment.get_template('templates/success.html') self.response.out.write(template.render({}))
def post(self): player_id = self.request.get("player_id") player = Player.get_by_id(int(player_id)) if not player: self.response.out.write("Error: invalid player ID") logging.error("Invalid player ID: " + str(player_id)) name = self.request.get("name") email = self.request.get("email") phone = self.request.get("phone") if not name: self.redirect( "http://vote.ouarfc.co.uk/admin/edit_player/" + str(player_id) + "?err=" + str(ERROR_NO_NAME)) return if not email: self.redirect( "http://vote.ouarfc.co.uk/admin/edit_player/" + str(player_id) + "?err=" + str(ERROR_NO_EMAIL)) return if phone: # Remove special characters phone = re.sub('[\s+=\-.]','',phone) # Place UK area code at start phone = re.sub('^0','44', phone) if phone.isdigit(): player.phone = phone else: self.redirect( "http://vote.ouarfc.co.uk/admin/edit_player/" + str(player_id) + "?err=" + str(ERROR_INVALID_PHONE)) return else: player.phone = None player.name = name player.email = email player.put() template = jinja_environment.get_template("templates/player_saved.html") self.response.out.write(template.render({'name':name}))
def get(self, player_id=None): if not player_id: template = jinja_environment.get_template("templates/player_list.html") players = Player.query().order(Player.name).fetch(1000) self.response.out.write(template.render({'players':players})) return errmsg = None if self.request.get("err") == str(ERROR_NO_NAME): errmsg = "You didn't supply a name" elif self.request.get("err") == str(ERROR_NO_EMAIL): errmsg = "You didn't supply an email" elif self.request.get("err") == str(ERROR_INVALID_PHONE): errmsg = "Invalid phone number" player = Player.get_by_id(int(player_id)) if not player: self.response.out.write("Error: invalid player ID") logging.error("Invalid player ID: " + str(player_id)) template = jinja_environment.get_template("templates/add_edit_player.html") self.response.out.write(template.render({'player':player, 'errmsg':errmsg}))
def post(self): player_id = self.request.get("player") game_id = self.request.get("game") player = Player.get_by_id(int(player_id)) game = Game.get_by_id(int(game_id)) token = Token.query(ndb.AND(Token.game == game.key, Token.voter == player.key)).get() if not token: logging.info("No token found for %s. Creating new token.", player.name) token_string = base64.urlsafe_b64encode(os.urandom(16)) token = Token(value=token_string, voter=player.key, game=game.key, used=False) token.put() else: logging.info("Token found for %s.", player.name) if token.used: logging.info("%s has already voted, not sending email.", player.name) return url = "http://vote.ouarfc.co.uk/vote/" + token.value if player.phone: logging.info("Sending SMS to %s", player.name) template = jinja_environment.get_template("templates/sms.txt") sms_data = { "ORIGINATOR": "OUARFC", "NUMBERS": player.phone, "BODY": template.render({"url": url, "opponent": game.opponent, "team": Team.getString(game.team)}), } response = urlfetch.fetch( "https://api.zensend.io/v3/sendsms", payload=urllib.urlencode(sms_data), method=urlfetch.POST, headers={"X-API-KEY": config.zensend_key}, ) content_type = response.headers["content-type"] if content_type is not None and "application/json" in content_type: result = json.loads(response.content) if "success" in result: logging.info("Successfully sent SMS to " + player.phone) if config.phone_only: # SMS was a success, don't send email return elif "failure" in result: failure = result["failure"] logging.error( "SMS send failed. Player: %s, phone: %s, parameter: %s, error code: %s, status code: %s", player.name, player.phone, failure["parameter"], failure["failcode"], response.status_code, ) else: logging.error("SMS send failed. Status code: %s", response.status_code) else: logging.error("SMS send failed. Status code: %s", response.status_code) template = jinja_environment.get_template("templates/email.txt") subject = "OUARFC: Please Vote For Best & Fairest" message = mail.EmailMessage(sender="OUARFC <*****@*****.**>", subject=subject) message.to = player.email message.body = template.render( { "name": player.name, "opponent": game.opponent, "date": game.date, "team": Team.getString(game.team), "url": url, } ) logging.info("Sending email to " + player.email) message.send() logging.info(message.body)