Skip to content

Commit d166a16

Browse files
committed
Use function flagging in plugins
1 parent 1bd1ddf commit d166a16

12 files changed

Lines changed: 75 additions & 90 deletions

File tree

plugins/Bigfile/BigfilePlugin.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
from util import helper
2323
from util import Msgpack
24+
from util.Flag import flag
2425
import util
2526
from .BigfilePiecefield import BigfilePiecefield, BigfilePiecefieldPacked
2627

@@ -167,6 +168,7 @@ def actionBigfileUploadInit(self, to, inner_path, size):
167168
"file_relative_path": file_relative_path
168169
}
169170

171+
@flag.no_multiuser
170172
def actionSiteSetAutodownloadBigfileLimit(self, to, limit):
171173
permissions = self.getPermissions(to)
172174
if "ADMIN" not in permissions:

plugins/Chart/ChartPlugin.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from Config import config
77
from util import helper
8+
from util.Flag import flag
89
from Plugin import PluginManager
910
from .ChartDb import ChartDb
1011
from .ChartCollector import ChartCollector
@@ -28,10 +29,8 @@ def delete(self, address, *args, **kwargs):
2829

2930
@PluginManager.registerTo("UiWebsocket")
3031
class UiWebsocketPlugin(object):
32+
@flag.admin
3133
def actionChartDbQuery(self, to, query, params=None):
32-
if not "ADMIN" in self.permissions:
33-
return {"error": "No permission"}
34-
3534
if config.debug or config.verbose:
3635
s = time.time()
3736
rows = []
@@ -49,10 +48,8 @@ def actionChartDbQuery(self, to, query, params=None):
4948
self.log.debug("Slow query: %s (%.3fs)" % (query, time.time() - s))
5049
return rows
5150

51+
@flag.admin
5252
def actionChartGetPeerLocations(self, to):
53-
if not "ADMIN" in self.permissions:
54-
return {"error": "No permission"}
55-
5653
peers = {}
5754
for site in self.server.sites.values():
5855
peers.update(site.peers)

plugins/ContentFilter/ContentFilterPlugin.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from Plugin import PluginManager
88
from Translate import Translate
99
from Config import config
10+
from util.Flag import flag
1011

1112
from .ContentFilterStorage import ContentFilterStorage
1213

@@ -36,6 +37,7 @@ def cbMuteAdd(self, to, auth_address, cert_user_id, reason):
3637
filter_storage.changeDbs(auth_address, "remove")
3738
self.response(to, "ok")
3839

40+
@flag.no_multiuser
3941
def actionMuteAdd(self, to, auth_address, cert_user_id, reason):
4042
if "ADMIN" in self.getPermissions(to):
4143
self.cbMuteAdd(to, auth_address, cert_user_id, reason)
@@ -46,12 +48,14 @@ def actionMuteAdd(self, to, auth_address, cert_user_id, reason):
4648
lambda res: self.cbMuteAdd(to, auth_address, cert_user_id, reason)
4749
)
4850

51+
@flag.no_multiuser
4952
def cbMuteRemove(self, to, auth_address):
5053
del filter_storage.file_content["mutes"][auth_address]
5154
filter_storage.save()
5255
filter_storage.changeDbs(auth_address, "load")
5356
self.response(to, "ok")
5457

58+
@flag.no_multiuser
5559
def actionMuteRemove(self, to, auth_address):
5660
if "ADMIN" in self.getPermissions(to):
5761
self.cbMuteRemove(to, auth_address)
@@ -63,34 +67,31 @@ def actionMuteRemove(self, to, auth_address):
6367
lambda res: self.cbMuteRemove(to, auth_address)
6468
)
6569

70+
@flag.admin
6671
def actionMuteList(self, to):
67-
if "ADMIN" in self.getPermissions(to):
68-
self.response(to, filter_storage.file_content["mutes"])
69-
else:
70-
return self.response(to, {"error": "Forbidden: Only ADMIN sites can list mutes"})
72+
self.response(to, filter_storage.file_content["mutes"])
7173

