def send_ping(cls, client):
     if client.client_type == ClientType.OS_ANDROID:
         notification = PingNotification()
         notification.send({client.client_type: [client.messaging_id]})
     else:
         # Send iOS/web/webhooks ping via TBANS
         return TBANSHelper.ping(client)
 def send_ping(cls, client):
     if client.client_type == ClientType.OS_ANDROID:
         notification = PingNotification()
         notification.send({client.client_type: [client.messaging_id]})
     else:
         # Send iOS/web/webhooks ping via TBANS
         return TBANSHelper.ping(client)
Beispiel #3
0
    def ping_client(self, request):
        current_user = endpoints.get_current_user()
        if current_user is None:
            return BaseResponse(code=401,
                                message="Unauthorized to ping client")

        user_id = PushHelper.user_email_to_id(current_user.email())
        gcm_id = request.mobile_id

        # Find a Client for the current user with the passed GCM ID
        clients = MobileClient.query(MobileClient.messaging_id == gcm_id,
                                     ancestor=ndb.Key(Account,
                                                      user_id)).fetch(1)
        if len(clients) == 0:
            # No Client for user with that push token - bailing
            return BaseResponse(code=404,
                                message="Invalid push token for user")
        else:
            client = clients[0]
            from helpers.tbans_helper import TBANSHelper
            success = TBANSHelper.ping(client)
            if success:
                return BaseResponse(code=200, message="Ping sent")
            else:
                return BaseResponse(code=500, message="Failed to ping client")
Beispiel #4
0
    def post(self):
        self._require_admin()

        user_id = self.user_bundle.account.key.id()

        notification_type = self.request.get('type')
        if notification_type == "awards":
            event_key = self.request.get('event_key')
            event = Event.get_by_id(event_key)
            if not event:
                self.template_values.update(
                    {'error': 'No event for key {}'.format(event_key)})
                return self.redirect('/admin/tbans')

            TBANSHelper.awards(event, user_id)
        elif notification_type == "ping":
            clients = MobileClient.clients([user_id])
            for client in clients:
                TBANSHelper.ping(client)

        return self.redirect('/admin/tbans')
    def test_ping_webhook(self):
        client = MobileClient(parent=ndb.Key(Account, 'user_id'),
                              user_id='user_id',
                              messaging_id='https://thebluealliance.com',
                              client_type=ClientType.WEBHOOK,
                              secret='secret',
                              display_name='Webhook')

        with patch.object(TBANSHelper, '_ping_webhook',
                          return_value=True) as mock_ping_webhook:
            success = TBANSHelper.ping(client)
            mock_ping_webhook.assert_called_once_with(client)
            self.assertTrue(success)
    def test_ping_client(self):
        client = MobileClient(parent=ndb.Key(Account, 'user_id'),
                              user_id='user_id',
                              messaging_id='token',
                              client_type=ClientType.OS_IOS,
                              device_uuid='uuid',
                              display_name='Phone')

        with patch.object(TBANSHelper, '_ping_client',
                          return_value=True) as mock_ping_client:
            success = TBANSHelper.ping(client)
            mock_ping_client.assert_called_once_with(client)
            self.assertTrue(success)
    def get(self):
        webhooks = MobileClient.query(
            MobileClient.client_type == ClientType.WEBHOOK).fetch()
        failures = []

        from helpers.tbans_helper import TBANSHelper
        for client in webhooks:
            if not TBANSHelper.ping(client):
                failures.append(client.key)

        count = len(failures)
        if failures:
            ndb.delete_multi(failures)
        logging.info("Deleted {} broken webhooks".format(count))

        template_values = {'count': count}
        path = os.path.join(os.path.dirname(__file__),
                            '../../templates/admin/webhooks_clear_do.html')
        self.response.out.write(template.render(path, template_values))
