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;