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 2014/02/14 13:50:35 UTC

svn commit: r1568260 - in /tomee/tomee/trunk/tomee/tomee-webaccess: ./ src/main/groovy/org/apache/tomee/webaccess/rest/ src/main/groovy/org/apache/tomee/webaccess/service/ src/main/tomee/ src/main/tomee/conf/ src/main/webapp/app/ src/main/webapp/app/js...

Author: tveronezi
Date: Fri Feb 14 12:50:34 2014
New Revision: 1568260

URL: http://svn.apache.org/r1568260
Log:
https://issues.apache.org/jira/browse/TOMEE-1123
webaccess: create a new context per script execution

Added:
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/tomee/
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/tomee/conf/
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/tomee/conf/tomcat-users.xml
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/scripting-user.handlebars
Modified:
    tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Scripting.groovy
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/ScriptingServiceImpl.groovy
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/app.less
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/application.js
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates.js
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/script-sample-groovy.handlebars
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/script-sample-javascript.handlebars
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/scripting.handlebars
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/view/scripting.js

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml?rev=1568260&r1=1568259&r2=1568260&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml Fri Feb 14 12:50:34 2014
@@ -265,6 +265,7 @@
           <simpleLog>true</simpleLog>
           <context>webaccess</context>
           <tomeeClassifier>jaxrs</tomeeClassifier>
