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