Skip to content

Commit 352da6b

Browse files
Allow sites to request several CORS permissions at once (#2631)
* Allow sites to request several CORS permissions at once * Fix typo * Don't wait for CORS site download
1 parent 288050e commit 352da6b

File tree

1 file changed

+41
-15
lines changed

1 file changed

+41
-15
lines changed

plugins/Cors/CorsPlugin.py

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import html
33
import copy
44
import os
5+
import gevent
56

67
from Plugin import PluginManager
78
from Translate import Translate
@@ -74,28 +75,53 @@ def actionOptionalFileInfo(self, to, inner_path, *args, **kwargs):
7475
return self.corsFuncWrapper("actionOptionalFileInfo", to, inner_path, *args, **kwargs)
7576

7677
def actionCorsPermission(self, to, address):
77-
site = self.server.sites.get(address)
78-
if site:
79-
site_name = site.content_manager.contents.get("content.json", {}).get("title", address)
80-
button_title = _["Grant"]
78+
if isinstance(address, list):
79+
addresses = address
8180
else:
82-
site_name = address
83-
button_title = _["Grant & Add"]
84-
85-
if site and "Cors:" + address in self.permissions:
81+
addresses = [address]
82+
83+
button_title = _["Grant"]
84+
site_names = []
85+
site_addresses = []
86+
for address in addresses:
87+
site = self.server.sites.get(address)
88+
if site:
89+
site_name = site.content_manager.contents.get("content.json", {}).get("title", address)
90+
else:
91+
site_name = address
92+
# If at least one site is not downloaded yet, show "Grant & Add" instead
93+
button_title = _["Grant & Add"]
94+
95+
if not (site and "Cors:" + address in self.permissions):
96+
# No site or no permission
97+
site_names.append(site_name)
98+
site_addresses.append(address)
99+
100+
if len(site_names) == 0:
86101
return "ignored"
87102

88103
self.cmd(
89104
"confirm",
90-
[_["This site requests <b>read</b> permission to: <b>%s</b>"] % html.escape(site_name), button_title],
91-
lambda res: self.cbCorsPermission(to, address)
105+
[_["This site requests <b>read</b> permission to: <b>%s</b>"] % ", ".join(map(html.escape, site_names)), button_title],
106+
lambda res: self.cbCorsPermission(to, site_addresses)
92107
)
93108

94-
def cbCorsPermission(self, to, address):
95-
self.actionPermissionAdd(to, "Cors:" + address)
96-
site = self.server.sites.get(address)
97-
if not site:
98-
self.server.site_manager.need(address)
109+
def cbCorsPermission(self, to, addresses):
110+
# Add permissions
111+
for address in addresses:
112+
permission = "Cors:" + address
113+
if permission not in self.site.settings["permissions"]:
114+
self.site.settings["permissions"].append(permission)
115+
116+
self.site.saveSettings()
117+
self.site.updateWebsocket(permission_added=permission)
118+
119+
self.response(to, "ok")
120+
121+
for address in addresses:
122+
site = self.server.sites.get(address)
123+
if not site:
124+
gevent.spawn(self.server.site_manager.need, address)
99125

100126

101127
@PluginManager.registerTo("UiRequest")

0 commit comments

Comments
 (0)