Skip to content

Commit 376fd0d

Browse files
committed
Use flags instead of permission list
1 parent c414e6c commit 376fd0d

1 file changed

Lines changed: 36 additions & 7 deletions

File tree

src/Ui/UiWebsocket.py

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,6 @@
2424

2525
@PluginManager.acceptPlugins
2626
class UiWebsocket(object):
27-
admin_commands = set([
28-
"sitePause", "siteResume", "siteDelete", "siteList", "siteSetLimit", "siteAdd", "siteListModifiedFiles", "siteSetSettingsValue",
29-
"channelJoinAllsite", "serverUpdate", "serverPortcheck", "serverShutdown", "serverShowdirectory", "serverGetWrapperNonce",
30-
"certSet", "certList", "configSet", "permissionAdd", "permissionRemove", "announcerStats", "userSetGlobalSettings"
31-
])
32-
async_commands = set(["fileGet", "fileList", "dirList", "fileNeed", "serverPortcheck", "siteListModifiedFiles"])
33-
3427
def __init__(self, ws, site, server, user, request):
3528
self.ws = ws
3629
self.site = site
@@ -376,6 +369,7 @@ def actionServerInfo(self, to):
376369
self.response(to, back)
377370

378371
# Create a new wrapper nonce that allows to load html file
372+
@flag.admin
379373
def actionServerGetWrapperNonce(self, to):
380374
wrapper_nonce = self.request.getWrapperNonce()
381375
self.response(to, wrapper_nonce)
@@ -384,6 +378,7 @@ def actionAnnouncerInfo(self, to):
384378
back = self.formatAnnouncerInfo(self.site)
385379
self.response(to, back)
386380

381+
@flag.admin
387382
def actionAnnouncerStats(self, to):
388383
back = {}
389384
trackers = self.site.announcer.getTrackers()
@@ -646,6 +641,7 @@ def actionFileQuery(self, to, dir_inner_path, query=None):
646641
return self.response(to, rows)
647642

648643
# List files in directory
644+
@flag.async_run
649645
def actionFileList(self, to, inner_path):
650646
try:
651647
return list(self.site.storage.walk(inner_path))
@@ -654,6 +650,7 @@ def actionFileList(self, to, inner_path):
654650
return {"error": Debug.formatExceptionMessage(err)}
655651

656652
# List directories in a directory
653+
@flag.async_run
657654
def actionDirList(self, to, inner_path):
658655
try:
659656
return list(self.site.storage.list(inner_path))
@@ -679,6 +676,7 @@ def actionDbQuery(self, to, query, params=None, wait_for=None):
679676
return self.response(to, rows)
680677

