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))
コード例 #2
0
    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)
コード例 #3
0
    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))
コード例 #4
0
    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)
コード例 #5
0
    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))
コード例 #6
0
    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)
コード例 #7
0
    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))
コード例 #8
0
    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)
コード例 #10
0
    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))
コード例 #11
0
    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))