7274
# Siteblock
75+
@flag.no_multiuser
76+
@flag.admin
7377
def actionSiteblockAdd(self, to, site_address, reason=None):
74-
if "ADMIN" not in self.getPermissions(to):
75-
return self.response(to, {"error": "Forbidden: Only ADMIN sites can add to blocklist"})
7678
filter_storage.file_content["siteblocks"][site_address] = {"date_added": time.time(), "reason": reason}
7779
filter_storage.save()
7880
self.response(to, "ok")
7981

82+
@flag.no_multiuser
83+
@flag.admin
8084
def actionSiteblockRemove(self, to, site_address):
81-
if "ADMIN" not in self.getPermissions(to):
82-
return self.response(to, {"error": "Forbidden: Only ADMIN sites can remove from blocklist"})
8385
del filter_storage.file_content["siteblocks"][site_address]
8486
filter_storage.save()
8587
self.response(to, "ok")
8688

89+
@flag.admin
8790
def actionSiteblockList(self, to):
88-
if "ADMIN" in self.getPermissions(to):
89-
self.response(to, filter_storage.file_content["siteblocks"])
90-
else:
91-
return self.response(to, {"error": "Forbidden: Only ADMIN sites can list blocklists"})
91+
self.response(to, filter_storage.file_content["siteblocks"])
9292

9393
# Include
94+
@flag.no_multiuser
9495
def actionFilterIncludeAdd(self, to, inner_path, description=None, address=None):
9596
if address:
9697
if "ADMIN" not in self.getPermissions(to):
@@ -122,6 +123,7 @@ def cbFilterIncludeAdd(self, to, res, address, inner_path, description):
122123
filter_storage.includeAdd(address, inner_path, description)
123124
self.response(to, "ok")
124125

126+
@flag.no_multiuser
125127
def actionFilterIncludeRemove(self, to, inner_path, address=None):
126128
if address:
127129
if "ADMIN" not in self.getPermissions(to):

plugins/MergerSite/MergerSitePlugin.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from Translate import Translate
88
from util import RateLimit
99
from util import helper
10+
from util.Flag import flag
1011
from Debug import Debug
1112
try:
1213
import OptionalManager.UiWebsocketPlugin # To make optioanlFileInfo merger sites compatible
@@ -86,6 +87,7 @@ def cbMergerSiteAdd(self, to, addresses):
8687
site_manager.updateMergerSites()
8788

8889
# Delete a merged site
90+
@flag.no_multiuser
8991
def actionMergerSiteDelete(self, to, address):
9092
site = self.server.sites.get(address)
9193
if not site:

plugins/Newsfeed/NewsfeedPlugin.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from Db.DbQuery import DbQuery
66
from Debug import Debug
77
from util import helper
8+
from util.Flag import flag
89

910

1011
@PluginManager.registerTo("UiWebsocket")
@@ -27,10 +28,8 @@ def actionFeedListFollow(self, to):
2728
feeds = self.user.sites.get(self.site.address, {}).get("follow", {})
2829
self.response(to, feeds)
2930

31+
@flag.admin
3032
def actionFeedQuery(self, to, limit=10, day_limit=3):
31-
if "ADMIN" not in self.site.settings["permissions"]:
32-
return self.response(to, "FeedQuery not allowed")
33-
3433
from Site import SiteManager
3534
rows = []
3635
stats = []

plugins/OptionalManager/UiWebsocketPlugin.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from Plugin import PluginManager
99
from Config import config
1010
from util import helper
11+
from util.Flag import flag
1112
from Translate import Translate
1213

1314

@@ -214,6 +215,7 @@ def setPin(self, inner_path, is_pinned, address=None):
214215

215216
return "ok"
216217

218+
@flag.no_multiuser
217219
def actionOptionalFilePin(self, to, inner_path, address=None):
218220
if type(inner_path) is not list:
219221
inner_path = [inner_path]
@@ -226,6 +228,7 @@ def actionOptionalFilePin(self, to, inner_path, address=None):
226228
self.cmd("notification", ["done", _["Pinned %s files"] % num_file, 5000])
227229
self.response(to, back)
228230

231+
@flag.no_multiuser
229232
def actionOptionalFileUnpin(self, to, inner_path, address=None):
230233
if type(inner_path) is not list:
231234
inner_path = [inner_path]
@@ -238,6 +241,7 @@ def actionOptionalFileUnpin(self, to, inner_path, address=None):
238241
self.cmd("notification", ["done", _["Removed pin from %s files"] % num_file, 5000])
239242
self.response(to, back)
240243

