api/router: Add support for hidden services/methods.

BUG=None
TEST=./run_pytest

Cq-Depend: chromium:2728532
Change-Id: I72e57fa74f9ea2cb0044228553d3b6b248b76262
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2729182
Tested-by: Alex Klein <saklein@chromium.org>
Reviewed-by: LaMont Jones <lamontjones@chromium.org>
Commit-Queue: Alex Klein <saklein@chromium.org>
diff --git a/api/router.py b/api/router.py
index f556552..04b462d 100644
--- a/api/router.py
+++ b/api/router.py
@@ -170,7 +170,19 @@
     """List all methods registered with the router."""
     services = []
     for service_name, (svc, _module) in self._services.items():
+      svc_visibility = getattr(
+          svc.GetOptions().Extensions[self._svc_options_ext],
+          'service_visibility', build_api_pb2.LV_VISIBLE)
+      if svc_visibility == build_api_pb2.LV_HIDDEN:
+        continue
+
       for method_name in svc.methods_by_name.keys():
+        method_options = self._get_method_options(service_name, method_name)
+        method_visibility = getattr(method_options, 'method_visibility',
+                                    build_api_pb2.LV_VISIBLE)
+        if method_visibility == build_api_pb2.LV_HIDDEN:
+          continue
+
         services.append('%s/%s' % (service_name, method_name))
 
     return sorted(services)