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);
}