244+
@flag.no_multiuser
241245
def actionOptionalFileDelete(self, to, inner_path, address=None):
242246
if not address:
243247
address = self.site.address
@@ -275,20 +279,18 @@ def actionOptionalFileDelete(self, to, inner_path, address=None):
275279

276280
# Limit functions
277281

282+
@flag.admin
278283
def actionOptionalLimitStats(self, to):
279-
if "ADMIN" not in self.site.settings["permissions"]:
280-
return self.response(to, "Forbidden")
281-
282284
back = {}
283285
back["limit"] = config.optional_limit
284286
back["used"] = self.site.content_manager.contents.db.getOptionalUsedBytes()
285287
back["free"] = helper.getFreeSpace()
286288

287289
self.response(to, back)
288290

291+
@flag.no_multiuser
292+
@flag.admin
289293
def actionOptionalLimitSet(self, to, limit):
290-
if "ADMIN" not in self.site.settings["permissions"]:
291-
return self.response(to, {"error": "Forbidden"})
292294
config.optional_limit = re.sub(r"\.0+$", "", limit) # Remove unnecessary digits from end
293295
config.saveValue("optional_limit", limit)
294296
self.response(to, "ok")
@@ -306,6 +308,7 @@ def actionOptionalHelpList(self, to, address=None):
306308

307309
self.response(to, site.settings.get("optional_help", {}))
308310

311+
@flag.no_multiuser
309312
def actionOptionalHelp(self, to, directory, title, address=None):
310313
if not address:
311314
address = self.site.address
@@ -342,6 +345,7 @@ def actionOptionalHelp(self, to, directory, title, address=None):
342345

343346
self.response(to, dict(stats))
344347

348+
@flag.no_multiuser
345349
def actionOptionalHelpRemove(self, to, directory, address=None):
346350
if not address:
347351
address = self.site.address
@@ -361,6 +365,7 @@ def cbOptionalHelpAll(self, to, site, value):
361365
site.settings["autodownloadoptional"] = value
362366
self.response(to, value)
363367

368+
@flag.no_multiuser
364369
def actionOptionalHelpAll(self, to, value, address=None):
365370
if not address:
366371
address = self.site.address
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
from . import OptionalManagerPlugin
1+
from . import OptionalManagerPlugin
2+
from . import UiWebsocketPlugin

plugins/Sidebar/ConsolePlugin.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from Config import config
66
from Debug import Debug
77
from util import SafeRe
8+
from util.Flag import flag
89

910

1011
class WsLogStreamer(logging.StreamHandler):
@@ -37,10 +38,11 @@ def stop(self):
3738
@PluginManager.registerTo("UiWebsocket")
3839
class UiWebsocketPlugin(object):
3940
def __init__(self, *args, **kwargs):
40-
self.admin_commands.update(["consoleLogRead", "consoleLogStream", "consoleLogStreamRemove"])
4141
self.log_streamers = {}
4242
return super(UiWebsocketPlugin, self).__init__(*args, **kwargs)
4343

44+
@flag.no_multiuser
45+
@flag.admin
4446
def actionConsoleLogRead(self, to, filter=None, read_size=32 * 1024, limit=500):
4547
log_file_path = "%s/debug.log" % config.log_dir
4648
log_file = open(log_file_path, encoding="utf-8")
@@ -74,11 +76,15 @@ def addLogStreamer(self, stream_id, filter=None):
7476
logging.getLogger('').addHandler(logger)
7577
return logger
7678

79+
@flag.no_multiuser
80+
@flag.admin
7781
def actionConsoleLogStream(self, to, filter=None):
7882
stream_id = to
7983
self.log_streamers[stream_id] = self.addLogStreamer(stream_id, filter)
8084
self.response(to, {"stream_id": stream_id})
8185

86+
@flag.no_multiuser
87+
@flag.admin
8288
def actionConsoleLogStreamRemove(self, to, stream_id):
8389
try:
8490
self.log_streamers[stream_id].stop()

plugins/Sidebar/SidebarPlugin.py

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from Debug import Debug
1717
from Translate import Translate
1818
from util import helper
19+
from util.Flag import flag
1920
from .ZipStream import ZipStream
2021

