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 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")
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))
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 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')