Skip to content

Commit

Permalink
Add logout button
Browse files Browse the repository at this point in the history
  • Loading branch information
gashcrumb committed Jul 25, 2013
1 parent 1cc8b2b commit 4cb2dd7
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 5 deletions.
Expand Up @@ -81,7 +81,6 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
}
}


@Override
public void destroy() {
LOG.info("Destroying hawtio authentication filter");
Expand Down
2 changes: 1 addition & 1 deletion hawtio-web/src/main/java/io/hawt/web/LoginServlet.java
Expand Up @@ -37,8 +37,8 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S

for (Principal principal : principals) {
if (principal.getClass().getSimpleName().equals("UserPrincipal")) {
LOG.info("Authorizing user " + username);
username = principal.getName();
LOG.info("Authorizing user " + username);
}
}

Expand Down
35 changes: 35 additions & 0 deletions hawtio-web/src/main/java/io/hawt/web/LogoutServlet.java
@@ -0,0 +1,35 @@
package io.hawt.web;

import io.hawt.system.Helpers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
* @author Stan Lewis
*/
public class LogoutServlet extends HttpServlet {

private static final transient Logger LOG = LoggerFactory.getLogger(LogoutServlet.class);

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession(false);
if (session == null) {
Helpers.doForbidden(resp);
return;
}

String username = (String)session.getAttribute("user");

LOG.info("Logging out user: {}", username);
session.invalidate();
}

}
8 changes: 8 additions & 0 deletions hawtio-web/src/main/webapp/WEB-INF/web.xml
Expand Up @@ -97,6 +97,14 @@
<url-pattern>/auth/login/*</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>logout</servlet-name>
<servlet-class>io.hawt.web.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logout</servlet-name>
<url-pattern>/auth/logout/*</url-pattern>
</servlet-mapping>

<!--
<servlet>
Expand Down
38 changes: 37 additions & 1 deletion hawtio-web/src/main/webapp/app/core/js/app.ts
@@ -1,6 +1,6 @@
module Core {

export function AppController($scope, $location, workspace, $document, pageTitle, localStorage, userDetails, lastLocation) {
export function AppController($scope, $location, workspace, $document, pageTitle, localStorage, userDetails, lastLocation, jolokiaUrl) {

if (userDetails.username === null) {
// sigh, hack
Expand All @@ -11,6 +11,7 @@ module Core {
$scope.match = null;
$scope.pageTitle = pageTitle.exclude('hawtio');
$scope.userDetails = userDetails;
$scope.confirmLogout = false;

$scope.setPageTitle = () => {
var tab = workspace.getActiveTab();
Expand Down Expand Up @@ -45,6 +46,41 @@ module Core {
return userDetails.username !== null && userDetails.username !== 'public';
}

$scope.logout = () => {
$scope.confirmLogout = true;
}

$scope.doLogout = () => {

$scope.confirmLogout = false;

var url = jolokiaUrl.replace("jolokia", "auth/logout/");

$.ajax(url, {
type: "POST",
success: () => {
userDetails.username = null;
userDetails.password = null;
$scope.$apply();
},
error: (xhr, textStatus, error) => {
// TODO, more feedback
switch(xhr.status) {
case 401:
notification('error', 'Failed to log out, ' + error);
break;
case 403:
notification('error', 'Failed to log out, ' + error);
break;
default:
notification('error', 'Failed to log out, ' + error);
break;
}
$scope.$apply();
}
});
}

$scope.$watch(() => { return localStorage['regexs'] }, $scope.setRegexIndicator);

$scope.$watch('userDetails', (newValue, oldValue) => {
Expand Down
1 change: 1 addition & 0 deletions hawtio-web/src/main/webapp/app/core/js/login.ts
Expand Up @@ -32,6 +32,7 @@ module Core {
$scope.$apply();
},
error: (xhr, textStatus, error) => {
// TODO placeholder for more feedback
switch(xhr.status) {
case 401:
notification('error', 'Failed to log in, ' + error);
Expand Down
25 changes: 23 additions & 2 deletions hawtio-web/src/main/webapp/index.html
Expand Up @@ -46,6 +46,23 @@
}
</style>

<div class="ng-cloak">
<div modal="confirmLogout">

<form class="form-horizontal no-bottom-margin" ng-submit="doLogout()">
<div class="modal-header"></div>
<div class="modal-body">
<p>Are you sure you want to log out?</p>
</div>
<div class="modal-footer">
<input class="btn btn-success" type="submit" value="Yes">
<input class="btn btn-primary" ng-click="confirmLogout = false" value="No">
</div>
</form>

</div>
</div>

<!-- navbar-inverse -->
<div id="main-nav" class="navbar navbar-fixed-top" ng-show="!fullScreen()" ng-controller="Core.NavBarController">
<div class="navbar-inner" ng-cloak class="ng-cloak">
Expand Down Expand Up @@ -75,6 +92,11 @@
<i class="icon-cogs"></i>
</a>
</li>
<li ng-show="loggedIn()">
<a href="" title="Log out" data-placement="bottom" ng-click="logout()">
<i class="icon-user"></i>
</a>
</li>
<li ng-hide="loggedIn()" ng-class="{active : isActive('#/login')}">
<a ng-href="{{link('#/login')}}" title="Log in" data-placement="bottom">
<i class="icon-user"></i>
Expand All @@ -93,7 +115,7 @@
</div>
</div>

<div id="main" class="container-fluid" ng-controller="Core.ViewController">
<div id="main" class="container-fluid ng-cloak" ng-controller="Core.ViewController">
<div ng-include src="viewPartial"></div>
</div>

Expand All @@ -108,7 +130,6 @@
</div>
</div>


<!-- charts and jolokia for jmx -->
<script type="text/javascript" src="lib/d3.v3.min.js"></script>

Expand Down

0 comments on commit 4cb2dd7

Please sign in to comment.