diff --git a/scm-web-api/src/main/java/sonia/scm/web/security/BasicSecurityContext.java b/scm-web-api/src/main/java/sonia/scm/web/security/BasicSecurityContext.java index 1ebe9fd3e6..75ac883bd9 100644 --- a/scm-web-api/src/main/java/sonia/scm/web/security/BasicSecurityContext.java +++ b/scm-web-api/src/main/java/sonia/scm/web/security/BasicSecurityContext.java @@ -48,6 +48,19 @@ public class BasicSecurityContext implements SecurityContext return user; } + /** + * Method description + * + * + * @param request + * @param response + */ + @Override + public void logout(HttpServletRequest request, HttpServletResponse response) + { + user = null; + } + //~--- get methods ---------------------------------------------------------- /** diff --git a/scm-web-api/src/main/java/sonia/scm/web/security/SecurityContext.java b/scm-web-api/src/main/java/sonia/scm/web/security/SecurityContext.java index 0f011bc050..978399668f 100644 --- a/scm-web-api/src/main/java/sonia/scm/web/security/SecurityContext.java +++ b/scm-web-api/src/main/java/sonia/scm/web/security/SecurityContext.java @@ -35,8 +35,17 @@ public interface SecurityContext * @return */ public User authenticate(HttpServletRequest request, - HttpServletResponse response, String username, - String password); + HttpServletResponse response, String username, + String password); + + /** + * Method description + * + * + * @param request + * @param response + */ + public void logout(HttpServletRequest request, HttpServletResponse response); //~--- get methods ---------------------------------------------------------- diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java index 1327c5947d..cc972ea37d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java @@ -43,6 +43,27 @@ import javax.ws.rs.core.Response; public class AuthenticationResource { + /** + * Method description + * + * + * @param request + * @param response + * + * @return + */ + @GET + @Path("logout") + public Response logout(@Context HttpServletRequest request, + @Context HttpServletResponse response) + { + securityContext.logout(request, response); + + return Response.ok().build(); + } + + //~--- get methods ---------------------------------------------------------- + /** * Method description * @@ -55,6 +76,7 @@ public class AuthenticationResource * @return */ @POST + @Path("login") public ScmState getState(@Context HttpServletRequest request, @Context HttpServletResponse response, @FormParam("username") String username, diff --git a/scm-webapp/src/main/webapp/index.html b/scm-webapp/src/main/webapp/index.html index 2d5caab72b..817d40694b 100644 --- a/scm-webapp/src/main/webapp/index.html +++ b/scm-webapp/src/main/webapp/index.html @@ -24,7 +24,9 @@ + SCM-WebAPP diff --git a/scm-webapp/src/main/webapp/resources/js/layout.js b/scm-webapp/src/main/webapp/resources/js/layout.js index 5872508354..9fb5e5fb14 100644 --- a/scm-webapp/src/main/webapp/resources/js/layout.js +++ b/scm-webapp/src/main/webapp/resources/js/layout.js @@ -76,6 +76,22 @@ Ext.onReady(function(){ addTabPanel('t_config', 'configPanel', 'Repository Config'); } + function logout(){ + Ext.Ajax.request({ + url: restUrl + 'authentication/logout.json', + method: 'GET', + success: function(response){ + tabPanel.removeAll(); + Ext.getCmp('west').removeAll(); + var loginWin = new Sonia.login.Window(); + loginWin.show(); + }, + failure: function(){ + alert("logout failed"); + } + }); + } + function createMainMenu(){ var panel = Ext.getCmp('west'); panel.addSections([{ @@ -96,6 +112,12 @@ Ext.onReady(function(){ label: 'Server', fn: function(){ console.debug( 'Server Config' ); } }] + },{ + title: 'Abmelden', + items: [{ + label: 'Abmelden', + fn: logout + }] }]); } diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.login.js b/scm-webapp/src/main/webapp/resources/js/sonia.login.js index 05598d8d43..71fe0cbb91 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.login.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.login.js @@ -11,7 +11,7 @@ Sonia.login.Form = Ext.extend(Ext.FormPanel,{ var config = { labelWidth: 80, - url: restUrl + "authentication.json", + url: restUrl + "authentication/login.json", frame: true, title: 'Please Login', defaultType: 'textfield',