User selection from a list in multiuser local mode
This commit is contained in:
parent
57c0daa294
commit
15fca6bd12
1 changed files with 46 additions and 1 deletions
|
@ -8,7 +8,6 @@ from Crypt import CryptBitcoin
|
|||
from . import UserPlugin
|
||||
from util.Flag import flag
|
||||
|
||||
|
||||
# We can only import plugin host clases after the plugins are loaded
|
||||
@PluginManager.afterLoad
|
||||
def importPluginnedClasses():
|
||||
|
@ -144,6 +143,52 @@ class UiWebsocketPlugin(object):
|
|||
else:
|
||||
self.response(to, "User not found")
|
||||
|
||||
@flag.admin
|
||||
def actionUserSet(self, to, master_address):
|
||||
user_manager = UserManager.user_manager
|
||||
user = user_manager.get(master_address)
|
||||
if not user:
|
||||
raise Exception("No user found")
|
||||
|
||||
script = "document.cookie = 'master_address=%s;path=/;max-age=2592000;';" % master_address
|
||||
script += "zeroframe.cmd('wrapperReload', ['login=done']);"
|
||||
self.cmd("notification", ["done", "Successful login, reloading page..."])
|
||||
self.cmd("injectScript", script)
|
||||
|
||||
self.response(to, "ok")
|
||||
|
||||
@flag.admin
|
||||
def actionUserSelectForm(self, to):
|
||||
if not config.multiuser_local:
|
||||
raise Exception("Only allowed in multiuser local mode")
|
||||
user_manager = UserManager.user_manager
|
||||
body = "<span style='padding-bottom: 5px; display: inline-block'>" + "Change account:" + "</span>"
|
||||
for master_address, user in user_manager.list().items():
|
||||
is_active = self.user.master_address == master_address
|
||||
if user.certs:
|
||||
first_cert = next(iter(user.certs.keys()))
|
||||
title = "%s@%s" % (user.certs[first_cert]["auth_user_name"], first_cert)
|
||||
else:
|
||||
title = user.master_address
|
||||
if len(user.sites) < 2 and not is_active: # Avoid listing ad-hoc created users
|
||||
continue
|
||||
if is_active:
|
||||
css_class = "active"
|
||||
else:
|
||||
css_class = "noclass"
|
||||
body += "<a href='#Select+user' class='select select-close user %s' title='%s'>%s</a>" % (css_class, user.master_address, title)
|
||||
|
||||
script = """
|
||||
$(".notification .select.user").on("click", function() {
|
||||
$(".notification .select").removeClass('active')
|
||||
zeroframe.response(%s, this.title)
|
||||
return false
|
||||
})
|
||||
""" % self.next_message_id
|
||||
|
||||
self.cmd("notification", ["ask", body], lambda master_address: self.actionUserSet(to, master_address))
|
||||
self.cmd("injectScript", script)
|
||||
|
||||
# Show login form
|
||||
def actionUserLoginForm(self, to):
|
||||
self.cmd("prompt", ["<b>Login</b><br>Your private key:", "password", "Login"], self.responseUserLogin)
|
||||
|
|
Loading…
Reference in a new issue