|
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,28 +75,53 @@ def actionOptionalFileInfo(self, to, inner_path, *args, **kwargs): |
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"] |
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: |
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") |
|
0 commit comments