681678
# Return file content
679+
@flag.async_run
682680
def actionFileGet(self, to, inner_path, required=True, format="text", timeout=300):
683681
try:
684682
if required or inner_path in self.site.bad_files:
@@ -698,6 +696,7 @@ def actionFileGet(self, to, inner_path, required=True, format="text", timeout=30
698696
body = body.decode()
699697
self.response(to, body)
700698

699+
@flag.async_run
701700
def actionFileNeed(self, to, inner_path, timeout=300):
702701
try:
703702
with gevent.Timeout(timeout):
@@ -824,19 +823,22 @@ def actionCertSelect(self, to, accepted_domains=[], accept_any=False, accepted_p
824823

825824
# - Admin actions -
826825

826+
@flag.admin
827827
def actionPermissionAdd(self, to, permission):
828828
if permission not in self.site.settings["permissions"]:
829829
self.site.settings["permissions"].append(permission)
830830
self.site.saveSettings()
831831
self.site.updateWebsocket(permission_added=permission)
832832
self.response(to, "ok")
833833

834+
@flag.admin
834835
def actionPermissionRemove(self, to, permission):
835836
self.site.settings["permissions"].remove(permission)
836837
self.site.saveSettings()
837838
self.site.updateWebsocket(permission_removed=permission)
838839
self.response(to, "ok")
839840

841+
@flag.admin
840842
def actionPermissionDetails(self, to, permission):
841843
if permission == "ADMIN":
842844
self.response(to, _["Modify your client's configuration and access all site"] + " <span style='color: red'>" + _["(Dangerous!)"] + "</span>")
@@ -848,12 +850,14 @@ def actionPermissionDetails(self, to, permission):
848850
self.response(to, "")
849851

850852
# Set certificate that used for authenticate user for site
853+
@flag.admin
851854
def actionCertSet(self, to, domain):
852855
self.user.setCert(self.site.address, domain)
853856
self.site.updateWebsocket(cert_changed=domain)
854857
self.response(to, "ok")
855858

856859
# List user's certificates
860+
@flag.admin
857861
def actionCertList(self, to):
858862
back = []
859863
auth_address = self.user.getAuthAddress(self.site.address)
@@ -868,6 +872,7 @@ def actionCertList(self, to):
868872
return back
869873

870874
# List all site info
875+
@flag.admin
871876
def actionSiteList(self, to, connecting_sites=False):
872877
ret = []
873878
SiteManager.site_manager.load() # Reload sites
@@ -878,6 +883,7 @@ def actionSiteList(self, to, connecting_sites=False):
878883
self.response(to, ret)
879884

880885
# Join to an event channel on all sites
886+
@flag.admin
881887
def actionChannelJoinAllsite(self, to, channel):
882888
if channel not in self.channels: # Add channel to channels
883889
self.channels.append(channel)
@@ -905,6 +911,7 @@ def updateThread():
905911
self.response(to, {"error": "Unknown site: %s" % address})
906912

907913
# Pause site serving
914+
@flag.admin
908915
def actionSitePause(self, to, address):
909916
site = self.server.sites.get(address)
910917
if site:
@@ -917,6 +924,7 @@ def actionSitePause(self, to, address):
917924
self.response(to, {"error": "Unknown site: %s" % address})
918925

919926
# Resume site serving
927+
@flag.admin
920928
def actionSiteResume(self, to, address):
921929
site = self.server.sites.get(address)
922930
if site:
@@ -929,6 +937,8 @@ def actionSiteResume(self, to, address):
929937
else:
930938
self.response(to, {"error": "Unknown site: %s" % address})
931939

940+
@flag.admin
941+
@flag.no_multiuser
932942
def actionSiteDelete(self, to, address):
933943
site = self.server.sites.get(address)
934944
if site:
@@ -965,6 +975,7 @@ def cbSiteClone(self, to, address, root_inner_path="", target_address=None, redi
965975
self.response(to, response)
966976
return "ok"
967977

978+
@flag.no_multiuser
968979
def actionSiteClone(self, to, address, root_inner_path="", target_address=None, redirect=True):
969980
if not SiteManager.site_manager.isAddress(address):
970981
self.response(to, {"error": "Not a site: %s" % address})
@@ -991,13 +1002,16 @@ def actionSiteClone(self, to, address, root_inner_path="", target_address=None,
9911002
lambda res: self.cbSiteClone(to, address, root_inner_path, target_address, redirect)
9921003
)
9931004

1005+
@flag.admin
1006+
@flag.no_multiuser
9941007
def actionSiteSetLimit(self, to, size_limit):
9951008
self.site.settings["size_limit"] = int(size_limit)
9961009
self.site.saveSettings()
9971010
self.response(to, "ok")
9981011
self.site.updateWebsocket()
9991012
self.site.download(blind_includes=True)
10001013

1014+
@flag.admin
10011015
def actionSiteAdd(self, to, address):
10021016
site_manager = SiteManager.site_manager
10031017
if address in site_manager.sites:
@@ -1008,6 +1022,8 @@ def actionSiteAdd(self, to, address):
10081022
else:
10091023
return {"error": "Invalid address"}
10101024

1025+
@flag.admin
1026+
@flag.async_run
10111027
def actionSiteListModifiedFiles(self, to, content_inner_path="content.json"):
10121028
content = self.site.content_manager.contents[content_inner_path]
10131029
min_mtime = content.get("modified", 0)
@@ -1058,6 +1074,7 @@ def actionSiteListModifiedFiles(self, to, content_inner_path="content.json"):
10581074
self.site.settings["cache"]["modified_files"] = modified_files
10591075
return {"modified_files": modified_files}
10601076

1077+
@flag.admin
10611078
def actionSiteSetSettingsValue(self, to, key, value):
10621079
if key not in ["modified_files_notification"]:
10631080
return {"error": "Can't change this key"}
@@ -1078,11 +1095,14 @@ def actionUserGetGlobalSettings(self, to):
10781095
settings = self.user.settings
10791096
self.response(to, settings)
10801097

1098+
@flag.admin
10811099
def actionUserSetGlobalSettings(self, to, settings):
10821100
self.user.settings = settings
10831101
self.user.save()
10841102
self.response(to, "ok")
10851103

1104+
@flag.admin
1105+
@flag.no_multiuser
10861106
def actionServerUpdate(self, to):
10871107
def cbServerUpdate(res):
10881108
self.response(to, res)
@@ -1107,19 +1127,26 @@ def cbServerUpdate(res):
11071127
cbServerUpdate
11081128
)
11091129

1130+
@flag.admin
1131+
@flag.async_run
1132+
@flag.no_multiuser
11101133
def actionServerPortcheck(self, to):
11111134
import main
11121135
file_server = main.file_server
11131136
file_server.portCheck()
11141137
self.response(to, file_server.port_opened)
11151138

1139+
@flag.admin
1140+
@flag.no_multiuser
11161141
def actionServerShutdown(self, to, restart=False):
11171142
import main
11181143
if restart:
11191144
main.restart_after_shutdown = True
11201145
main.file_server.stop()
11211146
main.ui_server.stop()
11221147

1148+
@flag.admin
1149+
@flag.no_multiuser
11231150
def actionServerShowdirectory(self, to, directory="backup", inner_path=""):
11241151
if self.request.env["REMOTE_ADDR"] != "127.0.0.1":
11251152
return self.response(to, {"error": "Only clients from 127.0.0.1 allowed to run this command"})
@@ -1139,6 +1166,8 @@ def actionServerShowdirectory(self, to, directory="backup", inner_path=""):
11391166
else:
11401167
return self.response(to, {"error": "Not a directory"})
11411168

1169+
@flag.admin
1170+
@flag.no_multiuser
11421171
def actionConfigSet(self, to, key, value):
11431172
import main
11441173
if key not in config.keys_api_change_allowed:

0 commit comments

Comments
 (0)