Forking what is left of ZeroNet and hopefully adding an AT Proto Frontend/Proxy

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

authored by

Ivanq and committed by
GitHub
352da6bf 288050e5

+40 -14
+40 -14
plugins/Cors/CorsPlugin.py
··· 2 2 import html 3 3 import copy 4 4 import os 5 + import gevent 5 6 6 7 from Plugin import PluginManager 7 8 from Translate import Translate ··· 74 75 return self.corsFuncWrapper("actionOptionalFileInfo", to, inner_path, *args, **kwargs) 75 76 76 77 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 81 80 else: 82 - site_name = address 83 - button_title = _["Grant & Add"] 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) 84 99 85 - if site and "Cors:" + address in self.permissions: 100 + if len(site_names) == 0: 86 101 return "ignored" 87 102 88 103 self.cmd( 89 104 "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) 92 107 ) 93 108 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) 99 125 100 126 101 127 @PluginManager.registerTo("UiRequest")