diff --git a/src/main/java/org/olat/shibboleth/ShibbolethDispatcher.java b/src/main/java/org/olat/shibboleth/ShibbolethDispatcher.java index b0b321506c16e387524a7697538d0bfd3963a15f..2297062cf8ccee372943a86a8b4f0efb600ff727 100644 --- a/src/main/java/org/olat/shibboleth/ShibbolethDispatcher.java +++ b/src/main/java/org/olat/shibboleth/ShibbolethDispatcher.java @@ -52,7 +52,6 @@ import org.olat.core.gui.media.MediaResource; import org.olat.core.gui.media.RedirectMediaResource; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; -import org.olat.core.id.UserConstants; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLATRuntimeException; import org.olat.core.logging.OLATSecurityException; @@ -157,12 +156,14 @@ public class ShibbolethDispatcher implements Dispatcher{ uri = uri.substring(uriPrefix.length()); // guaranteed to exist by DispatcherAction Map<String, String> attributesMap = getShibbolethAttributesFromRequest(req); - String uniqueID = getUniqueIdentifierFromRequest(req, resp, attributesMap); + ShibbolethAttributes shibbolethAttriutes = CoreSpringFactory.getImpl(ShibbolethAttributes.class); + shibbolethAttriutes.init(attributesMap); + String uniqueID = getUniqueIdentifierFromRequest(req, resp, shibbolethAttriutes); if(uniqueID == null) { return; } - if(!authorization(req, resp, attributesMap)) { + if(!authorization(req, resp, shibbolethAttriutes)) { return; } @@ -186,7 +187,7 @@ public class ShibbolethDispatcher implements Dispatcher{ Authentication auth = securityManager.findAuthenticationByAuthusername(uniqueID, PROVIDER_SHIB); if (auth == null) { // no matching authentication... - ShibbolethRegistrationController.putShibAttributes(req, attributesMap); + ShibbolethRegistrationController.putShibAttributes(req, shibbolethAttriutes); ShibbolethRegistrationController.putShibUniqueID(req, uniqueID); redirectToShibbolethRegistration(resp); return; @@ -208,11 +209,9 @@ public class ShibbolethDispatcher implements Dispatcher{ // Successful login Identity authenticationedIdentity = ureq.getIdentity(); userDeletionManager.setIdentityAsActiv(authenticationedIdentity); - ShibbolethAttributes shibbolethAttriutes = CoreSpringFactory.getImpl(ShibbolethAttributes.class); - shibbolethAttriutes.setAttributesMap(attributesMap); shibbolethManager.syncUser(authenticationedIdentity, shibbolethAttriutes); ureq.getUserSession().getIdentityEnvironment().addAttributes( - shibbolethModule.getAttributeTranslator().translateAttributesMap(attributesMap)); + shibbolethModule.getAttributeTranslator().translateAttributesMap(shibbolethAttriutes.toMap())); if(mobile) { String token = restSecurityBean.generateToken(ureq.getIdentity(), ureq.getHttpReq().getSession(true)); @@ -233,17 +232,13 @@ public class ShibbolethDispatcher implements Dispatcher{ } } - private String getUniqueIdentifierFromRequest(HttpServletRequest req, HttpServletResponse resp, Map<String, String> attributesMap) { + private String getUniqueIdentifierFromRequest(HttpServletRequest req, HttpServletResponse resp, ShibbolethAttributes shibbolethAttributes) { - String uniqueID = attributesMap.get(shibbolethModule.getDefaultUIDAttribute()); + String uniqueID = shibbolethAttributes.getValueForAttributeName(shibbolethModule.getDefaultUIDAttribute()); if (uniqueID == null) { handleException(new ShibbolethException(ShibbolethException.UNIQUE_ID_NOT_FOUND,"Unable to get unique identifier for subject. Make sure you are listed in the metadata.xml file and your resources your are trying to access are available and your are allowed to see them. (Resourceregistry). "), req, resp, translator); return null; - } else if (!checkAttributes(attributesMap)) { - handleException(new ShibbolethException(ShibbolethException.INSUFFICIENT_ATTRIBUTES,"Insufficient shibboleth attributes!"), - req, resp, translator); - return null; } return uniqueID; } @@ -271,30 +266,6 @@ public class ShibbolethDispatcher implements Dispatcher{ return attributesMap; } - /** - * Check if all required attributes are here. - * @param attributesMap - * @return true if all required attributes are present, false otherwise. - */ - private boolean checkAttributes(Map<String, String> attributesMap) { - if(attributesMap.keySet().size()==1) { - return false; - } - try { - String lastname = attributesMap.get(shibbolethModule.getShibbolethAttributeName(UserConstants.LASTNAME)); - String firstname = attributesMap.get(shibbolethModule.getShibbolethAttributeName(UserConstants.FIRSTNAME)); - String email = attributesMap.get(shibbolethModule.getShibbolethAttributeName(UserConstants.EMAIL)); - if (StringHelper.containsNonWhitespace(lastname) - && StringHelper.containsNonWhitespace(firstname) - && StringHelper.containsNonWhitespace(email)) { - return true; - } - } catch (IllegalArgumentException e) { - log.error("Error when reading Shib attributes. Either home org not allowed to connect to this OO instance or user has missing attributes."); - } - return false; - } - private final void redirectToShibbolethRegistration(HttpServletResponse response) { try { response.sendRedirect(WebappHelper.getServletContextPath() + DispatcherModule.getPathDefault() + ShibbolethModule.PATH_REGISTER_SHIBBOLETH + "/"); @@ -303,14 +274,14 @@ public class ShibbolethDispatcher implements Dispatcher{ } } - private boolean authorization(HttpServletRequest req, HttpServletResponse resp, Map<String,String> attributesMap) { + private boolean authorization(HttpServletRequest req, HttpServletResponse resp, ShibbolethAttributes shibbolethAttibutes) { boolean authorized = false; if(shibbolethModule.isAccessControlByAttributes()) { if(StringHelper.containsNonWhitespace(shibbolethModule.getAttribute1()) && StringHelper.containsNonWhitespace(shibbolethModule.getAttribute1Values())) { - authorized |= authorization(shibbolethModule.getAttribute1(), shibbolethModule.getAttribute1Values(), attributesMap); + authorized |= authorization(shibbolethModule.getAttribute1(), shibbolethModule.getAttribute1Values(), shibbolethAttibutes); } if(StringHelper.containsNonWhitespace(shibbolethModule.getAttribute2()) && StringHelper.containsNonWhitespace(shibbolethModule.getAttribute2Values())) { - authorized |= authorization(shibbolethModule.getAttribute2(), shibbolethModule.getAttribute2Values(), attributesMap); + authorized |= authorization(shibbolethModule.getAttribute2(), shibbolethModule.getAttribute2Values(), shibbolethAttibutes); } } else { authorized = true; @@ -325,8 +296,8 @@ public class ShibbolethDispatcher implements Dispatcher{ return authorized; } - private boolean authorization(String attribute, String allowedValues, Map<String,String> attributesMap) { - String val = attributesMap.get(attribute); + private boolean authorization(String attributeName, String allowedValues, ShibbolethAttributes shibbolethAttributes) { + String val = shibbolethAttributes.getValueForAttributeName(attributeName); if(StringHelper.containsNonWhitespace(val)) { val = val.trim(); for(StringTokenizer tokenizer = new StringTokenizer(allowedValues, "\n\r,;", false); tokenizer.hasMoreTokens(); ) { @@ -363,7 +334,6 @@ public class ShibbolethDispatcher implements Dispatcher{ switch (errorCode) { case ShibbolethException.GENERAL_SAML_ERROR: userMsg = translator.translate("error.shibboleth.generic"); break; case ShibbolethException.UNIQUE_ID_NOT_FOUND: userMsg = translator.translate("error.unqueid.notfound"); break; - case ShibbolethException.INSUFFICIENT_ATTRIBUTES: userMsg = translator.translate("error.insufficieant.attributes"); break; default: userMsg = translator.translate("error.shibboleth.generic"); break; } showMessage(ureq,"org.opensaml.SAMLException: " + e.getMessage(), e, userMsg, ((ShibbolethException)e).getContactPersonEmail()); diff --git a/src/main/java/org/olat/shibboleth/ShibbolethException.java b/src/main/java/org/olat/shibboleth/ShibbolethException.java index 8f65951b474027b2a139694e110cebe1e6e166a2..3a1afa418b14d18f359481331ca4b58e99c955d7 100644 --- a/src/main/java/org/olat/shibboleth/ShibbolethException.java +++ b/src/main/java/org/olat/shibboleth/ShibbolethException.java @@ -27,7 +27,7 @@ package org.olat.shibboleth; /** * Description:<br> * TODO: Lavinia Dumitrescu Class Description for ShibbolethException - * + * * <P> * Initial Date: 31.10.2007 <br> * @author Lavinia Dumitrescu @@ -36,23 +36,22 @@ public class ShibbolethException extends Exception { private static final long serialVersionUID = 9055605164344300611L; //error codes - public static final int GENERAL_SAML_ERROR = 0; + public static final int GENERAL_SAML_ERROR = 0; public static final int UNIQUE_ID_NOT_FOUND = 1; - public static final int INSUFFICIENT_ATTRIBUTES = 2; - + private int errorCode; private String contactPersonEmail; - + public ShibbolethException(int errorCode, String msg) { super(msg); this.errorCode = errorCode; } - + public ShibbolethException(int errorCode, Throwable throwable) { super(throwable.getMessage()); this.errorCode = errorCode; } - + public ShibbolethException(int errorCode, String contactPersonEmail, Throwable throwable) { this(errorCode, throwable); this.contactPersonEmail = contactPersonEmail; diff --git a/src/main/java/org/olat/shibboleth/ShibbolethRegistrationController.java b/src/main/java/org/olat/shibboleth/ShibbolethRegistrationController.java index d18450030f94d64df68b2b11fa36f619ba869018..a713782c15915436f53d431fa736f6b14fb6e90d 100644 --- a/src/main/java/org/olat/shibboleth/ShibbolethRegistrationController.java +++ b/src/main/java/org/olat/shibboleth/ShibbolethRegistrationController.java @@ -26,7 +26,6 @@ package org.olat.shibboleth; import java.util.Locale; -import java.util.Map; import javax.servlet.http.HttpServletRequest; @@ -78,9 +77,9 @@ import org.springframework.beans.factory.annotation.Autowired; * - Basic flow: * System asks User for username and create olataccount with ShibbolethAuthentication * Branches: - * 1. no email in shibbolethAttributesMap + * 1. no email in shibbolethAttributes * - System asks for emailaddress (no institutionalEmail is set !!!) - * 2. no email in shibbolethAttributesMap and User already exists in System + * 2. no email in shibbolethAttributes and User already exists in System * - System asks for password (no institutionalEmail is set !!!) * */ @@ -99,7 +98,7 @@ public class ShibbolethRegistrationController extends DefaultController implemen private LanguageChooserController languageChooserController; private Translator translator; - private Map<String,String> shibbolethAttributesMap; + private ShibbolethAttributes shibbolethAttributes; private String shibbolethUniqueID; private int state = STATE_UNDEFINED; @@ -127,7 +126,7 @@ public class ShibbolethRegistrationController extends DefaultController implemen super(wControl); translator = Util.createPackageTranslator(ShibbolethModule.class, ureq.getLocale()); - shibbolethAttributesMap = (Map<String,String>)ureq.getUserSession().getEntry(KEY_SHIBATTRIBUTES); + shibbolethAttributes = (ShibbolethAttributes)ureq.getUserSession().getEntry(KEY_SHIBATTRIBUTES); shibbolethUniqueID = (String)ureq.getUserSession().getEntry(KEY_SHIBUNIQUEID); if (shibbolethUniqueID == null) { @@ -137,14 +136,11 @@ public class ShibbolethRegistrationController extends DefaultController implemen return; } - if (shibbolethAttributesMap == null) - throw new AssertException("ShibbolethRegistrationController was unable to fetch ShibbolethAttribuitesMap from session."); - hasEmailInShibAttr = (shibbolethModule.getShibbolethAttributeName(UserConstants.EMAIL) == null) ? false : true; locale = (Locale)ureq.getUserSession().getEntry(LocaleNegotiator.NEGOTIATED_LOCALE); if(locale == null) { - String preferedLanguage = shibbolethAttributesMap.get(shibbolethModule.getPreferredLanguageAttribute()); + String preferedLanguage = shibbolethAttributes.getValueForAttributeName(shibbolethModule.getPreferredLanguageAttribute()); if(preferedLanguage == null) { locale = LocaleNegotiator.getPreferedLocale(ureq); } else { @@ -168,7 +164,7 @@ public class ShibbolethRegistrationController extends DefaultController implemen if(registrationModule.getUsernamePresetBean() != null) { UserNameCreationInterceptor interceptor = registrationModule.getUsernamePresetBean(); - proposedUsername = interceptor.getUsernameFor(shibbolethAttributesMap); + proposedUsername = interceptor.getUsernameFor(shibbolethAttributes.toMap()); if(proposedUsername == null) { if(interceptor.allowChangeOfUsername()) { setRegistrationForm(ureq, wControl, proposedUsername); @@ -228,7 +224,7 @@ public class ShibbolethRegistrationController extends DefaultController implemen * @param req * @param attributes */ - public static final void putShibAttributes(HttpServletRequest req, Map<String,String> attributes) { + public static final void putShibAttributes(HttpServletRequest req, ShibbolethAttributes attributes) { CoreSpringFactory.getImpl(UserSessionManager.class).getUserSession(req).putEntry(KEY_SHIBATTRIBUTES, attributes); } @@ -328,10 +324,8 @@ public class ShibbolethRegistrationController extends DefaultController implemen } if(!hasEmailInShibAttr){ - shibbolethAttributesMap.put(shibbolethModule.getShibbolethAttributeName(UserConstants.EMAIL), regWithEmailForm.getEmail()); + shibbolethAttributes.setValueForUserPropertyName(UserConstants.EMAIL, regWithEmailForm.getEmail()); } - ShibbolethAttributes shibbolethAttributes = CoreSpringFactory.getImpl(ShibbolethAttributes.class); - shibbolethAttributes.setAttributesMap(shibbolethAttributesMap); String email = shibbolethAttributes.getValueForUserPropertyName(UserConstants.EMAIL); User user = null; @@ -363,8 +357,6 @@ public class ShibbolethRegistrationController extends DefaultController implemen secMgr.createAndPersistAuthentication(authenticationedIdentity, ShibbolethDispatcher.PROVIDER_SHIB, shibbolethUniqueID, null, null); // update user profile - ShibbolethAttributes shibbolethAttributes = CoreSpringFactory.getImpl(ShibbolethAttributes.class); - shibbolethAttributes.setAttributesMap(shibbolethAttributesMap); shibbolethManager.syncUser(authenticationedIdentity, shibbolethAttributes); doLogin(authenticationedIdentity, ureq); @@ -390,7 +382,7 @@ public class ShibbolethRegistrationController extends DefaultController implemen } // successfull login ureq.getUserSession().getIdentityEnvironment().addAttributes( - shibbolethModule.getAttributeTranslator().translateAttributesMap(shibbolethAttributesMap)); + shibbolethModule.getAttributeTranslator().translateAttributesMap(shibbolethAttributes.toMap())); } /** diff --git a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_ar.properties index 6576fea6eda89b57ca82de266e8f87669cb27670..8f36a2361a91142d3555b6c337429ae99518ca10 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_ar.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_ar.properties @@ -19,7 +19,6 @@ eduPersonAffiliation.student=\u0627\u0644\u0637\u0627\u0644\u0628 eduPersonEntitlement=\u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 eduPersonOrgUnitDN=DN \u0648\u062D\u062F\u0629 \u0627\u0644\u0645\u0646\u0638\u0645\u0629 employeeNumber=\u0631\u0642\u0645 \u0627\u0644\u0645\u0648\u0638\u0641 -error.insufficieant.attributes=\u0636\u0631\u0648\u0631\u064A\u0629 Shibboleth \u0635\u0641\u0627\u062A\: Shib-SwissEP-UniqueID, Shib-InetOrgPerson-givenName, Shib-Person-surname, Shib-InetOrgPerson-mail, Shib-SwissEP-HomeOrganization error.shibboleth.generic=\u064A\u0631\u062C\u0649 \u0627\u0644\u062F\u062E\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u060CShibboleth \u062E\u0637\u0623 \u0641\u0649 error.shibboleth.head=\u0623\u0648\u0644\u0627\u062A - \u0627\u0644\u062A\u0639\u0644\u064A\u0645 \u0648\u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0639\u0628\u0631 \u0627\u0644\u0627\u0646\u062A\u0631\u0646\u062A - \u062E\u0637\u0623 error.unqueid.notfound=\u0647\u0644 \u0644\u062F\u064A\u0643 \u0628\u064A\u0627\u0646\u0627\u062A \u062F\u062E\u0648\u0644 \u0625\u0644\u0649 \u0623\u0648\u0644\u0627\u062A\u061F \u0625\u0630\u0627 \u0643\u0627\u0646\u062A \u0627\u0644\u0627\u062C\u0627\u0628\u0629 \u0646\u0639\u0645 \u0641\u0625\u0646\u0647 \u064A\u0631\u062C\u0649 \u0645\u062D\u0627\u0648\u0644\u0629 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649. diff --git a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_bg.properties index 071ec0e196bebeebfb263debaeea7608d9fe0ad6..21d7ec4d5af760d2cd58f8e89d6f71c26ca67eab 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_bg.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_bg.properties @@ -19,7 +19,6 @@ eduPersonAffiliation.student=\u0421\u0442\u0443\u0434\u0435\u043D\u0442 eduPersonEntitlement=\u0423\u043F\u044A\u043B\u043D\u043E\u043C\u043E\u0449\u0430\u0432\u0430\u043D\u0435 eduPersonOrgUnitDN=\u041E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u043E\u043D\u043D\u0430 \u0435\u0434\u0438\u043D\u0438\u0446\u0430 DN employeeNumber=\u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u043E\u043D\u0435\u043D \u043D\u043E\u043C\u0435\u0440 \u043D\u0430 \u0441\u043B\u0443\u0436\u0438\u0442\u0435\u043B -error.insufficieant.attributes=\u0417\u0430\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u0438 Shibboleth \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438\: Shib-SwissEP-UniqueID, Shib-InetOrgPerson-givenName, Shib-Person-surname, Shib-InetOrgPerson-mail, Shib-SwissEP-HomeOrganization error.shibboleth.generic=\u041F\u043E\u043B\u0443\u0447\u0438 \u0441\u0435 Shibboleth \u0433\u0440\u0435\u0448\u043A\u0430. \u041C\u043E\u043B\u044F, \u0432\u043B\u0435\u0437\u0442\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043C\u0430\u0442\u0430 \u043E\u0442\u043D\u043E\u0432\u043E\! error.shibboleth.head=\u0421\u0438\u0441\u0442\u0435\u043C\u0430 \u0437\u0430 \u043E\u043D\u043B\u0430\u0439\u043D \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435 - \u0413\u0440\u0435\u0448\u043A\u0430 error.unqueid.notfound=\u041D\u0430\u0438\u0441\u0442\u0438\u043D\u0430 \u043B\u0438 \u0438\u043C\u0430\u0442\u0435 \u043F\u0440\u0430\u0432\u043E \u0434\u0430 \u0432\u043B\u0438\u0437\u0430\u0442\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043C\u0430\u0442\u0430? \u0410\u043A\u043E \u0435 \u0442\u0430\u043A\u0430, \u043C\u043E\u043B\u044F, \u043E\u043F\u0438\u0442\u0430\u0439\u0442\u0435 \u043E\u0442\u043D\u043E\u0432\u043E. @@ -40,7 +39,7 @@ sr.error.disclaimer=\u0422\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u043F\u04 sr.error.emailexists=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B \u0441 \u0442\u043E\u0437\u0438 \u0438-\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441 \u0432\u0435\u0447\u0435 \u0441\u044A\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430. \u041C\u043E\u043B\u044F, \u0441\u0432\u044A\u0440\u0436\u0435\u0442\u0435 \u0441\u0435 \u0441 {0}. sr.error.loginexists=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E\u0442\u043E \u0438\u043C\u0435 \u0432\u0435\u0447\u0435 \u0441\u044A\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430. <br>\u0410\u043A\u043E \u0441\u0442\u0435 \u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043B\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043C\u0430\u0442\u0430 \u0441 \u0442\u043E\u0432\u0430 \u043F\u043E\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E \u0438\u043C\u0435 \u043F\u0440\u0435\u0434\u0438, \u043C\u043E\u043B\u044F, \u0441\u0432\u044A\u0440\u0436\u0435\u0442\u0435 \u0441\u0435 \u0441 {0}. sr.header=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F -sr.intro=\u041C\u043E\u043B\u044F, \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E \u0438\u043C\u0435 \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043C\u0430\u0442\u0430. <b>\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435\:</b> \u0422\u043E\u0432\u0430 \u0438\u043C\u0435 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043F\u0440\u043E\u043C\u0435\u043D\u044F \u043D\u0430 \u043F\u043E-\u043A\u044A\u0441\u0435\u043D \u0435\u0442\u0430\u043F\! +sr.intro=\u041C\u043E\u043B\u044F, \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E \u0438\u043C\u0435 \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043C\u0430\u0442\u0430. <b>\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435\:</b> \u0422\u043E\u0432\u0430 \u0438\u043C\u0435 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043F\u0440\u043E\u043C\u0435\u043D\u044F \u043D\u0430 \u043F\u043E-\u043A\u044A\u0441\u0435\u043D \u0435\u0442\u0430\u043F\! sr.login.meantimetaken=\u0422\u043E\u0432\u0430 \u043F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E \u0438\u043C\u0435 \u0435 \u0432\u0435\u0447\u0435 \u0437\u0430\u0435\u0442\u043E. \u041C\u043E\u043B\u044F, \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u0440\u0443\u0433\u043E. srf.email=\u0418-\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441 srf.error.blacklist=\u0418\u0437\u0431\u0440\u0430\u043D\u043E\u0442\u043E \u043F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E \u0438\u043C\u0435 \u043D\u0435 \u0435 \u043F\u0440\u0438\u0435\u0442\u043E. @@ -170,7 +169,7 @@ swissEduPersonStudyBranch2.140199=UAS\:\u0417\u0434\u0440\u0430\u0432\u043D\u043 swissEduPersonStudyBranch2.140201=UAS\:\u0424\u0438\u0437\u0438\u043E\u0442\u0435\u0440\u0430\u043F\u0438\u044F swissEduPersonStudyBranch2.140202=UAS\:\u0415\u0440\u0433\u043E\u0442\u0435\u0440\u0430\u043F\u0438\u044F swissEduPersonStudyBranch2.140203=UAS\:\u041F\u0441\u0438\u0445\u043E\u043C\u043E\u0442\u043E\u0440\u043D\u0430 \u0442\u0435\u0440\u0430\u043F\u0438\u044F -swissEduPersonStudyBranch2.140204=UAS\:\u0414\u0438\u0435\u0442\u043E\u043B\u043E\u0433\u0438\u044F +swissEduPersonStudyBranch2.140204=UAS\:\u0414\u0438\u0435\u0442\u043E\u043B\u043E\u0433\u0438\u044F swissEduPersonStudyBranch2.140299=UAS\:\u0422\u0435\u0440\u0430\u043F\u0438\u044F \u0438 \u0440\u0435\u0445\u0430\u0431\u0438\u043B\u0438\u0442\u0430\u0446\u0438\u044F (\u043E\u0431\u0449\u043E) swissEduPersonStudyBranch2.140301=UAS\:\u041C\u0435\u0434\u0438\u0446\u0438\u043D\u0441\u043A\u0430 \u0440\u0430\u0434\u0438\u043E\u043B\u043E\u0433\u0438\u044F swissEduPersonStudyBranch2.140399=UAS\:\u0414\u0438\u0430\u0433\u043D\u043E\u0441\u0442\u0438\u0447\u043D\u0430/\u0442\u0435\u0440\u0430\u043F\u0435\u0432\u0442\u0438\u0447\u043D\u0430 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u044F (\u043E\u0431\u0449\u043E) @@ -179,7 +178,7 @@ swissEduPersonStudyBranch2.15=U\:\u0425\u0443\u043C\u0430\u043D\u0438\u0442\u043 swissEduPersonStudyBranch2.150101=UAS\:\u0414\u0435\u0442\u0441\u043A\u0430 \u0433\u0440\u0430\u0434\u0438\u043D\u0430 \u0438 \u043D\u0430\u0447\u0430\u043B\u043D\u043E \u0443\u0447\u0438\u043B\u0438\u0449\u0435 (\u043E\u0431\u0449\u043E) swissEduPersonStudyBranch2.150201=UAS\:\u0413\u0438\u043C\u043D\u0430\u0437\u0438\u044F I (\u043E\u0431\u0449\u043E) swissEduPersonStudyBranch2.150301=UAS\:\u0413\u0438\u043C\u043D\u0430\u0437\u0438\u044F II (\u043E\u0431\u0449\u043E)(\u0434\u0438\u043F\u043B\u043E\u043C\u0430) -swissEduPersonStudyBranch2.150302=UAS\:\u0413\u0438\u043C\u043D\u0430\u0437\u0438\u044F II (\u043E\u0431\u0449\u043E)(\u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435) +swissEduPersonStudyBranch2.150302=UAS\:\u0413\u0438\u043C\u043D\u0430\u0437\u0438\u044F II (\u043E\u0431\u0449\u043E)(\u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435) swissEduPersonStudyBranch2.150401=UAS\:\u041B\u043E\u0433\u043E\u043F\u0435\u0434\u0438\u044F swissEduPersonStudyBranch2.150402=UAS\:Psychomotricity swissEduPersonStudyBranch2.150499=UAS\:\u0422\u0435\u0440\u0430\u043F\u0435\u0432\u0442\u0438\u0447\u043D\u0430 \u043F\u0435\u0434\u0430\u0433\u043E\u0433\u0438\u043A\u0430 (\u043E\u0431\u0449\u043E) @@ -196,12 +195,12 @@ swissEduPersonStudyBranch2.20209=UAS\:\u0418\u043D\u0434\u0443\u0441\u0442\u0440 swissEduPersonStudyBranch2.20210=UAS\:\u041C\u0435\u0434\u0438\u0439\u043D\u043E \u0438\u043D\u0436\u0435\u043D\u0435\u0440\u0441\u0442\u0432\u043E swissEduPersonStudyBranch2.20211=UAS\:\u0418\u043D\u0436\u0435\u043D\u0435\u0440\u0441\u0442\u0432\u043E \u043F\u043E \u043F\u043E\u0434\u0434\u0440\u044A\u0436\u043A\u0430 \u043D\u0430 \u0441\u0433\u0440\u0430\u0434\u0438 swissEduPersonStudyBranch2.20212=UAS\:\u0418\u043D\u0436\u0435\u043D\u0435\u0440\u0435\u043D \u0434\u0438\u0437\u0430\u0439\u043D -swissEduPersonStudyBranch2.20213=UAS\:\u0410\u0432\u0438\u0430\u0442\u0438\u043A\u0430 +swissEduPersonStudyBranch2.20213=UAS\:\u0410\u0432\u0438\u0430\u0442\u0438\u043A\u0430 swissEduPersonStudyBranch2.20214=UAS\:\u041E\u043F\u0442\u043E\u043C\u0435\u0442\u0440\u0438\u044F swissEduPersonStudyBranch2.20999=UAS\:\u0422\u0435\u0445\u043D\u0438\u043A\u0430 swissEduPersonStudyBranch2.30301=UAS\:\u0411\u0438\u043E\u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u044F swissEduPersonStudyBranch2.30302=UAS\:\u0425\u0440\u0430\u043D\u0438\u0442\u0435\u043B\u043D\u0430 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u044F -swissEduPersonStudyBranch2.30303=UAS\:Life technologies +swissEduPersonStudyBranch2.30303=UAS\:Life technologies swissEduPersonStudyBranch2.30304=UAS\:\u0425\u0438\u043C\u0438\u044F swissEduPersonStudyBranch2.30305=UAS\:\u0415\u043D\u043E\u043B\u043E\u0433\u0438\u044F swissEduPersonStudyBranch2.30308=UAS\:\u0418\u043D\u0436\u0435\u043D\u0435\u0440\u0441\u0442\u0432\u043E \u043D\u0430 \u043F\u0440\u0438\u0440\u043E\u0434\u043D\u0430\u0442\u0430 \u0441\u0440\u0435\u0434\u0430 @@ -231,7 +230,7 @@ swissEduPersonStudyBranch2.53=U\:\u0412\u0435\u0442\u0438\u0440\u0438\u043D\u043 swissEduPersonStudyBranch2.54=U\:\u0424\u0430\u0440\u043C\u0430\u0446\u0438\u044F swissEduPersonStudyBranch2.55=U\:\u041C\u0435\u0434\u0438\u0446\u0438\u043D\u0430, \u0444\u0430\u0440\u043C\u0430\u0446\u0438\u044F \u0438 \u0434\u0440\u0443\u0433\u0438 swissEduPersonStudyBranch2.60601=U\:\u0412\u0438\u0437\u0443\u0430\u043B\u043D\u0430 \u043A\u043E\u043C\u0443\u043D\u0438\u043A\u0430\u0446\u0438\u044F -swissEduPersonStudyBranch2.60602=UAS\:HyperWerk +swissEduPersonStudyBranch2.60602=UAS\:HyperWerk swissEduPersonStudyBranch2.60603=UAS\:\u041F\u0440\u043E\u0434\u0443\u043A\u0442\u043E\u0432 \u0438 \u0438\u043D\u0434\u0443\u0441\u0442\u0440\u0438\u0430\u043B\u0435\u043D \u0434\u0438\u0437\u0430\u0439\u043D swissEduPersonStudyBranch2.60604=UAS\:\u0418\u043D\u0442\u0435\u0440\u0438\u043E\u0440\u0435\u043D \u0434\u0438\u0437\u0430\u0439\u043D swissEduPersonStudyBranch2.60605=UAS\:\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435 \u0438 \u0432\u044A\u0437\u0441\u0442\u0430\u043D\u043E\u0432\u044F\u0432\u0430\u043D\u0435 @@ -357,10 +356,10 @@ swissEduPersonStudyBranch3.3689=UAS\:\u0414\u0438\u0430\u0433\u043D\u043E\u0441\ swissEduPersonStudyBranch3.3699=UAS\:\u0417\u0434\u0440\u0430\u0432\u0435\u043E\u043F\u0430\u0437\u0432\u0430\u043D\u0435 (\u043E\u0431\u0449\u043E) swissEduPersonStudyBranch3.3701=UAS\:\u0414\u0435\u0442\u0441\u043A\u0430 \u0433\u0440\u0430\u0434\u0438\u043D\u0430 \u0438 \u043D\u0430\u0447\u0430\u043B\u043D\u043E \u0443\u0447\u0438\u043B\u0438\u0449\u0435 (\u043E\u0431\u0449\u043E) swissEduPersonStudyBranch3.3710=UAS\:\u0413\u0438\u043C\u043D\u0430\u0437\u0438\u044F I (\u043E\u0431\u0449\u043E) -swissEduPersonStudyBranch3.3720=UAS\:\u0413\u0438\u043C\u043D\u0430\u0437\u0438\u044F II (\u043E\u0431\u0449\u043E)(\u0434\u0438\u043F\u043B\u043E\u043C\u0430) -swissEduPersonStudyBranch3.3725=UAS\:\u0413\u0438\u043C\u043D\u0430\u0437\u0438\u044F II (\u043E\u0431\u0449\u043E)(\u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435) +swissEduPersonStudyBranch3.3720=UAS\:\u0413\u0438\u043C\u043D\u0430\u0437\u0438\u044F II (\u043E\u0431\u0449\u043E)(\u0434\u0438\u043F\u043B\u043E\u043C\u0430) +swissEduPersonStudyBranch3.3725=UAS\:\u0413\u0438\u043C\u043D\u0430\u0437\u0438\u044F II (\u043E\u0431\u0449\u043E)(\u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435) swissEduPersonStudyBranch3.3730=UAS\:\u041B\u043E\u0433\u043E\u043F\u0435\u0434\u0438\u044F -swissEduPersonStudyBranch3.3731=UAS\:Psychomotricity +swissEduPersonStudyBranch3.3731=UAS\:Psychomotricity swissEduPersonStudyBranch3.3739=UAS\:\u0422\u0435\u0440\u0430\u043F\u0435\u0432\u0442\u0438\u0447\u043D\u0430 \u043F\u0435\u0434\u0430\u0433\u043E\u0433\u0438\u043A\u0430 (\u043E\u0431\u0449\u043E) swissEduPersonStudyBranch3.3799=UAS\:\u041E\u0431\u0443\u0447\u0435\u043D\u0438\u0435 \u043D\u0430 \u0443\u0447\u0438\u0442\u0435\u043B\u0438 (\u043E\u0431\u0449\u043E) swissEduPersonStudyBranch3.3801=UAS\:\u0410\u0440\u0445\u0438\u0442\u0435\u043A\u0442\u0443\u0440\u0430 @@ -466,7 +465,7 @@ swissEduPersonStudyLevel.31=\u0414\u043E\u043A\u0442\u043E\u0440\u0430\u0442 swissEduPersonStudyLevel.32=\u041F\u0440\u043E\u0434\u044A\u043B\u0436\u0430\u0432\u0430\u0449\u043E \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435 swissEduPersonStudyLevel.33=\u0420\u0430\u0437\u0448\u0438\u0440\u0435\u043D\u043E \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435 swissEduPersonStudyLevel.34=\u041C\u043E\u0434\u0443\u043B\u043D\u043E \u0440\u0430\u0437\u0448\u0438\u0440\u0435\u043D\u043E \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435 -swissEduPersonStudyLevel.35=\u041F\u0440\u043E\u0444\u0435\u0441\u0438\u043E\u043D\u0430\u043B\u043D\u043E \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435 +swissEduPersonStudyLevel.35=\u041F\u0440\u043E\u0444\u0435\u0441\u0438\u043E\u043D\u0430\u043B\u043D\u043E \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435 swissEduPersonStudyLevel.39=\u0418\u043D\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043B\u043D\u043E \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0430\u0432\u0430\u0449\u043E \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435 swissEduPersonUniqueID=\u041B\u0438\u0447\u0435\u043D \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u043E\u043D\u0435\u043D \u043D\u043E\u043C\u0435\u0440 \u043D\u0430 SwissEdu wayf.homesite=\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442 diff --git a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_de.properties index dad681695e42ef8b8d34239d1145b1ccf4bf485f..47a19cff42089af865c1f318c40630f7fc82b5c3 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_de.properties @@ -31,7 +31,6 @@ eduPersonAffiliation.student=Student eduPersonEntitlement=Berechtigung eduPersonOrgUnitDN=Organisationsheinheit DN employeeNumber=Mitarbeiternummer -error.insufficieant.attributes=Es sind nicht f\u00FC alle erforderlichen Shibboleth Attribute Werte vorhanden.. error.shibboleth.not.authorized=Sie d\u00FCrfen nicht auf OpenOLAT einloggen. error.shibboleth.generic=Shibboleth Fehler. Melden Sie sich nochmals an\! error.shibboleth.head=OLAT - Online Learning And Training - Error diff --git a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_el.properties index 566e9d7d7495b40721eaa5ab8b3296a0496deb8d..f5efbb43255fe12e555c67dacb3be253f83416fe 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_el.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_el.properties @@ -15,7 +15,6 @@ eduPersonAffiliation.student=\u03A6\u03BF\u03B9\u03C4\u03B7\u03C4\u03AE\u03C2 eduPersonEntitlement=\u0395\u03BE\u03BF\u03C5\u03C3\u03B9\u03BF\u03B4\u03CC\u03C4\u03B7\u03C3\u03B7 eduPersonOrgUnitDN=\u039C\u03BF\u03BD\u03AC\u03B4\u03B1 \u03BF\u03C1\u03B3\u03AC\u03BD\u03C9\u03C3\u03B7\u03C2 DN employeeNumber=\u0391\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03C4\u03B1\u03C5\u03C4\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2 \u03C5\u03C0\u03B1\u03BB\u03BB\u03AE\u03BB\u03BF\u03C5 -error.insufficieant.attributes=\u03A5\u03C0\u03BF\u03C7\u03C1\u03B5\u03C9\u03C4\u03B9\u03BA\u03AC \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC Shibboleth\:Shib-SwissEP-UniqueID, Shib-InetOrgPerson-givenName, Shib-Person-surname, Shib-InetOrgPerson-mail, Shib-SwissEP-HomeOrganization error.shibboleth.generic=\u03A0\u03B1\u03C1\u03BF\u03C5\u03C3\u03B9\u03AC\u03C3\u03C4\u03B7\u03BA\u03B5 \u03C3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03C3\u03C4\u03BF Shibboleth. \u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03B5\u03B9\u03C3\u03B1\u03C7\u03B8\u03B5\u03AF\u03C4\u03B5 \u03B1\u03C1\u03B3\u03CC\u03C4\u03B5\u03C1\u03B1\! error.shibboleth.head=OLAT - Online Learning And Training - \u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 error.unqueid.notfound=\u0388\u03C7\u03B5\u03C4\u03B5 \u03C0\u03C1\u03B1\u03B3\u03BC\u03B1\u03C4\u03B9\u03BA\u03AC \u03C4\u03B7 \u03B4\u03B9\u03BA\u03B1\u03B9\u03BF\u03B4\u03BF\u03C3\u03AF\u03B1 \u03BD\u03B1 \u03AD\u03C7\u03B5\u03C4\u03B5 \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 \u03C3\u03C4\u03BF OLAT; \u0391\u03BD \u03BD\u03B1\u03B9, \u03C0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03B5\u03B9\u03C3\u03B1\u03C7\u03B8\u03B5\u03AF\u03C4\u03B5 \u03B1\u03C1\u03B3\u03CC\u03C4\u03B5\u03C1\u03B1. diff --git a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_en.properties index 424077a4a7e7b2c1f2be8701c7b3b8594a811895..6b2da53cfd742d0df0f32667dac692bfba7c0b62 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_en.properties @@ -31,7 +31,6 @@ eduPersonAffiliation.student=Student eduPersonEntitlement=Authorization eduPersonOrgUnitDN=Organization unit DN employeeNumber=Employee identification number -error.insufficieant.attributes=Some values for mandatory Shibboleth attributes are missing. error.shibboleth.not.authorized=You are not authorized to log in OpenOLAT. error.shibboleth.generic=A Shibboleth error occurred. Please log in again\! error.shibboleth.head=OLAT - Online Learning And Training - Error diff --git a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_fr.properties index 5e0cb75ccb1e4385d7bdce0e564461de6e9124d3..75c0b0b6a5e5e00745833e311f323602152f029f 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_fr.properties @@ -21,7 +21,6 @@ eduPersonAffiliation.student=Etudiant eduPersonEntitlement=Autorisation eduPersonOrgUnitDN=Unit\u00E9 d'organisation DN employeeNumber=Num\u00E9ro personnel -error.insufficieant.attributes=Attributs Shibboleth n\u00E9cessaires\:Shib-SwissEP-UniqueID, Shib-InetOrgPerson-givenName, Shib-Person-surname, Shib-InetOrgPerson-mail, Shib-SwissEP-HomeOrganization error.shibboleth.generic=Erreur Shibboleth. Reconnectez-vous, s.v.p.\! error.shibboleth.head=OLAT - Online Learning And Training - Error error.shibboleth.not.authorized=Vous n'\u00EAtes pas autoris\u00E9 \u00E0 vous connecter \u00E0 OpenOLAT. @@ -34,7 +33,7 @@ organizationalUnit=Unit\u00E9 d'organisation postalAddress=Adresse sm.error.no_username=Aucun nom d'utilisateur n'a \u00E9t\u00E9 cr\u00E9\u00E9 sm.error.username_in_use=Le nom d'utilisateur existe d\u00E9j\u00E0 -sm.header=Enregistrement +sm.header=Enregistrement sm.intro=Le nom d'utilisateur s\u00E9lectionn\u00E9 existe d\u00E9j\u00E0 dans OLAT. Si vous \u00EAtes sur que vous vous \u00EAtes donn\u00E9 ce nom d'utilisateur lors d'une inscription OLAT pr\u00E9c\u00E9dente, veuillez indiquer le mot de passe correspondant. Si l'identification est r\u00E9ussie, le nom d'utilisation est enregistr\u00E9 automatiquement.<br><br>Si vous n'avez pas cr\u00E9\u00E9 ce nom d'utilisateur, cliquez sur "abandonner" et choisissez un nouveau nom d'utilisation, s.v.p.. smf.error.blocked=Le nom d'utilisateur a \u00E9t\u00E9 bloqu\u00E9 pour des raisons de s\u00E9curit\u00E9. Vous pouvez r\u00E9essayer plus tard. smf.error.password=Le mot de passe n'est pas valide. @@ -116,8 +115,8 @@ swissEduPersonStaffCategory.303=Technical Personnel swissEduPersonStaffCategory.304=Technical Personnel\: Apprentices and Interns swissEduPersonStaffCategory.305=Janitors, Building Managers swissEduPersonStaffCategory.306=Social and Wellness Personnel -swissEduPersonStaffCategory.307=Library Personnel -swissEduPersonStaffCategory.308=Safety Personnel Radiation, Firefighters, Guards +swissEduPersonStaffCategory.307=Library Personnel +swissEduPersonStaffCategory.308=Safety Personnel Radiation, Firefighters, Guards swissEduPersonStudyBranch1=Branche d'\u00E9tude swissEduPersonStudyBranch1.1=U\: sciences humaines et sociales swissEduPersonStudyBranch1.10000=HEP\:architecture, ing\u00E9nierie, planification @@ -131,9 +130,9 @@ swissEduPersonStudyBranch1.20000=HEP\:technologie et informatique swissEduPersonStudyBranch1.3=U\:droit swissEduPersonStudyBranch1.30000=HEP\:chimie et sciences de la vie swissEduPersonStudyBranch1.4=HEP\:sciences naturelles et exactes -swissEduPersonStudyBranch1.40000=HEP\:agriculture e sylviculture -swissEduPersonStudyBranch1.5=U\: m\u00E9decine et pharmacie -swissEduPersonStudyBranch1.50000=HEP\:\u00E9conomie et services +swissEduPersonStudyBranch1.40000=HEP\:agriculture e sylviculture +swissEduPersonStudyBranch1.5=U\: m\u00E9decine et pharmacie +swissEduPersonStudyBranch1.50000=HEP\:\u00E9conomie et services swissEduPersonStudyBranch1.6=U\:sciences techniques swissEduPersonStudyBranch1.60000=HEP\:design swissEduPersonStudyBranch1.7=U\:interdisciplinaire et autres @@ -148,14 +147,14 @@ swissEduPersonStudyBranch2.100201=HEP\:\u00E9ducation physique, de diction, de c swissEduPersonStudyBranch2.100301=HEP\:sc\u00E9nographie swissEduPersonStudyBranch2.100401=HEP\:formation sp\u00E9ciale en th\u00E9\u00E2tre swissEduPersonStudyBranch2.100999=HEP\:th\u00E9\u00E2tre g\u00E9n\u00E9ral -swissEduPersonStudyBranch2.10101=HEP\:architecture +swissEduPersonStudyBranch2.10101=HEP\:architecture swissEduPersonStudyBranch2.10102=HEP\:ing\u00E9nierie civile swissEduPersonStudyBranch2.10103=HEP\:gestion des proc\u00E9d\u00E9s de construction swissEduPersonStudyBranch2.10104=HEP\:planification de l'espace swissEduPersonStudyBranch2.10105=HEP\:architecture du paysage swissEduPersonStudyBranch2.10106=HEP\:g\u00E9omatique swissEduPersonStudyBranch2.10107=HEP\: technologie du bois -swissEduPersonStudyBranch2.10999=HEP\:formation continue en architecture, construction et planification +swissEduPersonStudyBranch2.10999=HEP\:formation continue en architecture, construction et planification swissEduPersonStudyBranch2.11=U\:th\u00E9ologie swissEduPersonStudyBranch2.110199=HEP\:traduction swissEduPersonStudyBranch2.110299=HEP\:interpr\u00E8tes @@ -166,7 +165,7 @@ swissEduPersonStudyBranch2.120299=HEP\:p\u00E9dagogique sociale swissEduPersonStudyBranch2.120399=HEP\:animation socioculturelle swissEduPersonStudyBranch2.120999=HEP\:travail social g\u00E9n\u00E9ral swissEduPersonStudyBranch2.13=U\:sciences historiques et culturelles -swissEduPersonStudyBranch2.130101=HEP\:diagnostic et conseil psychologique +swissEduPersonStudyBranch2.130101=HEP\:diagnostic et conseil psychologique swissEduPersonStudyBranch2.130102=HEP\:conseil professionnel swissEduPersonStudyBranch2.130103=HEP\:psychologie du travail et de l'organisation swissEduPersonStudyBranch2.130999=HEP\:psychologie appliqu\u00E9 g\u00E9n\u00E9rale @@ -174,11 +173,11 @@ swissEduPersonStudyBranch2.14=HEP\:sciences sociales swissEduPersonStudyBranch2.140101=HEP\:soins swissEduPersonStudyBranch2.140102=HEP\:sage-femme swissEduPersonStudyBranch2.140199=HEP\:soin et \u00E9ducation \u00E0 la sant\u00E9 en g\u00E9n\u00E9ral -swissEduPersonStudyBranch2.140201=HEP\:physioth\u00E9rapie +swissEduPersonStudyBranch2.140201=HEP\:physioth\u00E9rapie swissEduPersonStudyBranch2.140202=HEP\:ergoth\u00E9rapie -swissEduPersonStudyBranch2.140203=HEP\:th\u00E9rapie psychomotrice -swissEduPersonStudyBranch2.140204=HEP\:conseil \u00E0 la nutrition -swissEduPersonStudyBranch2.140299=HEP\:th\u00E9rapie et r\u00E9habilitation en g\u00E9n\u00E9ral +swissEduPersonStudyBranch2.140203=HEP\:th\u00E9rapie psychomotrice +swissEduPersonStudyBranch2.140204=HEP\:conseil \u00E0 la nutrition +swissEduPersonStudyBranch2.140299=HEP\:th\u00E9rapie et r\u00E9habilitation en g\u00E9n\u00E9ral swissEduPersonStudyBranch2.140301=HEP\:radiologie m\u00E9dicale swissEduPersonStudyBranch2.140399=HEP\:technique diagnostique/th\u00E9rapeutique en g\u00E9n\u00E9ral swissEduPersonStudyBranch2.140999=HEP\:sant\u00E9 en g\u00E9n\u00E9ral @@ -188,33 +187,33 @@ swissEduPersonStudyBranch2.150201=HEP\:secondaire I en g\u00E9n\u00E9ral swissEduPersonStudyBranch2.150301=HEP\:secondaire II en g\u00E9n\u00E9ral (\u00E9cole de maturit\u00E9) swissEduPersonStudyBranch2.150302=HEP\:secondaire II g\u00E9n\u00E9ral (formation professionnelle) swissEduPersonStudyBranch2.150401=HEP\:logop\u00E9die -swissEduPersonStudyBranch2.150402=HEP\:psychomotricit\u00E9 +swissEduPersonStudyBranch2.150402=HEP\:psychomotricit\u00E9 swissEduPersonStudyBranch2.150499=HEP\:p\u00E9dagogie th\u00E9rapeutique en g\u00E9n\u00E9ral swissEduPersonStudyBranch2.150999=HEP\:formation du corps enseignant en g\u00E9n\u00E9ral -swissEduPersonStudyBranch2.20201=HEP\:\u00E9lectrotechnique +swissEduPersonStudyBranch2.20201=HEP\:\u00E9lectrotechnique swissEduPersonStudyBranch2.20202=HEP\:informatique swissEduPersonStudyBranch2.20203=HEP\:t\u00E9l\u00E9communication swissEduPersonStudyBranch2.20204=HEP\:microtechnique -swissEduPersonStudyBranch2.20205=HEP\:ing\u00E9nierie du syst\u00E8me +swissEduPersonStudyBranch2.20205=HEP\:ing\u00E9nierie du syst\u00E8me swissEduPersonStudyBranch2.20206=HEP\:ing\u00E9nierie m\u00E9canique -swissEduPersonStudyBranch2.20207=HEP\:gestion de projet en m\u00E9chatronique +swissEduPersonStudyBranch2.20207=HEP\:gestion de projet en m\u00E9chatronique swissEduPersonStudyBranch2.20208=HEP\:technique de l'automobile swissEduPersonStudyBranch2.20209=HEP\:ing\u00E9nierie \u00E9conomique swissEduPersonStudyBranch2.20210=HEP\:ing\u00E9nierie des m\u00E9dias swissEduPersonStudyBranch2.20211=HEP\:techniques du b\u00E2timent swissEduPersonStudyBranch2.20212=HEP\:ing\u00E9nierie du design swissEduPersonStudyBranch2.20213=HEP\: aviatique -swissEduPersonStudyBranch2.20214=HEP\:optom\u00E9trie +swissEduPersonStudyBranch2.20214=HEP\:optom\u00E9trie swissEduPersonStudyBranch2.20999=HEP\:technique swissEduPersonStudyBranch2.30301=HEP\:biotechnologie swissEduPersonStudyBranch2.30302=HEP\:technologie alimentaire -swissEduPersonStudyBranch2.30303=HEP\:Life Technologies +swissEduPersonStudyBranch2.30303=HEP\:Life Technologies swissEduPersonStudyBranch2.30304=HEP\:chimie -swissEduPersonStudyBranch2.30305=HEP\:oenologie +swissEduPersonStudyBranch2.30305=HEP\:oenologie swissEduPersonStudyBranch2.30308=HEP\:ing\u00E9nierie de l'environnement swissEduPersonStudyBranch2.30309=HEP\:sciences de la vie mol\u00E9culaire swissEduPersonStudyBranch2.30310=HEP\:Life Science Technologies -swissEduPersonStudyBranch2.30999=HEP\:Formation continue dans le domaine chimie et life sciences +swissEduPersonStudyBranch2.30999=HEP\:Formation continue dans le domaine chimie et life sciences swissEduPersonStudyBranch2.40401=HEP\:agriculture swissEduPersonStudyBranch2.40402=HEP\:sylviculture swissEduPersonStudyBranch2.40999=HEP\:formation continue dans le domaine agriculture et sylviculture @@ -223,9 +222,9 @@ swissEduPersonStudyBranch2.42=U\:sciences naturelles swissEduPersonStudyBranch2.43=U\: sciences naturelles et exactes, autres sciences swissEduPersonStudyBranch2.50501=HEP\:\u00E9conomie de gestion swissEduPersonStudyBranch2.50502=HEP\:\u00E9tudes europ\u00E9ennes pour l'\u00E9conomie de gestion -swissEduPersonStudyBranch2.50503=HEP\:International Business Management +swissEduPersonStudyBranch2.50503=HEP\:International Business Management swissEduPersonStudyBranch2.50504=HEP\:informatique \u00E9conomique -swissEduPersonStudyBranch2.50505=FH\:Facility Management +swissEduPersonStudyBranch2.50505=FH\:Facility Management swissEduPersonStudyBranch2.50506=HEP\:h\u00F4tellerie swissEduPersonStudyBranch2.50507=HEP\:tourisme swissEduPersonStudyBranch2.50508=HEP\:information et documentation @@ -245,20 +244,20 @@ swissEduPersonStudyBranch2.60605=HEP\:conservation-restauration swissEduPersonStudyBranch2.60606=HEP\:film swissEduPersonStudyBranch2.60607=HEP\:r\u00E9alisation de films swissEduPersonStudyBranch2.60999=HEP\:formation continue dans le domaine du design -swissEduPersonStudyBranch2.61=U\:construction et g\u00E9od\u00E9sie +swissEduPersonStudyBranch2.61=U\:construction et g\u00E9od\u00E9sie swissEduPersonStudyBranch2.62=U\:ing\u00E9nierie m\u00E9canique et \u00E9lectrique -swissEduPersonStudyBranch2.63=U\:agriculture et sylviculture -swissEduPersonStudyBranch2.64=U\:sciences techniques interdisciplinaires/autres +swissEduPersonStudyBranch2.63=U\:agriculture et sylviculture +swissEduPersonStudyBranch2.64=U\:sciences techniques interdisciplinaires/autres swissEduPersonStudyBranch2.70701=HEP\:sport swissEduPersonStudyBranch2.80199=HEP\:art plastique en g\u00E9n\u00E9ral swissEduPersonStudyBranch2.80201=HEP\:arts plastiques swissEduPersonStudyBranch2.80202=HEP\:enseignant manuel -swissEduPersonStudyBranch2.80203=HEP\:\u00E9ducation esth\u00E9tique +swissEduPersonStudyBranch2.80203=HEP\:\u00E9ducation esth\u00E9tique swissEduPersonStudyBranch2.80299=HEP\:formation du corps enseignant pour arts en g\u00E9n\u00E9ral swissEduPersonStudyBranch2.80301=HEP\:\u00E9criture litt\u00E9raire -swissEduPersonStudyBranch2.81=U\:administration centrale +swissEduPersonStudyBranch2.81=U\:administration centrale swissEduPersonStudyBranch2.82=U\:biblioth\u00E8ques centrales -swissEduPersonStudyBranch2.83=U\:services techniques et logistique +swissEduPersonStudyBranch2.83=U\:services techniques et logistique swissEduPersonStudyBranch2.84=U\:services pour collaborateurs et \u00E9tudiants swissEduPersonStudyBranch2.90101=HEP\:p\u00E9dagogique musicale (instrumentale et vocale) swissEduPersonStudyBranch2.90201=HEP\:interpr\u00E9tation/performance @@ -274,9 +273,9 @@ swissEduPersonStudyBranch3.1100=U\:sciences humaines et sociales, autres swissEduPersonStudyBranch3.1190=U\:formation du corps enseignant, secondaire I (phil.I) swissEduPersonStudyBranch3.1201=U\:th\u00E9ologie interdisciplinaire/autres swissEduPersonStudyBranch3.1205=U\:th\u00E9ologie protestante -swissEduPersonStudyBranch3.1210=U\:th\u00E9ologie catholique-romaine +swissEduPersonStudyBranch3.1210=U\:th\u00E9ologie catholique-romaine swissEduPersonStudyBranch3.1215=U\:th\u00E9ologie catholique-chr\u00E9tienne -swissEduPersonStudyBranch3.1300=U\:philosophie +swissEduPersonStudyBranch3.1300=U\:philosophie swissEduPersonStudyBranch3.1401=U\:langue et litt\u00E9raire interdisciplinaires / autres swissEduPersonStudyBranch3.1405=U\:linguistique swissEduPersonStudyBranch3.1410=U\:allemand @@ -293,16 +292,16 @@ swissEduPersonStudyBranch3.1449=U\:lettres classiques europ\u00E9ennes swissEduPersonStudyBranch3.1450=U\:lettres classiques swissEduPersonStudyBranch3.1454=U\:autre langues non europ\u00E9ennes swissEduPersonStudyBranch3.1455=U\:langues asiatiques -swissEduPersonStudyBranch3.1460=U\:langues du Proche-Orient +swissEduPersonStudyBranch3.1460=U\:langues du Proche-Orient swissEduPersonStudyBranch3.1465=U\:langues africaines -swissEduPersonStudyBranch3.1470=U\:interpr\u00E8tes et traductions +swissEduPersonStudyBranch3.1470=U\:interpr\u00E8tes et traductions swissEduPersonStudyBranch3.1500=U\:arch\u00E9ologie, histoire pr\u00E9historique et antique swissEduPersonStudyBranch3.1600=U\:histoire swissEduPersonStudyBranch3.1700=U\:histoire de l'art swissEduPersonStudyBranch3.1800=U\:musiclogie swissEduPersonStudyBranch3.1850=U\:th\u00E9\u00E2tre et film swissEduPersonStudyBranch3.1900=U\:ethnologie et folklore -swissEduPersonStudyBranch3.1990=U\:histoire et sciences culturelles interdisciplinaires/autres +swissEduPersonStudyBranch3.1990=U\:histoire et sciences culturelles interdisciplinaires/autres swissEduPersonStudyBranch3.2000=U\:psychologie swissEduPersonStudyBranch3.2100=U\:sciences de l'\u00E9ducation swissEduPersonStudyBranch3.2120=HEP\:p\u00E9dagogie sp\u00E9ciale @@ -311,10 +310,10 @@ swissEduPersonStudyBranch3.2200=HEP\:sociologie swissEduPersonStudyBranch3.2205=HEP\:travail social swissEduPersonStudyBranch3.2300=HEP\:sciences politiques swissEduPersonStudyBranch3.2400=HEP\:sciences de la communication et des m\u00E9dias -swissEduPersonStudyBranch3.2450=HEP\:sciences sociales interdisciplinaires/autres +swissEduPersonStudyBranch3.2450=HEP\:sciences sociales interdisciplinaires/autres swissEduPersonStudyBranch3.2505=HEP\:\u00E9conomie nationale swissEduPersonStudyBranch3.2520=HEP\:\u00E9conomie de gestion -swissEduPersonStudyBranch3.2530=HEP\:informatique de gestion +swissEduPersonStudyBranch3.2530=HEP\:informatique de gestion swissEduPersonStudyBranch3.2540=HEP\:\u00E9conomie interdisciplinaire/autres swissEduPersonStudyBranch3.2600=HEP\:droit swissEduPersonStudyBranch3.3099=HEP\:formation continue en architecture, construction et planification @@ -331,8 +330,8 @@ swissEduPersonStudyBranch3.3539=HEP\:formation du corps enseignant en arts en g\ swissEduPersonStudyBranch3.3540=HEP\:\u00E9criture litt\u00E9raire swissEduPersonStudyBranch3.3551=HEP\:p\u00E9dagogique musicale (instrumentale et vocale) swissEduPersonStudyBranch3.3552=HEP\:interpr\u00E9tation/performance -swissEduPersonStudyBranch3.3553=HEP\:musique scolaire et eccl\u00E9siastique -swissEduPersonStudyBranch3.3554=HEP\:chef d'orchestre +swissEduPersonStudyBranch3.3553=HEP\:musique scolaire et eccl\u00E9siastique +swissEduPersonStudyBranch3.3554=HEP\:chef d'orchestre swissEduPersonStudyBranch3.3555=HEP\:formation sp\u00E9ciale en musique swissEduPersonStudyBranch3.3569=HEP\:musique en g\u00E9n\u00E9ral swissEduPersonStudyBranch3.3571=HEP\: cr\u00E9ation th\u00E9\u00E2trale en arts performatifs @@ -342,14 +341,14 @@ swissEduPersonStudyBranch3.3574=HEP\:formation sp\u00E9ciale en th\u00E9\u00E2tr swissEduPersonStudyBranch3.3579=HEP\:th\u00E9\u00E2tre en g\u00E9n\u00E9ral swissEduPersonStudyBranch3.3589=HEP\:traduction swissEduPersonStudyBranch3.3599=HEP\:interpr\u00E9tation -swissEduPersonStudyBranch3.3600=HEP\:linguistique appliqu\u00E9e en g\u00E9n\u00E9ral +swissEduPersonStudyBranch3.3600=HEP\:linguistique appliqu\u00E9e en g\u00E9n\u00E9ral swissEduPersonStudyBranch3.3609=HEP\:travail social -swissEduPersonStudyBranch3.3619=HEP\:p\u00E9dagogie sp\u00E9cialis\u00E9e -swissEduPersonStudyBranch3.3629=HEP\:animation socioculturelle +swissEduPersonStudyBranch3.3619=HEP\:p\u00E9dagogie sp\u00E9cialis\u00E9e +swissEduPersonStudyBranch3.3629=HEP\:animation socioculturelle swissEduPersonStudyBranch3.3639=HEP\:travail social en g\u00E9n\u00E9ral -swissEduPersonStudyBranch3.3651=HEP\:diagnostic et conseil psychologique +swissEduPersonStudyBranch3.3651=HEP\:diagnostic et conseil psychologique swissEduPersonStudyBranch3.3652=HEP\:orientation professionnelle -swissEduPersonStudyBranch3.3653=HEP\:psychologie du travail et de l'organisation +swissEduPersonStudyBranch3.3653=HEP\:psychologie du travail et de l'organisation swissEduPersonStudyBranch3.3659=HEP\:psychologie appliqu\u00E9e en g\u00E9n\u00E9ral swissEduPersonStudyBranch3.3661=HEP\:soins swissEduPersonStudyBranch3.3662=HEP\:sage-femme @@ -359,31 +358,31 @@ swissEduPersonStudyBranch3.3672=HEP\:ergoth\u00E9rapie swissEduPersonStudyBranch3.3673=HEP\:th\u00E9rapie psychomotrice swissEduPersonStudyBranch3.3674=HEP\:conseil de nutrition swissEduPersonStudyBranch3.3679=HEP\:th\u00E9rapie et r\u00E9habilitation en g\u00E9n\u00E9ral -swissEduPersonStudyBranch3.3681=HEP\:radiologie m\u00E9dicale +swissEduPersonStudyBranch3.3681=HEP\:radiologie m\u00E9dicale swissEduPersonStudyBranch3.3689=HEP\:technique diagnostique/th\u00E9rapeutique en g\u00E9n\u00E9ral swissEduPersonStudyBranch3.3699=HEP\:sant\u00E9 en g\u00E9n\u00E9ral swissEduPersonStudyBranch3.3701=HEP\:\u00E9cole maternelle et primaire en g\u00E9n\u00E9ral swissEduPersonStudyBranch3.3710=HEP\:\u00E9cole secondaire I en g\u00E9n\u00E9ral -swissEduPersonStudyBranch3.3720=HEP\:secondaire II en g\u00E9n\u00E9ral (\u00E9coles universitaires) +swissEduPersonStudyBranch3.3720=HEP\:secondaire II en g\u00E9n\u00E9ral (\u00E9coles universitaires) swissEduPersonStudyBranch3.3725=HEP\:secondaire II en g\u00E9n\u00E9ral (formation profesionnelle) swissEduPersonStudyBranch3.3730=HEP\:logop\u00E9die -swissEduPersonStudyBranch3.3731=HEP\:psychomotricit\u00E9 +swissEduPersonStudyBranch3.3731=HEP\:psychomotricit\u00E9 swissEduPersonStudyBranch3.3739=HEP\:p\u00E9dagogie curative en g\u00E9n\u00E9ral swissEduPersonStudyBranch3.3799=HEP\:formation du corps enseignant en g\u00E9n\u00E9ral swissEduPersonStudyBranch3.3801=HEP\:architecture swissEduPersonStudyBranch3.3802=HEP\:ing\u00E9nierie civile swissEduPersonStudyBranch3.3803=HEP\:gestion des proc\u00E9d\u00E9s de construction -swissEduPersonStudyBranch3.3804=HEP\:planification du territoire +swissEduPersonStudyBranch3.3804=HEP\:planification du territoire swissEduPersonStudyBranch3.3805=HEP\:architecture du paysage -swissEduPersonStudyBranch3.3806=HEP\:g\u00E9omatique +swissEduPersonStudyBranch3.3806=HEP\:g\u00E9omatique swissEduPersonStudyBranch3.3807=HEP\:techniques du bois -swissEduPersonStudyBranch3.3808=HEP\:\u00E9lectrotechnique +swissEduPersonStudyBranch3.3808=HEP\:\u00E9lectrotechnique swissEduPersonStudyBranch3.3809=HEP\:informatique swissEduPersonStudyBranch3.3810=HEP\:t\u00E9l\u00E9communication swissEduPersonStudyBranch3.3811=HEP\:microtechnique swissEduPersonStudyBranch3.3812=HEP\:technique du syst\u00E8me swissEduPersonStudyBranch3.3813=HEP\:ing\u00E9nierie m\u00E9canique -swissEduPersonStudyBranch3.3814=HEP\:gestion de projet technique en m\u00E9chatronique +swissEduPersonStudyBranch3.3814=HEP\:gestion de projet technique en m\u00E9chatronique swissEduPersonStudyBranch3.3815=HEP\:technique de l'automobile swissEduPersonStudyBranch3.3816=HEP\:ing\u00E9nierie de gestion swissEduPersonStudyBranch3.3817=HEP\:ing\u00E9nierie des m\u00E9dias @@ -392,18 +391,18 @@ swissEduPersonStudyBranch3.3819=HEP\:biotechnologie swissEduPersonStudyBranch3.3820=HEP\:technologie alimentaire swissEduPersonStudyBranch3.3821=HEP\:life technologies swissEduPersonStudyBranch3.3822=HEP\:chimie -swissEduPersonStudyBranch3.3823=HEP\:oenologie +swissEduPersonStudyBranch3.3823=HEP\:oenologie swissEduPersonStudyBranch3.3824=HEP\:agriculture -swissEduPersonStudyBranch3.3825=HEP\:sylviculture -swissEduPersonStudyBranch3.3826=HEP\:ing\u00E9nierie de l'environnement +swissEduPersonStudyBranch3.3825=HEP\:sylviculture +swissEduPersonStudyBranch3.3826=HEP\:ing\u00E9nierie de l'environnement swissEduPersonStudyBranch3.3827=HEP\:\u00E9conomie de gestion swissEduPersonStudyBranch3.3828=HEP\:programme europ\u00E9en en \u00E9conomie de gestion -swissEduPersonStudyBranch3.3829=HEP\:International Business Management -swissEduPersonStudyBranch3.3830=HEP\:informatique \u00E9conomique -swissEduPersonStudyBranch3.3831=HEP\:Facility Management +swissEduPersonStudyBranch3.3829=HEP\:International Business Management +swissEduPersonStudyBranch3.3830=HEP\:informatique \u00E9conomique +swissEduPersonStudyBranch3.3831=HEP\:Facility Management swissEduPersonStudyBranch3.3832=HEP\:h\u00F4tellerie swissEduPersonStudyBranch3.3833=HEP\:tourisme -swissEduPersonStudyBranch3.3834=HEP\:information et documentation +swissEduPersonStudyBranch3.3834=HEP\:information et documentation swissEduPersonStudyBranch3.3835=HEP\:communication swissEduPersonStudyBranch3.3836=HEP\:communication visuelle swissEduPersonStudyBranch3.3837=HEP\:hyperwerk @@ -415,7 +414,7 @@ swissEduPersonStudyBranch3.3842=HEP\:droit de gestion swissEduPersonStudyBranch3.3843=HEP\:ing\u00E9nieur-designeur swissEduPersonStudyBranch3.3844=HEP\:aviation swissEduPersonStudyBranch3.3845=HEP\:optom\u00E9trie -swissEduPersonStudyBranch3.3846=HEP\:Molecular Life Sciences +swissEduPersonStudyBranch3.3846=HEP\:Molecular Life Sciences swissEduPersonStudyBranch3.3847=HEP\:Life Science Technologies swissEduPersonStudyBranch3.3848=HEP\:film swissEduPersonStudyBranch3.3849=HEP\:r\u00E9alisation de films @@ -446,21 +445,21 @@ swissEduPersonStudyBranch3.7200=U\:ing\u00E9nierie civile swissEduPersonStudyBranch3.7300=U\:architecture et planification swissEduPersonStudyBranch3.7400=U\:ing\u00E9nierie en chimie swissEduPersonStudyBranch3.7450=U\:microtechnique -swissEduPersonStudyBranch3.750=U\:services pour collaborateurs et \u00E9tudiants +swissEduPersonStudyBranch3.750=U\:services pour collaborateurs et \u00E9tudiants swissEduPersonStudyBranch3.7500=U\:ing\u00E9nierie \u00E9lectrique swissEduPersonStudyBranch3.7550=U\:syst\u00E8mes de communications swissEduPersonStudyBranch3.7600=U\:ing\u00E9nierie m\u00E9canique swissEduPersonStudyBranch3.7650=U\:sciences de gestion + de production swissEduPersonStudyBranch3.7700=U\:sciences des mati\u00E8res swissEduPersonStudyBranch3.7800=U\:techniques culturelles et mesurations -swissEduPersonStudyBranch3.7905=U\:sylviculture +swissEduPersonStudyBranch3.7905=U\:sylviculture swissEduPersonStudyBranch3.7910=U\:agriculture swissEduPersonStudyBranch3.7915=U\:technologie alimentaire swissEduPersonStudyBranch3.8000=U\:sciences militaires -swissEduPersonStudyBranch3.850=U\:administration centrale -swissEduPersonStudyBranch3.9000=U\:interdisciplinaire / interfacultaire +swissEduPersonStudyBranch3.850=U\:administration centrale +swissEduPersonStudyBranch3.9000=U\:interdisciplinaire / interfacultaire swissEduPersonStudyBranch3.9001=U\: Gender studies -swissEduPersonStudyBranch3.9002=U\:formation continue interfacultaire +swissEduPersonStudyBranch3.9002=U\:formation continue interfacultaire swissEduPersonStudyBranch3.9999=HEP\:non applicable swissEduPersonStudyLevel=niveau d'\u00E9tudes swissEduPersonStudyLevel.00=cours de pr\u00E9paration ou formation continue, \u00E9tudiants invit\u00E9s @@ -470,10 +469,10 @@ swissEduPersonStudyLevel.20=deuxi\u00E8me moiti\u00E9 des \u00E9tudes swissEduPersonStudyLevel.25=\u00E9tudes de master avec bachelor swissEduPersonStudyLevel.26=\u00E9tudes de master sans bachelor swissEduPersonStudyLevel.31=\u00E9tudes de doctorat -swissEduPersonStudyLevel.32=\u00E9tudes post dipl\u00F4me -swissEduPersonStudyLevel.33=formation continue +swissEduPersonStudyLevel.32=\u00E9tudes post dipl\u00F4me +swissEduPersonStudyLevel.33=formation continue swissEduPersonStudyLevel.34=formation continue modulaire -swissEduPersonStudyLevel.35=\u00E9tudes compl\u00E9mentaires et d'approfondissement +swissEduPersonStudyLevel.35=\u00E9tudes compl\u00E9mentaires et d'approfondissement swissEduPersonStudyLevel.39=formation postgradu\u00E9e individuelle, formation continue. swissEduPersonUniqueID=ID individuel SwissEdu wayf.homesite=Universit\u00E9 diff --git a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_it.properties index 7dfdacfe2f364be86bcbe1825da97ed4412d8f1e..33726d5cf20fe96e6ed2419dec03c36679f4a7b2 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_it.properties @@ -21,7 +21,6 @@ eduPersonAffiliation.student=Studente eduPersonEntitlement=Autorizzazione eduPersonOrgUnitDN=Unit\u00E0 organizzative DN employeeNumber=Numero personale -error.insufficieant.attributes=Attributi Shibboleth richiesti\: Shib-SwissEP-UniqueID, Shib-InetOrgPerson-givenName, Shib-Person-surname, Shib-InetOrgPerson-mail, Shib-SwissEP-HomeOrganization error.shibboleth.generic=Errore Shibboleth. Ripeta il login, p.f.\! error.shibboleth.head=OLAT - Online Learning And Training - Errore error.shibboleth.not.authorized=Non sei autorizzato ad accedere ad OpenOLAT. @@ -415,8 +414,8 @@ swissEduPersonStudyBranch3.3842=SUP\:Diritto aziendale swissEduPersonStudyBranch3.3843=SPU\:Ingegneri disegnatori swissEduPersonStudyBranch3.3844=SPU\:Aviazione swissEduPersonStudyBranch3.3845=SPU\:Optometria -swissEduPersonStudyBranch3.3846=SUP\:Molecular Life Sciences -swissEduPersonStudyBranch3.3847=SUP\:Life Science Technologies +swissEduPersonStudyBranch3.3846=SUP\:Molecular Life Sciences +swissEduPersonStudyBranch3.3847=SUP\:Life Science Technologies swissEduPersonStudyBranch3.3848=SUP\:Film swissEduPersonStudyBranch3.3849=SUP\:Realizzazione film swissEduPersonStudyBranch3.3999=SUP\:Perfezionamento non attribuibile diff --git a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_nl_NL.properties index 4787e47766762683e8ed138314f9e838e0a813a7..e4a59fe5d43a38ecac25be19328fd50c18308bc9 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_nl_NL.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_nl_NL.properties @@ -19,7 +19,6 @@ eduPersonAffiliation.student=Student eduPersonEntitlement=Autorisatie eduPersonOrgUnitDN=Organisatie-eenheid DN employeeNumber=Werknemer identificatienummer -error.insufficieant.attributes=Verplichte Shibboleth attributen\: Shib-SwissEP-UniqueID, Shib-InetOrgPerson-givenName, Shib-Person-surname, Shib-InetOrgPerson-mail, Shib-SwissEP-HomeOrganization error.shibboleth.generic=Een Shibboleth fout trad op. Gelieve opnieuw aan te melden\! error.shibboleth.head=OLAT - Online Learning And Training - Error error.unqueid.notfound=Bent u echt gemachtigd om toegang te krijgen tot OLAT? Zo ja, gelieve opnieuw in te loggen. diff --git a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_pl.properties index 8cfd54fb20e22c71caf4d09832d8f15541b1a6e5..a09227ca8e0d874fbd0a6712b37a8849491ef61c 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_pl.properties @@ -19,7 +19,6 @@ eduPersonAffiliation.student=Student eduPersonEntitlement=Authorization eduPersonOrgUnitDN=Organization unit DN employeeNumber=Employee identification number -error.insufficieant.attributes=Mandatory Shibboleth attributes\: Shib-SwissEP-UniqueID, Shib-InetOrgPerson-givenName, Shib-Person-surname, Shib-InetOrgPerson-mail, Shib-SwissEP-HomeOrganization error.shibboleth.generic=A Shibboleth error occured. Please log in again\! error.shibboleth.head=OLAT - Online Learning And Training - Error error.unqueid.notfound=Are you really entitled to access OLAT? If so, please log in again. diff --git a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_pt_BR.properties index ac6273683061b0703744e419392f47637a9ba93e..78d01733daf85bde99da6d01e09def140c7e7487 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_pt_BR.properties @@ -21,7 +21,6 @@ eduPersonAffiliation.student=Estudante eduPersonEntitlement=Autoriza\u00E7\u00E3o eduPersonOrgUnitDN=Unidade da Organiza\u00E7\u00E3o employeeNumber=N\u00FAmero de Identifica\u00E7\u00E3o de Empregado -error.insufficieant.attributes=Atributos Shibboleth Obrigat\u00F3rios\: Shib-SwissEP-UniqueID, Shib-InetOrgPerson-givenName, Shib-Person-surname, Shib-InetOrgPerson-mail, Shib-SwissEP-HomeOrganization error.shibboleth.generic=Um erro no Shibboleth ocorreu. Por favor fa\u00E7a o log in novamente\! error.shibboleth.head=OLAT - Online Learning And Training - Erro error.shibboleth.not.authorized=Voc\u00EA n\u00E3o est\u00E1 autorizado a iniciar sess\u00E3o OpenOLAT. diff --git a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_zh_CN.properties index 1034f657341e4bdd3ce10281813bc5ddf0b2a87a..c26040d907c98f692d98cc7999fee763058f1c45 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_zh_CN.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/LocalStrings_zh_CN.properties @@ -19,7 +19,6 @@ eduPersonAffiliation.student=\u5B66\u751F eduPersonEntitlement=\u6388\u6743 eduPersonOrgUnitDN=DN\u7EC4\u7EC7\u5355\u5143 employeeNumber=\u96C7\u5458\u8EAB\u4EFD\u8BC1\u53F7\u7801 -error.insufficieant.attributes=\u5F3A\u5236\u6027\u53E3\u4EE4\u5C5E\u6027\uFF1AShib-SwissEP-UniqueID, Shib-InetOrgPerson-givenName, Shib-Person-surname, Shib-InetOrgPerson-mail, Shib-SwissEP-HomeOrganization error.shibboleth.generic=\u53E3\u4EE4\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\uFF01 error.shibboleth.head=OLAT - \u5728\u7EBF\u5B66\u4E60\u4E0E\u57F9\u8BAD - \u9519\u8BEF error.unqueid.notfound=\u60A8\u771F\u7684\u6709\u6743\u5229\u8BBF\u95EEOLAT\uFF1F\u5982\u679C\u771F\u662F\u8FD9\u6837\u7684\u8BDD\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\u3002 diff --git a/src/main/java/org/olat/shibboleth/_i18n/i18nBundleMetadata.properties b/src/main/java/org/olat/shibboleth/_i18n/i18nBundleMetadata.properties index b375df7451a788def6d5aebaad5e12d3943226ea..902f3d0f4967ae8039df16b2085bba68c9006acd 100644 --- a/src/main/java/org/olat/shibboleth/_i18n/i18nBundleMetadata.properties +++ b/src/main/java/org/olat/shibboleth/_i18n/i18nBundleMetadata.properties @@ -1,7 +1,6 @@ #Sun Jan 23 15:36:16 CET 2011 authentication.provider.description.annotation=\u8FD9\u4E2A\u53EF\u4EE5\u6839\u636E\u7528\u6237\u7684\u5355\u4F4D\u548C\u90E8\u95E8\u8FDB\u884C\u91CD\u65B0\u7FFB\u8BD1\uFF01\u4F8B\u5982\uFF1A\u60A8\u662F\u767E\u5EA6\u7684\u5206\u652F\u673A\u6784\u561B\uFF1F bundle.priority=650 -error.insufficieant.attributes.annotation=\u6839\u636E\u5B9E\u9645\u60C5\u51B5\u4ECE\u65B0\u5B9A\u4E49\uFF0C\u8FD9\u91CC\u672A\u505A\u4EFB\u4F55\u4FEE\u6539 swissEduPersonHomeOrganizationType.uas.annotation=ENG Translation should be \: College (???) \r\n\=> No. swissEduPersonStaffCategory.101.annotation=Check spelling swissEduPersonStaffCategory.102.annotation=Check spelling diff --git a/src/main/java/org/olat/shibboleth/manager/ShibbolethAttributes.java b/src/main/java/org/olat/shibboleth/manager/ShibbolethAttributes.java index f642dfc3490c0d53f7139a5002bb6105f362cb68..ca87369ee30e1f4cd612e0856007364ba8596748 100644 --- a/src/main/java/org/olat/shibboleth/manager/ShibbolethAttributes.java +++ b/src/main/java/org/olat/shibboleth/manager/ShibbolethAttributes.java @@ -25,6 +25,7 @@ import java.util.Map.Entry; import java.util.Set; import org.olat.core.id.User; +import org.olat.core.util.StringHelper; import org.olat.shibboleth.ShibbolethModule; import org.olat.shibboleth.handler.ShibbolethAttributeHandler; import org.olat.shibboleth.handler.ShibbolethAttributeHandlerFactory; @@ -49,14 +50,15 @@ public class ShibbolethAttributes { @Autowired private ShibbolethAttributeHandlerFactory shibbolethAttributeHandlerFactory; - public void setAttributesMap(Map<String, String> attributesMap) { - this.shibbolethMap = attributesMap; - } - - public String getValueForAttributeName(String attributeName) { - String attributeValue = shibbolethMap.get(attributeName); - ShibbolethAttributeHandler handler = getAttributeHandler(attributeName); - return handler.parse(attributeValue); + public void init(Map<String, String> attributes) { + shibbolethMap = new HashMap<>(attributes.size()); + for (Entry<String, String> attribute : attributes.entrySet()) { + String attributeName = attribute.getKey(); + String attributeValue = attribute.getValue(); + ShibbolethAttributeHandler handler = getAttributeHandler(attributeName); + String parsedValue = handler.parse(attributeValue); + shibbolethMap.put(attributeName, parsedValue); + } } private ShibbolethAttributeHandler getAttributeHandler(String attributeName) { @@ -65,6 +67,17 @@ public class ShibbolethAttributes { return shibbolethAttributeHandlerFactory.getHandler(handlerName); } + public String getValueForAttributeName(String attributeName) { + return shibbolethMap.get(attributeName); + } + + public void setValueForUserPropertyName(String propertyName, String value) { + String attributeName = getShibbolethAttributeName(propertyName); + if (StringHelper.containsNonWhitespace(attributeName)) { + shibbolethMap.put(attributeName, value); + } + } + public String getValueForUserPropertyName(String propertyName) { String attributeName = getShibbolethAttributeName(propertyName); return getValueForAttributeName(attributeName); @@ -81,6 +94,10 @@ public class ShibbolethAttributes { return null; } + public Map<String, String> toMap() { + return new HashMap<>(shibbolethMap); + } + public boolean isAuthor() { try { String attributeValue = getValueForAttributeName(shibbolethModule.getAuthorMappingAttributeName()); diff --git a/src/test/java/org/olat/shibboleth/manager/ShibbolethAttributesTest.java b/src/test/java/org/olat/shibboleth/manager/ShibbolethAttributesTest.java index b93ac541b93b6a934c52df7a759f967af924874b..25d356490ef416265f91a60dc5637e24a62baa22 100644 --- a/src/test/java/org/olat/shibboleth/manager/ShibbolethAttributesTest.java +++ b/src/test/java/org/olat/shibboleth/manager/ShibbolethAttributesTest.java @@ -23,12 +23,14 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.AdditionalAnswers.returnsFirstArg; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.HashMap; import java.util.Locale; import java.util.Map; +import java.util.Set; import org.junit.Before; import org.junit.Test; @@ -77,20 +79,20 @@ public class ShibbolethAttributesTest { public void setUp() { MockitoAnnotations.initMocks(this); - Map<String, String> shibbolethUserMapping = initUserMapping(); - when(shibbolethModuleMock.getUserMapping()).thenReturn(shibbolethUserMapping); - - Map<String, String> shibbolethKeysValues = initShibbolethMap(); sut = new ShibbolethAttributes(); - sut.setAttributesMap(shibbolethKeysValues); ReflectionTestUtils.setField(sut, "shibbolethModule", shibbolethModuleMock); + Map<String, String> shibbolethUserMapping = initUserMapping(); + when(shibbolethModuleMock.getUserMapping()).thenReturn(shibbolethUserMapping); // ShibbolethAttributeHandler.parse() does not modify the value + ReflectionTestUtils.setField(sut, "shibbolethAttributeHandlerFactory", shibbolethAttributeHandlerFactoryMock); when(shibbolethAttributeHandlerFactoryMock.getHandler(anyString())).thenReturn(shibbolethAttributeHandlerMock); when(shibbolethAttributeHandlerFactoryMock.getHandler(isNull())).thenReturn(shibbolethAttributeHandlerMock); when(shibbolethAttributeHandlerMock.parse(anyString())).then(returnsFirstArg()); - ReflectionTestUtils.setField(sut, "shibbolethAttributeHandlerFactory", shibbolethAttributeHandlerFactoryMock); + + Map<String, String> shibbolethKeysValues = initShibbolethMap(); + sut.init(shibbolethKeysValues); } private Map<String, String> initShibbolethMap() { @@ -120,6 +122,48 @@ public class ShibbolethAttributesTest { return user; } + @Test + public void shouldParseValuesWhenInit() { + verify(shibbolethAttributeHandlerMock, times(3)).parse(anyString()); + verify(shibbolethAttributeHandlerMock, times(1)).parse(isNull()); + } + + @Test + public void shouldReplaceValueByUserPropertyName() { + String newValue = "newValue"; + + sut.setValueForUserPropertyName(USER_NAME_KEY, newValue); + + assertThat(sut.getValueForUserPropertyName(USER_NAME_KEY)).isEqualTo(newValue); + } + + @Test + public void shouldNotSetPropertValueWhenNoMappingExits() { + String keyNotPresent = "keyNotPresent"; + String newValue = "newValue"; + + sut.setValueForUserPropertyName(keyNotPresent, newValue); + + assertThat(sut.getValueForUserPropertyName(keyNotPresent)).isNull(); + } + + @Test + public void shouldNotParseValueWhenSet() { + sut.setValueForUserPropertyName(USER_NAME_KEY, "newValue"); + + // Only 3 times in the init(). + verify(shibbolethAttributeHandlerMock, times(3)).parse(anyString()); + } + + @Test + public void shouldReturnACopyOfTheInternalMap() { + Map<String, String> copiedttributes = sut.toMap(); + + Map<String, String> initMap = initShibbolethMap(); + Set<String> initKeys = initMap.keySet(); + assertThat(copiedttributes).isNotSameAs(initMap).containsKeys(initKeys.toArray(new String[initKeys.size()])); + } + @Test public void shouldReturnValueForAShibbolethAttributeName() { String shibbolethValue = sut.getValueForAttributeName(SHIB_EMAIL_KEY); @@ -136,13 +180,6 @@ public class ShibbolethAttributesTest { assertThat(shibbolethValue).isNull(); } - @Test - public void shouldReturnParsedValueForShibbolethAttributeName() { - sut.getValueForAttributeName(SHIB_EMAIL_KEY); - - verify(shibbolethAttributeHandlerMock).parse(SHIB_EMAIL_VALUE); - } - @Test public void shouldReturnValueForAUserPropertyName() { String shibbolethValue = sut.getValueForUserPropertyName(USER_EMAIL_KEY); @@ -159,13 +196,6 @@ public class ShibbolethAttributesTest { assertThat(shibbolethValue).isNull(); } - @Test - public void shouldReturnParsedValueForUserPropertyName() { - sut.getValueForAttributeName(SHIB_EMAIL_KEY); - - verify(shibbolethAttributeHandlerMock).parse(SHIB_EMAIL_VALUE); - } - @Test public void shouldReturnTrueIfManyAttributesHaveChanged() { User user = getIdenticalOlatUser();