Beispiel #8
0
    def post(self):
        self._require_registration()

        # Check to make sure that they aren't trying to edit another user
        current_user_account_id = self.user_bundle.account.key.id()
        target_account_id = self.request.get('account_id')
        if target_account_id == current_user_account_id:
            client_id = self.request.get('client_id')

            client = MobileClient.get_by_id(int(client_id),
                                            parent=ndb.Key(
                                                Account,
                                                current_user_account_id))
            if client is not None:
                from helpers.tbans_helper import TBANSHelper
                success = TBANSHelper.ping(client)
                if success:
                    return self.redirect('/account?ping_sent=1')
                else:
                    return self.redirect('/account?ping_sent=0')

        self.redirect('/')
 def test_ping_ping_webhook(self):
     TBANSHelper._create_service = self._create_mock_service
     client = MobileClient(client_type=ClientType.WEBHOOK)
     TBANSHelper.ping(client)
 def test_ping_ping_client(self):
     TBANSHelper._create_service = self._create_mock_service
     client = MobileClient(client_type=ClientType.OS_IOS)
     TBANSHelper.ping(client)
 def test_ping_ping_webhook(self):
     TBANSHelper._create_service = self._create_mock_service
     client = MobileClient(client_type=ClientType.WEBHOOK)
     TBANSHelper.ping(client)
 def test_ping_ping_client(self):
     TBANSHelper._create_service = self._create_mock_service
     client = MobileClient(client_type=ClientType.OS_IOS)
     TBANSHelper.ping(client)
    def post(self):
        self._require_admin()

        user_id = self.user_bundle.account.key.id()

        notification_type = self.request.get('type')
        if notification_type == "alliance_selection":
            event_key = self.request.get('event_key')
            event = Event.get_by_id(event_key)
            if not event:
                self.template_values.update({
                    'error': 'No event for key {}'.format(event_key)
                })
                return self.redirect('/admin/tbans')

            TBANSHelper.alliance_selection(event, user_id)
        elif notification_type == "awards":
            event_key = self.request.get('event_key')
            event = Event.get_by_id(event_key)
            if not event:
                self.template_values.update({
                    'error': 'No event for key {}'.format(event_key)
                })
                return self.redirect('/admin/tbans')

            TBANSHelper.awards(event, user_id)
        elif notification_type == "event_level":
            match_key = self.request.get('match_key')
            match = Match.get_by_id(match_key)
            if not match:
                self.template_values.update({
                    'error': 'No match for key {}'.format(match_key)
                })
                return self.redirect('/admin/tbans')

            TBANSHelper.event_level(match, user_id)
        elif notification_type == "event_schedule":
            event_key = self.request.get('event_key')
            event = Event.get_by_id(event_key)
            if not event:
                self.template_values.update({
                    'error': 'No event for key {}'.format(event_key)
                })
                return self.redirect('/admin/tbans')

            TBANSHelper.event_schedule(event, user_id)
        elif notification_type == "match_score":
            match_key = self.request.get('match_key')
            match = Match.get_by_id(match_key)
            if not match:
                self.template_values.update({
                    'error': 'No match for key {}'.format(match_key)
                })
                return self.redirect('/admin/tbans')

            TBANSHelper.match_score(match, user_id)
        elif notification_type == "match_upcoming":
            match_key = self.request.get('match_key')
            match = Match.get_by_id(match_key)
            if not match:
                self.template_values.update({
                    'error': 'No match for key {}'.format(match_key)
                })
                return self.redirect('/admin/tbans')

            TBANSHelper.match_upcoming(match, user_id)
        elif notification_type == "match_video":
            match_key = self.request.get('match_key')
            match = Match.get_by_id(match_key)
            if not match:
                self.template_values.update({
                    'error': 'No match for key {}'.format(match_key)
                })
                return self.redirect('/admin/tbans')

            TBANSHelper.match_video(match, user_id)
        elif notification_type == "ping":
            clients = MobileClient.clients([user_id])
            for client in clients:
                TBANSHelper.ping(client)

        return self.redirect('/admin/tbans')