Author: painter
Date: Mon Jan 22 21:42:49 2018
New Revision: 1821946
URL: http://svn.apache.org/viewvc?rev=1821946&view=rev
Log:
Integrating the turbine-flux library into the archetype builder
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/tools/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/flux.properties
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/layouts/
- copied from r1821945,
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/macros/
- copied from r1821945,
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/macros/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/navigations/
- copied from r1821945,
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/navigations/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/
- copied from r1821945,
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/layouts/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/layouts/FluxDefault.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/macros/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/macros/fluxMacros.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxBottom.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxMenu.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxTop.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxEmbeddedMenu.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxError.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxIndex.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxLogin.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupAlreadyExists.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupForm.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupList.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionAlreadyExists.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionForm.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionList.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxRolePermissionList.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleAlreadyExists.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleForm.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleList.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxMissingRequiredInputs.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserAlreadyExists.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserForm.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserList.vm
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserRoleForm.vm
Removed:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/macros/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/navigations/
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/
Modified:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/pom.xml
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
Modified:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/pom.xml
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/pom.xml?rev=1821946&r1=1821945&r2=1821946&view=diff
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/pom.xml
(original)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/pom.xml
Mon Jan 22 21:42:49 2018
@@ -62,7 +62,7 @@ under the License.
</testResource>
</testResources>
<plugins>
- <!-- test will not fail in turbien 4.0.1 -->
+ <!-- test will not fail in turbine 4.0.1 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,97 @@
+package ${package}.flux.modules.actions;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.fulcrum.localization.LocalizationService;
+import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
+import org.apache.turbine.Turbine;
+import org.apache.turbine.annotation.TurbineService;
+import org.apache.turbine.modules.actions.VelocitySecureAction;
+import org.apache.turbine.om.security.User;
+import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.util.RunData;
+import org.apache.velocity.context.Context;
+
+/**
+ * Velocity Secure action.
+ *
+ * Always performs a Security Check that you've defined before executing the
+ * doPerform().
+ */
+public class FluxAction extends VelocitySecureAction {
+
+ @TurbineService
+ private LocalizationService localizationService;
+
+ /**
+ * This currently only checks to make sure that user is allowed to view
the
+ * storage area. If you create an action that requires more security
then
+ * override this method.
+ *
+ * @param data
+ * Turbine information.
+ * @return True if the user is authorized to access the screen.
+ * @exception Exception,
+ * a generic exception.
+ */
+ /**
+ * This checks if the user has the role mapped in the flux.properties
file for
+ * flux.admin.role which you should define
+ */
+ @Override
+ protected boolean isAuthorized(PipelineData data) throws Exception {
+ boolean isAuthorized = false;
+
+ /*
+ * Grab the Flux Admin role listed in the Flux.properties file
that is included
+ * in the the standard TurbineResources.properties file.
+ */
+ String fluxAdminRole =
Turbine.getConfiguration().getString("flux.admin.role");
+
+ // Get the Turbine ACL implementation
+ TurbineAccessControlList acl = getRunData(data).getACL();
+
+ if (acl == null || !(acl.hasRole(fluxAdminRole))) {
+ String msg =
localizationService.getString(localizationService.getDefaultBundleName(),
+
localizationService.getLocale(((RunData) data).getRequest()), "no_permission");
+
+ getRunData(data).setMessage(msg);
+
+ getRunData(data).setScreenTemplate("Login.vm");
+ isAuthorized = false;
+ } else if (acl.hasRole(fluxAdminRole)) {
+ isAuthorized = true;
+ }
+
+ return isAuthorized;
+ }
+
+ /**
+ * Implement this to add information to the context.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception,
+ * a generic exception.
+ */
+ public void doPerform(PipelineData data, Context context) throws
Exception {
+ User user = getRunData(data).getUser();
+ context.put("user", user);
+ }
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,97 @@
+package ${package}.flux.modules.actions;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+/**
+ * Login for Flux in stand-alone mode.
+ *
+ */
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.lang.StringUtils;
+import org.apache.fulcrum.security.util.FulcrumSecurityException;
+import org.apache.fulcrum.security.util.UnknownEntityException;
+import org.apache.turbine.TurbineConstants;
+import org.apache.turbine.annotation.TurbineConfiguration;
+import org.apache.turbine.annotation.TurbineService;
+import org.apache.turbine.om.security.User;
+import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.services.security.SecurityService;
+import org.apache.turbine.util.RunData;
+
+/**
+ * This is where we authenticate the user logging into the system against a
user
+ * in the database. If the user exists in the database that users last login
+ * time will be updated.
+ *
+ * @author <a href="mailto:[email protected]">Dave Bryson</a>
+ * @author <a href="mailto:[email protected]">Henning P. Schmiedehausen</a>
+ * @author <a href="mailto:[email protected]">Quinton McCombs</a>
+ * @author <a href="mailto:[email protected]">Peter Courcoux</a>
+ * @author <a href="mailto:[email protected]">Jeffery Painter</a>
+ * @version $Id: LoginUser.java 1725012 2017-11-16 11:38:47Z painter $
+ */
+public class FluxLogin extends org.apache.turbine.modules.actions.LoginUser {
+
+ /** Injected service instance */
+ @TurbineService
+ private SecurityService security;
+
+ /** Injected configuration instance */
+ @TurbineConfiguration
+ private Configuration conf;
+
+ /**
+ * Checks for anonymous user, else calls parent method.
+ *
+ * @param pipelineData
+ * Turbine information.
+ * @exception FulcrumSecurityException
+ * could not get instance of the anonymous user
+ */
+ @Override
+ public void doPerform(PipelineData pipelineData) throws
FulcrumSecurityException {
+
+ RunData data = getRunData(pipelineData);
+ String username =
data.getParameters().getString(FluxLogin.CGI_USERNAME, "");
+
+ if (StringUtils.isEmpty(username)) {
+ return;
+ }
+
+ if (username.equals(security.getAnonymousUser().getName())) {
+ data.setMessage("Anonymous user cannot login");
+ reset(data);
+ return;
+ }
+
+ super.doPerform(pipelineData);
+ }
+
+ private void reset(RunData data) throws UnknownEntityException {
+ User anonymousUser = security.getAnonymousUser();
+ data.setUser(anonymousUser);
+
+ if
(StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN, ""))) {
+ // We're running in a templating solution
+
data.setScreenTemplate(conf.getString(TurbineConstants.TEMPLATE_LOGIN));
+ } else {
+
data.setScreen(conf.getString(TurbineConstants.SCREEN_LOGIN));
+ }
+ }
+
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,107 @@
+package ${package}.flux.modules.actions;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.fulcrum.security.util.FulcrumSecurityException;
+import org.apache.turbine.TurbineConstants;
+import org.apache.turbine.annotation.TurbineConfiguration;
+import org.apache.turbine.annotation.TurbineService;
+import org.apache.turbine.modules.Action;
+import org.apache.turbine.om.security.User;
+import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.services.security.SecurityService;
+import org.apache.turbine.util.RunData;
+
+/**
+ * Removes the user from the session and sends them to the screen.homepage
+ * specified in the resources file
+ *
+ */
+public class FluxLogout extends Action {
+
+ /** Injected service instance */
+ @TurbineService
+ private SecurityService security;
+
+ /** Injected configuration instance */
+ @TurbineConfiguration
+ private Configuration conf;
+
+ /**
+ * Clears the PipelineData user object back to an anonymous status not
logged
+ * in, and with a null ACL. If the tr.props ACTION_LOGIN is anything
except
+ * "LogoutUser", flow is transfered to the SCREEN_HOMEPAGE
+ *
+ * If this action name is the value of action.logout then we are being
run
+ * before the session validator, so we don't need to set the screen (we
assume
+ * that the session validator will handle that). This is basically
still here
+ * simply to preserve old behaviour - it is recommended that
action.logout is
+ * set to "LogoutUser" and that the session validator does handle
setting the
+ * screen/template for a logged out (read not-logged-in) user.
+ *
+ * @param pipelineData
+ * Turbine information.
+ * @exception FulcrumSecurityException
+ * a problem occurred in the security service.
+ */
+ @Override
+ public void doPerform(PipelineData pipelineData) throws
FulcrumSecurityException {
+
+ RunData data = getRunData(pipelineData);
+ // Session validator did not run, so RunData is not populated
+ User user = data.getUserFromSession();
+
+ if (user != null && !security.isAnonymousUser(user)) {
+ // Make sure that the user has really logged in...
+ if (!user.hasLoggedIn()) {
+ return;
+ }
+
+ user.setHasLoggedIn(Boolean.FALSE);
+ security.saveUser(user);
+ }
+
+
data.setMessage(conf.getString(TurbineConstants.LOGOUT_MESSAGE));
+
+ // This will cause the acl to be removed from the session in
+ // the Turbine servlet code.
+ data.setACL(null);
+
+ // Retrieve an anonymous user.
+ User anonymousUser = security.getAnonymousUser();
+ data.setUser(anonymousUser);
+ data.save();
+
+ // In the event that the current screen or related navigations
+ // require acl info, we cannot wait for Turbine to handle
+ // regenerating acl.
+
data.getSession().removeAttribute(TurbineConstants.ACL_SESSION_KEY);
+
+ // If this action name is the value of action.logout then we are
+ // being run before the session validator, so we don't need to
+ // set the screen (we assume that the session validator will
handle
+ // that). This is basically still here simply to preserve old
behavior
+ // - it is recommended that action.logout is set to
"LogoutUser" and
+ // that the session validator does handle setting the
screen/template
+ // for a logged out (read not-logged-in) user.
+ if (!conf.getString(TurbineConstants.ACTION_LOGOUT_KEY,
TurbineConstants.ACTION_LOGOUT_DEFAULT)
+
.equals(TurbineConstants.ACTION_LOGOUT_DEFAULT)) {
+
data.setScreen(conf.getString(TurbineConstants.SCREEN_HOMEPAGE));
+ }
+ }
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,116 @@
+package ${package}.flux.modules.actions;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.fulcrum.localization.LocalizationService;
+import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
+import org.apache.turbine.Turbine;
+import org.apache.turbine.TurbineConstants;
+import org.apache.turbine.annotation.TurbineConfiguration;
+import org.apache.turbine.annotation.TurbineService;
+import org.apache.turbine.modules.actions.VelocitySecureAction;
+import org.apache.turbine.om.security.User;
+import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.util.RunData;
+import org.apache.velocity.context.Context;
+
+/**
+ * Velocity Secure action.
+ *
+ * Always performs a Security Check that you've defined before executing the
+ * doPerform().
+ */
+public class SecureAction extends VelocitySecureAction {
+
+ @TurbineService
+ private LocalizationService localizationService;
+
+ /** Injected configuration instance */
+ @TurbineConfiguration
+ private Configuration conf;
+
+ @TurbineConfiguration(TurbineConstants.TEMPLATE_LOGIN)
+ private Configuration templateLogin;
+
+ @TurbineConfiguration(TurbineConstants.TEMPLATE_HOMEPAGE)
+ private Configuration templateHomepage;
+
+ /**
+ * This currently only checks to make sure that user is allowed to view
the
+ * storage area. If you create an action that requires more security
then
+ * override this method.
+ *
+ * @param data
+ * Turbine information.
+ * @return True if the user is authorized to access the screen.
+ * @exception Exception,
+ * a generic exception.
+ */
+ @Override
+ protected boolean isAuthorized(PipelineData pipelineData) throws
Exception {
+
+ RunData data = getRunData(pipelineData);
+
+ boolean isAuthorized = false;
+
+ /*
+ * Grab the Flux Admin role listed in the Flux.properties file
that is included
+ * in the the standard TurbineResources.properties file.
+ */
+ String fluxAdminRole =
Turbine.getConfiguration().getString("flux.admin.role");
+
+ // Get the Turbine ACL implementation
+ TurbineAccessControlList acl = data.getACL();
+
+ if (acl == null) {
+ String msg =
localizationService.getString(localizationService.getDefaultBundleName(),
+
localizationService.getLocale(((RunData) data).getRequest()), "no_permission");
+
+ data.setMessage(msg);
+
+ log.debug(
+ "call not permitted for template: " +
data.getScreenTemplate() + " and action " + data.getAction());
+ data.setScreenTemplate((String)
templateHomepage.getProperty(""));
+ isAuthorized = false;
+
+ } else if (acl.hasRole(fluxAdminRole)) {
+ isAuthorized = true;
+ } else {
+ data.setScreenTemplate((String)
templateHomepage.getProperty(""));
+ data.setMessage("You do not have access to this part of
the site.");
+ isAuthorized = false;
+ }
+ return isAuthorized;
+
+ }
+
+ /**
+ * Implement this to add information to the context.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception,
+ * a generic exception.
+ */
+ public void doPerform(PipelineData data, Context context) throws
Exception {
+ User user = getRunData(data).getUser();
+ context.put("user", user);
+ }
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,171 @@
+package ${package}.flux.modules.actions.group;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.fulcrum.security.entity.Group;
+import org.apache.fulcrum.security.util.EntityExistsException;
+import org.apache.fulcrum.security.util.UnknownEntityException;
+import org.apache.fulcrum.yaafi.framework.util.StringUtils;
+import org.apache.turbine.annotation.TurbineConfiguration;
+import org.apache.turbine.annotation.TurbineService;
+import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.services.security.SecurityService;
+import org.apache.turbine.util.RunData;
+import org.apache.velocity.context.Context;
+
+import ${package}.flux.modules.actions.FluxAction;
+
+/**
+ * Action to manage groups in Turbine.
+ *
+ */
+public class FluxGroupAction extends FluxAction {
+
+ private static Log log = LogFactory.getLog(FluxGroupAction.class);
+ private static String GROUP_ID = "group";
+
+ /** Injected service instance */
+ @TurbineService
+ private SecurityService security;
+
+ /** Injected configuration instance */
+ @TurbineConfiguration
+ private Configuration conf;
+
+ /**
+ * ActionEvent responsible for inserting a new user into the Turbine
security
+ * system.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doInsert(PipelineData pipelineData, Context context) throws
Exception {
+ RunData data = getRunData(pipelineData);
+
+ String name = data.getParameters().getString(GROUP_ID);
+ if (!StringUtils.isEmpty(name)) {
+
+ try {
+ // create the group
+ Group group = security.getGroupInstance();
+ group.setName(name);
+ security.addGroup(group);
+ } catch (EntityExistsException eee) {
+
+ context.put("name", name);
+ context.put("errorTemplate",
"group,GroupAlreadyExists.vm");
+
+ /*
+ * We are still in insert mode. So keep this
value alive.
+ */
+ data.getParameters().add("mode", "insert");
+ setTemplate(data, "group,GroupForm.vm");
+ } catch (Exception e) {
+ log.error("Something bad happened");
+ }
+ } else {
+ log.error("Cannot add empty group name");
+ }
+
+ }
+
+ /**
+ * Update a group name
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doUpdate(PipelineData pipelineData, Context context) throws
Exception {
+ RunData data = getRunData(pipelineData);
+ String groupName = data.getParameters().getString("oldName");
+ if (!StringUtils.isEmpty(groupName)) {
+ Group group = security.getGroupByName(groupName);
+ String name = data.getParameters().getString(GROUP_ID);
+ if (group != null && !StringUtils.isEmpty(name)) {
+ try {
+ security.renameGroup(group, name);
+ } catch (UnknownEntityException uee) {
+ /*
+ * Should do something here but I still
think we should use the an id so that
+ * this can't happen.
+ */
+ }
+ } else {
+ log.error("Cannot update group to empty name");
+ }
+ } else {
+ log.error("Cannot update group to empty name");
+ }
+ }
+
+ /**
+ * ActionEvent responsible for removing a user.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doDelete(PipelineData pipelineData, Context context) throws
Exception {
+
+ RunData data = getRunData(pipelineData);
+
+ try {
+ Group group =
security.getGroupByName(data.getParameters().getString(GROUP_ID));
+ if ( group != null ) {
+ security.removeGroup(group);
+ } else {
+ data.setMessage("Could not find group to
remove");
+ }
+ } catch (UnknownEntityException uee) {
+ /*
+ * Should do something here but I still think we should
use the an id so that
+ * this can't happen.
+ */
+ log.error(uee);
+ }
+ }
+
+ /**
+ * Implement this to add information to the context.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doPerform(PipelineData pipelineData, Context context)
throws Exception {
+ RunData data = getRunData(pipelineData);
+ log.info("Running do perform!");
+ data.setMessage("Can't find the requested action!");
+ }
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,176 @@
+package ${package}.flux.modules.actions.permission;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.fulcrum.security.entity.Role;
+import org.apache.fulcrum.security.torque.om.TurbinePermission;
+import org.apache.fulcrum.security.torque.om.TurbinePermissionPeer;
+import org.apache.fulcrum.security.util.RoleSet;
+import org.apache.fulcrum.yaafi.framework.util.StringUtils;
+import org.apache.torque.criteria.Criteria;
+import org.apache.turbine.annotation.TurbineConfiguration;
+import org.apache.turbine.annotation.TurbineService;
+import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.services.security.SecurityService;
+import org.apache.turbine.util.RunData;
+import org.apache.velocity.context.Context;
+
+import ${package}.flux.modules.actions.FluxAction;
+
+/**
+ * Action to manage permissions in Turbine.
+ *
+ * @version $Id: FluxPermissionAction.java,v 1.11 2017/11/16 10:24:41 painter
+ * Exp $
+ */
+public class FluxPermissionAction extends FluxAction {
+ private static Log log = LogFactory.getLog(FluxPermissionAction.class);
+ private static String PERM_ID = "permission";
+
+ /** Injected service instance */
+ @TurbineService
+ private SecurityService security;
+
+ /** Injected configuration instance */
+ @TurbineConfiguration
+ private Configuration conf;
+
+ /**
+ * ActionEvent responsible for inserting a new permission into the
Turbine
+ * security system.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doInsert(PipelineData pipelineData, Context context) throws
Exception {
+
+ RunData data = getRunData(pipelineData);
+ String name = data.getParameters().getString(PERM_ID);
+ if (!StringUtils.isEmpty(name)) {
+ // create the permission
+ TurbinePermission tp = new TurbinePermission();
+ tp.setName(name);
+ tp.setNew(true);
+ tp.save();
+ } else {
+ data.setMessage("Cannot add permission without a name");
+ data.getParameters().add("mode", "insert");
+ data.setScreen("permission,FluxPermissionForm.vm");
+ }
+
+ }
+
+ /**
+ * ActionEvent responsible updating a permission. Must check the input
for
+ * integrity before allowing the user info to be update in the database.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doUpdate(PipelineData pipelineData, Context context) throws
Exception {
+ RunData data = getRunData(pipelineData);
+
+ String old_name = data.getParameters().getString("oldName");
+ String name = data.getParameters().getString(PERM_ID);
+ if (!StringUtils.isEmpty(name)) {
+
+ /*
+ * broken Permission perm =
security.getPermissionByName(old_name);
+ * security.renamePermission(perm, name);
+ */
+
+ // manual rename
+ Criteria criteria = new Criteria();
+ criteria.where(TurbinePermissionPeer.PERMISSION_NAME,
old_name);
+ TurbinePermission tp =
TurbinePermissionPeer.doSelectSingleRecord(criteria);
+ if (tp != null) {
+ tp.setName(name);
+ tp.save();
+ }
+
+ } else {
+ data.setMessage("Cannot find permission to update");
+ data.setScreen("permission,FluxPermissionList.vm");
+ }
+ }
+
+ /**
+ * ActionEvent responsible for removing a permission.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doDelete(PipelineData pipelineData, Context context) throws
Exception {
+ RunData data = getRunData(pipelineData);
+
+ try {
+ String permName =
data.getParameters().getString(PERM_ID);
+
+ if (!StringUtils.isEmpty(permName)) {
+ // just
+
org.apache.fulcrum.security.model.turbine.entity.TurbinePermission perm =
security.<org.apache.fulcrum.security.model.turbine.entity.TurbinePermission>getPermissionByName(
+ permName);
+ // remove the role-permission links
+ RoleSet roles = perm.getRoles();
+ for (Role role : roles) {
+ security.revoke(role, perm);
+ }
+
+ // Remove the permission
+ security.removePermission(perm);
+
+ } else {
+ data.setMessage("Cannot find permission to
delete");
+
data.setScreen("permission,FluxPermissionList.vm");
+ }
+ } catch (Exception e) {
+ data.setMessage("An error occured while trying to
remove a permission");
+ }
+ }
+
+ /**
+ * Implement this to add information to the context.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doPerform(PipelineData pipelineData, Context context)
throws Exception {
+ RunData data = getRunData(pipelineData);
+ log.info("Running do perform!");
+ data.setMessage("Can't find the requested action!");
+ }
+
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,234 @@
+package ${package}.flux.modules.actions.role;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import java.util.Iterator;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.fulcrum.security.entity.Permission;
+import org.apache.fulcrum.security.entity.Role;
+import org.apache.fulcrum.security.model.turbine.entity.TurbineRole;
+import org.apache.fulcrum.security.torque.om.TurbineUserGroupRolePeer;
+import org.apache.fulcrum.security.util.EntityExistsException;
+import org.apache.fulcrum.security.util.PermissionSet;
+import org.apache.fulcrum.security.util.UnknownEntityException;
+import org.apache.fulcrum.yaafi.framework.util.StringUtils;
+import org.apache.torque.criteria.Criteria;
+import org.apache.turbine.annotation.TurbineConfiguration;
+import org.apache.turbine.annotation.TurbineService;
+import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.services.security.SecurityService;
+import org.apache.turbine.util.RunData;
+import org.apache.velocity.context.Context;
+
+import ${package}.flux.modules.actions.FluxAction;
+
+/**
+ * Action to manager roles in Turbine.
+ *
+ */
+public class FluxRoleAction extends FluxAction {
+
+ private static Log log = LogFactory.getLog(FluxRoleAction.class);
+ private static String ROLE_ID = "role";
+
+ /** Injected service instance */
+ @TurbineService
+ private SecurityService security;
+
+ /** Injected configuration instance */
+ @TurbineConfiguration
+ private Configuration conf;
+
+ public void doInsert(PipelineData pipelineData, Context context) throws
Exception {
+ RunData data = getRunData(pipelineData);
+ Role role = security.getRoleInstance();
+ data.getParameters().setProperties(role);
+
+ String name = data.getParameters().getString(ROLE_ID);
+ role.setName(name);
+
+ try {
+ security.addRole(role);
+ } catch (EntityExistsException eee) {
+ context.put("name", name);
+ context.put("errorTemplate",
"role,FluxRoleAlreadyExists.vm");
+ context.put("role", role);
+ /*
+ * We are still in insert mode. So keep this value
alive.
+ */
+ data.getParameters().add("mode", "insert");
+ setTemplate(data, "role,FluxRoleForm.vm");
+ }
+
+ }
+
+ /**
+ * ActionEvent responsible updating a role. Must check the input for
integrity
+ * before allowing the user info to be update in the database.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doUpdate(PipelineData pipelineData, Context context) throws
Exception {
+ RunData data = getRunData(pipelineData);
+ Role role =
security.getRoleByName(data.getParameters().getString("oldName"));
+ String name = data.getParameters().getString(ROLE_ID);
+ if (role != null && !StringUtils.isEmpty(name)) {
+ try {
+ security.renameRole(role, name);
+ } catch (UnknownEntityException uee) {
+ log.error("Could not rename role: " + uee);
+ }
+ } else {
+ data.setMessage("Cannot update a role to an empty
name");
+ log.error("Cannot update role to empty name");
+ }
+ }
+
+ /**
+ * ActionEvent responsible for removing a role.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doDelete(PipelineData pipelineData, Context context) throws
Exception {
+ RunData data = getRunData(pipelineData);
+
+ try {
+ // find the role
+ Role role =
security.getRoleByName(data.getParameters().getString(ROLE_ID));
+
+ if (role != null) {
+ // remove dependencies to users with the role
+ removeRoleFromAllUsers(role);
+
+ // remove all permissions
+ security.revokeAll(role);
+
+ // now remove the role
+ security.removeRole(role);
+ } else {
+ data.setMessage("Role was not found");
+ }
+ } catch (UnknownEntityException uee) {
+ /*
+ * Should do something here but I still think we should
use the an id so that
+ * this can't happen.
+ */
+ log.error(uee);
+ } catch (Exception e) {
+ log.error("Could not remove role: " + e);
+ }
+ }
+
+ /**
+ * Update the roles that are to assigned to a user for a project.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doPermissions(PipelineData pipelineData, Context context)
throws Exception {
+
+ RunData data = getRunData(pipelineData);
+ /*
+ * Grab the role we are trying to update. Always not null
+ */
+ TurbineRole role =
security.<TurbineRole>getRoleByName(data.getParameters().getString(ROLE_ID));
+
+ /*
+ * Grab the permissions for the role we are dealing with.
+ */
+ PermissionSet rolePermissions = role.getPermissions();
+
+ /*
+ * Grab all the permissions.
+ */
+ PermissionSet permissions = security.getAllPermissions();
+
+ // id part one
+ String roleName = role.getName();
+ for (Iterator<Permission> iterator = permissions.iterator();
iterator.hasNext();) {
+ Permission permission = iterator.next();
+ String permissionName = permission.getName();
+ String rolePermission = roleName + permissionName;
+
+ String formRolePermission =
data.getParameters().getString(rolePermission);
+ if (formRolePermission != null &&
!rolePermissions.contains(permission)) {
+ /*
+ * Checkbox has been checked AND the role
doesn't already contain this
+ * permission. So assign the permission to the
role.
+ */
+ log.debug("adding " + permissionName + " to " +
roleName);
+ security.grant(role, permission);
+ // this might also be done with
role.addPermission(permission);
+ } else if (formRolePermission == null &&
rolePermissions.contains(permission)) {
+ /*
+ * Checkbox has not been checked AND the role
contains this permission. So
+ * remove this permission from the role.
+ */
+ log.debug("removing " + permissionName + " from
" + roleName);
+ security.revoke(role, permission);
+ // this might also be done with
role.removePermission(permission);
+ }
+
+ }
+ }
+
+ /**
+ * Implement this to add information to the context.
+ *
+ * @param data
+ * Turbine information.
+ * @param context
+ * Context for web pages.
+ * @exception Exception
+ * a generic exception.
+ */
+ public void doPerform(PipelineData pipelineData, Context context)
throws Exception {
+ log.info("Running do perform!");
+ getRunData(pipelineData).setMessage("Can't find the requested
action!");
+ }
+
+ /**
+ * Helper method for removing roles, must clear associated users with
the role
+ */
+ private void removeRoleFromAllUsers(Role role) {
+ try {
+ Criteria criteria = new Criteria();
+ criteria.where(TurbineUserGroupRolePeer.ROLE_ID,
role.getId());
+ TurbineUserGroupRolePeer.doDelete(criteria);
+ } catch (Exception e) {
+ log.error("Error removing user, role associations: " +
e.toString());
+ }
+ }
+
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,261 @@
+package ${package}.flux.modules.actions.user;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.fulcrum.security.entity.Group;
+import org.apache.fulcrum.security.entity.Role;
+import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
+import org.apache.fulcrum.security.util.GroupSet;
+import org.apache.fulcrum.security.util.RoleSet;
+import org.apache.turbine.annotation.TurbineService;
+import org.apache.turbine.om.security.User;
+import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.services.security.SecurityService;
+import org.apache.turbine.util.RunData;
+import org.apache.velocity.context.Context;
+
+import ${package}.flux.modules.actions.FluxAction;
+
+/**
+ * Change Password action.
+ *
+ */
+public class FluxUserAction extends FluxAction {
+ private static Log log = LogFactory.getLog(FluxUserAction.class);
+
+ /** Injected service instance */
+ @TurbineService
+ private SecurityService security;
+
+ /**
+ * ActionEvent responsible for inserting a new user into the Turbine
security
+ * system.
+ */
+ public void doInsert(PipelineData pipelineData, Context context) throws
Exception {
+ RunData data = getRunData(pipelineData);
+
+ /*
+ * Grab the username entered in the form.
+ */
+ String username = data.getParameters().getString("username");
+ String password = data.getParameters().getString("password");
+
+ if (!StringUtils.isEmpty(username) &&
!StringUtils.isEmpty(password)) {
+ /*
+ * Make sure this account doesn't already exist. If the
account already exists
+ * then alert the user and make them change the
username.
+ */
+ if (security.accountExists(username)) {
+ context.put("username", username);
+ context.put("errorTemplate",
"user,FluxUserAlreadyExists.vm");
+
+ data.setMessage("The user already exists");
+ data.getParameters().add("mode", "insert");
+ data.setScreen("user,FluxUserForm.vm");
+ return;
+ } else {
+
+ try {
+ /*
+ * Create a new user modeled directly
from the SecurityServiceTest method
+ */
+ User user =
security.getUserInstance(username);
+
data.getParameters().setProperties(user);
+ security.addUser(user, password);
+
+ // Use security to force the password
+ security.forcePassword(user, password);
+
+ } catch (Exception e) {
+ log.error("Error adding new user: " +
e);
+
+ context.put("username", username);
+ context.put("errorTemplate",
"user,FluxUserAlreadyExists.vm");
+
+ data.setMessage("Could not add the
user");
+ data.getParameters().add("mode",
"insert");
+ data.setScreen("user,FluxUserForm.vm");
+ return;
+ }
+ }
+
+ } else {
+ String msg = "Cannot add user without username or
password";
+ log.error(msg);
+ data.setMessage(msg);
+ data.getParameters().add("mode", "insert");
+ data.setScreen("user,FluxUserForm.vm");
+ }
+ }
+
+ /**
+ * ActionEvent responsible updating a user. Must check the input for
integrity
+ * before allowing the user info to be update in the database.
+ */
+ public void doUpdate(PipelineData pipelineData, Context context) throws
Exception {
+ RunData data = getRunData(pipelineData);
+ String username = data.getParameters().getString("username");
+ if (!StringUtils.isEmpty(username)) {
+ if (security.accountExists(username)) {
+
+ // This wrapped user does work for change
password though... see below
+ User user = security.getUser(username);
+ if (user != null) {
+
+ // update all properties from form
+
data.getParameters().setProperties(user);
+
+ // save the changes to the user account
+ security.saveUser(user);
+
+ // get the new password from form submit
+ String password =
data.getParameters().getString("password");
+
+ // Only update if we received a new
(non-empty) password
+ if (!StringUtils.isEmpty(password)) {
+
+ // Change user password
+ security.changePassword(user,
user.getPassword(), password);
+
+ // this still works
+ security.forcePassword(user,
password);
+ } else {
+ data.setMessage("Cannot provide
an empty password");
+ return;
+ }
+
+ }
+
+ } else {
+ log.error("User does not exist!");
+ }
+ }
+ }
+
+ /**
+ * ActionEvent responsible for removing a user from the Tambora system.
+ */
+ public void doDelete(PipelineData pipelineData, Context context) throws
Exception {
+
+ try {
+ RunData data = getRunData(pipelineData);
+ String username =
data.getParameters().getString("username");
+ if (!StringUtils.isEmpty(username)) {
+ if (security.accountExists(username)) {
+
+ // find the user object and remove
using security mgr
+ User user = security.getUser(username);
+ security.removeUser(user);
+
+ } else {
+ log.error("User does not exist!");
+ data.setMessage("User not found!");
+ }
+ }
+ } catch (Exception e) {
+ log.error("Could not remove user: " + e);
+ }
+ }
+
+ /**
+ * Update the roles that are to assigned to a user for a project.
+ */
+ public void doRoles(PipelineData pipelineData, Context context) throws
Exception {
+ RunData data = getRunData(pipelineData);
+
+ try {
+ /*
+ * Get the user we are trying to update. The username
has been hidden in the
+ * form so we will grab the hidden username and use
that to retrieve the user.
+ */
+ String username =
data.getParameters().getString("username");
+ if (!StringUtils.isEmpty(username)) {
+ if (security.accountExists(username)) {
+ User user = security.getUser(username);
+
+ // Get the Turbine ACL implementation
+ TurbineAccessControlList acl =
security.getUserManager().getACL(user);
+
+ /*
+ * Grab all the Groups and Roles in the
system.
+ */
+ GroupSet groups =
security.getAllGroups();
+ RoleSet roles = security.getAllRoles();
+
+ for (Group group : groups) {
+ String groupName =
group.getName();
+ for (Role role : roles) {
+ String roleName =
role.getName();
+
+ /*
+ * In the
UserRoleForm.vm we made a checkbox for every possible Group/Role
+ * combination so we
will compare every possible combination with the values
+ * that were checked
off in the form. If we have a match then we will grant the
+ * user the role in the
group.
+ */
+ String groupRole =
groupName + roleName;
+ String formGroupRole =
data.getParameters().getString(groupRole);
+ boolean addGroupRole =
false;
+
+ // signal to add group
+ if
(!StringUtils.isEmpty(formGroupRole))
+ addGroupRole =
true;
+
+ if (addGroupRole) {
+ // only add if
new
+ if
(!acl.hasRole(role, group)) {
+
security.grant(user, group, role);
+ }
+
+ } else {
+
+ // only remove
if it was previously assigned
+ if
(acl.hasRole(role, group)) {
+
+ //
revoke the role for this user
+
acl.getRoles(group).remove(role);
+
+ //
revoke the user/group/role entry
+
security.revoke(user, group, role);
+ }
+ }
+
+ }
+ }
+
+ } else {
+ log.error("User does not exist!");
+ }
+ }
+
+ } catch (Exception e) {
+ log.error("Error on role assignment: " + e);
+ }
+ }
+
+ /**
+ * Implement this to add information to the context.
+ */
+ public void doPerform(PipelineData pipelineData, Context context)
throws Exception {
+ log.info("Running do perform!");
+ getRunData(pipelineData).setMessage("Can't find the requested
action!");
+ }
+
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,27 @@
+package ${package}.flux.modules.screens;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.turbine.modules.screens.VelocityErrorScreen;
+
+/**
+ * Base screen for secure web acces to the storage side of Tambora.
+ *
+ */
+public class FluxError extends VelocityErrorScreen
+{
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,92 @@
+package ${package}.flux.modules.screens;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
+import org.apache.turbine.Turbine;
+import org.apache.turbine.TurbineConstants;
+import org.apache.turbine.annotation.TurbineConfiguration;
+import org.apache.turbine.annotation.TurbineService;
+import org.apache.turbine.modules.screens.VelocitySecureScreen;
+import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.services.security.SecurityService;
+import org.apache.turbine.util.RunData;
+import org.apache.velocity.context.Context;
+
+/**
+ * Base screen for secure web access to the Flux user manager
+ *
+ */
+public class FluxIndex extends VelocitySecureScreen {
+
+ @TurbineService
+ protected SecurityService securityService;
+
+ @TurbineConfiguration(TurbineConstants.TEMPLATE_LOGIN)
+ private Configuration templateLogin;
+
+ @TurbineConfiguration(TurbineConstants.TEMPLATE_HOMEPAGE)
+ private Configuration templateHomepage;
+
+ /**
+ * This method is called by the Turbine framework when the associated
Velocity
+ * template, Index.vm is requested
+ *
+ * @param data
+ * the Turbine request data
+ * @param context
+ * the Velocity context
+ * @throws Exception
+ * a generic Exception
+ */
+ @Override
+ protected void doBuildTemplate(PipelineData data, Context context)
throws Exception {
+ }
+
+ @Override
+ protected boolean isAuthorized(PipelineData pipelineData) throws
Exception {
+
+ RunData data = getRunData(pipelineData);
+
+ boolean isAuthorized = false;
+
+ /*
+ * Grab the Flux Admin role listed in the Flux.properties file
that is included
+ * in the the standard TurbineResources.properties file.
+ */
+ String fluxAdminRole =
Turbine.getConfiguration().getString("flux.admin.role");
+
+ // Get the Turbine ACL implementation
+ TurbineAccessControlList acl = data.getACL();
+
+ if (acl == null) {
+ // commons configuration getProperty: prefix removed,
the key for the value ..
+ // is an empty string, the result an object
+ data.setScreenTemplate((String)
templateLogin.getProperty(""));
+ isAuthorized = false;
+ } else if (acl.hasRole(fluxAdminRole)) {
+ isAuthorized = true;
+ } else {
+ data.setScreenTemplate((String)
templateHomepage.getProperty(""));
+ data.setMessage("You do not have access to this part of
the site.");
+ isAuthorized = false;
+ }
+ return isAuthorized;
+ }
+
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,94 @@
+package ${package}.flux.modules.screens;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
+import org.apache.turbine.Turbine;
+import org.apache.turbine.TurbineConstants;
+import org.apache.turbine.annotation.TurbineConfiguration;
+import org.apache.turbine.annotation.TurbineService;
+import org.apache.turbine.modules.screens.VelocitySecureScreen;
+import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.services.security.SecurityService;
+import org.apache.velocity.context.Context;
+
+/**
+ * Base screen for secure web acces to the storage side of Tambora.
+ *
+ */
+public abstract class FluxScreen extends VelocitySecureScreen {
+
+ @TurbineService
+ protected SecurityService securityService;
+
+ @TurbineConfiguration(TurbineConstants.TEMPLATE_LOGIN)
+ private Configuration templateLogin;
+
+ @TurbineConfiguration(TurbineConstants.TEMPLATE_HOMEPAGE)
+ private Configuration templateHomepage;
+
+ /**
+ * This method is called by Turbine
+ */
+ @Override
+ protected void doBuildTemplate(PipelineData data, Context context)
throws Exception {
+
+ /*
+ * Check to see if the embedded menu should be displayed in the
templates.
+ */
+ if
(Turbine.getConfiguration().getBoolean("flux.embedded.show.menu", false)) {
+ context.put("showEmbeddedMenu", true);
+ }
+
+ /*
+ * Check to see if we will display the finders on the forms
used in Flux.
+ */
+ if
(Turbine.getConfiguration().getBoolean("flux.ui.show.finder", false)) {
+ context.put("showFinder", true);
+ }
+
+ }
+
+ @Override
+ protected boolean isAuthorized(PipelineData data) throws Exception {
+ boolean isAuthorized = false;
+
+ /*
+ * Grab the Flux Admin role listed in the Flux.properties file
that is included
+ * in the the standard TurbineResources.properties file.
+ */
+ String fluxAdminRole =
Turbine.getConfiguration().getString("flux.admin.role");
+
+ // Get the Turbine ACL implementation
+ TurbineAccessControlList acl = getRunData(data).getACL();
+
+ if (acl == null) {
+ // commons configuration getProperty: prefix removed,
the key for the value ..
+ // is an empty string, the result an object
+ getRunData(data).setScreenTemplate((String)
templateLogin.getProperty(""));
+ isAuthorized = false;
+ } else if (acl.hasRole(fluxAdminRole)) {
+ isAuthorized = true;
+ } else {
+ getRunData(data).setScreenTemplate((String)
templateHomepage.getProperty(""));
+ getRunData(data).setMessage("You do not have access to
this part of the site.");
+ isAuthorized = false;
+ }
+ return isAuthorized;
+ }
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,25 @@
+package ${package}.flux.modules.screens.group;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import ${package}.flux.modules.screens.FluxScreen;
+
+/**
+ */
+public class Default extends FluxScreen
+{
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,25 @@
+package ${package}.flux.modules.screens.permission;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import ${package}.flux.modules.screens.FluxScreen;
+
+/**
+ */
+public class Default extends FluxScreen
+{
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,25 @@
+package ${package}.flux.modules.screens.role;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import ${package}.flux.modules.screens.FluxScreen;
+
+/**
+ */
+public class Default extends FluxScreen
+{
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,25 @@
+package ${package}.flux.modules.screens.user;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import ${package}.flux.modules.screens.FluxScreen;
+
+/**
+ */
+public class Default extends FluxScreen
+{
+}
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,249 @@
+package ${package}.flux.tools;
+
+/*
+ * Copyright 2001-2017 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import java.util.List;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.lang.StringUtils;
+import org.apache.fulcrum.security.acl.AccessControlList;
+import org.apache.fulcrum.security.entity.Group;
+import org.apache.fulcrum.security.entity.Permission;
+import org.apache.fulcrum.security.entity.Role;
+import org.apache.fulcrum.security.torque.om.TurbinePermission;
+import org.apache.fulcrum.security.torque.om.TurbinePermissionPeer;
+import org.apache.fulcrum.security.torque.om.TurbineRolePermissionPeer;
+import org.apache.fulcrum.security.torque.om.TurbineUserPeer;
+import org.apache.fulcrum.security.util.GroupSet;
+import org.apache.fulcrum.security.util.RoleSet;
+import org.apache.torque.criteria.Criteria;
+import org.apache.turbine.annotation.TurbineConfiguration;
+import org.apache.turbine.annotation.TurbineService;
+import org.apache.turbine.om.security.User;
+import org.apache.turbine.services.pull.ApplicationTool;
+import org.apache.turbine.services.pull.RunDataApplicationTool;
+import org.apache.turbine.services.security.SecurityService;
+import org.apache.turbine.util.RunData;
+import org.apache.turbine.util.template.SelectorBox;
+
+/**
+ * The pull api for flux templates
+ *
+ * @version $Id: FluxTool.java,v 1.13 2017/11/16 11:24:41 painter Exp $
+ */
+public class FluxTool implements ApplicationTool, RunDataApplicationTool {
+
+ /** Injected service instance */
+ @TurbineService
+ private SecurityService security;
+
+ /** Injected configuration instance */
+ @TurbineConfiguration
+ private Configuration conf;
+
+ /** The object containing request specific data */
+ private RunData data;
+
+ /** A Group object for use within the Flux API. */
+ private Group group = null;
+
+ /** A Issue object for use within the Flux API. */
+ private Role role = null;
+
+ /** A Permission object for use within the Flux API. */
+ private Permission permission = null;
+
+ /** A User object for use within the Flux API. */
+ private User user = null;
+
+ public void init(Object data) {
+ this.data = (RunData) data;
+ }
+
+ /**
+ * Constructor does initialization stuff
+ */
+ public FluxTool() {
+
+ }
+
+ public Group getGroup() throws Exception {
+ String groupName = data.getParameters().getString("group");
+ if (StringUtils.isEmpty(groupName)) {
+ group = security.getGroupInstance();
+ } else {
+ group = security.getGroupByName(groupName);
+ }
+ return group;
+ }
+
+ public String getMode() {
+ return data.getParameters().getString("mode");
+ }
+
+ public GroupSet getGroups() throws Exception {
+ return security.getAllGroups();
+ }
+
+ public Role getRole() throws Exception {
+ String roleName = data.getParameters().getString("role");
+ if (StringUtils.isEmpty(roleName)) {
+ role = security.getRoleInstance();
+ } else {
+ role = security.getRoleByName(roleName);
+ }
+ return role;
+ }
+
+ /**
+ */
+ public RoleSet getRoles() throws Exception {
+ return security.getAllRoles();
+ }
+
+ public TurbinePermission getPermission() throws Exception {
+
+ // make sure that the get permission returns the one linked to
the role
+ String permissionName =
data.getParameters().getString("permission");
+ if (StringUtils.isEmpty(permissionName)) {
+ return null;
+ } else {
+ try {
+ Criteria criteria = new Criteria();
+
criteria.where(TurbinePermissionPeer.PERMISSION_NAME, permissionName);
+ return
TurbinePermissionPeer.doSelectSingleRecord(criteria);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Get last cached role - useful after calling getPermissions()
+ *
+ * @return
+ */
+ public Role getCachedRole() {
+ return role;
+ }
+
+ /**
+ * Return all permissions for a role
+ */
+ public List<TurbinePermission> getRolePermissions() throws Exception {
+
+ String roleName = data.getParameters().getString("role");
+ if (StringUtils.isEmpty(roleName)) {
+ role = security.getRoleInstance();
+ } else {
+ role = security.getRoleByName(roleName);
+ }
+
+ if (role != null) {
+ try {
+ Criteria criteria = new Criteria();
+
criteria.where(TurbineRolePermissionPeer.ROLE_ID, role.getId());
+
criteria.addJoin(TurbineRolePermissionPeer.PERMISSION_ID,
TurbinePermissionPeer.PERMISSION_ID);
+
criteria.addAscendingOrderByColumn(TurbinePermissionPeer.PERMISSION_NAME);
+ return TurbinePermissionPeer.doSelect(criteria);
+ } catch (Exception e) {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Return all permissions
+ */
+ public List<TurbinePermission> getPermissions() throws Exception {
+
+ try {
+ Criteria criteria = new Criteria();
+
criteria.addAscendingOrderByColumn(TurbinePermissionPeer.PERMISSION_NAME);
+ return TurbinePermissionPeer.doSelect(criteria);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public User getUser() throws Exception {
+ String name = data.getParameters().getString("username");
+ if (StringUtils.isEmpty(name)) {
+ user = security.getUserInstance();
+ } else {
+ user = security.getUser(name);
+ }
+ return user;
+ }
+
+ public AccessControlList getACL() throws Exception {
+ // Get the Turbine ACL implementation
+ return security.getUserManager().getACL(getUser());
+ }
+
+ /**
+ */
+ public SelectorBox getFieldList() throws Exception {
+ Object[] names = { "username", "firstname", "middlename",
"lastname" };
+ Object[] values = { "Username", "First Name", "Middle Name",
"Last Name" };
+ return new SelectorBox("fieldList", names, values);
+ }
+
+ /**
+ */
+ public SelectorBox getUserFieldList() throws Exception {
+ /**
+ * This is a tie to the DB implementation something should be
added the
+ * pluggable pieces to allow decent parameterized searching.
+ */
+
+ Object[] names = { TurbineUserPeer.LOGIN_NAME,
TurbineUserPeer.FIRST_NAME, TurbineUserPeer.LAST_NAME };
+
+ Object[] values = { "User Name", "First Name", "Last Name" };
+
+ return new SelectorBox("fieldList", names, values);
+ }
+
+ /**
+ * Select all the users and place them in an array that can be used
within the
+ * UserList.vm template.
+ */
+ @SuppressWarnings("unchecked")
+ public List<User> getUsers() throws Exception {
+ Criteria criteria = new Criteria();
+ String fieldList = data.getParameters().getString("fieldList");
+
+ if (fieldList != null) {
+ // This is completely database centric.
+ String searchField =
data.getParameters().getString("searchField");
+ criteria.where(fieldList, searchField, Criteria.LIKE);
+ }
+
+ return (List<User>)
security.getUserManager().retrieveList(criteria);
+ }
+
+ public void refresh(RunData data) {
+ this.data = data;
+ }
+
+ public void refresh() {
+ // nothing to do here
+ }
+
+}
Modified:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties?rev=1821946&r1=1821945&r2=1821946&view=diff
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
(original)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
Mon Jan 22 21:42:49 2018
@@ -131,7 +131,7 @@ scheduledjob.cache.size=10
# Default: org.apache.turbine.modules
# -------------------------------------------------------------------
-module.packages=${package}.modules,org.apache.turbine.modules
+module.packages=${package}.modules,${package}.flux.modules,org.apache.turbine.modules
# -------------------------------------------------------------------
#
@@ -541,6 +541,9 @@ tool.content.want.encoding = false
tool.content.want.relative = true
tool.link.want.relative = true
+# Flux tool
+tool.request.flux=${package}.flux.tools.FluxTool
+
# -------------------------------------------------------------------
#
# V E L O C I T Y S E R V I C E
@@ -577,7 +580,7 @@ services.VelocityService.velocimacro.lib
services.VelocityService.resource.loader = file
services.VelocityService.file.resource.loader.description = Velocity File
Resource Loader
services.VelocityService.file.resource.loader.class =
org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates
+services.VelocityService.file.resource.loader.path =
/templates/app,/templates/flux
services.VelocityService.file.resource.loader.cache = false
services.VelocityService.file.resource.loader.modificationCheckInterval = 2
@@ -653,3 +656,6 @@ services.AvalonComponentService.containe
#
# Default: none
# -------------------------------------------------------------------
+
+# Required to enable the flux library
+include=flux.properties
\ No newline at end of file
Added:
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/flux.properties
URL:
http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/flux.properties?rev=1821946&view=auto
==============================================================================
---
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/flux.properties
(added)
+++
turbine/maven/archetypes/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/flux.properties
Mon Jan 22 21:42:49 2018
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------
+#
+# F L U X S E R V I C E
+#
+# -------------------------------------------------------------------
+
+# ------------------------------------------------------------------------
+# Security Properties
+# ------------------------------------------------------------------------
+flux.admin.role = turbineadmin
+
+# ------------------------------------------------------------------------
+# Mode Properties
+# ------------------------------------------------------------------------
+# Flux can work in stand-alone mode and in embedded mode.
+# ------------------------------------------------------------------------
+
+flux.mode = embedded
+
+# ------------------------------------------------------------------------
+# Embedded Properties
+# ------------------------------------------------------------------------
+
+flux.embedded.layout = /Default.vm
+flux.embedded.show.menu = true
+
+# ------------------------------------------------------------------------
+# Stand-Alone Properties
+# ------------------------------------------------------------------------
+
+flux.stand.alone.layout = /FluxDefault.vm
+
+# ------------------------------------------------------------------------
+# UI Properties
+# ------------------------------------------------------------------------
+
+flux.ui.show.finder = false