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@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/%%7Bname%7D-%%7Bversion%7D.t... @@ -801,6 +801,18 @@ fi %{jardir}/postgresql-jdbc.jar
%changelog +* Fri Jan 31 2014 Tomas Lestach tlestach@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@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@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@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@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@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@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@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@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@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@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@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"
spacewalk-commits@lists.fedorahosted.org