]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: introduce cli commands to set cors urls 56328/head
authorNizamudeen A <nia@redhat.com>
Wed, 20 Mar 2024 05:51:03 +0000 (11:21 +0530)
committerNizamudeen A <nia@redhat.com>
Mon, 25 Mar 2024 04:55:05 +0000 (10:25 +0530)
The benefit is that this will take care of cherrypy reconfiguration

Fixes: https://tracker.ceph.com/issues/65104
Signed-off-by: Nizamudeen A <nia@redhat.com>
src/pybind/mgr/dashboard/module.py

index 83784197656476ad449948eb2ee96512af299ce6..2149537c157f09aafe9fed00a2e315957b1dc44e 100644 (file)
@@ -456,6 +456,40 @@ class Module(MgrModule, CherryPyConfig):
         mgr.set_store('custom_login_banner', None)
         return HandleCommandResult(stdout='Login banner removed')
 
+    # allow cors by setting cross_origin_url
+    # the value is a comma separated list of URLs
+    @CLIWriteCommand("dashboard set-cross-origin-url")
+    def set_cross_origin_url(self, value: str):
+        cross_origin_urls = self.get_module_option('cross_origin_url', '')
+        cross_origin_urls_list = [url.strip()
+                                  for url in cross_origin_urls.split(',')]  # type: ignore
+        urls = [v.strip() for v in value.split(',')]
+        for url in urls:
+            if url in cross_origin_urls_list:
+                return -errno.EINVAL, '', 'Cross-origin URL already set'
+            cross_origin_urls_list.append(url)
+        self.set_module_option('cross_origin_url', ','.join(cross_origin_urls_list))
+        configure_cors()
+        return 0, 'Cross-origin URL set', ''
+
+    @CLIReadCommand("dashboard get-cross-origin-url")
+    def get_cross_origin_url(self):
+        urls = self.get_module_option('cross_origin_url', '')
+        if urls:
+            return HandleCommandResult(stdout=urls)  # type: ignore
+        return HandleCommandResult(stdout='No cross-origin URL set')
+
+    @CLIReadCommand("dashboard rm-cross-origin-url")
+    def rm_cross_origin_url(self, value: str):
+        urls = self.get_module_option('cross_origin_url', '')
+        urls_list = [url.strip() for url in urls.split(',')]  # type: ignore
+        if value not in urls_list:
+            return -errno.EINVAL, '', 'Cross-origin URL not set'
+        urls_list.remove(value)
+        self.set_module_option('cross_origin_url', ','.join(urls_list))
+        configure_cors()
+        return 0, 'Cross-origin URL removed', ''
+
     def handle_command(self, inbuf, cmd):
         # pylint: disable=too-many-return-statements
         res = handle_option_command(cmd, inbuf)