You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by tv...@apache.org on 2012/10/19 14:31:22 UTC

svn commit: r1400070 - in /openejb/trunk/openejb/tomee/tomee-webapp/src: main/java/org/apache/tomee/webapp/ main/java/org/apache/tomee/webapp/command/ main/java/org/apache/tomee/webapp/command/impl/ main/java/org/apache/tomee/webapp/listeners/ main/jav...

Author: tveronezi
Date: Fri Oct 19 12:31:20 2012
New Revision: 1400070

URL: http://svn.apache.org/viewvc?rev=1400070&view=rev
Log:
Preparing XMLHTTP integration.
Persistent user session.

Added:
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/IsProtected.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetLogFiles.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Logout.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/SessionServlet.java
Removed:
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/CommandSession.java
Modified:
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/Command.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/CommandExecutor.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetLog.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetWebServices.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Login.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunScript.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/SessionListener.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/ApplicationSocketConnection.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/ApplicationSocketServlet.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/tomee.less
    openejb/trunk/openejb/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/test/RunScriptTest.java

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java?rev=1400070&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java Fri Oct 19 12:31:20 2012
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tomee.webapp;
+
+import org.apache.openejb.assembler.util.User;
+import org.apache.tomee.webapp.command.UserNotAuthenticated;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+public class Application {
+    private static final Application INSTANCE = new Application();
+
+    private final Map<String, Session> sessions = new HashMap<String, Session>();
+
+    private Application() {
+        //singleton
+    }
+
+    public static Application getInstance() {
+        return INSTANCE;
+    }
+
+    public Session getExistingSession(String id) {
+        Session session;
+        synchronized (this.sessions) {
+            session = this.sessions.get(id);
+        }
+        return session;
+    }
+
+    public Session getSession(String id) {
+        Session session;
+        synchronized (this.sessions) {
+            session = this.sessions.get(id);
+            if (session == null) {
+                session = new Session();
+                this.sessions.put(id, session);
+            }
+        }
+        return session;
+    }
+
+    public void removeSession(String id) {
+        synchronized (sessions) {
+            sessions.remove(id);
+        }
+    }
+
+    public class Session {
+        private Context context;
+
+        public Context login(String user, String pass) {
+            final Properties props = new Properties();
+            props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
+            props.put("java.naming.provider.url", "http://127.0.0.1:8080/tomee/ejb");
+            props.setProperty(Context.SECURITY_PRINCIPAL, user);
+            props.setProperty(Context.SECURITY_CREDENTIALS, pass);
+            try {
+                final Context context = new InitialContext(props);
+                this.context = context;
+            } catch (NamingException e) {
+                this.context = null;
+            }
+            return context;
+        }
+
+        public void logout() {
+            if (this.context == null) {
+                return;
+            }
+            try {
+                this.context.close();
+            } catch (Exception e) {
+                //NO-OP
+            }
+            this.context = null;
+        }
+
+        public void assertAuthenticated() throws UserNotAuthenticated {
+            if (this.context == null) {
+                throw new UserNotAuthenticated();
+            }
+
+            try {
+                final User user = (User) this.context.lookup("openejb/UserBusinessRemote");
+                user.adminOnly();
+            } catch (Exception e) {
+                throw new UserNotAuthenticated(e);
+            }
+        }
+
+        public String getUserName() {
+            if (this.context == null) {
+                return null;
+            }
+
+            try {
+                final User user = (User) this.context.lookup("openejb/UserBusinessRemote");
+                return user.getUserName();
+            } catch (Exception e) {
+                throw new TomeeException(e);
+            }
+        }
+    }
+}

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/Command.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/Command.java?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/Command.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/Command.java Fri Oct 19 12:31:20 2012
@@ -21,6 +21,6 @@ import java.util.Map;
 
 public interface Command {
 
-    Object execute(CommandSession session, Map<String, Object> params) throws Exception;
+    Object execute(Map<String, Object> params) throws Exception;
 
 }

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/CommandExecutor.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/CommandExecutor.java?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/CommandExecutor.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/CommandExecutor.java Fri Oct 19 12:31:20 2012
@@ -19,7 +19,7 @@ package org.apache.tomee.webapp.command;
 
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
-import org.quartz.SimpleTrigger;
+import org.apache.tomee.webapp.Application;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -30,11 +30,12 @@ import java.util.Map;
 
 public class CommandExecutor {
     private Gson gson = new Gson();
-    private final Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
+    private final Type mapType = new TypeToken<Map<String, Object>>() {
+    }.getType();
 
     private static final String PATH = "org.apache.tomee.webapp.command.impl.";
 
-    public Map<String, Object> execute(final CommandSession session, final String raw) {
+    public Map<String, Object> execute(final String raw) {
         final Map<String, Object> result = new HashMap<String, Object>();
 
         final long start = System.currentTimeMillis();
@@ -47,10 +48,20 @@ public class CommandExecutor {
             // Remove the cmdName from this list.
             final String cmdName = (String) params.remove("cmdName");
             final Class<?> cls = Class.forName(PATH + cmdName);
+            final IsProtected isProtected = cls.getAnnotation(IsProtected.class);
+            if (isProtected != null) {
+                final String sessionId = (String) params.get("sessionId");
+                if (sessionId == null || "".equals(sessionId.trim())) {
+                    throw new UserNotAuthenticated();
+                }
+                final Application.Session session = Application.getInstance().getSession(sessionId);
+                session.assertAuthenticated();
+            }
+
             final Command cmd = (Command) cls.newInstance();
 
             result.put("cmdName", cmdName);
-            result.put("output", cmd.execute(session, params));
+            result.put("output", cmd.execute(params));
             result.put("success", Boolean.TRUE);
 
         } catch (Throwable e) {

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/IsProtected.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/IsProtected.java?rev=1400070&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/IsProtected.java (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/IsProtected.java Fri Oct 19 12:31:20 2012
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tomee.webapp.command;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.TYPE;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({TYPE})
+public @interface IsProtected {
+}

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetLog.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetLog.java?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetLog.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetLog.java Fri Oct 19 12:31:20 2012
@@ -19,7 +19,7 @@ package org.apache.tomee.webapp.command.
 
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.tomee.webapp.command.Command;
-import org.apache.tomee.webapp.command.CommandSession;
+import org.apache.tomee.webapp.command.IsProtected;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -27,30 +27,16 @@ import java.io.FileReader;
 import java.io.IOException;
 import java.util.*;
 
+@IsProtected
 public class GetLog implements Command {
 
     @Override
-    public Object execute(final CommandSession session, final Map<String, Object> params) throws Exception {
-        // Is this user authenticated?
-        session.assertAuthenticated();
-
+    public Object execute(final Map<String, Object> params) throws Exception {
         final Map<String, Object> json = new HashMap<String, Object>();
 
         final File logFolder = new File(System.getProperty("catalina.base"),
                 "logs");
 
-        final File[] files = logFolder.listFiles();
-        final Set<String> names = new TreeSet<String>();
-        if (files != null) {
-            for (File file : files) {
-                if (file.length() > 0) {
-                    names.add(file.getName());
-                }
-            }
-        }
-
-        json.put("files", names);
-
         final String loadFileName = (String) params.get("file");
         if (loadFileName != null) {
             Map<String, Object> log = new HashMap<String, Object>();

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetLogFiles.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetLogFiles.java?rev=1400070&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetLogFiles.java (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetLogFiles.java Fri Oct 19 12:31:20 2012
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tomee.webapp.command.impl;
+
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.tomee.webapp.command.Command;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.*;
+
+public class GetLogFiles implements Command {
+
+    @Override
+    public Object execute(final Map<String, Object> params) throws Exception {
+        final Map<String, Object> json = new HashMap<String, Object>();
+
+        final File logFolder = new File(System.getProperty("catalina.base"),
+                "logs");
+
+        final File[] files = logFolder.listFiles();
+        final Set<String> names = new TreeSet<String>();
+        if (files != null) {
+            for (File file : files) {
+                if (file.length() > 0) {
+                    names.add(file.getName());
+                }
+            }
+        }
+
+        json.put("files", names);
+        return json;
+    }
+
+
+    private Collection<String> read(final boolean escapeHtml, final File file,
+                                    final Integer tail) throws IOException {
+        final Queue<String> lines = new LinkedList<String>();
+
+        BufferedReader br = null;
+
+        try {
+            br = new BufferedReader(new FileReader(file));
+
+            final AddLine addLine = new AddLine(lines, tail);
+            String line;
+
+            if (escapeHtml) {
+                while ((line = br.readLine()) != null) {
+                    addLine.add(StringEscapeUtils.escapeHtml4(line));
+                }
+            } else {
+                while ((line = br.readLine()) != null) {
+                    addLine.add(line);
+                }
+            }
+
+        } finally {
+            if (br != null) {
+                br.close();
+            }
+        }
+
+        return lines;
+    }
+
+    private interface AddItemStrategy {
+        void add(String newLine);
+    }
+
+    private class AddLine {
+        final Queue<String> lines;
+        AddItemStrategy strategy;
+        final int tail;
+
+        private AddLine(Queue<String> lines, Integer tail) {
+            this.lines = lines;
+
+            if (tail == null) {
+                this.tail = -1;
+                this.strategy = justAddIt;
+            } else {
+                this.tail = tail;
+                this.strategy = addToEmptyList;
+            }
+        }
+
+        final AddItemStrategy justAddIt = new AddItemStrategy() {
+
+            @Override
+            public void add(String newLine) {
+                lines.add(newLine);
+            }
+        };
+
+        final AddItemStrategy addToEmptyList = new AddItemStrategy() {
+
+            @Override
+            public void add(String newLine) {
+                lines.add(newLine);
+                if (lines.size() > tail) {
+                    strategy = addToFullList;
+                }
+            }
+        };
+
+        final AddItemStrategy addToFullList = new AddItemStrategy() {
+
+            @Override
+            public void add(String newLine) {
+                lines.add(newLine);
+                lines.remove();
+            }
+        };
+
+        public void add(String newLine) {
+            strategy.add(newLine);
+        }
+    }
+}

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetWebServices.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetWebServices.java?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetWebServices.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetWebServices.java Fri Oct 19 12:31:20 2012
@@ -18,7 +18,7 @@
 package org.apache.tomee.webapp.command.impl;
 
 import org.apache.tomee.webapp.command.Command;
-import org.apache.tomee.webapp.command.CommandSession;
+import org.apache.tomee.webapp.command.IsProtected;
 import org.apache.tomee.webapp.helper.rest.Application;
 import org.apache.tomee.webapp.helper.rest.Services;
 import org.apache.tomee.webapp.helper.rest.WebServiceHelperImpl;
@@ -27,6 +27,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+@IsProtected
 public class GetWebServices implements Command {
 
     private Map<String, Object> getServicesMap(final Services services) {
@@ -41,10 +42,7 @@ public class GetWebServices implements C
     }
 
     @Override
-    public Object execute(final CommandSession session, final Map<String, Object> params) throws Exception {
-        // Is this user authenticated?
-        session.assertAuthenticated();
-
+    public Object execute(final Map<String, Object> params) throws Exception {
         final Map<String, Object> json = new HashMap<String, Object>();
         json.put("rest", getServicesMap(WebServiceHelperImpl.restWebServices()));
         json.put("soap", getServicesMap(WebServiceHelperImpl.soapWebServices()));

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Login.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Login.java?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Login.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Login.java Fri Oct 19 12:31:20 2012
@@ -17,8 +17,8 @@
 
 package org.apache.tomee.webapp.command.impl;
 
+import org.apache.tomee.webapp.Application;
 import org.apache.tomee.webapp.command.Command;
-import org.apache.tomee.webapp.command.CommandSession;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,9 +26,12 @@ import java.util.Map;
 public class Login implements Command {
 
     @Override
-    public Object execute(CommandSession session, Map<String, Object> params) throws Exception {
+    public Object execute(Map<String, Object> params) throws Exception {
+        final String sessionId = (String) params.get("sessionId");
+        final Application.Session session = Application.getInstance().getSession(sessionId);
         final String user = (String) params.get("user");
         final String pass = (String) params.get("pass");
+
         final Map<String, Object> result = new HashMap<String, Object>();
 
         if (session.login(user, pass) == null) {

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Logout.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Logout.java?rev=1400070&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Logout.java (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Logout.java Fri Oct 19 12:31:20 2012
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tomee.webapp.command.impl;
+
+import org.apache.tomee.webapp.Application;
+import org.apache.tomee.webapp.command.Command;
+
+import java.util.Map;
+
+public class Logout implements Command {
+
+    @Override
+    public Object execute(Map<String, Object> params) throws Exception {
+        final String sessionId = (String) params.get("sessionId");
+        if (sessionId == null) {
+            return null;
+        }
+        final Application.Session session = Application.getInstance().getSession(sessionId);
+        session.logout();
+        return null;
+    }
+}

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunScript.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunScript.java?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunScript.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunScript.java Fri Oct 19 12:31:20 2012
@@ -22,19 +22,17 @@ import org.apache.openejb.loader.SystemI
 import org.apache.openejb.spi.ContainerSystem;
 import org.apache.tomee.webapp.TomeeException;
 import org.apache.tomee.webapp.command.Command;
-import org.apache.tomee.webapp.command.CommandSession;
+import org.apache.tomee.webapp.command.IsProtected;
 
 import javax.script.*;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 
+@IsProtected
 public class RunScript implements Command {
 
     @Override
-    public Object execute(final CommandSession session, final Map<String, Object> params) throws Exception {
-        // Is this user authenticated?
-        session.assertAuthenticated();
-
+    public Object execute(final Map<String, Object> params) throws Exception {
         final String scriptCode = (String) params.get("scriptCode");
         if (scriptCode == null) {
             return null; //nothing to do
@@ -49,8 +47,7 @@ public class RunScript implements Comman
 
         // everything should be created inside the new classloader,
         // so run it inside another thread and set the proper classloader
-        final ExecutionThread execution = new ExecutionThread(latch, session,
-                engineName, scriptCode);
+        final ExecutionThread execution = new ExecutionThread(latch, engineName, scriptCode);
         final Thread thread = new Thread(execution);
         thread.setContextClassLoader(
                 getClassLoader((String) params.get("appName")));
@@ -84,7 +81,6 @@ public class RunScript implements Comman
 
     private class ExecutionThread implements Runnable {
         private final CountDownLatch latch;
-        private final CommandSession session;
         private final String engineName;
         private final String scriptCode;
 
@@ -100,11 +96,9 @@ public class RunScript implements Comman
         }
 
         private ExecutionThread(final CountDownLatch latch,
-                                final CommandSession session,
                                 final String engineName,
                                 final String scriptCode) {
             this.latch = latch;
-            this.session = session;
             this.engineName = engineName;
             this.scriptCode = scriptCode;
         }
@@ -118,11 +112,6 @@ public class RunScript implements Comman
             //new context for the execution of this script
             final ScriptContext newContext = new SimpleScriptContext();
 
-            //creating the bidings object for the current execution
-            final Bindings bindings = newContext.getBindings(
-                    ScriptContext.ENGINE_SCOPE);
-            bindings.put("session", session);
-
             try {
                 this.result = engine.eval(this.scriptCode, newContext);
             } catch (ScriptException e) {

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/SessionListener.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/SessionListener.java?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/SessionListener.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/SessionListener.java Fri Oct 19 12:31:20 2012
@@ -17,6 +17,8 @@
 
 package org.apache.tomee.webapp.listeners;
 
+import org.apache.tomee.webapp.Application;
+
 import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
 import java.util.HashMap;
@@ -31,7 +33,7 @@ public class SessionListener implements 
     }
 
     @Override
-    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
-        //NO-OP
+    public void sessionDestroyed(HttpSessionEvent event) {
+        Application.getInstance().removeSession(event.getSession().getId());
     }
 }

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/ApplicationSocketConnection.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/ApplicationSocketConnection.java?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/ApplicationSocketConnection.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/ApplicationSocketConnection.java Fri Oct 19 12:31:20 2012
@@ -20,27 +20,16 @@ package org.apache.tomee.webapp.servlet;
 import com.google.gson.Gson;
 import org.apache.catalina.websocket.StreamInbound;
 import org.apache.catalina.websocket.WsOutbound;
-import org.apache.openejb.assembler.util.User;
 import org.apache.tomee.webapp.command.CommandExecutor;
-import org.apache.tomee.webapp.command.CommandSession;
-import org.apache.tomee.webapp.command.UserNotAuthenticated;
 
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
 import java.nio.CharBuffer;
-import java.util.HashMap;
 import java.util.Map;
-import java.util.Properties;
 
-public class ApplicationSocketConnection extends StreamInbound implements CommandSession {
+public class ApplicationSocketConnection extends StreamInbound {
     private Gson gson = new Gson();
-    private Map<String, Object> attributes = new HashMap<String, Object>();
-
-    private Context context;
 
     private String readParam(Reader in) throws IOException {
 
@@ -74,47 +63,7 @@ public class ApplicationSocketConnection
         final String params = readParam(in);
         final CommandExecutor executor = new CommandExecutor();
 
-        final Map<String, Object> result = executor.execute(this, params);
+        final Map<String, Object> result = executor.execute(params);
         getOutputObject().writeTextMessage(CharBuffer.wrap(gson.toJson(result)));
     }
-
-    @Override
-    public Context login(String user, String pass) {
-        Properties props = new Properties();
-        props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
-        props.put("java.naming.provider.url", "http://127.0.0.1:8080/tomee/ejb");
-        props.setProperty(Context.SECURITY_PRINCIPAL, user);
-        props.setProperty(Context.SECURITY_CREDENTIALS, pass);
-        try {
-            final Context context = new InitialContext(props);
-            this.context = context;
-        } catch (NamingException e) {
-            this.context = null;
-        }
-        return context;
-    }
-
-    @Override
-    public void assertAuthenticated() throws UserNotAuthenticated {
-        if (this.context == null) {
-            throw new UserNotAuthenticated();
-        }
-
-        try {
-            final User user = (User) this.context.lookup("openejb/UserBusinessRemote");
-            user.adminOnly();
-        } catch (Exception e) {
-            throw new UserNotAuthenticated(e);
-        }
-    }
-
-    @Override
-    public Object get(String key) {
-        return this.attributes.get(key);
-    }
-
-    @Override
-    public void set(String key, Object value) {
-        this.attributes.put(key, value);
-    }
 }

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/ApplicationSocketServlet.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/ApplicationSocketServlet.java?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/ApplicationSocketServlet.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/ApplicationSocketServlet.java Fri Oct 19 12:31:20 2012
@@ -27,7 +27,7 @@ public class ApplicationSocketServlet ex
     @Override
     protected StreamInbound createWebSocketInbound(
             String s,
-            HttpServletRequest httpServletRequest) {
+            HttpServletRequest request) {
         return new ApplicationSocketConnection();
     }
 }

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/SessionServlet.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/SessionServlet.java?rev=1400070&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/SessionServlet.java (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/SessionServlet.java Fri Oct 19 12:31:20 2012
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tomee.webapp.servlet;
+
+import org.apache.tomee.webapp.Application;
+import org.apache.tomee.webapp.JsonExecutor;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Map;
+
+
+public class SessionServlet extends HttpServlet {
+
+    @Override
+    protected void doPost(HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
+        writeJson(req, resp);
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        writeJson(req, resp);
+    }
+
+    private void writeJson(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
+        JsonExecutor.execute(req, resp, new JsonExecutor.Executor() {
+            @Override
+            public void call(Map<String, Object> json) throws Exception {
+                String sessionId = req.getParameter("sessionId");
+                if (sessionId == null || "".equals(sessionId.trim())) {
+                    sessionId = req.getSession().getId();
+                    Application.getInstance().getSession(sessionId);
+                } else {
+                    final Application.Session session = Application.getInstance().getExistingSession(sessionId);
+                    if (session == null) {
+                        sessionId = req.getSession().getId();
+                        Application.getInstance().getSession(sessionId);
+                    }
+                }
+                final Application.Session session = Application.getInstance().getSession(sessionId);
+                json.put("userName", session.getUserName());
+                json.put("sessionId", sessionId);
+            }
+        });
+    }
+}

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml Fri Oct 19 12:31:20 2012
@@ -60,6 +60,17 @@
     <!-- ************************************************************************************** -->
 
     <servlet>
+        <servlet-name>sessionServlet</servlet-name>
+        <servlet-class>org.apache.tomee.webapp.servlet.SessionServlet</servlet-class>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>sessionServlet</servlet-name>
+        <url-pattern>/session</url-pattern>
+    </servlet-mapping>
+
+    <!-- ************************************************************************************** -->
+
+    <servlet>
         <servlet-name>ServerServlet</servlet-name>
         <servlet-class>org.apache.openejb.server.httpd.ServerServlet</servlet-class>
     </servlet>

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js Fri Oct 19 12:31:20 2012
@@ -37,7 +37,9 @@ TOMEE.ApplicationController = function (
     });
 
     channel.bind('ui-actions', 'logout-btn-click', function () {
-        window.location.reload();
+        model.sendMessage({
+            cmdName:'Logout'
+        });
     });
 
     channel.bind('ui-actions', 'login-btn-click', function (data) {
@@ -67,6 +69,10 @@ TOMEE.ApplicationController = function (
         });
     });
 
+    channel.bind('server-command-callback', 'Logout', function (data) {
+        window.location.reload();
+    });
+
     channel.bind('server-command-callback-success', 'Login', function (data) {
         model.sendMessage({
             cmdName:'GetLog',
@@ -74,7 +80,9 @@ TOMEE.ApplicationController = function (
         });
     });
 
-    model.connectSocket();
+    channel.bind('server-connection', 'session-ready', function () {
+        model.connectSocket();
+    });
 
     return {
 

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js Fri Oct 19 12:31:20 2012
@@ -38,6 +38,25 @@ TOMEE.ApplicationModel = function () {
         reconnectTask.delay(connectSocket, reconnectDelay);
     });
 
+    channel.bind('server-command-callback', 'Logout', function (data) {
+        delete sessionStorage.sessionId;
+    });
+
+    (function () {
+        var params = {};
+        if (sessionStorage.sessionId) {
+            params.sessionId = sessionStorage.sessionId;
+        }
+        sendRequest({
+            servlet:'session',
+            params:params,
+            callback:function (data) {
+                sessionStorage.sessionId = data.sessionId;
+                channel.send('server-connection', 'session-ready', {});
+            }
+        });
+    })();
+
     function connectSocket() {
         try {
             appSocket = createSocket();
@@ -108,6 +127,7 @@ TOMEE.ApplicationModel = function () {
 
     function sendMessage(bean) {
         if (isSocketReady()) {
+            bean.sessionId = sessionStorage.sessionId;
             var str = JSON.stringify(bean);
             appSocket.send(str);
         } else {
@@ -117,8 +137,27 @@ TOMEE.ApplicationModel = function () {
         }
     }
 
+    function sendRequest(bean) {
+        $.ajax({
+                url:'/tomee/' + bean.servlet,
+                method:'POST',
+                dataType:'json',
+                data:bean.params,
+                success:function(data) {
+                    if(bean.callback) {
+                        bean.callback(data);
+                    }
+                    channel.send('server-command-callback-success', bean.servlet, {
+                        data:data
+                    });
+                }
+            }
+        );
+    }
+
     return {
         connectSocket:connectSocket,
-        sendMessage:sendMessage
+        sendMessage:sendMessage,
+        sendRequest:sendRequest
     }
 };
\ No newline at end of file

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js Fri Oct 19 12:31:20 2012
@@ -62,13 +62,37 @@ TOMEE.ApplicationToolbarView = function 
         }
 
         btn.remove();
+        user.remove();
+        pass.remove();
+
         btnsArea.append(logoutBtn);
 
         menu.removeClass('open');
         userNameMenu.html(user.val());
-        pass.html('123456');
-        user.prop('disabled', true);
-        pass.prop('disabled', true);
+
+        el.find('.login-menu').addClass('logout');
+    });
+
+    channel.bind('server-command-callback-success', 'session', function (params) {
+        var btn = el.find('.tomee-login-btn'),
+            btnsArea = el.find('.login-buttons'),
+            menu = el.find('.user-login-dropdown'),
+            userNameMenu = el.find('.tomee-user-name'),
+            user = el.find('.tomee-login'),
+            pass = el.find('.tomee-password');
+
+        if(!params.data.userName) {
+            return;
+        }
+
+        btn.remove();
+        user.remove();
+        pass.remove();
+        btnsArea.append(logoutBtn);
+
+        userNameMenu.html(params.data.userName);
+
+        el.find('.login-menu').addClass('logout');
     });
 
     channel.bind('server-command-callback-error', 'Login', function (params) {

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/tomee.less
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/tomee.less?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/tomee.less (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/tomee.less Fri Oct 19 12:31:20 2012
@@ -72,6 +72,15 @@ body {
 
     }
 
+    .logout {
+        min-width: 100px !important;
+        width: 100px;
+
+        form {
+            width: 90px;
+        }
+    }
+
     .tomee-console {
         .tomee-console-output {
             background-color: #F7F7F9;

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/test/RunScriptTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/test/RunScriptTest.java?rev=1400070&r1=1400069&r2=1400070&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/test/RunScriptTest.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/test/RunScriptTest.java Fri Oct 19 12:31:20 2012
@@ -17,12 +17,9 @@
 
 package org.apache.tomee.webapp.test;
 
-import org.apache.tomee.webapp.command.CommandSession;
-import org.apache.tomee.webapp.command.UserNotAuthenticated;
 import org.apache.tomee.webapp.command.impl.RunScript;
 import org.junit.Test;
 
-import javax.naming.Context;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -37,27 +34,7 @@ public class RunScriptTest {
         params.put("engineName", "js");
 
         final RunScript shell = new RunScript();
-        final Object result = shell.execute(new CommandSession() {
-            @Override
-            public Context login(String user, String password) {
-                return null;
-            }
-
-            @Override
-            public void assertAuthenticated() throws UserNotAuthenticated {
-
-            }
-
-            @Override
-            public Object get(String key) {
-                return null;
-            }
-
-            @Override
-            public void set(String key, Object value) {
-
-            }
-        }, params);
+        final Object result = shell.execute(params);
 
         assertEquals("myValue", result);
     }