diff --git a/plugins/Cors/CorsPlugin.py b/plugins/Cors/CorsPlugin.py
index 7e6a5ff8..c9437538 100644
--- a/plugins/Cors/CorsPlugin.py
+++ b/plugins/Cors/CorsPlugin.py
@@ -2,6 +2,7 @@ import re
import html
import copy
import os
+import gevent
from Plugin import PluginManager
from Translate import Translate
@@ -74,28 +75,53 @@ class UiWebsocketPlugin(object):
return self.corsFuncWrapper("actionOptionalFileInfo", to, inner_path, *args, **kwargs)
def actionCorsPermission(self, to, address):
- site = self.server.sites.get(address)
- if site:
- site_name = site.content_manager.contents.get("content.json", {}).get("title", address)
- button_title = _["Grant"]
+ if isinstance(address, list):
+ addresses = address
else:
- site_name = address
- button_title = _["Grant & Add"]
+ addresses = [address]
- if site and "Cors:" + address in self.permissions:
+ button_title = _["Grant"]
+ site_names = []
+ site_addresses = []
+ for address in addresses:
+ site = self.server.sites.get(address)
+ if site:
+ site_name = site.content_manager.contents.get("content.json", {}).get("title", address)
+ else:
+ site_name = address
+ # If at least one site is not downloaded yet, show "Grant & Add" instead
+ button_title = _["Grant & Add"]
+
+ if not (site and "Cors:" + address in self.permissions):
+ # No site or no permission
+ site_names.append(site_name)
+ site_addresses.append(address)
+
+ if len(site_names) == 0:
return "ignored"
self.cmd(
"confirm",
- [_["This site requests read permission to: %s"] % html.escape(site_name), button_title],
- lambda res: self.cbCorsPermission(to, address)
+ [_["This site requests read permission to: %s"] % ", ".join(map(html.escape, site_names)), button_title],
+ lambda res: self.cbCorsPermission(to, site_addresses)
)
- def cbCorsPermission(self, to, address):
- self.actionPermissionAdd(to, "Cors:" + address)
- site = self.server.sites.get(address)
- if not site:
- self.server.site_manager.need(address)
+ def cbCorsPermission(self, to, addresses):
+ # Add permissions
+ for address in addresses:
+ permission = "Cors:" + address
+ if permission not in self.site.settings["permissions"]:
+ self.site.settings["permissions"].append(permission)
+
+ self.site.saveSettings()
+ self.site.updateWebsocket(permission_added=permission)
+
+ self.response(to, "ok")
+
+ for address in addresses:
+ site = self.server.sites.get(address)
+ if not site:
+ gevent.spawn(self.server.site_manager.need, address)
@PluginManager.registerTo("UiRequest")