2122
plugin_dir = os.path.dirname(__file__)
@@ -85,10 +86,6 @@ def streamZip(self, dir_path):
8586

8687
@PluginManager.registerTo("UiWebsocket")
8788
class UiWebsocketPlugin(object):
88-
def __init__(self, *args, **kwargs):
89-
self.async_commands.add("sidebarGetPeers")
90-
return super(UiWebsocketPlugin, self).__init__(*args, **kwargs)
91-
9289
def sidebarRenderPeerStats(self, body, site):
9390
connected = len([peer for peer in list(site.peers.values()) if peer.connection and peer.connection.connected])
9491
connectable = len([peer_id for peer_id in list(site.peers.keys()) if not peer_id.endswith(":0")])
@@ -511,11 +508,8 @@ def sidebarRenderContents(self, body, site):
511508
body.append("</div>")
512509
body.append("</li>")
513510

511+
@flag.admin
514512
def actionSidebarGetHtmlTag(self, to):
515-
permissions = self.getPermissions(to)
516-
if "ADMIN" not in permissions:
517-
return self.response(to, "You don't have permission to run this command")
518-
519513
site = self.site
520514

521515
body = []
@@ -706,11 +700,9 @@ def getPeerLocations(self, peers):
706700

707701
return peer_locations
708702

709-
703+
@flag.admin
704+
@flag.async_run
710705
def actionSidebarGetPeers(self, to):
711-
permissions = self.getPermissions(to)
712-
if "ADMIN" not in permissions:
713-
return self.response(to, "You don't have permission to run this command")
714706
try:
715707
peer_locations = self.getPeerLocations(self.site.peers)
716708
globe_data = []
@@ -739,53 +731,43 @@ def actionSidebarGetPeers(self, to):
739731
self.log.debug("sidebarGetPeers error: %s" % Debug.formatException(err))
740732
self.response(to, {"error": str(err)})
741733

734+
@flag.admin
735+
@flag.no_multiuser
742736
def actionSiteSetOwned(self, to, owned):
743-
permissions = self.getPermissions(to)
744-
if "ADMIN" not in permissions:
745-
return self.response(to, "You don't have permission to run this command")
746-
747737
if self.site.address == config.updatesite:
748738
return self.response(to, "You can't change the ownership of the updater site")
749739

750740
self.site.settings["own"] = bool(owned)
751741
self.site.updateWebsocket(owned=owned)
752742

743+
@flag.admin
744+
@flag.no_multiuser
753745
def actionUserSetSitePrivatekey(self, to, privatekey):
754-
permissions = self.getPermissions(to)
755-
if "ADMIN" not in permissions:
756-
return self.response(to, "You don't have permission to run this command")
757-
758746
site_data = self.user.sites[self.site.address]
759747
site_data["privatekey"] = privatekey
760748
self.site.updateWebsocket(set_privatekey=bool(privatekey))
761749

762750
return "ok"
763751

752+
@flag.admin
753+
@flag.no_multiuser
764754
def actionSiteSetAutodownloadoptional(self, to, owned):
765-
permissions = self.getPermissions(to)
766-
if "ADMIN" not in permissions:
767-
return self.response(to, "You don't have permission to run this command")
768-
769755
self.site.settings["autodownloadoptional"] = bool(owned)
770756
self.site.bad_files = {}
771757
gevent.spawn(self.site.update, check_files=True)
772758
self.site.worker_manager.removeSolvedFileTasks()
773759

760+
@flag.no_multiuser
761+
@flag.admin
774762
def actionDbReload(self, to):
775-
permissions = self.getPermissions(to)
776-
if "ADMIN" not in permissions:
777-
return self.response(to, "You don't have permission to run this command")
778-
779763
self.site.storage.closeDb()
780764
self.site.storage.getDb()
781765

782766
return self.response(to, "ok")
783767

768+
@flag.no_multiuser
769+
@flag.admin
784770
def actionDbRebuild(self, to):
785-
permissions = self.getPermissions(to)
786-
if "ADMIN" not in permissions:
787-
return self.response(to, "You don't have permission to run this command")
788-
789771
try:
790772
self.site.storage.rebuildDb()
791773
except Exception as err:

0 commit comments

Comments
 (0)