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
This commit is contained in:
parent
288050e5b4
commit
352da6bf62
1 changed files with 40 additions and 14 deletions
|
@ -2,6 +2,7 @@ import re
|
||||||
import html
|
import html
|
||||||
import copy
|
import copy
|
||||||
import os
|
import os
|
||||||
|
import gevent
|
||||||
|
|
||||||
from Plugin import PluginManager
|
from Plugin import PluginManager
|
||||||
from Translate import Translate
|
from Translate import Translate
|
||||||
|
@ -74,28 +75,53 @@ class UiWebsocketPlugin(object):
|
||||||
return self.corsFuncWrapper("actionOptionalFileInfo", to, inner_path, *args, **kwargs)
|
return self.corsFuncWrapper("actionOptionalFileInfo", to, inner_path, *args, **kwargs)
|
||||||
|
|
||||||
def actionCorsPermission(self, to, address):
|
def actionCorsPermission(self, to, address):
|
||||||
|
if isinstance(address, list):
|
||||||
|
addresses = address
|
||||||
|
else:
|
||||||
|
addresses = [address]
|
||||||
|
|
||||||
|
button_title = _["Grant"]
|
||||||
|
site_names = []
|
||||||
|
site_addresses = []
|
||||||
|
for address in addresses:
|
||||||
site = self.server.sites.get(address)
|
site = self.server.sites.get(address)
|
||||||
if site:
|
if site:
|
||||||
site_name = site.content_manager.contents.get("content.json", {}).get("title", address)
|
site_name = site.content_manager.contents.get("content.json", {}).get("title", address)
|
||||||
button_title = _["Grant"]
|
|
||||||
else:
|
else:
|
||||||
site_name = address
|
site_name = address
|
||||||
|
# If at least one site is not downloaded yet, show "Grant & Add" instead
|
||||||
button_title = _["Grant & Add"]
|
button_title = _["Grant & Add"]
|
||||||
|
|
||||||
if site and "Cors:" + address in self.permissions:
|
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"
|
return "ignored"
|
||||||
|
|
||||||
self.cmd(
|
self.cmd(
|
||||||
"confirm",
|
"confirm",
|
||||||
[_["This site requests <b>read</b> permission to: <b>%s</b>"] % html.escape(site_name), button_title],
|
[_["This site requests <b>read</b> permission to: <b>%s</b>"] % ", ".join(map(html.escape, site_names)), button_title],
|
||||||
lambda res: self.cbCorsPermission(to, address)
|
lambda res: self.cbCorsPermission(to, site_addresses)
|
||||||
)
|
)
|
||||||
|
|
||||||
def cbCorsPermission(self, to, address):
|
def cbCorsPermission(self, to, addresses):
|
||||||
self.actionPermissionAdd(to, "Cors:" + address)
|
# 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)
|
site = self.server.sites.get(address)
|
||||||
if not site:
|
if not site:
|
||||||
self.server.site_manager.need(address)
|
gevent.spawn(self.server.site_manager.need, address)
|
||||||
|
|
||||||
|
|
||||||
@PluginManager.registerTo("UiRequest")
|
@PluginManager.registerTo("UiRequest")
|
||||||
|
|
Loading…
Reference in a new issue