java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
| 38 +
java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.java
| 113 ++++
java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
| 62 ++
java/code/src/com/redhat/rhn/frontend/action/LoginAction.java
| 87 ---
java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
| 252 ++++++++++
java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
| 108 ----
java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtAuthRoleMappingAction.java
| 61 ++
java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDeleteAction.java
| 58 ++
java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDetailAction.java
| 164 ++++++
java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
| 29 -
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
| 42 +
java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
| 6
java/code/src/com/redhat/rhn/frontend/struts/RequestContext.java
| 18
java/code/src/com/redhat/rhn/frontend/struts/SelectableLabelValueBean.java
| 81 +++
java/code/src/com/redhat/rhn/manager/user/CreateUserCommand.java
| 24
java/code/src/com/redhat/rhn/manager/user/UpdateUserCommand.java
| 31 +
java/code/src/com/redhat/rhn/manager/user/UserManager.java
| 2
java/code/webapp/WEB-INF/nav/admin_user.xml
| 10
java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
| 2
java/code/webapp/WEB-INF/pages/admin/multiorg/extauth.jsp
| 14
java/code/webapp/WEB-INF/pages/admin/multiorg/extauthroles.jsp
| 52 ++
java/code/webapp/WEB-INF/pages/admin/multiorg/extgroup_delete.jsp
| 54 ++
java/code/webapp/WEB-INF/pages/admin/multiorg/extgroup_detail.jsp
| 122 ++++
java/code/webapp/WEB-INF/struts-config.xml
| 51 +-
java/spacewalk-java.spec
| 14
rel-eng/packages/spacewalk-java
| 2
schema/spacewalk/oracle/triggers/rhnUserExtGroupMapping.sql
| 3
schema/spacewalk/postgres/triggers/rhnUserExtGroupMapping.sql
| 5
schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/046-rhnUserExtGroupMapping-trigger.sql.oracle
| 3
schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/046-rhnUserExtGroupMapping-trigger.sql.postgresql
| 5
30 files changed, 1315 insertions(+), 198 deletions(-)
New commits:
commit 56879b92491df8ccc517502f49e537b39cd3c26c
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jan 31 16:53:25 2014 +0100
Automatic commit of package [spacewalk-java] release [2.1.140-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index 56353e5..8676020 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -28,7 +28,7 @@ Name: spacewalk-java
Summary: Spacewalk Java site packages
Group: Applications/Internet
License: GPLv2
-Version: 2.1.139
+Version: 2.1.140
Release: 1%{?dist}
URL:
https://fedorahosted.org/spacewalk
Source0:
https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -801,6 +801,18 @@ fi
%{jardir}/postgresql-jdbc.jar
%changelog
+* Fri Jan 31 2014 Tomas Lestach <tlestach(a)redhat.com> 2.1.140-1
+- allow deleting disabled users
+- return default string even if input string is null
+- move shared methods to loginhelper
+- introduce LoginHelper
+- add externally authenticated user roles according to the external group to
+ roles mapping
+- externally authenticated user does not have to be in the default org
+- add external group delete page
+- add external group edit page
+- add external group to role mapping list page
+
* Fri Jan 31 2014 Michael Mraka <michael.mraka(a)redhat.com> 2.1.139-1
- add special class to help links
- use consistent set of icons for system status
diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java
index 5f302c9..66f93be 100644
--- a/rel-eng/packages/spacewalk-java
+++ b/rel-eng/packages/spacewalk-java
@@ -1 +1 @@
-2.1.139-1 java/
+2.1.140-1 java/
commit b1156c762780b3820eeea5cb0ddc14ed77d47c1a
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jan 31 15:53:10 2014 +0100
allow deleting disabled users
even if it is spacewalk/satellite admin
diff --git a/java/code/src/com/redhat/rhn/manager/user/UserManager.java
b/java/code/src/com/redhat/rhn/manager/user/UserManager.java
index bf758fa..7a1e1f0 100644
--- a/java/code/src/com/redhat/rhn/manager/user/UserManager.java
+++ b/java/code/src/com/redhat/rhn/manager/user/UserManager.java
@@ -492,7 +492,7 @@ public class UserManager extends BaseManager {
// Do not allow deletion of the last Satellite Administrator:
User toDelete = UserFactory.lookupById(loggedInUser, targetUid);
- if (toDelete.hasRole(RoleFactory.SAT_ADMIN)) {
+ if (!toDelete.isDisabled() && toDelete.hasRole(RoleFactory.SAT_ADMIN)) {
if (SatManager.getActiveSatAdmins().size() == 1) {
log.warn("Cannot delete the last Satellite Administrator");
throw new DeleteSatAdminException(toDelete);
commit ba5907aa1b955e3c74509707a7c92fd1c61c63cb
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jan 31 15:28:28 2014 +0100
return default string even if input string is null
diff --git a/java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
b/java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
index f526e70..c4ee592 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
@@ -149,12 +149,14 @@ public class LoginHelper {
private static String decodeFromIso88591(String string, String defaultString) {
try {
- return new String(string.getBytes("ISO8859-1"),
"UTF-8");
+ if (string != null) {
+ return new String(string.getBytes("ISO8859-1"),
"UTF-8");
+ }
}
catch (UnsupportedEncodingException e) {
log.warn("Unable to decode: " + string);
- return defaultString;
}
+ return defaultString;
}
private static Set<Role> getRolesFromExtGroups(HttpServletRequest requestIn) {
commit 72be4ea24fedac8b6be33666844e8800ae24c8c2
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Wed Jan 29 14:51:42 2014 +0100
move shared methods to loginhelper
diff --git a/java/code/src/com/redhat/rhn/frontend/action/LoginAction.java
b/java/code/src/com/redhat/rhn/frontend/action/LoginAction.java
index c9d6e26..e45ed83 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/LoginAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/LoginAction.java
@@ -70,16 +70,24 @@ public class LoginAction extends RhnAction {
return mapping.findForward("failure");
}
- ActionErrors e = new ActionErrors();
- User user = loginUser((String) f.get("username"), (String)
f.get("password"),
- request, response, e);
+ ActionMessages messages = new ActionMessages();
+ User user = LoginHelper.checkExternalAuthentication(request, messages, errors);
+ // save stores msgs into the session (works for redirect)
+ saveMessages(request, messages);
+ addErrors(request, errors);
+ errors.clear();
+
+ if (user == null) {
+ user = loginUser((String) f.get("username"), (String)
f.get("password"),
+ request, response, errors);
+ }
- if (e.isEmpty()) {
+ if (errors.isEmpty()) {
LoginHelper.successfulLogin(request, response, user);
}
else {
performGracePeriodCheck(request);
- addErrors(request, e);
+ addErrors(request, errors);
ret = mapping.findForward("failure");
}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
b/java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
index 030db3b..f526e70 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
@@ -14,18 +14,33 @@
*/
package com.redhat.rhn.frontend.action;
+import com.redhat.rhn.common.hibernate.LookupException;
import com.redhat.rhn.common.messaging.MessageQueue;
+import com.redhat.rhn.domain.common.SatConfigFactory;
import
com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.domain.org.usergroup.UserExtGroup;
+import com.redhat.rhn.domain.org.usergroup.UserGroupFactory;
+import com.redhat.rhn.domain.role.Role;
import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.domain.user.UserFactory;
import com.redhat.rhn.frontend.events.UpdateErrataCacheEvent;
import com.redhat.rhn.frontend.servlets.PxtSessionDelegateFactory;
+import com.redhat.rhn.manager.user.CreateUserCommand;
+import com.redhat.rhn.manager.user.UpdateUserCommand;
import com.redhat.rhn.manager.user.UserManager;
import org.apache.commons.lang.time.StopWatch;
import org.apache.log4j.Logger;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
import java.io.IOException;
+import java.io.UnsupportedEncodingException;
import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -39,6 +54,140 @@ import javax.servlet.http.HttpSession;
public class LoginHelper {
private static Logger log = Logger.getLogger(LoginHelper.class);
+ private static final String DEFAULT_KERB_USER_PASSWORD = "0";
+
+ /**
+ * Utility classes can't be instantiated.
+ */
+ private LoginHelper() {
+ }
+
+ /**
+ * check whether we can login an externally authenticated user
+ * @param request request
+ * @param messages messages
+ * @param errors errors
+ * @return user, if externally authenticated
+ */
+ public static User checkExternalAuthentication(HttpServletRequest request,
+ ActionMessages messages,
+ ActionErrors errors) {
+ String remoteUserString = request.getRemoteUser();
+ User remoteUser = null;
+ if (remoteUserString != null) {
+
+ String firstname = decodeFromIso88591(
+ (String) request.getAttribute("REMOTE_USER_FIRSTNAME"),
"");
+ String lastname = decodeFromIso88591(
+ (String) request.getAttribute("REMOTE_USER_LASTNAME"),
"");
+ String email = decodeFromIso88591(
+ (String) request.getAttribute("REMOTE_USER_EMAIL"), null);
+
+ Long defaultOrgId = SatConfigFactory.getSatConfigLongValue(
+ SatConfigFactory.ORG_ID_FOR_EXT_AUTH);
+
+ Set<Role> roles = getRolesFromExtGroups(request);
+
+ log.warn("REMOTE_USER_ORGUNIT: " +
+ request.getAttribute("REMOTE_USER_ORGUNIT"));
+ log.warn("REMOTE_USER_GROUPS: " +
+ request.getAttribute("REMOTE_USER_GROUPS"));
+
+ try {
+ remoteUser = UserFactory.lookupByLogin(remoteUserString);
+
+ if (remoteUser.isDisabled()) {
+ errors.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("account.user.disabled",
+ new String[] {remoteUserString}));
+ remoteUser = null;
+ }
+ if (remoteUser != null) {
+ UpdateUserCommand updateCmd = new UpdateUserCommand(remoteUser);
+ updateCmd.setFirstNames(firstname);
+ updateCmd.setLastName(lastname);
+ updateCmd.setEmail(email);
+ updateCmd.setRoles(roles);
+ updateCmd.updateUser();
+ log.warn("Externally authenticated login " +
remoteUserString +
+ " (" + firstname + " " + lastname +
")");
+ }
+ }
+ catch (LookupException le) {
+ Org defaultOrg = null;
+ if (defaultOrgId != null) {
+ defaultOrg = OrgFactory.lookupById(defaultOrgId);
+ }
+ if (defaultOrg == null) {
+ log.error("Cannot find organization with id: " +
defaultOrgId);
+ }
+ else {
+ CreateUserCommand createCmd = new CreateUserCommand();
+ createCmd.setLogin(remoteUserString);
+ // set a password, that cannot really be used
+ createCmd.setRawPassword(DEFAULT_KERB_USER_PASSWORD);
+ createCmd.setFirstNames(firstname);
+ createCmd.setLastName(lastname);
+ createCmd.setEmail(email);
+ createCmd.setOrg(defaultOrg);
+ createCmd.setRoles(roles);
+ createCmd.validate();
+ createCmd.storeNewUser();
+ remoteUser = createCmd.getUser();
+ log.warn("Externally authenticated login " +
remoteUserString +
+ " (" + firstname + " " + lastname +
") created.");
+ }
+ if (remoteUser.getPassword().equals(DEFAULT_KERB_USER_PASSWORD)) {
+ messages.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("message.kerbuserlogged",
+ new String[] {remoteUserString}));
+ }
+ }
+ }
+ return remoteUser;
+ }
+
+ private static String decodeFromIso88591(String string, String defaultString) {
+ try {
+ return new String(string.getBytes("ISO8859-1"),
"UTF-8");
+ }
+ catch (UnsupportedEncodingException e) {
+ log.warn("Unable to decode: " + string);
+ return defaultString;
+ }
+ }
+
+ private static Set<Role> getRolesFromExtGroups(HttpServletRequest requestIn) {
+ Set<Role> roles = new HashSet<Role>();
+ Long nGroups = null;
+ String nGroupsStr = (String)
requestIn.getAttribute("REMOTE_USER_GROUP_N");
+ if (nGroupsStr != null) {
+ try {
+ nGroups = Long.parseLong(nGroupsStr);
+ }
+ catch (NumberFormatException nfe) {
+ // do nothing, nGroups stays null
+ }
+ }
+ if (nGroups == null) {
+ log.warn("REMOTE_USER_GROUP_N not set!");
+ return roles;
+ }
+ for (int i = 1; i <= nGroups; i++) {
+ String extGroupName = (String)
requestIn.getAttribute("REMOTE_USER_GROUP_" + i);
+ if (extGroupName == null) {
+ log.warn("REMOTE_USER_GROUP_" + i + " not set!");
+ continue;
+ }
+ UserExtGroup extGroup =
UserGroupFactory.lookupExtGroupByLabel(extGroupName);
+ if (extGroup == null) {
+ log.warn("No mapping defined for external group '" +
extGroupName + "'.");
+ continue;
+ }
+ roles.addAll(extGroup.getRoles());
+ }
+ return roles;
+ }
/** static method shared by LoginAction and LoginSetupAction
* @param request actual request
diff --git a/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
b/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
index 58c2874..9b5c419 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
@@ -17,35 +17,23 @@ package com.redhat.rhn.frontend.action;
import com.redhat.rhn.common.db.datasource.DataResult;
import com.redhat.rhn.common.db.datasource.ModeFactory;
import com.redhat.rhn.common.db.datasource.SelectMode;
-import com.redhat.rhn.common.hibernate.LookupException;
-import com.redhat.rhn.domain.common.SatConfigFactory;
-import
com.redhat.rhn.domain.org.Org;
-import com.redhat.rhn.domain.org.OrgFactory;
-import com.redhat.rhn.domain.org.usergroup.UserExtGroup;
-import com.redhat.rhn.domain.org.usergroup.UserGroupFactory;
-import com.redhat.rhn.domain.role.Role;
import com.redhat.rhn.domain.user.User;
-import com.redhat.rhn.domain.user.UserFactory;
import com.redhat.rhn.frontend.struts.RhnAction;
import com.redhat.rhn.frontend.struts.RhnHelper;
import com.redhat.rhn.manager.acl.AclManager;
import com.redhat.rhn.manager.satellite.CertificateManager;
import com.redhat.rhn.manager.satellite.SystemCommandExecutor;
-import com.redhat.rhn.manager.user.CreateUserCommand;
-import com.redhat.rhn.manager.user.UpdateUserCommand;
import com.redhat.rhn.manager.user.UserManager;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
+import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessages;
-import java.io.UnsupportedEncodingException;
import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Set;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@@ -58,7 +46,6 @@ public class LoginSetupAction extends RhnAction {
private static Logger log = Logger.getLogger(LoginSetupAction.class);
public static final String HAS_EXPIRED = "hasExpired";
- private static final String DEFAULT_KERB_USER_PASSWORD = "0";
/** {@inheritDoc} */
public ActionForward execute(ActionMapping mapping,
@@ -116,90 +103,18 @@ public class LoginSetupAction extends RhnAction {
return mapping.findForward("loggedin");
}
- String remoteUserString = request.getRemoteUser();
- if (remoteUserString != null) {
-
- String firstname = decodeFromIso88591(
- (String) request.getAttribute("REMOTE_USER_FIRSTNAME"),
"");
- String lastname = decodeFromIso88591(
- (String) request.getAttribute("REMOTE_USER_LASTNAME"),
"");
- String email = decodeFromIso88591(
- (String) request.getAttribute("REMOTE_USER_EMAIL"), null);
-
- Long defaultOrgId = SatConfigFactory.getSatConfigLongValue(
- SatConfigFactory.ORG_ID_FOR_EXT_AUTH);
-
- User remoteUser = null;
- Set<Role> roles = getRolesFromExtGroups(request);
-
- log.info("REMOTE_USER_CUSTOM_N: " +
- request.getAttribute("REMOTE_USER_CUSTOM_N"));
- log.info("REMOTE_USER_GECOS: " +
- request.getAttribute("REMOTE_USER_GECOS"));
- log.warn("REMOTE_USER_GROUPS: " +
- request.getAttribute("REMOTE_USER_GROUPS"));
- log.info("REMOTE_USER_GROUP_1: " +
- request.getAttribute("REMOTE_USER_GROUP_1"));
- log.info("REMOTE_USER_GROUP_2: " +
- request.getAttribute("REMOTE_USER_GROUP_2"));
- log.info("REMOTE_USER_GROUP_3: " +
- request.getAttribute("REMOTE_USER_GROUP_3"));
- log.info("REMOTE_USER_GROUP_N: " +
- request.getAttribute("REMOTE_USER_GROUP_N"));
-
- try {
- remoteUser = UserFactory.lookupByLogin(remoteUserString);
-
- if (remoteUser.isDisabled()) {
- createErrorMessage(request, "account.user.disabled",
remoteUserString);
- remoteUser = null;
- }
- if (remoteUser != null) {
- UpdateUserCommand updateCmd = new UpdateUserCommand(remoteUser);
- updateCmd.setFirstNames(firstname);
- updateCmd.setLastName(lastname);
- updateCmd.setEmail(email);
- updateCmd.setRoles(roles);
- updateCmd.updateUser();
- log.warn("Externally authenticated login " +
remoteUserString +
- " (" + firstname + " " + lastname +
")");
- }
- }
- catch (LookupException le) {
- Org defaultOrg = null;
- if (defaultOrgId != null) {
- defaultOrg = OrgFactory.lookupById(defaultOrgId);
- }
- if (defaultOrg == null) {
- log.error("Cannot find organization with id: " +
defaultOrgId);
- }
- else {
- CreateUserCommand createCmd = new CreateUserCommand();
- createCmd.setLogin(remoteUserString);
- // set a password, that cannot really be used
- createCmd.setRawPassword(DEFAULT_KERB_USER_PASSWORD);
- createCmd.setFirstNames(firstname);
- createCmd.setLastName(lastname);
- createCmd.setEmail(email);
- createCmd.setOrg(defaultOrg);
- createCmd.setRoles(roles);
- createCmd.validate();
- createCmd.storeNewUser();
- remoteUser = createCmd.getUser();
- log.warn("Externally authenticated login " +
remoteUserString +
- " (" + firstname + " " + lastname +
") created.");
- }
- }
- if (remoteUser != null) {
- if (remoteUser.getPassword().equals(DEFAULT_KERB_USER_PASSWORD)) {
- createMessage(request, "message.kerbuserlogged",
- new String [] {remoteUserString});
- }
- if (LoginHelper.successfulLogin(request, response, remoteUser)) {
- return null;
- }
- return mapping.findForward("loggedin");
+ ActionErrors errors = new ActionErrors();
+ ActionMessages messages = new ActionMessages();
+ User remoteUser =
+ LoginHelper.checkExternalAuthentication(request, messages, errors);
+ // save stores msgs into the session (works for redirect)
+ saveMessages(request, messages);
+ addErrors(request, errors);
+ if (errors.isEmpty() && remoteUser != null) {
+ if (LoginHelper.successfulLogin(request, response, remoteUser)) {
+ return null;
}
+ return mapping.findForward("loggedin");
}
// store url_bounce set by pxt pages
@@ -213,48 +128,6 @@ public class LoginSetupAction extends RhnAction {
return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
}
- private Set<Role> getRolesFromExtGroups(HttpServletRequest requestIn) {
- Set<Role> roles = new HashSet<Role>();
- Long nGroups = null;
- String nGroupsStr = (String)
requestIn.getAttribute("REMOTE_USER_GROUP_N");
- if (nGroupsStr != null) {
- try {
- nGroups = Long.parseLong(nGroupsStr);
- }
- catch (NumberFormatException nfe) {
- // do nothing, nGroups stays null
- }
- }
- if (nGroups == null) {
- log.warn("REMOTE_USER_GROUP_N not set!");
- return roles;
- }
- for (int i = 1; i <= nGroups; i++) {
- String extGroupName = (String)
requestIn.getAttribute("REMOTE_USER_GROUP_" + i);
- if (extGroupName == null) {
- log.warn("REMOTE_USER_GROUP_" + i + " not set!");
- continue;
- }
- UserExtGroup extGroup =
UserGroupFactory.lookupExtGroupByLabel(extGroupName);
- if (extGroup == null) {
- log.warn("No mapping defined for external group '" +
extGroupName + "'.");
- continue;
- }
- roles.addAll(extGroup.getRoles());
- }
- return roles;
- }
-
- private String decodeFromIso88591(String string, String defaultString) {
- try {
- return new String(string.getBytes("ISO8859-1"),
"UTF-8");
- }
- catch (UnsupportedEncodingException e) {
- log.warn("Unable to decode: " + string);
- return defaultString;
- }
- }
-
private String getRpmSchemaVersion(String schemaName) {
String[] rpmCommand = new String[4];
rpmCommand[0] = "rpm";
commit 2391a243afa6265951f3cedc388cf4d0dd285b9a
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Wed Jan 29 13:28:53 2014 +0100
introduce LoginHelper
diff --git a/java/code/src/com/redhat/rhn/frontend/action/LoginAction.java
b/java/code/src/com/redhat/rhn/frontend/action/LoginAction.java
index ed670ad..c9d6e26 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/LoginAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/LoginAction.java
@@ -14,18 +14,13 @@
*/
package com.redhat.rhn.frontend.action;
-import com.redhat.rhn.common.messaging.MessageQueue;
-import
com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.user.User;
-import com.redhat.rhn.frontend.events.UpdateErrataCacheEvent;
-import com.redhat.rhn.frontend.servlets.PxtSessionDelegateFactory;
import com.redhat.rhn.frontend.struts.RhnAction;
import com.redhat.rhn.frontend.struts.RhnValidationHelper;
import com.redhat.rhn.manager.satellite.CertificateManager;
import com.redhat.rhn.manager.user.UserManager;
import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.time.StopWatch;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
@@ -35,13 +30,9 @@ import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;
-import java.io.IOException;
-import java.util.Date;
-
import javax.security.auth.login.LoginException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
/**
* LoginAction
@@ -84,7 +75,7 @@ public class LoginAction extends RhnAction {
request, response, e);
if (e.isEmpty()) {
- successfulLogin(request, response, user);
+ LoginHelper.successfulLogin(request, response, user);
}
else {
performGracePeriodCheck(request);
@@ -95,42 +86,6 @@ public class LoginAction extends RhnAction {
return ret;
}
- /** static method shared by LoginAction and LoginSetupAction
- * @param request actual request
- * @param response actual reponse
- * @param user logged in user
- * @return returns true, if redirect
- */
- public static boolean successfulLogin(HttpServletRequest request,
- HttpServletResponse response, User user) {
- // set last logged in
- user.setLastLoggedIn(new Date());
- UserManager.storeUser(user);
- // update session with actual user
- PxtSessionDelegateFactory.getInstance().newPxtSessionDelegate().
- updateWebUserId(request, response, user.getId());
-
- publishUpdateErrataCacheEvent(user.getOrg());
- // redirect, if url_bounce set
- HttpSession ws = request.getSession(false);
- if (ws != null) {
- String urlBounce = LoginAction.updateUrlBounce(
- (String) ws.getAttribute("url_bounce"),
- (String) ws.getAttribute("request_method"));
- try {
- if (urlBounce != null) {
- log.info("redirect: " + urlBounce);
- response.sendRedirect(urlBounce);
- return true;
- }
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- }
- return false;
- }
-
/**
* update url_bounce
* @param urlBounce url_bounce
@@ -156,28 +111,6 @@ public class LoginAction extends RhnAction {
}
/**
- * @param orgIn
- */
- private static void publishUpdateErrataCacheEvent(Org orgIn) {
- StopWatch sw = new StopWatch();
- if (log.isDebugEnabled()) {
- log.debug("Updating errata cache");
- sw.start();
- }
-
- UpdateErrataCacheEvent uece = new
- UpdateErrataCacheEvent(UpdateErrataCacheEvent.TYPE_ORG);
- uece.setOrgId(orgIn.getId());
- MessageQueue.publish(uece);
-
- if (log.isDebugEnabled()) {
- sw.stop();
- log.debug("Finished Updating errata cache. Took [" +
- sw.getTime() + "]");
- }
- }
-
- /**
* Log a user into the site and create the user's session.
* @param username User's login name.
* @param password User's unencrypted password.
diff --git a/java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
b/java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
new file mode 100644
index 0000000..030db3b
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/LoginHelper.java
@@ -0,0 +1,101 @@
+/**
+ * Copyright (c) 2014 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.frontend.action;
+
+import com.redhat.rhn.common.messaging.MessageQueue;
+import
com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.events.UpdateErrataCacheEvent;
+import com.redhat.rhn.frontend.servlets.PxtSessionDelegateFactory;
+import com.redhat.rhn.manager.user.UserManager;
+
+import org.apache.commons.lang.time.StopWatch;
+import org.apache.log4j.Logger;
+
+import java.io.IOException;
+import java.util.Date;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+
+/**
+ * LoginHelper
+ * @version $Rev$
+ */
+public class LoginHelper {
+
+ private static Logger log = Logger.getLogger(LoginHelper.class);
+
+ /** static method shared by LoginAction and LoginSetupAction
+ * @param request actual request
+ * @param response actual reponse
+ * @param user logged in user
+ * @return returns true, if redirect
+ */
+ public static boolean successfulLogin(HttpServletRequest request,
+ HttpServletResponse response, User user) {
+ // set last logged in
+ user.setLastLoggedIn(new Date());
+ UserManager.storeUser(user);
+ // update session with actual user
+ PxtSessionDelegateFactory.getInstance().newPxtSessionDelegate().
+ updateWebUserId(request, response, user.getId());
+
+ LoginHelper.publishUpdateErrataCacheEvent(user.getOrg());
+ // redirect, if url_bounce set
+ HttpSession ws = request.getSession(false);
+ if (ws != null) {
+ String urlBounce = LoginAction.updateUrlBounce(
+ (String) ws.getAttribute("url_bounce"),
+ (String) ws.getAttribute("request_method"));
+ try {
+ if (urlBounce != null) {
+ log.info("redirect: " + urlBounce);
+ response.sendRedirect(urlBounce);
+ return true;
+ }
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @param orgIn
+ */
+ private static void publishUpdateErrataCacheEvent(Org orgIn) {
+ StopWatch sw = new StopWatch();
+ if (log.isDebugEnabled()) {
+ log.debug("Updating errata cache");
+ sw.start();
+ }
+
+ UpdateErrataCacheEvent uece = new
+ UpdateErrataCacheEvent(UpdateErrataCacheEvent.TYPE_ORG);
+ uece.setOrgId(orgIn.getId());
+ MessageQueue.publish(uece);
+
+ if (log.isDebugEnabled()) {
+ sw.stop();
+ log.debug("Finished Updating errata cache. Took [" +
+ sw.getTime() + "]");
+ }
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
b/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
index 85f7fac..58c2874 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
@@ -195,7 +195,7 @@ public class LoginSetupAction extends RhnAction {
createMessage(request, "message.kerbuserlogged",
new String [] {remoteUserString});
}
- if (LoginAction.successfulLogin(request, response, remoteUser)) {
+ if (LoginHelper.successfulLogin(request, response, remoteUser)) {
return null;
}
return mapping.findForward("loggedin");
commit bdfbbf8d5290262cb13a78cf52243e8db33ee25a
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Jan 28 18:34:34 2014 +0100
add externally authenticated user roles according to the external group
to roles mapping
diff --git a/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
b/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
index d10a382..85f7fac 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
@@ -21,6 +21,9 @@ import com.redhat.rhn.common.hibernate.LookupException;
import com.redhat.rhn.domain.common.SatConfigFactory;
import
com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.domain.org.usergroup.UserExtGroup;
+import com.redhat.rhn.domain.org.usergroup.UserGroupFactory;
+import com.redhat.rhn.domain.role.Role;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.domain.user.UserFactory;
import com.redhat.rhn.frontend.struts.RhnAction;
@@ -40,6 +43,8 @@ import org.apache.struts.action.ActionMapping;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -125,15 +130,25 @@ public class LoginSetupAction extends RhnAction {
SatConfigFactory.ORG_ID_FOR_EXT_AUTH);
User remoteUser = null;
- try {
- log.info("REMOTE_USER_CUSTOM_N: " +
- request.getAttribute("REMOTE_USER_CUSTOM_N"));
- log.info("REMOTE_USER_GECOS: " +
- request.getAttribute("REMOTE_USER_GECOS"));
- log.info("REMOTE_USER_GROUPS: " +
- request.getAttribute("REMOTE_USER_GROUPS"));
+ Set<Role> roles = getRolesFromExtGroups(request);
+
+ log.info("REMOTE_USER_CUSTOM_N: " +
+ request.getAttribute("REMOTE_USER_CUSTOM_N"));
+ log.info("REMOTE_USER_GECOS: " +
+ request.getAttribute("REMOTE_USER_GECOS"));
+ log.warn("REMOTE_USER_GROUPS: " +
+ request.getAttribute("REMOTE_USER_GROUPS"));
+ log.info("REMOTE_USER_GROUP_1: " +
+ request.getAttribute("REMOTE_USER_GROUP_1"));
+ log.info("REMOTE_USER_GROUP_2: " +
+ request.getAttribute("REMOTE_USER_GROUP_2"));
+ log.info("REMOTE_USER_GROUP_3: " +
+ request.getAttribute("REMOTE_USER_GROUP_3"));
+ log.info("REMOTE_USER_GROUP_N: " +
+ request.getAttribute("REMOTE_USER_GROUP_N"));
- remoteUser = UserFactory.lookupByLogin(remoteUserString);
+ try {
+ remoteUser = UserFactory.lookupByLogin(remoteUserString);
if (remoteUser.isDisabled()) {
createErrorMessage(request, "account.user.disabled",
remoteUserString);
@@ -144,6 +159,7 @@ public class LoginSetupAction extends RhnAction {
updateCmd.setFirstNames(firstname);
updateCmd.setLastName(lastname);
updateCmd.setEmail(email);
+ updateCmd.setRoles(roles);
updateCmd.updateUser();
log.warn("Externally authenticated login " +
remoteUserString +
" (" + firstname + " " + lastname +
")");
@@ -166,6 +182,7 @@ public class LoginSetupAction extends RhnAction {
createCmd.setLastName(lastname);
createCmd.setEmail(email);
createCmd.setOrg(defaultOrg);
+ createCmd.setRoles(roles);
createCmd.validate();
createCmd.storeNewUser();
remoteUser = createCmd.getUser();
@@ -196,6 +213,38 @@ public class LoginSetupAction extends RhnAction {
return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
}
+ private Set<Role> getRolesFromExtGroups(HttpServletRequest requestIn) {
+ Set<Role> roles = new HashSet<Role>();
+ Long nGroups = null;
+ String nGroupsStr = (String)
requestIn.getAttribute("REMOTE_USER_GROUP_N");
+ if (nGroupsStr != null) {
+ try {
+ nGroups = Long.parseLong(nGroupsStr);
+ }
+ catch (NumberFormatException nfe) {
+ // do nothing, nGroups stays null
+ }
+ }
+ if (nGroups == null) {
+ log.warn("REMOTE_USER_GROUP_N not set!");
+ return roles;
+ }
+ for (int i = 1; i <= nGroups; i++) {
+ String extGroupName = (String)
requestIn.getAttribute("REMOTE_USER_GROUP_" + i);
+ if (extGroupName == null) {
+ log.warn("REMOTE_USER_GROUP_" + i + " not set!");
+ continue;
+ }
+ UserExtGroup extGroup =
UserGroupFactory.lookupExtGroupByLabel(extGroupName);
+ if (extGroup == null) {
+ log.warn("No mapping defined for external group '" +
extGroupName + "'.");
+ continue;
+ }
+ roles.addAll(extGroup.getRoles());
+ }
+ return roles;
+ }
+
private String decodeFromIso88591(String string, String defaultString) {
try {
return new String(string.getBytes("ISO8859-1"),
"UTF-8");
diff --git a/java/code/src/com/redhat/rhn/manager/user/CreateUserCommand.java
b/java/code/src/com/redhat/rhn/manager/user/CreateUserCommand.java
index 5db4bb9..4a41dc4 100644
--- a/java/code/src/com/redhat/rhn/manager/user/CreateUserCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/user/CreateUserCommand.java
@@ -21,6 +21,7 @@ import com.redhat.rhn.common.messaging.MessageQueue;
import com.redhat.rhn.common.validator.ParsedConstraint;
import com.redhat.rhn.common.validator.ValidatorError;
import
com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.role.Role;
import com.redhat.rhn.domain.role.RoleFactory;
import com.redhat.rhn.domain.user.Address;
import com.redhat.rhn.domain.user.User;
@@ -31,6 +32,7 @@ import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import java.util.SortedSet;
import java.util.regex.Pattern;
@@ -48,6 +50,7 @@ public class CreateUserCommand {
private Address addr;
private boolean makeOrgAdmin;
private boolean makeSatAdmin;
+ private Set<Role> roles;
private List<ValidatorError> errors;
private List<ValidatorError> passwordErrors;
@@ -136,6 +139,11 @@ public class CreateUserCommand {
user.addRole(RoleFactory.SAT_ADMIN);
}
user.setUsePamAuthentication(usePam); //set it back
+ if (roles != null) {
+ for (Role role : roles) {
+ user.addRole(role);
+ }
+ }
UserManager.storeUser(user); //save the user via hibernate
}
@@ -380,4 +388,20 @@ public class CreateUserCommand {
public void setMakeSatAdmin(boolean val) {
this.makeSatAdmin = val;
}
+
+
+ /**
+ * @return Returns the roles.
+ */
+ public Set<Role> getRoles() {
+ return roles;
+ }
+
+
+ /**
+ * @param rolesIn The roles to set.
+ */
+ public void setRoles(Set<Role> rolesIn) {
+ roles = rolesIn;
+ }
}
diff --git a/java/code/src/com/redhat/rhn/manager/user/UpdateUserCommand.java
b/java/code/src/com/redhat/rhn/manager/user/UpdateUserCommand.java
index cf53600..1f704da 100644
--- a/java/code/src/com/redhat/rhn/manager/user/UpdateUserCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/user/UpdateUserCommand.java
@@ -16,6 +16,7 @@ package com.redhat.rhn.manager.user;
import com.redhat.rhn.common.conf.UserDefaults;
import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.domain.role.Role;
import com.redhat.rhn.domain.user.User;
import org.apache.commons.lang.StringUtils;
@@ -23,6 +24,7 @@ import org.apache.commons.lang.StringUtils;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Set;
import java.util.regex.Pattern;
import javax.mail.internet.AddressException;
@@ -46,7 +48,10 @@ public class UpdateUserCommand {
private boolean prefixChanged = false;
private boolean firstNamesChanged = false;
private boolean lastNameChanged = false;
+ private boolean rolesChanged = false;
private boolean needsUpdate = false;
+ private Set<Role> roles;
+
/**
* Constructor
@@ -112,6 +117,12 @@ public class UpdateUserCommand {
if (unencryptedPasswordChanged) {
user.setPassword(unencryptedPassword);
}
+
+ if (rolesChanged) {
+ for (Role role : roles) {
+ user.addRole(role);
+ }
+ }
}
/**
@@ -238,4 +249,24 @@ public class UpdateUserCommand {
lastName = lastNameIn;
}
}
+
+
+ /**
+ * @return Returns the roles.
+ */
+ public Set<Role> getRoles() {
+ return roles;
+ }
+
+
+ /**
+ * @param rolesIn The roles to set.
+ */
+ public void setRoles(Set<Role> rolesIn) {
+ if (!rolesIn.equals(user.getRoles())) {
+ rolesChanged = true;
+ needsUpdate = true;
+ roles = rolesIn;
+ }
+ }
}
commit e7539b9ac6032e96eb37b5d080c01347ee7633ec
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Jan 28 18:04:15 2014 +0100
externally authenticated user does not have to be in the default org
diff --git a/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
b/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
index f2725f4..d10a382 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/LoginSetupAction.java
@@ -139,10 +139,6 @@ public class LoginSetupAction extends RhnAction {
createErrorMessage(request, "account.user.disabled",
remoteUserString);
remoteUser = null;
}
- else if (!remoteUser.getOrg().getId().equals(defaultOrgId)) {
- createErrorMessage(request, "account.user.wrong_org",
remoteUserString);
- remoteUser = null;
- }
if (remoteUser != null) {
UpdateUserCommand updateCmd = new UpdateUserCommand(remoteUser);
updateCmd.setFirstNames(firstname);
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
index bc37a07..7680b42 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
@@ -994,12 +994,6 @@
<context context-type="sourcefile">Login or
Logout</context>
</context-group>
</trans-unit>
- <trans-unit id="account.user.wrong_org">
- <source>Account {0} isn't available in the organization configured for
external authenticated users.</source>
- <context-group name="ctx">
- <context context-type="sourcefile">Login or
Logout</context>
- </context-group>
- </trans-unit>
<trans-unit id="user.enable">
<source>Reactivated user
<strong>{0}</strong>.</source>
<context-group name="ctx">
commit cc1064c9ea693987af2466c2d1961f9479febcd7
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jan 24 18:05:27 2014 +0100
add external group delete page
diff --git a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
index a036076..9ab249a 100644
--- a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
@@ -17,9 +17,9 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="modified" column="modified"
type="timestamp"
insert="false" update="false" />
- <set name="roles" lazy="true"
table="rhnUserExtGroupMapping" cascade="all">
+ <set name="roles" lazy="true"
table="rhnUserExtGroupMapping" outer-join="false">
<key column="ext_group_id"/>
- <many-to-many class="com.redhat.rhn.domain.role.RoleImpl"
column="int_group_type_id"/>
+ <many-to-many class="com.redhat.rhn.domain.role.RoleImpl"
column="int_group_type_id" outer-join="false"/>
</set>
</class>
diff --git a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
index 299fced..cb259f4 100644
--- a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
@@ -114,6 +114,14 @@ public class UserGroupFactory extends HibernateFactory {
}
/**
+ * delete UserExtGroup object
+ * @param extGroup external group
+ */
+ public static void delete(UserExtGroup extGroup) {
+ singleton.removeObject(extGroup);
+ }
+
+ /**
* lookup function to search for external groups
* @param labelIn external group label
* @return external group object
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDeleteAction.java
b/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDeleteAction.java
new file mode 100644
index 0000000..e0170c3
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDeleteAction.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2014 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.frontend.action.multiorg;
+
+import com.redhat.rhn.domain.org.usergroup.UserExtGroup;
+import com.redhat.rhn.domain.org.usergroup.UserGroupFactory;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * ExtGroupDeleteAction
+ * @version $Rev$
+ */
+public class ExtGroupDeleteAction extends RhnAction {
+
+ /** {@inheritDoc} */
+ @Override
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ RequestContext ctx = new RequestContext(request);
+ Long gid = ctx.getRequiredParamAsLong("gid");
+ UserExtGroup extGroup = UserGroupFactory.lookupExtGroupById(gid);
+ ctx.copyParamToAttributes("gid");
+ request.setAttribute("group", extGroup);
+
+ if (ctx.isSubmitted()) {
+ String label = extGroup.getLabel();
+ UserGroupFactory.delete(extGroup);
+ createSuccessMessage(request, "message.extgroup.deleted", label);
+ return mapping.findForward("success");
+ }
+
+ return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
+ }
+
+}
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDetailAction.java
b/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDetailAction.java
index 61879e3..3dbd79d 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDetailAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDetailAction.java
@@ -88,19 +88,20 @@ public class ExtGroupDetailAction extends RhnAction {
if (extGroup == null) {
extGroup = new UserExtGroup();
}
- else {
- if (!label.equals(extGroup.getLabel())) {
- if (UserGroupFactory.lookupExtGroupByLabel(label) != null) {
- createErrorMessage(request,
"extgrouplabel.already.exists", label);
- setupRoles(request, user, extGroup);
- return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
- }
+
+ if (!label.equals(extGroup.getLabel())) {
+ if (UserGroupFactory.lookupExtGroupByLabel(label) != null) {
+ createErrorMessage(request, "extgrouplabel.already.exists",
label);
+ setupRoles(request, user, extGroup);
+ return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
}
- extGroup.setLabel(label);
- extGroup.setRoles(roles);
- UserGroupFactory.save(extGroup);
}
+ extGroup.setLabel(label);
+ extGroup.setRoles(roles);
+ UserGroupFactory.save(extGroup);
+
+
if (gid == null) {
createSuccessMessage(request, "message.extgroup.created",
label);
}
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
index 606565e..bc37a07 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
@@ -6838,6 +6838,9 @@ Follow this url to see the full list of inactive systems:
<trans-unit id="message.extgroup.updated">
<source>External Authentication Group '{0}' was successfully
updated.</source>
</trans-unit>
+ <trans-unit id="message.extgroup.deleted">
+ <source>External Authentication Group '{0}' was successfully
deleted.</source>
+ </trans-unit>
<trans-unit id="extgrouplabel.already.exists">
<source>External Authentication Group name '{0}' is already used.
Please choose another one.</source>
</trans-unit>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index 655b5a2..64f448c 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -8435,7 +8435,10 @@ Please note that some manual configuration of these scripts may
still be require
<source>Update External Group - {0}</source>
</trans-unit>
<trans-unit id="extgroup.jsp.delete">
- <source>Delete External Group</source>
+ <source>Delete External Group - {0}</source>
+ </trans-unit>
+ <trans-unit id="extgroup.jsp.delete.summary">
+ <source>Following External Group will be deleted.</source>
</trans-unit>
<trans-unit id="distchannelmap.jsp.create">
<source>Create New Distribution Channel Map</source>
diff --git a/java/code/src/com/redhat/rhn/frontend/struts/RequestContext.java
b/java/code/src/com/redhat/rhn/frontend/struts/RequestContext.java
index 2c72311..a2258f2 100644
--- a/java/code/src/com/redhat/rhn/frontend/struts/RequestContext.java
+++ b/java/code/src/com/redhat/rhn/frontend/struts/RequestContext.java
@@ -494,6 +494,22 @@ public class RequestContext {
}
/**
+ * Get the parameter <code>paramName</code> from the request
+ * A BadParameterException is thrown if the
+ * parameter is not present in the request or is empty
+ * @param paramName the name of the parameter
+ * @return the parameter value converted to a <code>Long</code>
+ */
+ public Long getRequiredParamAsLong(String paramName) {
+ Long p = getParamAsLong(paramName);
+ if (p == null) {
+ throw new BadParameterException("The parameter " + paramName +
+ " is required.");
+ }
+ return p;
+ }
+
+ /**
* If this current Request includes a parameter to indicate the User is attempting
* to produce an export of viewable data then return true.
*
diff --git a/java/code/webapp/WEB-INF/pages/admin/multiorg/extgroup_delete.jsp
b/java/code/webapp/WEB-INF/pages/admin/multiorg/extgroup_delete.jsp
new file mode 100644
index 0000000..a163a4d
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/admin/multiorg/extgroup_delete.jsp
@@ -0,0 +1,54 @@
+<%@ taglib
uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
+<%@ taglib
uri="http://rhn.redhat.com/rhn" prefix="rhn" %>
+<%@ taglib
uri="http://struts.apache.org/tags-bean" prefix="bean"
%>
+<%@ taglib
uri="http://struts.apache.org/tags-html" prefix="html"
%>
+
+<html:html >
+<body>
+ <rhn:toolbar base="h1" icon="header-channel-mapping"
iconAlt="info.alt.img">
+ <bean:message key="extgroup.jsp.delete"
arg0="${group.label}"/>
+ </rhn:toolbar>
+
+ <rhn:dialogmenu mindepth="0" maxdepth="2"
definition="/WEB-INF/nav/admin_user.xml"
renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
+
+ <div class="page-summary">
+ <p><bean:message key="extgroup.jsp.delete.summary"/></p>
+ </div>
+
+ <html:form method="post"
action="/admin/multiorg/ExtGroupDelete.do?gid=${gid}"
styleClass="form-horizontal">
+ <rhn:csrf />
+ <rhn:submitted/>
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h2><bean:message key="extgroup.jsp.header"/></h2>
+ </div>
+ <div class="panel-body">
+ <div class="form-group">
+ <label class="col-lg-3 control-label">
+ <bean:message key="extgrouplist.jsp.name"/>
+ </label>
+ <div class="col-lg-6">
+ <c:out value="${group.label}" />
+ </div>
+ </div>
+ <div class="form-group">
+ <label class="col-lg-3 control-label">
+ <bean:message key="userdetails.jsp.roles"/>
+ </label>
+ <div class="col-lg-6">
+ <c:out value="${group.roleNames}" />
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <div class="col-lg-offset-3 col-lg-6">
+ <html:submit><bean:message
key="extgroup.jsp.delete"/></html:submit>
+ <html:hidden property="gid" value="${gid}" />
+ </div>
+ </div>
+ </html:form>
+
+</body>
+</html:html>
diff --git a/java/code/webapp/WEB-INF/struts-config.xml
b/java/code/webapp/WEB-INF/struts-config.xml
index cf94883..39d6d09 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -328,6 +328,10 @@
<form-property name="role_org_admin"
type="java.lang.Boolean"/>
<form-property name="selected_regular_roles"
type="java.lang.String"/>
</form-bean>
+ <form-bean name="extGroupDeleteForm"
+
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
+ <form-property name="submitted"
type="java.lang.Boolean"/>
+ </form-bean>
<form-bean name="packageSearchForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="search_string"
type="java.lang.String"/>
@@ -5720,6 +5724,19 @@
path="/admin/multiorg/ExtAuthRoleMapping.do"
redirect="true" />
</action>
+ <action path="/admin/multiorg/ExtGroupDelete"
+ scope="request"
+ name="extGroupDeleteForm"
+ input="/WEB-INF/pages/admin/multiorg/extgroup_delete.jsp"
+ type="com.redhat.rhn.frontend.action.multiorg.ExtGroupDeleteAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="postRequiredIfSubmitted"
value="true" />
+ <set-property property="acls"
value="user_role(satellite_admin)"/>
+ <forward name="default"
path="/WEB-INF/pages/admin/multiorg/extgroup_delete.jsp" />
+ <forward name="success"
+ path="/admin/multiorg/ExtAuthRoleMapping.do"
redirect="true" />
+ </action>
+
<action path="/multiorg/channels/OrgList"
scope="request"
input="/WEB-INF/pages/multiorg/channels/orglist.jsp"
commit 4ac5c9db50165a208fdc48c1467e445166702c0b
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Jan 20 15:35:03 2014 +0100
add external group edit page
diff --git a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
index 811cd03..a036076 100644
--- a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
@@ -24,7 +24,15 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
</class>
<query name="UserExtGroup.listAll">
- <![CDATA[FROM com.redhat.rhn.domain.org.usergroup.UserExtGroup]]>
+ <![CDATA[FROM com.redhat.rhn.domain.org.usergroup.UserExtGroup ORDER BY
label]]>
+ </query>
+
+ <query name="UserExtGroup.lookupById">
+ <![CDATA[FROM com.redhat.rhn.domain.org.usergroup.UserExtGroup WHERE id =
:gid]]>
+ </query>
+
+ <query name="UserExtGroup.lookupByLabel">
+ <![CDATA[FROM com.redhat.rhn.domain.org.usergroup.UserExtGroup WHERE label =
:label]]>
</query>
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
index da1d790..299fced 100644
--- a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
@@ -21,10 +21,12 @@ import
com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.role.Role;
import com.redhat.rhn.domain.role.RoleFactory;
import com.redhat.rhn.domain.user.User;
+
import org.apache.log4j.Logger;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* UserGroupFactory - the singleton class used to fetch and store
@@ -90,5 +92,37 @@ public class UserGroupFactory extends HibernateFactory {
return singleton.listObjectsByNamedQuery(
"UserExtGroup.listAll", new HashMap());
}
+
+ /**
+ * lookup function to search for external groups
+ * @param gidIn external group id
+ * @return external group object
+ */
+ public static UserExtGroup lookupExtGroupById(Long gidIn) {
+ Map<String, Long> params = new HashMap();
+ params.put("gid", gidIn);
+ return (UserExtGroup) singleton.lookupObjectByNamedQuery(
+ "UserExtGroup.lookupById", params);
+ }
+
+ /**
+ * save UserExtGroup object
+ * @param extGroup external group
+ */
+ public static void save(UserExtGroup extGroup) {
+ singleton.saveObject(extGroup);
+ }
+
+ /**
+ * lookup function to search for external groups
+ * @param labelIn external group label
+ * @return external group object
+ */
+ public static UserExtGroup lookupExtGroupByLabel(String labelIn) {
+ Map<String, String> params = new HashMap();
+ params.put("label", labelIn);
+ return (UserExtGroup) singleton.lookupObjectByNamedQuery(
+ "UserExtGroup.lookupByLabel", params);
+ }
}
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDetailAction.java
b/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDetailAction.java
new file mode 100644
index 0000000..61879e3
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtGroupDetailAction.java
@@ -0,0 +1,163 @@
+/**
+ * Copyright (c) 2014 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.frontend.action.multiorg;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.domain.org.usergroup.UserExtGroup;
+import com.redhat.rhn.domain.org.usergroup.UserGroupFactory;
+import com.redhat.rhn.domain.role.Role;
+import com.redhat.rhn.domain.role.RoleFactory;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.domain.user.UserFactory;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.frontend.struts.SelectableLabelValueBean;
+
+import org.apache.commons.lang.BooleanUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.DynaActionForm;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * ExtGroupDetailAction
+ * @version $Rev$
+ */
+public class ExtGroupDetailAction extends RhnAction {
+
+ /** {@inheritDoc} */
+ @Override
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+ RequestContext ctx = new RequestContext(request);
+ User user = ctx.getCurrentUser();
+
+ Long gid = ctx.getParamAsLong("gid");
+ UserExtGroup extGroup = null;
+ if (gid != null) {
+ ctx.copyParamToAttributes("gid");
+ extGroup = UserGroupFactory.lookupExtGroupById(gid);
+ request.setAttribute("group", extGroup);
+ }
+
+ if (ctx.isSubmitted()) {
+ DynaActionForm form = (DynaActionForm)formIn;
+ String label = (String) form.get("extGroupLabel");
+ Boolean satAdm = (Boolean) form.get("role_satellite_admin");
+ Boolean orgAdm = (Boolean) form.get("role_org_admin");
+ String selectedRoles = (String)
form.get("selected_regular_roles");
+
+ Set<Role> roles = new HashSet<Role>();
+ if (BooleanUtils.isTrue(satAdm)) {
+ roles.add(RoleFactory.SAT_ADMIN);
+ }
+ if (BooleanUtils.isTrue(orgAdm)) {
+ roles.add(RoleFactory.ORG_ADMIN);
+ }
+ else {
+ for (String roleString : selectedRoles.split(" ")) {
+ if (!StringUtils.isEmpty(roleString)) {
+ roles.add(RoleFactory.lookupByLabel(roleString));
+ }
+ }
+ }
+
+ if (extGroup == null) {
+ extGroup = new UserExtGroup();
+ }
+ else {
+ if (!label.equals(extGroup.getLabel())) {
+ if (UserGroupFactory.lookupExtGroupByLabel(label) != null) {
+ createErrorMessage(request,
"extgrouplabel.already.exists", label);
+ setupRoles(request, user, extGroup);
+ return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
+ }
+ }
+ extGroup.setLabel(label);
+ extGroup.setRoles(roles);
+ UserGroupFactory.save(extGroup);
+ }
+
+ if (gid == null) {
+ createSuccessMessage(request, "message.extgroup.created",
label);
+ }
+ else {
+ createSuccessMessage(request, "message.extgroup.updated",
label);
+ }
+ return mapping.findForward("success");
+ }
+
+ // not submitted
+ setupRoles(request, user, extGroup);
+ return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
+ }
+
+ /**
+ * setup external group roles
+ * @param request request
+ * @param user logged in user
+ * @param extGroup external group
+ */
+ public void setupRoles(HttpServletRequest request, User user,
+ UserExtGroup extGroup) {
+ List<SelectableLabelValueBean> adminRoles =
+ new ArrayList<SelectableLabelValueBean>();
+ List<SelectableLabelValueBean> regularRoles =
+ new ArrayList<SelectableLabelValueBean>();
+
+ for (Role role : user.getOrg().getRoles()) {
+ String label = role.getLabel();
+ if (UserFactory.IMPLIEDROLES.contains(role)) {
+ // channel, config, system group, activation key, monitoring admin
+ boolean hasOrgAdmin = extGroup == null ? false :
+ extGroup.getRoles().contains((RoleFactory.ORG_ADMIN));
+ SelectableLabelValueBean bean = new SelectableLabelValueBean(
+ LocalizationService.getInstance().getMessage(label),
+ label,
+ hasOrgAdmin ||
+ (extGroup == null ? false :
extGroup.getRoles().contains(role)),
+ hasOrgAdmin && UserFactory.IMPLIEDROLES.contains(role));
+ regularRoles.add(bean);
+ }
+ else {
+ // org and satellite admin
+ boolean hasSatAdmin = extGroup == null ? false :
+ extGroup.getRoles().contains((RoleFactory.SAT_ADMIN));
+ SelectableLabelValueBean bean = new SelectableLabelValueBean(
+ LocalizationService.getInstance().getMessage(label),
+ label,
+ extGroup == null ? false : extGroup.getRoles().contains(role),
+ false);
+ adminRoles .add(bean);
+ }
+ }
+
+ request.setAttribute("adminRoles", adminRoles);
+ request.setAttribute("regularRoles", regularRoles);
+ request.setAttribute("orgAdmin", extGroup == null ? false :
+ extGroup.getRoles().contains(RoleFactory.ORG_ADMIN));
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
index 4bbb091..606565e 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
@@ -6830,10 +6830,16 @@ Follow this url to see the full list of inactive systems:
</context-group>
</trans-unit>
<trans-unit id="message.ext_auth_updated">
- <source>External Authentication was successfully updated.</source>
- <context-group name="ctx">
- <context
context-type="sourcefile">/rhn/admin/multiorg/OrgDetails</context>
- </context-group>
+ <source>External Authentication settings were successfully
updated.</source>
+ </trans-unit>
+ <trans-unit id="message.extgroup.created">
+ <source>External Authentication Group '{0}' was successfully
created.</source>
+ </trans-unit>
+ <trans-unit id="message.extgroup.updated">
+ <source>External Authentication Group '{0}' was successfully
updated.</source>
+ </trans-unit>
+ <trans-unit id="extgrouplabel.already.exists">
+ <source>External Authentication Group name '{0}' is already used.
Please choose another one.</source>
</trans-unit>
<trans-unit id="message.org_name_updated">
<source>Organization {0} was successfully updated.</source>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index 71081ac..655b5a2 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -68,6 +68,12 @@
</group>
<!-- Generic buttons. The intent is that these can be reused across multiple
pages.-->
<group>
+ <trans-unit id="button.create">
+ <source>Create</source>
+ <context-group name="ctx">
+ <context
context-type="sourcefile">/rhn/profiles/Details</context>
+ </context-group>
+ </trans-unit>
<trans-unit id="button.update">
<source>Update</source>
<context-group name="ctx">
@@ -8410,6 +8416,27 @@ Please note that some manual configuration of these scripts may
still be require
<trans-unit id="org.specific">
<source>Organization Specific</source>
</trans-unit>
+ <trans-unit id="extgroup.jsp.header">
+ <source>External Group to Roles Mapping</source>
+ </trans-unit>
+ <trans-unit id="extgroups.jsp.header">
+ <source>External Groups</source>
+ </trans-unit>
+ <trans-unit id="extgroups.jsp.summary">
+ <source>Externally authenticated users may have set external (e.g. LDAP)
groups. According to these groups the user will get assigned additional @@PRODUCT_NAME@@
roles.</source>
+ </trans-unit>
+ <trans-unit id="extgroup.jsp.summary">
+ <source>Define what @@PRODUCT_NAME@@ roles shall be assigned to externally
authenticated users with specified group set.</source>
+ </trans-unit>
+ <trans-unit id="extgroup.jsp.create">
+ <source>Create New External Group</source>
+ </trans-unit>
+ <trans-unit id="extgroup.jsp.update">
+ <source>Update External Group - {0}</source>
+ </trans-unit>
+ <trans-unit id="extgroup.jsp.delete">
+ <source>Delete External Group</source>
+ </trans-unit>
<trans-unit id="distchannelmap.jsp.create">
<source>Create New Distribution Channel Map</source>
</trans-unit>
diff --git a/java/code/src/com/redhat/rhn/frontend/struts/RequestContext.java
b/java/code/src/com/redhat/rhn/frontend/struts/RequestContext.java
index f907af9..2c72311 100644
--- a/java/code/src/com/redhat/rhn/frontend/struts/RequestContext.java
+++ b/java/code/src/com/redhat/rhn/frontend/struts/RequestContext.java
@@ -629,7 +629,7 @@ public class RequestContext {
String param = req.getParameter(paramId);
if (param != null) {
- req.setAttribute(paramId, req.getParameter(paramId));
+ req.setAttribute(paramId, param);
}
}
diff --git a/java/code/src/com/redhat/rhn/frontend/struts/SelectableLabelValueBean.java
b/java/code/src/com/redhat/rhn/frontend/struts/SelectableLabelValueBean.java
new file mode 100644
index 0000000..8f735f6
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/struts/SelectableLabelValueBean.java
@@ -0,0 +1,81 @@
+/**
+ * Copyright (c) 2014 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.frontend.struts;
+
+
+/**
+ * SelectableLabelValueBean
+ * @version $Rev$
+ */
+public class SelectableLabelValueBean extends SelectableAdapter {
+
+ private String label;
+ private String value;
+
+ /**
+ * @param labelIn label
+ * @param valueIn value
+ * @param selectedIn selected property
+ * @param disabledIn disabled property
+ *
+ */
+ public SelectableLabelValueBean(String labelIn, String valueIn, boolean selectedIn,
+ boolean disabledIn) {
+ label = labelIn;
+ value = valueIn;
+ setSelected(selectedIn);
+ setDisabled(disabledIn);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getSelectionKey() {
+ return label;
+ }
+
+
+ /**
+ * @return Returns the label.
+ */
+ public String getLabel() {
+ return label;
+ }
+
+
+ /**
+ * @param labelIn The label to set.
+ */
+ public void setLabel(String labelIn) {
+ label = labelIn;
+ }
+
+
+ /**
+ * @return Returns the value.
+ */
+ public String getValue() {
+ return value;
+ }
+
+
+ /**
+ * @param valueIn The value to set.
+ */
+ public void setValue(String valueIn) {
+ value = valueIn;
+ }
+}
diff --git a/java/code/webapp/WEB-INF/nav/admin_user.xml
b/java/code/webapp/WEB-INF/nav/admin_user.xml
index 312119b..637c9b7 100644
--- a/java/code/webapp/WEB-INF/nav/admin_user.xml
+++ b/java/code/webapp/WEB-INF/nav/admin_user.xml
@@ -11,6 +11,7 @@
</rhn-tab>
<rhn-tab name="Group Role Mapping"
acl="user_role(satellite_admin)">
<rhn-tab-url>/rhn/admin/multiorg/ExtAuthRoleMapping.do</rhn-tab-url>
+ <rhn-tab-url>/rhn/admin/multiorg/ExtGroupDetails.do</rhn-tab-url>
</rhn-tab>
</rhn-tab>
</rhn-navi-tree>
diff --git a/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
b/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
index cd3bb57..6c92a3e 100644
--- a/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
+++ b/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
@@ -287,6 +287,7 @@
<rhn-tab name="External Authentication"
acl="user_role(satellite_admin)">
<rhn-tab-url>/rhn/admin/multiorg/ExternalAuthentication.do</rhn-tab-url>
<rhn-tab-url>/rhn/admin/multiorg/ExtAuthRoleMapping.do</rhn-tab-url>
+
<rhn-tab-url>/rhn/admin/multiorg/ExtGroupDetails.do</rhn-tab-url>
</rhn-tab>
</rhn-tab>
diff --git a/java/code/webapp/WEB-INF/pages/admin/multiorg/extauthroles.jsp
b/java/code/webapp/WEB-INF/pages/admin/multiorg/extauthroles.jsp
index 706f0bd..c41e4fe 100644
--- a/java/code/webapp/WEB-INF/pages/admin/multiorg/extauthroles.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/multiorg/extauthroles.jsp
@@ -22,7 +22,7 @@
<h4><bean:message key="extgroup.jsp.header"/></h4>
</div>
<div class="panel-body">
- <p><bean:message key="extgroup.jsp.summary"/></p>
+ <p><bean:message key="extgroups.jsp.summary"/></p>
</div>
<rl:listset name="groupRolesSet">
@@ -38,7 +38,7 @@
headerkey="extgrouplist.jsp.name"
attr="label"
filterattr="label">
- <c:out value="<a
href=\"/rhn/admin/multiorg/ExtGroupDetails.do?uid=${current.id}\">${current.label}</a>"
escapeXml="false" />
+ <c:out value="<a
href=\"/rhn/admin/multiorg/ExtGroupDetails.do?gid=${current.id}\">${current.label}</a>"
escapeXml="false" />
</rl:column>
<rl:column attr="roleNames"
diff --git a/java/code/webapp/WEB-INF/pages/admin/multiorg/extgroup_detail.jsp
b/java/code/webapp/WEB-INF/pages/admin/multiorg/extgroup_detail.jsp
new file mode 100644
index 0000000..3710abf
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/admin/multiorg/extgroup_detail.jsp
@@ -0,0 +1,122 @@
+<%@ taglib
uri="http://rhn.redhat.com/rhn" prefix="rhn" %>
+<%@ taglib
uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
+<%@ taglib
uri="http://struts.apache.org/tags-html" prefix="html"
%>
+<%@ taglib
uri="http://struts.apache.org/tags-bean" prefix="bean"
%>
+<%@ taglib
uri="http://rhn.redhat.com/tags/list" prefix="rl"
%>
+
+<html:html >
+ <head>
+ <script language="javascript" type="text/javascript">
+ function toggle_checkboxes() {
+ org_checkbox = document.getElementById('role_org_admin');
+ sat_checkbox = document.getElementById('role_satellite_admin');
+ role_checkboxes = document.getElementsByName('regular_role');
+ for (var i = 0, n = role_checkboxes.length; i < n; i++) {
+ if (org_checkbox.checked) {
+ role_checkboxes[i].checked = org_checkbox.checked;
+ }
+ role_checkboxes[i].disabled = org_checkbox.checked;
+ }
+ }
+
+ function collect_regular_roles() {
+ selected = document.getElementById('selected_regular_roles');
+ role_checkboxes = document.getElementsByName('regular_role');
+ selected.value = '';
+ for (var i = 0, n = role_checkboxes.length; i < n; i++) {
+ if (role_checkboxes[i].checked) {
+ selected.value += role_checkboxes[i].id + ' ';
+ }
+ }
+ }
+ </script>
+ </head>
+ <body onLoad="toggle_checkboxes()">
+
+ <c:choose>
+ <c:when test="${empty gid}">
+ <rhn:toolbar base="h1"
icon="header-channel-mapping" iconAlt="info.alt.img">
+ <bean:message key="extgroup.jsp.create"/>
+ </rhn:toolbar>
+ </c:when>
+ <c:otherwise>
+ <rhn:toolbar base="h1"
icon="header-channel-mapping" iconAlt="info.alt.img"
+ deletionUrl="ExtGroupDelete.do?gid=${gid}"
+ deletionType="extgroup">
+ <bean:message key="extgroup.jsp.update"
arg0="${group.label}"/>
+ </rhn:toolbar>
+ </c:otherwise>
+ </c:choose>
+
+ <rhn:dialogmenu mindepth="0" maxdepth="2"
definition="/WEB-INF/nav/admin_user.xml"
renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
+
+ <div class="page-summary">
+ <p><bean:message
key="extgroups.jsp.summary"/></p>
+ <p><bean:message
key="extgroup.jsp.summary"/></p>
+ </div>
+ <div class="panel-heading">
+ <h4><bean:message
key="extgroup.jsp.header"/></h4>
+ </div>
+
+ <form method="post"
action="/rhn/admin/multiorg/ExtGroupDetails.do?gid=${gid}"
class="form-horizontal" onSubmit="collect_regular_roles()">
+ <rhn:submitted/>
+ <rhn:csrf />
+ <div class="form-group">
+ <label class="col-lg-3
control-label"><bean:message
key="extgrouplist.jsp.name"/>:</label>
+ <div class="col-lg-6">
+ <input type="text" class="form-control"
name="extGroupLabel" value="${group.label}" />
+ </div>
+ </div>
+ <div class="form-group">
+ <label class="col-lg-3
control-label"><bean:message
key="userdetails.jsp.adminRoles"/>:</label>
+ <div class="col-lg-6">
+ <c:forEach items="${adminRoles}"
var="role">
+ <div class="checkbox">
+ <label>
+ <input type="checkbox"
id="role_${role.value}" name="role_${role.value}"
onchange="toggle_checkboxes()"
+ <c:if
test="${role.selected}">checked="true"</c:if>
+ <c:if
test="${role.disabled}">disabled="true"</c:if>
+ />
+ ${role.label}
+ </label>
+ </div>
+ </c:forEach>
+ </div>
+ </div>
+ <div class="form-group">
+ <label class="col-lg-3 control-label">
+ <bean:message key="userdetails.jsp.roles"/>:
+ </label>
+ <div class="col-lg-6">
+ <c:forEach items="${regularRoles}"
var="role">
+ <div class="checkbox">
+ <label>
+ <input type="checkbox"
name="regular_role" id="${role.value}"
+ <c:if
test="${role.selected}">checked="true"</c:if>
+ <c:if
test="${role.disabled}">disabled="true"</c:if>
+ />
+ ${role.label}
+ </label>
+ </div>
+ </c:forEach>
+ </div>
+ </div>
+ <input type="hidden" id="selected_regular_roles"
name="selected_regular_roles"/>
+
+ <div class="form-group">
+ <div class="col-lg-offset-3 col-lg-6">
+ <button type="submit" class="btn
btn-success">
+ <c:choose>
+ <c:when test="${empty gid}">
+ <bean:message key="button.create"/>
+ </c:when>
+ <c:otherwise>
+ <bean:message key="button.update"/>
+ </c:otherwise>
+ </c:choose>
+ </button>
+ </div>
+ </div>
+ </form>
+ </body>
+</html:html>
diff --git a/java/code/webapp/WEB-INF/struts-config.xml
b/java/code/webapp/WEB-INF/struts-config.xml
index 6eb9fb3..cf94883 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -321,6 +321,13 @@
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="to_org"
type="java.lang.String"/>
</form-bean>
+ <form-bean name="extGroupForm"
+
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
+ <form-property name="extGroupLabel"
type="java.lang.String"/>
+ <form-property name="role_satellite_admin"
type="java.lang.Boolean"/>
+ <form-property name="role_org_admin"
type="java.lang.Boolean"/>
+ <form-property name="selected_regular_roles"
type="java.lang.String"/>
+ </form-bean>
<form-bean name="packageSearchForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="search_string"
type="java.lang.String"/>
@@ -5700,6 +5707,19 @@
path="/admin/multiorg/EExtAuthRoleMapping.do"
redirect="true" />
</action>
+ <action path="/admin/multiorg/ExtGroupDetails"
+ scope="request"
+ name="extGroupForm"
+ input="/WEB-INF/pages/admin/multiorg/extgroup_detail.jsp"
+ type="com.redhat.rhn.frontend.action.multiorg.ExtGroupDetailAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="postRequiredIfSubmitted"
value="true" />
+ <set-property property="acls"
value="user_role(satellite_admin)"/>
+ <forward name="default"
path="/WEB-INF/pages/admin/multiorg/extgroup_detail.jsp" />
+ <forward name="success"
+ path="/admin/multiorg/ExtAuthRoleMapping.do"
redirect="true" />
+ </action>
+
<action path="/multiorg/channels/OrgList"
scope="request"
input="/WEB-INF/pages/multiorg/channels/orglist.jsp"
commit c4b226d75f6d29913f01f360df13189d5e1865d9
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Jan 23 11:21:47 2014 +0100
update rhnUserExtGroupMapping triggers
diff --git a/schema/spacewalk/oracle/triggers/rhnUserExtGroupMapping.sql
b/schema/spacewalk/oracle/triggers/rhnUserExtGroupMapping.sql
index a448299..ca31c86 100644
--- a/schema/spacewalk/oracle/triggers/rhnUserExtGroupMapping.sql
+++ b/schema/spacewalk/oracle/triggers/rhnUserExtGroupMapping.sql
@@ -18,6 +18,9 @@ rhn_userextgrmap_mod_trig
before insert or update on rhnUserExtGroupMapping
for each row
begin
+ if :new.id is null then
+ select rhn_userextgroupmap_seq.nextval into :new.id from dual;
+ end if;
:new.modified := current_timestamp;
end;
/
diff --git a/schema/spacewalk/postgres/triggers/rhnUserExtGroupMapping.sql
b/schema/spacewalk/postgres/triggers/rhnUserExtGroupMapping.sql
index 0d4cff9..f6b2557 100644
--- a/schema/spacewalk/postgres/triggers/rhnUserExtGroupMapping.sql
+++ b/schema/spacewalk/postgres/triggers/rhnUserExtGroupMapping.sql
@@ -1,4 +1,4 @@
--- oracle equivalent source sha1 7209f810f513f6a5c97bd1ec2ddd7af1199f61b1
+-- oracle equivalent source sha1 5e09b4fcc80f2925fe93e38e362990e809398e7b
--
-- Copyright (c) 2014 Red Hat, Inc.
--
@@ -17,6 +17,9 @@
create or replace function rhn_userextgrmap_mod_trig_fun() returns trigger as
$$
begin
+ if new.id is null then
+ new.id := nextval('rhn_userextgroupmap_seq');
+ end if;
new.modified := current_timestamp;
return new;
end;
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/046-rhnUserExtGroupMapping-trigger.sql.oracle
b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/046-rhnUserExtGroupMapping-trigger.sql.oracle
index a448299..4caa914 100644
---
a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/046-rhnUserExtGroupMapping-trigger.sql.oracle
+++
b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/046-rhnUserExtGroupMapping-trigger.sql.oracle
@@ -18,6 +18,9 @@ rhn_userextgrmap_mod_trig
before insert or update on rhnUserExtGroupMapping
for each row
begin
+ if :new.id is null then
+ select rhn_userextgroupmap_seq.nextval into :new.id from dual;
+ end if;
:new.modified := current_timestamp;
end;
/
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/046-rhnUserExtGroupMapping-trigger.sql.postgresql
b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/046-rhnUserExtGroupMapping-trigger.sql.postgresql
index 0d4cff9..b11f9d4 100644
---
a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/046-rhnUserExtGroupMapping-trigger.sql.postgresql
+++
b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/046-rhnUserExtGroupMapping-trigger.sql.postgresql
@@ -1,4 +1,4 @@
--- oracle equivalent source sha1 7209f810f513f6a5c97bd1ec2ddd7af1199f61b1
+-- oracle equivalent source sha1 d32daad719c4e7a830430dbcfc6aaf215268d579
--
-- Copyright (c) 2014 Red Hat, Inc.
--
@@ -17,6 +17,9 @@
create or replace function rhn_userextgrmap_mod_trig_fun() returns trigger as
$$
begin
+ if new.id is null then
+ new.id := nextval('rhn_userextgroupmap_seq');
+ end if;
new.modified := current_timestamp;
return new;
end;
commit 5e34de91a26553543ba26df63e1b473d146486a2
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jan 17 11:03:25 2014 +0100
add external group to role mapping list page
diff --git a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
new file mode 100644
index 0000000..811cd03
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.hbm.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping
+PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+"classpath://org/hibernate/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="com.redhat.rhn.domain.org.usergroup.UserExtGroup"
+ table="rhnUserExtGroup">
+ <id name="id" type="long" column="id">
+ <meta attribute="scope-set">protected</meta>
+ <generator class="sequence">
+ <param
name="sequence">rhn_userextgroup_seq</param>
+ </generator>
+ </id>
+ <property name="label" column="label"
type="string" length="512" />
+ <property name="created" column="created"
type="timestamp"
+ insert="false" update="false" />
+ <property name="modified" column="modified"
type="timestamp"
+ insert="false" update="false" />
+
+ <set name="roles" lazy="true"
table="rhnUserExtGroupMapping" cascade="all">
+ <key column="ext_group_id"/>
+ <many-to-many class="com.redhat.rhn.domain.role.RoleImpl"
column="int_group_type_id"/>
+ </set>
+ </class>
+
+ <query name="UserExtGroup.listAll">
+ <![CDATA[FROM com.redhat.rhn.domain.org.usergroup.UserExtGroup]]>
+ </query>
+
+</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.java
b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.java
new file mode 100644
index 0000000..98dd16c
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserExtGroup.java
@@ -0,0 +1,113 @@
+/**
+ * Copyright (c) 2014 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.domain.org.usergroup;
+
+import com.redhat.rhn.domain.BaseDomainHelper;
+import com.redhat.rhn.domain.role.Role;
+
+import java.util.HashSet;
+import java.util.Set;
+
+
+/**
+ * UserExtGroup
+ * @version $Rev$
+ */
+public class UserExtGroup extends BaseDomainHelper implements Comparable {
+
+ private Long id;
+ private String label;
+
+ private Set<Role> roles;
+
+ /**
+ *
+ */
+ public UserExtGroup() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @return Returns the id.
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * @param idIn The id to set.
+ */
+ public void setId(Long idIn) {
+ id = idIn;
+ }
+
+ /**
+ * @return Returns the label.
+ */
+ public String getLabel() {
+ return label;
+ }
+
+ /**
+ * @param labelIn The label to set.
+ */
+ public void setLabel(String labelIn) {
+ label = labelIn;
+ }
+
+ /**
+ * @return Returns the roles.
+ */
+ public Set<Role> getRoles() {
+ if (roles == null) {
+ return new HashSet<Role>();
+ }
+ return roles;
+ }
+
+ /**
+ * @param rolesIn The roles to set.
+ */
+ public void setRoles(Set<Role> rolesIn) {
+ roles = rolesIn;
+ }
+
+ /**
+ * Return roleName string
+ * similar to coalesce(rhn_user.role_names(u.id), '(normal user)') as
role_names
+ * @return roleNames string
+ */
+ public String getRoleNames() {
+ String roleNames = null;
+ for (Role role : roles) {
+ roleNames = (roleNames == null) ? role.getName() :
+ roleNames + ", " + role.getName();
+ }
+ if (roleNames == null) {
+ return "(normal user)";
+ }
+ return roleNames;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int compareTo(Object objectIn) {
+ if (objectIn == null || objectIn instanceof UserExtGroup) {
+ return 0;
+ }
+ return id.compareTo(((UserExtGroup) objectIn).getId());
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
index 314b956..da1d790 100644
--- a/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/org/usergroup/UserGroupFactory.java
@@ -16,11 +16,16 @@ package com.redhat.rhn.domain.org.usergroup;
import com.redhat.rhn.common.hibernate.HibernateFactory;
import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
import
com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.role.Role;
-
+import com.redhat.rhn.domain.role.RoleFactory;
+import com.redhat.rhn.domain.user.User;
import org.apache.log4j.Logger;
+import java.util.HashMap;
+import java.util.List;
+
/**
* UserGroupFactory - the singleton class used to fetch and store
* com.redhat.rhn.domain.org.usergroup.UserGroup objects from the
@@ -29,6 +34,7 @@ import org.apache.log4j.Logger;
*/
public class UserGroupFactory extends HibernateFactory {
+ private static UserGroupFactory singleton = new UserGroupFactory();
private static Logger log = Logger.getLogger(UserGroupFactory.class);
private UserGroupFactory() {
@@ -70,5 +76,19 @@ public class UserGroupFactory extends HibernateFactory {
retval.setRole(role);
return retval;
}
+
+ /**
+ * Returns the complete list of UserExtGroup
+ * @param user needs to be satellite admin
+ * @return UserExtGroup list
+ */
+ public static List<UserExtGroup> listExtAuthGroups(User user) {
+ if (!user.getRoles().contains(RoleFactory.SAT_ADMIN)) {
+ throw new PermissionException("Satellite admin role required " +
+ "to access extauth groups");
+ }
+ return singleton.listObjectsByNamedQuery(
+ "UserExtGroup.listAll", new HashMap());
+ }
}
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtAuthRoleMappingAction.java
b/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtAuthRoleMappingAction.java
new file mode 100644
index 0000000..9f61a7a
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/multiorg/ExtAuthRoleMappingAction.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2014 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.frontend.action.multiorg;
+
+import com.redhat.rhn.domain.org.usergroup.UserGroupFactory;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.taglibs.list.helper.ListSessionSetHelper;
+import com.redhat.rhn.frontend.taglibs.list.helper.Listable;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.DynaActionForm;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * ExtAuthRoleMappingAction
+ * @version $Rev$
+ */
+public class ExtAuthRoleMappingAction extends RhnAction implements Listable {
+
+ /** {@inheritDoc} */
+ @Override
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+ DynaActionForm daForm = (DynaActionForm) formIn;
+ RequestContext ctx = new RequestContext(request);
+
+ ListSessionSetHelper helper = new ListSessionSetHelper(this, request);
+ helper.execute();
+ return mapping.findForward("default");
+ }
+
+ /**
+ * ${@inheritDoc}
+ */
+ public List getResult(RequestContext contextIn) {
+ User user = contextIn.getLoggedInUser();
+ return UserGroupFactory.listExtAuthGroups(user);
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
index 82cff7e..4bbb091 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
@@ -2349,6 +2349,12 @@ available for this kickstart profile to function properly.
<context
context-type="sourcefile">/rhn/systems/SystemGroupList</context>
</context-group>
</trans-unit>
+ <trans-unit id="toolbar.create.extgroup">
+ <source>create new external group</source>
+ <context-group name="ctx">
+ <context
context-type="sourcefile">/rhn/systems/SystemGroupList</context>
+ </context-group>
+ </trans-unit>
<trans-unit id="toolbar.create.probe">
<source>create new probe</source>
<context-group name="ctx">
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index b8626cf..71081ac 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -1657,6 +1657,12 @@ button below, and <b>will be unable to log back
in</b>.</source>
<context
context-type="sourcefile">/rhn/users/ActiveList</context>
</context-group>
</trans-unit>
+ <trans-unit id="extauth.jsp.noGroups">
+ <source>No external groups.</source>
+ <context-group name="ctx">
+ <context
context-type="sourcefile">/rhn/users/ActiveList</context>
+ </context-group>
+ </trans-unit>
<!-- disabledlist.jsp -->
<trans-unit id="disabledlist.jsp.title">
<source>Deactivated Users</source>
@@ -5093,6 +5099,12 @@ value for this entitlement, excluding the default
organization's consumption.</s
<context
context-type="sourcefile">/rhn/systems/SystemGroupList</context>
</context-group>
</trans-unit>
+ <trans-unit id="extgrouplist.jsp.name">
+ <source>External Group Name</source>
+ <context-group name="ctx">
+ <context
context-type="sourcefile">/rhn/systems/SystemGroupList</context>
+ </context-group>
+ </trans-unit>
<trans-unit id="grouplist.jsp.status">
<source>Updates</source>
<context-group name="ctx">
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
index 68e1856..84b9aed 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
@@ -587,6 +587,12 @@
<context context-type="sourcefile">Navigation
Menu</context>
</context-group>
</trans-unit>
+ <trans-unit id="Group Role Mapping">
+ <source>Group Role Mapping</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">Navigation
Menu</context>
+ </context-group>
+ </trans-unit>
<trans-unit id="Master Setup">
<source>Master Setup</source>
<context-group name="ctx">
diff --git a/java/code/webapp/WEB-INF/nav/admin_user.xml
b/java/code/webapp/WEB-INF/nav/admin_user.xml
index 2c0df16..312119b 100644
--- a/java/code/webapp/WEB-INF/nav/admin_user.xml
+++ b/java/code/webapp/WEB-INF/nav/admin_user.xml
@@ -1,9 +1,16 @@
<?xml version="1.0"?>
-<rhn-navi-tree label="admin_user" invisible="1"
formvar="uid" title-depth="1">
+<rhn-navi-tree label="admin_user" invisible="1"
title-depth="1">
<rhn-tab name="Users" acl="user_role(satellite_admin)">
<rhn-tab-url>/rhn/admin/multiorg/Users.do</rhn-tab-url>
</rhn-tab>
<rhn-tab name="External Authentication"
acl="user_role(satellite_admin)">
<rhn-tab-url>/rhn/admin/multiorg/ExternalAuthentication.do</rhn-tab-url>
+ <rhn-tab-url>/rhn/admin/multiorg/ExtAuthRoleMapping.do</rhn-tab-url>
+ <rhn-tab name="Configuration"
acl="user_role(satellite_admin)">
+
<rhn-tab-url>/rhn/admin/multiorg/ExternalAuthentication.do</rhn-tab-url>
+ </rhn-tab>
+ <rhn-tab name="Group Role Mapping"
acl="user_role(satellite_admin)">
+ <rhn-tab-url>/rhn/admin/multiorg/ExtAuthRoleMapping.do</rhn-tab-url>
+ </rhn-tab>
</rhn-tab>
</rhn-navi-tree>
diff --git a/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
b/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
index 862de23..cd3bb57 100644
--- a/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
+++ b/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
@@ -286,6 +286,7 @@
<rhn-tab-url>/rhn/admin/multiorg/SatRoleConfirm.do</rhn-tab-url>
<rhn-tab name="External Authentication"
acl="user_role(satellite_admin)">
<rhn-tab-url>/rhn/admin/multiorg/ExternalAuthentication.do</rhn-tab-url>
+
<rhn-tab-url>/rhn/admin/multiorg/ExtAuthRoleMapping.do</rhn-tab-url>
</rhn-tab>
</rhn-tab>
diff --git a/java/code/webapp/WEB-INF/pages/admin/multiorg/extauth.jsp
b/java/code/webapp/WEB-INF/pages/admin/multiorg/extauth.jsp
index da68d57..f604b5c 100644
--- a/java/code/webapp/WEB-INF/pages/admin/multiorg/extauth.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/multiorg/extauth.jsp
@@ -5,20 +5,12 @@
<html:html>
<head>
- <script language="javascript" type="text/javascript">
-function modifyUploadCheckbox(checkbox) {
- if (checkbox.checked == false) {
- document.getElementById("crashfile_upload_enabled").disabled = true;
- } else {
- document.getElementById("crashfile_upload_enabled").disabled = false;
- }
-}
- </script>
+ <meta name="page-decorator" content="none" />
</head>
<body>
<rhn:toolbar base="h1" icon="header-organisation"
miscUrl="${url}"
- miscAcl="user_role(org_admin)"
+ miscAcl="user_role(sat_admin)"
miscText="${text}"
miscImg="${img}"
miscAlt="${text}"
@@ -26,7 +18,7 @@ function modifyUploadCheckbox(checkbox) {
<bean:message key="org.allusers.title1" />
</rhn:toolbar>
- <rhn:dialogmenu mindepth="0" maxdepth="1"
definition="/WEB-INF/nav/admin_user.xml"
renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
+ <rhn:dialogmenu mindepth="0" maxdepth="2"
definition="/WEB-INF/nav/admin_user.xml"
renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
<div class="panel-body">
diff --git a/java/code/webapp/WEB-INF/pages/admin/multiorg/extauthroles.jsp
b/java/code/webapp/WEB-INF/pages/admin/multiorg/extauthroles.jsp
new file mode 100644
index 0000000..706f0bd
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/admin/multiorg/extauthroles.jsp
@@ -0,0 +1,52 @@
+<%@ taglib
uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
+<%@ taglib
uri="http://rhn.redhat.com/rhn" prefix="rhn" %>
+<%@ taglib
uri="http://rhn.redhat.com/tags/list" prefix="rl"
%>
+<%@ taglib
uri="http://struts.apache.org/tags-bean" prefix="bean"
%>
+<%@ taglib
uri="http://struts.apache.org/tags-html" prefix="html"
%>
+
+<html:html>
+ <head>
+ <meta name="page-decorator" content="none" />
+ </head>
+ <body>
+ <rhn:toolbar base="h1" icon="header-organisation"
+ creationUrl="ExtGroupDetails.do"
+ creationType="extgroup"
+ iconAlt="info.alt.img">
+ <bean:message key="org.allusers.title1" />
+ </rhn:toolbar>
+
+ <rhn:dialogmenu mindepth="0" maxdepth="2"
definition="/WEB-INF/nav/admin_user.xml"
renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
+
+<div class="panel-heading">
+ <h4><bean:message key="extgroup.jsp.header"/></h4>
+</div>
+<div class="panel-body">
+ <p><bean:message key="extgroup.jsp.summary"/></p>
+</div>
+
+<rl:listset name="groupRolesSet">
+<rhn:csrf />
+<rhn:submitted />
+
+ <rl:list width="100%"
+ styleclass="list"
+ emptykey="extauth.jsp.noGroups" >
+
+ <rl:column bound="false"
+ sortable="true"
+ headerkey="extgrouplist.jsp.name"
+ attr="label"
+ filterattr="label">
+ <c:out value="<a
href=\"/rhn/admin/multiorg/ExtGroupDetails.do?uid=${current.id}\">${current.label}</a>"
escapeXml="false" />
+ </rl:column>
+
+ <rl:column attr="roleNames"
+ bound="true"
+ headerkey="userdetails.jsp.roles" />
+ </rl:list>
+</rl:listset>
+
+
+</body>
+</html:html>
diff --git a/java/code/webapp/WEB-INF/struts-config.xml
b/java/code/webapp/WEB-INF/struts-config.xml
index 99e9d59..6eb9fb3 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -5686,8 +5686,18 @@
<forward name="default"
path="/WEB-INF/pages/admin/multiorg/extauth.jsp" />
<forward name="success"
path="/admin/multiorg/ExternalAuthentication.do"
redirect="true" />
- <forward name="error"
- path="/WEB-INF/pages/admin/multiorg/extauth.jsp" />
+ </action>
+
+ <action path="/admin/multiorg/ExtAuthRoleMapping"
+ scope="request"
+ input="/WEB-INF/pages/admin/multiorg/extauthroles.jsp"
+
type="com.redhat.rhn.frontend.action.multiorg.ExtAuthRoleMappingAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="postRequiredIfSubmitted"
value="true" />
+ <set-property property="acls"
value="user_role(satellite_admin)"/>
+ <forward name="default"
path="/WEB-INF/pages/admin/multiorg/extauthroles.jsp" />
+ <forward name="success"
+ path="/admin/multiorg/EExtAuthRoleMapping.do"
redirect="true" />
</action>
<action path="/multiorg/channels/OrgList"