def ListSubscriptions(): # pylint: disable=unused-variable """List all visible subscriptions based on identity. This is an API handler, which requires that we have an authenticated user making the request. We'll require that the user be a service account (from the main dashboard service). """ try: list_request = json_format.Parse(request.get_data(), sheriff_config_pb2.ListRequest()) except json_format.ParseError as error: return jsonify( {'messages': [{ 'severity': 'ERROR', 'text': '%s' % (error) }]}), 400 list_response = sheriff_config_pb2.ListResponse() configs = list(luci_config.ListAllConfigs(datastore_client)) configs = match_policy.FilterSubscriptionsByIdentity( auth_client, list_request, configs) for config_set, revision, subscription in configs: subscription_metadata = list_response.subscriptions.add() subscription_metadata.config_set = config_set subscription_metadata.revision = revision subscription_metadata.subscription.CopyFrom(subscription) # We shouldn't use patterns outside the sheriff-config in any case. # Maybe allow being explicitily requsted for debug usage later. del subscription_metadata.subscription.patterns[:] return (json_format.MessageToJson(list_response, preserving_proto_field_name=True), 200, { 'Content-Type': 'application/json' })
def testListPrivate(self): configs = [ ('', '', sheriff_pb2.Subscription( name='Private', visibility=sheriff_pb2.Subscription.INTERNAL_ONLY, )), ('', '', sheriff_pb2.Subscription( name='Public', visibility=sheriff_pb2.Subscription.PUBLIC, )), ] http = HttpMockSequenceWithDiscovery([ ({ 'status': '200' }, '{ "is_member": true }'), ({ 'status': '200' }, '{ "is_member": false }'), ]) _ = service_client.CreateServiceClient( 'https://luci-config.appspot.com/_ah/api', 'config', 'v1', http=http) auth_client = service_client.CreateServiceClient( 'https://chrome-infra-auth.appspot.com/_ah/api', 'auth', 'v1', http=http) request = sheriff_config_pb2.ListRequest(identity_email='foo@bar1') configs = match_policy.FilterSubscriptionsByIdentity( auth_client, request, configs) self.assertEqual(['Private', 'Public'], [s.name for _, _, s in configs]) request = sheriff_config_pb2.ListRequest(identity_email='foo@bar2') configs = match_policy.FilterSubscriptionsByIdentity( auth_client, request, configs) self.assertEqual(['Public'], [s.name for _, _, s in configs]) request = sheriff_config_pb2.ListRequest() configs = match_policy.FilterSubscriptionsByIdentity( auth_client, request, configs) self.assertEqual(['Public'], [s.name for _, _, s in configs])