def post(self): self.verify_permissions() suggestion_id = int(self.request.get("suggestion_id")) verdict = self.request.get("verdict") message = self.request.get("user_message") admin_email_body = None email_body = None user = None event_key = None status = '' if verdict == "accept": status = 'accept' auth_id, user, event_key, email_body = self._process_accepted(suggestion_id, message) admin_email_body = """{} ({}) has accepted the request with the following message: {} View the key: https://www.thebluealliance.com/admin/api_auth/edit/{} """.format(self.user_bundle.account.display_name, self.user_bundle.account.email, message, auth_id) elif verdict == "reject": suggestion = Suggestion.get_by_id(suggestion_id) event_key = suggestion.contents['event_key'] user = suggestion.author.get() event = Event.get_by_id(event_key) suggestion.review_state = Suggestion.REVIEW_REJECTED suggestion.reviewer = self.user_bundle.account.key suggestion.reviewed_at = datetime.now() suggestion.put() status = 'reject' email_body = """Hi {}, We have reviewer your request for auth tokens for {} {} and have regretfully declined with the following message: {} If you have any questions, please don't hesitate to reach out to us at [email protected] Thanks, TBA Admins """.format(user.display_name, event.year, event.name, message) admin_email_body = """{} ({}) has rejected this request with the following reason: {} """.format(self.user_bundle.account.display_name, self.user_bundle.account.email, message) # Notify the user their keys are available if email_body: mail.send_mail(sender="The Blue Alliance Contact <*****@*****.**>", to=user.email, subject="The Blue Alliance Auth Tokens for {}".format(event_key), body=email_body) if admin_email_body: # Subject should match the one in suggest_apiwrite_controller subject = "Trusted API Key Request for {}".format(event_key) SuggestionNotifier.send_admin_alert_email(subject, admin_email_body) self.redirect("/suggest/apiwrite/review?success={}".format(status))
def post(self): self._require_registration() event_name = self.request.get("name", None) status, failures = SuggestionCreator.createOffseasonEventSuggestion( author_account_key=self.user_bundle.account.key, name=event_name, start_date=self.request.get("start_date", None), end_date=self.request.get("end_date", None), website=self.request.get("website", None), venue_name=self.request.get("venue_name", None), address=self.request.get("venue_address", None), city=self.request.get("venue_city", None), state=self.request.get("venue_state", None), country=self.request.get("venue_country", None) ) if status != 'success': # Don't completely wipe form data if validation fails self.template_values.update({ 'status': status, 'failures': failures, 'name': self.request.get('name', None), 'start_date': self.request.get('start_date', None), 'end_date': self.request.get('end_date', None), 'website': self.request.get('website', None), 'venue_address': self.request.get('venue_address', None), }) self.response.out.write( jinja2_engine.render('suggest_offseason_event.html', self.template_values)) else: subject, body = self._gen_notification_email(event_name) SuggestionNotifier.send_admin_alert_email(subject, body) self.redirect('/suggest/offseason?status=%s' % status)
def post(self): self.verify_permissions() suggestion_id = int(self.request.get("suggestion_id")) verdict = self.request.get("verdict") message = self.request.get("user_message") admin_email_body = None email_body = None user = None event_key = None status = '' if verdict == "accept": status = 'accept' auth_id, user, event_key, email_body = self._process_accepted(suggestion_id) admin_email_body = """{} ({}) has accepted the request with the following message: {} View the key: https://www.thebluealliance.com/admin/api_auth/edit/{} """.format(self.user_bundle.account.display_name, self.user_bundle.account.email, message, auth_id) elif verdict == "reject": suggestion = Suggestion.get_by_id(suggestion_id) event_key = suggestion.contents['event_key'] user = suggestion.author.get() event = Event.get_by_id(event_key) self._process_rejected(suggestion.key.id()) status = 'reject' email_body = """Hi {}, We have reviewer your request for auth tokens for {} {} and have regretfully declined with the following message: {} If you have any questions, please don't hesitate to reach out to us at [email protected] Thanks, TBA Admins """.format(user.display_name, event.year, event.name, message) admin_email_body = """{} ({}) has rejected this request with the following reason: {} """.format(self.user_bundle.account.display_name, self.user_bundle.account.email, message) # Notify the user their keys are available if email_body: mail.send_mail(sender="The Blue Alliance Contact <*****@*****.**>", to=user.email, subject="The Blue Alliance Auth Tokens for {}".format(event_key), body=email_body) if admin_email_body: # Subject should match the one in suggest_apiwrite_controller subject = "Trusted API Key Request for {}".format(event_key) SuggestionNotifier.send_admin_alert_email(subject, admin_email_body) self.redirect("/suggest/apiwrite/review?success={}".format(status))
def post(self): self._require_login() auth_types = self.request.get_all("auth_types", []) clean_auth_types = filter(lambda a: int(a) in AuthType.type_names.keys(), auth_types) event_key = self.request.get("event_key", None) status = SuggestionCreator.createApiWriteSuggestion( author_account_key=self.user_bundle.account.key, event_key=event_key, affiliation=self.request.get("role", None), auth_types=clean_auth_types, ) if status == 'success': subject, body = self._gen_notification_email(event_key, self.user_bundle) SuggestionNotifier.send_admin_alert_email(subject, body) self.redirect('/request/apiwrite?status={}'.format(status), abort=True)
def post(self): self._require_registration() team_key = self.request.get("team_key") year_str = self.request.get("year") status, suggestion = SuggestionCreator.createTeamMediaSuggestion( author_account_key=self.user_bundle.account.key, media_url=self.request.get("media_url"), team_key=team_key, year_str=year_str) if status == 'success' and suggestion.contents.get('media_type') == MediaType.GRABCAD: # Send an update to the frcdesigns slack slack_sitevar = Sitevar.get_or_insert('slack.hookurls') if slack_sitevar: slack_url = slack_sitevar.contents.get('tbablog', '') if slack_url: model_details = json.loads(suggestion.contents['details_json']) message_body = "{0} ({1}) has suggested a CAD model for team <https://thebluealliance.com/team/{2}/{3}|{2} in {3}>.".format( self.user_bundle.account.display_name, self.user_bundle.account.email, team_key[3:], year_str) image_attachment = { "footer": "<https://www.thebluealliance.com/suggest/cad/review|See all suggestions> on The Blue Alliance", "fallback": "CAD model", "title": model_details['model_name'], "title_link": "https://grabcad.com/library/{}".format(suggestion.contents['foreign_key']), "image_url": model_details['model_image'].replace('card.jpg', 'large.png'), "fields": [ { "title": "Accept", "value": "<https://www.thebluealliance.com/suggest/cad/review?action=accept&id={}|Click Here>".format(suggestion.key.id()), "short": True, }, { "title": "Reject", "value": "<https://www.thebluealliance.com/suggest/cad/review?action=reject&id={}|Click Here>".format(suggestion.key.id()), "short": True, } ], } SuggestionNotifier.send_slack_alert(slack_url, message_body, [image_attachment]) self.redirect('/suggest/team/media?team_key=%s&year=%s&status=%s' % (team_key, year_str, status))
def post(self): self._require_login() auth_types = self.request.get_all("auth_types", []) clean_auth_types = filter( lambda a: int(a) in AuthType.type_names.keys(), auth_types) event_key = self.request.get("event_key", None) status = SuggestionCreator.createApiWriteSuggestion( author_account_key=self.user_bundle.account.key, event_key=event_key, affiliation=self.request.get("role", None), auth_types=clean_auth_types, ) if status == 'success': subject, body = self._gen_notification_email( event_key, self.user_bundle) SuggestionNotifier.send_admin_alert_email(subject, body) self.redirect('/request/apiwrite?status={}'.format(status), abort=True)
def post(self): self._require_login() auth_types = self.request.get_all("auth_types", []) clean_auth_types = filter(lambda a: int(a) in AuthType.type_names.keys(), auth_types) event_key = self.request.get("event_key", None) status = SuggestionCreator.createApiWriteSuggestion( author_account_key=self.user_bundle.account.key, event_key=event_key, affiliation=self.request.get("role", None), auth_types=clean_auth_types, ) if status == 'success': subject, body = self._gen_notification_email(event_key, self.user_bundle) SuggestionNotifier.send_admin_alert_email(subject, body) self.template_values.update({ 'status': status, "auth_types": AuthType.type_names, }) self.response.out.write( jinja2_engine.render('suggest_apiwrite.html', self.template_values))
def _fastpath_review(self): self.verify_permissions() suggestion = Suggestion.get_by_id(self.request.get('id')) status = None if suggestion and suggestion.target_model == 'robot': if suggestion.review_state == Suggestion.REVIEW_PENDING: slack_message = None if self.request.get('action') == 'accept': self._process_accepted(suggestion.key.id()) status = 'accepted' slack_message = "{0} ({1}) accepted the <https://grabcad.com/library/{2}|suggestion> for team <https://thebluealliance.com/team/{3}/{4}|{3} in {4}>".format( self.user_bundle.account.display_name, self.user_bundle.account.email, suggestion.contents['foreign_key'], suggestion.contents['reference_key'][3:], suggestion.contents['year']) elif self.request.get('action') == 'reject': self._process_rejected(suggestion.key.id()) status = 'rejected' slack_message = "{0} ({1}) rejected the <https://grabcad.com/library/{2}|suggestion> for team <https://thebluealliance.com/team/{3}/{4}|{3} in {4}>".format( self.user_bundle.account.display_name, self.user_bundle.account.email, suggestion.contents['foreign_key'], suggestion.contents['reference_key'][3:], suggestion.contents['year']) if slack_message: slack_sitevar = Sitevar.get_or_insert('slack.hookurls') if slack_sitevar: slack_url = slack_sitevar.contents.get('tbablog', '') SuggestionNotifier.send_slack_alert( slack_url, slack_message) else: status = 'already_reviewed' else: status = 'bad_suggestion' if status: self.redirect('/suggest/review?status={}'.format(status), abort=True)
def _fastpath_review(self): self.verify_permissions() suggestion = Suggestion.get_by_id(self.request.get("id")) status = None if suggestion and suggestion.target_model == "robot": if suggestion.review_state == Suggestion.REVIEW_PENDING: slack_message = None if self.request.get("action") == "accept": self._process_accepted(suggestion.key.id()) status = "accepted" slack_message = "{0} ({1}) accepted the <https://grabcad.com/library/{2}|suggestion> for team <https://thebluealliance.com/team/{3}/{4}|{3} in {4}>".format( self.user_bundle.account.display_name, self.user_bundle.account.email, suggestion.contents["foreign_key"], suggestion.contents["reference_key"][3:], suggestion.contents["year"], ) elif self.request.get("action") == "reject": self._process_rejected(suggestion.key.id()) status = "rejected" slack_message = "{0} ({1}) rejected the <https://grabcad.com/library/{2}|suggestion> for team <https://thebluealliance.com/team/{3}/{4}|{3} in {4}>".format( self.user_bundle.account.display_name, self.user_bundle.account.email, suggestion.contents["foreign_key"], suggestion.contents["reference_key"][3:], suggestion.contents["year"], ) if slack_message: slack_sitevar = Sitevar.get_or_insert("slack.hookurls") if slack_sitevar: slack_url = slack_sitevar.contents.get("tbablog", "") SuggestionNotifier.send_slack_alert(slack_url, slack_message) else: status = "already_reviewed" else: status = "bad_suggestion" if status: self.redirect("/suggest/review?status={}".format(status), abort=True)
def post(self): self._require_login() auth_types = self.request.get_all("auth_types", []) clean_auth_types = filter( lambda a: int(a) in AuthType.type_names.keys(), auth_types) event_key = self.request.get("event_key", None) status = SuggestionCreator.createApiWriteSuggestion( author_account_key=self.user_bundle.account.key, event_key=event_key, affiliation=self.request.get("role", None), auth_types=clean_auth_types, ) if status == 'success': subject, body = self._gen_notification_email( event_key, self.user_bundle) SuggestionNotifier.send_admin_alert_email(subject, body) self.template_values.update({ 'status': status, "auth_types": AuthType.type_names, }) self.response.out.write( jinja2_engine.render('suggest_apiwrite.html', self.template_values))
def post(self): self._require_registration() team_key = self.request.get("team_key") year_str = self.request.get("year") status, suggestion = SuggestionCreator.createTeamMediaSuggestion( author_account_key=self.user_bundle.account.key, media_url=self.request.get("media_url"), team_key=team_key, year_str=year_str) if status == 'success' and suggestion.contents.get( 'media_type') == MediaType.GRABCAD: # Send an update to the frcdesigns slack slack_sitevar = Sitevar.get_or_insert('slack.hookurls') if slack_sitevar: slack_url = slack_sitevar.contents.get('tbablog', '') if slack_url: model_details = json.loads( suggestion.contents['details_json']) message_body = "{0} ({1}) has suggested a CAD model for team <https://thebluealliance.com/team/{2}/{3}|{2} in {3}>.".format( self.user_bundle.account.display_name, self.user_bundle.account.email, team_key[3:], year_str) image_attachment = { "footer": "<https://www.thebluealliance.com/suggest/cad/review|See all suggestions> on The Blue Alliance", "fallback": "CAD model", "title": model_details['model_name'], "title_link": "https://grabcad.com/library/{}".format( suggestion.contents['foreign_key']), "image_url": model_details['model_image'].replace( 'card.jpg', 'large.png'), "fields": [{ "title": "Accept", "value": "<https://www.thebluealliance.com/suggest/cad/review?action=accept&id={}|Click Here>" .format(suggestion.key.id()), "short": True, }, { "title": "Reject", "value": "<https://www.thebluealliance.com/suggest/cad/review?action=reject&id={}|Click Here>" .format(suggestion.key.id()), "short": True, }], } SuggestionNotifier.send_slack_alert( slack_url, message_body, [image_attachment]) self.redirect('/suggest/team/media?team_key=%s&year=%s&status=%s' % (team_key, year_str, status))