+          <config>${project.basedir}/src/main/tomee/conf</config>
         </configuration>
       </plugin>
       <plugin>

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Scripting.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Scripting.groovy?rev=1568260&r1=1568259&r2=1568260&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Scripting.groovy (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Scripting.groovy Fri Feb 14 12:50:34 2014
@@ -35,8 +35,14 @@ class Scripting {
 
     @POST
     @Produces('application/json')
-    ScriptingResultDto execute(@FormParam('engine') String engine, @FormParam('script') String script) {
-        service.execute(engine, script)
+    ScriptingResultDto execute(
+            @FormParam('engine') String engine,
+            @FormParam('script') String script,
+            @FormParam('user') String user,
+            @FormParam('password') String password,
+            @FormParam('realm') String realm
+    ) {
+        service.execute(engine, script, user, password, realm)
     }
 
 }

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/ScriptingServiceImpl.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/ScriptingServiceImpl.groovy?rev=1568260&r1=1568259&r2=1568260&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/ScriptingServiceImpl.groovy (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/ScriptingServiceImpl.groovy Fri Feb 14 12:50:34 2014
@@ -24,6 +24,9 @@ import javax.annotation.security.RolesAl
 import javax.ejb.Stateless
 import javax.ejb.TransactionAttribute
 import javax.ejb.TransactionAttributeType
+import javax.naming.Context
+import javax.naming.InitialContext
+import javax.script.ScriptContext
 import javax.script.ScriptEngineManager
 import javax.script.SimpleScriptContext
 
@@ -32,22 +35,39 @@ import javax.script.SimpleScriptContext
 @RolesAllowed('tomee-admin')
 class ScriptingServiceImpl {
 
-    ScriptingResultDto execute(String engine, String script) {
-        ScriptingResultDto result = new ScriptingResultDto(
-                output: ''
-        )
+    @SuppressWarnings('CatchThrowable')
+    ScriptingResultDto execute(String engineName, String script, String user, String pass, String realm) {
+        def result = new ScriptingResultDto(output: '')
         if (script && '' != script.trim()) {
             def factory = new ScriptEngineManager()
             def sw = new StringWriter()
             def pw = new PrintWriter(sw)
+            def engine = factory.getEngineByName(engineName?.trim()?.toLowerCase() ?: 'js')
+            def scriptContext = new SimpleScriptContext()
+            scriptContext.writer = pw
+            scriptContext.errorWriter = pw
+
+            // Creating a local context
+            def props = new Properties()
+            props[Context.INITIAL_CONTEXT_FACTORY] = 'org.apache.openejb.client.LocalInitialContextFactory'
+            if (realm?.trim()) {
+                props['openejb.authentication.realmName'] = realm.trim()
+            }
+            if (user) {
+                props[Context.SECURITY_PRINCIPAL] = user
+                props[Context.SECURITY_CREDENTIALS] = pass?.trim() ?: ''
+            }
             try {
-                def engineImpl = factory.getEngineByName(engine && '' != engine.trim() ? engine.trim().toLowerCase() : 'js')
-                def ctx = new SimpleScriptContext()
-                ctx.writer = pw
-                ctx.errorWriter = pw
-                engineImpl.eval(script, ctx)
-            } catch (exception) {
-                exception.printStackTrace(pw)
+                def ctx = new InitialContext(props)
+                try {
+                    scriptContext.setAttribute('ctx', ctx, ScriptContext.ENGINE_SCOPE)
+                    engine.eval(script, scriptContext)
+                } finally {
+                    // closing newly created context
+                    ctx.close()
+                }
+            } catch (Throwable throwable) {
+                throwable.printStackTrace(pw)
             }
             result.output = sw.toString()
         }

Added: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/tomee/conf/tomcat-users.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/tomee/conf/tomcat-users.xml?rev=1568260&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/tomee/conf/tomcat-users.xml (added)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/tomee/conf/tomcat-users.xml Fri Feb 14 12:50:34 2014
@@ -0,0 +1,23 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  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.
+-->
+<tomcat-users>
+  <role rolename="tomee-admin" />
+  <role rolename="tomee-user" />
+  <user username="tomee" password="tomee" roles="tomee-admin,manager-gui" />
+  <user username="user" password="user" roles="tomee-user" />
+</tomcat-users>

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/app.less
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/app.less?rev=1568260&r1=1568259&r2=1568260&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/app.less (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/app.less Fri Feb 14 12:50:34 2014
@@ -140,6 +140,11 @@ body {
     .ux-script-source {
       left: @offset;
 
+      .ux-user-form {
+        height: 135px;
+        width: 240px;
+      }
+
       .ux-commands {
         position: absolute;
         bottom: (@offset * 2);
@@ -149,6 +154,13 @@ body {
       > div.panel-heading > button {
         position: absolute;
         top: 4px;
+      }
+
+      > div.panel-heading > button.ux-user {
+        right: (@offset + 38);
+      }
+
+      > div.panel-heading > button.ux-maximize {
         right: @offset;
       }
 

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/application.js
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/application.js?rev=1568260&r1=1568259&r2=1568260&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/application.js (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/application.js Fri Feb 14 12:50:34 2014
@@ -104,7 +104,10 @@
                     dataType: 'json',
                     data: {
                         engine: data.engine,
-                        script: data.script
+                        script: data.script,
+                        user: data.user,
+                        password: data.password,
+                        realm: data.realm
                     },
                     success: function (data) {
                         scriptingView.appendOutput(data.scriptingResultDto.output);

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js?rev=1568260&r1=1568259&r2=1568260&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js Fri Feb 14 12:50:34 2014
@@ -38,7 +38,10 @@ define(['lib/underscore', 'lib/handlebar
         'session.context': 'Context',
         'session.creation.date': 'Created',
         'session.last.access': 'Accessed',
-        'session.expiration.date': 'Expire'
+        'session.expiration.date': 'Expire',
+        'scripting.user.realm': 'Realm Name',
+        'scripting.user.name': 'User name',
+        'scripting.user.password': 'User password'
     };
 
     underscore.each(underscore.keys(messages), function (key) {

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates.js
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates.js?rev=1568260&r1=1568259&r2=1568260&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates.js (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates.js Fri Feb 14 12:50:34 2014
@@ -26,6 +26,7 @@
         'scripting',
         'script-sample-javascript',
         'script-sample-groovy',
+        'scripting-user',
         'logfiles',
         'logfile-link',
         'sessions'

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/script-sample-groovy.handlebars
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/script-sample-groovy.handlebars?rev=1568260&r1=1568259&r2=1568260&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/script-sample-groovy.handlebars (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/script-sample-groovy.handlebars Fri Feb 14 12:50:34 2014
@@ -1,15 +1,5 @@
-import java.util.Properties
-import javax.naming.Context
-import javax.naming.InitialContext
-
-def ctx = new InitialContext([
-  (Context.INITIAL_CONTEXT_FACTORY): 'org.apache.openejb.client.RemoteInitialContextFactory',
-  (Context.PROVIDER_URL): 'http://localhost:8080/tomee/ejb',
-  (Context.SECURITY_PRINCIPAL): 'tomee',
-  (Context.SECURITY_CREDENTIALS): 'tomee'
-] as Properties)
-
-def result = ctx.list('')?.collect({ pair -> pair.name }).join(', ')
-
-// print restult
-println("groovy -> $result")
\ No newline at end of file
+ctx.list('').each {
+  println "[entry] ${it.name}"
+}
+def user = ctx.lookup('java:comp/EJBContext').callerPrincipal.name
+println "Logged user: '$user'"

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/script-sample-javascript.handlebars
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/script-sample-javascript.handlebars?rev=1568260&r1=1568259&r2=1568260&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/script-sample-javascript.handlebars (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/script-sample-javascript.handlebars Fri Feb 14 12:50:34 2014
@@ -1,19 +1,6 @@
-importClass(java.util.Properties);
-importClass(javax.naming.Context);
-importClass(javax.naming.InitialContext);
-
-var p = new Properties();
-p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
-p.put(Context.PROVIDER_URL, "http://localhost:8080/tomee/ejb");
-p.put(Context.SECURITY_PRINCIPAL, "tomee");
-p.put(Context.SECURITY_CREDENTIALS, "tomee");
-var ctx = new InitialContext(p);
-
-var result = [];
-var pairs = ctx.list("");
+var pairs = ctx.list('');
 while(pairs.hasMore()) {
-  result.push(pairs.next().getName());
+  println('[entry] ' + pairs.next().getName());
 }
-
-// print restult
-println('javascript -> ' + result.join(", "));
\ No newline at end of file
+var user = ctx.lookup('java:comp/EJBContext').getCallerPrincipal().getName();
+println("Logged user: '" + user + "'");
\ No newline at end of file

Added: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/scripting-user.handlebars
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/scripting-user.handlebars?rev=1568260&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/scripting-user.handlebars (added)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/scripting-user.handlebars Fri Feb 14 12:50:34 2014
@@ -0,0 +1,11 @@
+<form role="form">
+    <div class="form-group">
+        <input type="text" class="form-control ux-context-user" placeholder="{{i18n 'scripting.user.name'}}">
+    </div>
+    <div class="form-group">
+        <input type="password" class="form-control ux-context-password" placeholder="{{i18n 'scripting.user.password'}}">
+    </div>
+    <div class="form-group">
+        <input type="text" class="form-control ux-context-realm" placeholder="{{i18n 'scripting.user.realm'}}">
+    </div>
+</form>
\ No newline at end of file

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/scripting.handlebars
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/scripting.handlebars?rev=1568260&r1=1568259&r2=1568260&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/scripting.handlebars (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/scripting.handlebars Fri Feb 14 12:50:34 2014
@@ -11,6 +11,7 @@
 <div class="panel panel-default ux-script ux-script-source ux-normal">
     <div class="panel-heading">
         <h3 class="panel-title">{{i18n "source"}}</h3>
+        <button type="button" class="btn btn-default btn-sm ux-user"><span class="glyphicon glyphicon-user"></span></button>
         <button type="button" class="btn btn-default btn-sm ux-maximize"><span class="glyphicon glyphicon-fullscreen"></span></button>
     </div>
     <div class="panel-body">

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/view/scripting.js
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/view/scripting.js?rev=1568260&r1=1568259&r2=1568260&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/view/scripting.js (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/view/scripting.js Fri Feb 14 12:50:34 2014
@@ -31,6 +31,26 @@
             groovy: templates.getValue('script-sample-groovy', {})
         };
 
+        var UserForm = Backbone.View.extend({
+            tagName: 'div',
+            className: 'ux-scripting',
+
+            getValue: function (cls) {
+                var me = this;
+                var field = $(me.$el.find(cls).get(0));
+                return field.val();
+            },
+
+            render: function () {
+                var me = this;
+                me.$el.empty();
+                me.$el.append(templates.getValue('scripting-user', {}));
+                return me;
+            }
+        });
+        var userForm = new UserForm();
+        userForm.render();
+
         var executeScript = function (evt) {
             if (evt) {
                 evt.preventDefault();
@@ -38,7 +58,10 @@
             var me = this;
             me.trigger('execute-action', {
                 engine: me.editor.getOption("mode"),
-                script: me.editor.getValue()
+                script: me.editor.getValue(),
+                user: userForm.getValue('.ux-context-user'),
+                password: userForm.getValue('.ux-context-password'),
+                realm: userForm.getValue('.ux-context-realm')
             });
             me.$el.find('.ux-execute-script').addClass('disabled');
             me.$el.find('.ux-clean-execute-script').addClass('disabled');
@@ -176,6 +199,17 @@
                     $(window).resize(function () {
                         me.fitCodeField();
                     });
+                    var userBtn = $(me.$el.find('.ux-script-source>div.panel-heading>button.ux-user').get(0));
+                    userBtn.popover({
+                        html: true,
+                        placement: 'bottom',
+                        content: '<div class="ux-user-form"/>'
+                    });
+                    userBtn.on('shown.bs.popover', function () {
+                        var form = $(me.$el.find('.ux-user-form').get(0));
+                        userForm.$el.detach();
+                        form.append(userForm.$el);
+                    });
                 }
                 me.editor.focus();
                 return me;