Add modal popup for admin login from menu

This commit is contained in:
JonnyWong16 2016-05-01 10:56:06 -07:00
parent 1622b0fa29
commit 2f8e768c5c
4 changed files with 72 additions and 7 deletions

View file

@ -227,7 +227,7 @@ from plexpy.helpers import anon_url
<li><a href="#" id="nav-restart"><i class="fa fa-fw fa-refresh"></i> Restart</a></li>
<li><a href="#" id="nav-shutdown"><i class="fa fa-fw fa-power-off"></i> Shutdown</a></li>
% else:
<li><a href="${http_root}auth/login"><i class="fa fa-fw fa-lock"></i> Admin Login</a></li>
<li><a href="#" data-target="#admin-login-modal" data-toggle="modal"><i class="fa fa-fw fa-lock"></i> Admin Login</a></li>
<li role="separator" class="divider"></li>
% endif
% if _session['expiry']:
@ -241,6 +241,48 @@ from plexpy.helpers import anon_url
</nav>
</div>
% if _session['user_group'] != 'admin':
<div id="admin-login-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="admin-login-modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form action="${http_root}auth/login" method="post">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-remove"></i></button>
<h4 class="modal-title">Admin Login</h4>
</div>
<div class="modal-body">
<div class="col-md-6" style="margin: auto;">
<div class="form-group">
<label for="username" class="control-label">
Username
</label>
<input type="text" id="username" name="username" class="form-control" autocorrect="off" autocapitalize="off">
</div>
<div class="form-group">
<label for="password" class="control-label">
Password
</label>
<input type="password" id="password" name="password" class="form-control">
</div>
<div class="form-footer">
<div class="remember-group">
<label class="control-label">
<input type="checkbox" id="remember_me" name="remember_me" title="for 30 days" value="1" checked="checked" /> Remember me
</label>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-bright login-button"><i class="fa fa-sign-in"></i>&nbsp; Sign In</button>
</div>
<input type="hidden" id="admin_login" name="admin_login" value="1" />
</form>
</div>
</div>
</div>
% endif
${next.headerIncludes()}
<div class="body-container">
${next.body()}
@ -322,6 +364,12 @@ ${next.headerIncludes()}
});
}
});
% if _session['user_group'] != 'admin':
$('#admin-login-modal').on('shown.bs.modal', function () {
$('#admin-login-modal #username').focus()
})
% endif
</script>
${next.javascriptIncludes()}
</body>

View file

@ -2908,4 +2908,18 @@ a.no-highlight:hover {
margin-bottom: 0;
font-weight: 400;
cursor: pointer;
}
#admin-login-modal .form-group label {
font-weight: 400;
color: #999;
}
#admin-login-modal .remember-group {
float: left;
color: #999;
}
#admin-login-modal .remember-group .control-label {
display: inline;
margin-bottom: 0;
font-weight: 400;
cursor: pointer;
}

View file

@ -31,13 +31,13 @@
${msg}
</div>
% endif
<div class="username-group form-group">
<div class="form-group">
<label for="username" class="control-label">
Username
</label>
<input type="text" id="username" name="username" class="form-control" autocorrect="off" autocapitalize="off" value="${username}" autofocus>
</div>
<div class="password-group form-group">
<div class="form-group">
<label for="password" class="control-label">
Password
</label>

View file

@ -98,7 +98,7 @@ def user_login(username=None, password=None):
return None
def check_credentials(username, password):
def check_credentials(username, password, admin_login='0'):
"""Verifies credentials for username and password.
Returns True and the user group on success or False and no user group"""
@ -107,7 +107,7 @@ def check_credentials(username, password):
return True, u'admin'
elif username == plexpy.CONFIG.HTTP_USERNAME and password == plexpy.CONFIG.HTTP_PASSWORD:
return True, u'admin'
elif plexpy.CONFIG.ALLOW_GUEST_ACCESS and user_login(username, password):
elif not admin_login == '1' and plexpy.CONFIG.ALLOW_GUEST_ACCESS and user_login(username, password):
return True, u'guest'
else:
return False, None
@ -202,14 +202,14 @@ class AuthController(object):
raise cherrypy.HTTPRedirect("login")
@cherrypy.expose
def login(self, username=None, password=None, remember_me='0'):
def login(self, username=None, password=None, remember_me='0', admin_login='0'):
if not cherrypy.config.get('tools.sessions.on'):
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT)
if username is None or password is None:
return self.get_loginform()
(vaild_login, user_group) = check_credentials(username, password)
(vaild_login, user_group) = check_credentials(username, password, admin_login)
if vaild_login:
if user_group == 'guest':
@ -234,6 +234,9 @@ class AuthController(object):
self.on_login(username)
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT)
elif admin_login == '1':
logger.debug(u"Invalid admin login attempt from '%s'." % username)
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT)
else:
logger.debug(u"Invalid login attempt from '%s'." % username)
return self.get_loginform(username, u"Incorrect username/email or password.")