From 32e48e0c78d25dd017373eb33f245e9d666bdadc Mon Sep 17 00:00:00 2001 From: uhensler <none@none> Date: Wed, 9 Aug 2017 11:59:34 +0200 Subject: [PATCH] OO-2947: simplify the handling of Shibboleth attributes --- .../olat/shibboleth/ShibbolethDispatcher.java | 56 ++------ .../olat/shibboleth/ShibbolethException.java | 13 +- .../ShibbolethRegistrationController.java | 26 ++-- .../_i18n/LocalStrings_ar.properties | 1 - .../_i18n/LocalStrings_bg.properties | 21 ++- .../_i18n/LocalStrings_de.properties | 1 - .../_i18n/LocalStrings_el.properties | 1 - .../_i18n/LocalStrings_en.properties | 1 - .../_i18n/LocalStrings_fr.properties | 133 +++++++++--------- .../_i18n/LocalStrings_it.properties | 5 +- .../_i18n/LocalStrings_nl_NL.properties | 1 - .../_i18n/LocalStrings_pl.properties | 1 - .../_i18n/LocalStrings_pt_BR.properties | 1 - .../_i18n/LocalStrings_zh_CN.properties | 1 - .../_i18n/i18nBundleMetadata.properties | 1 - .../manager/ShibbolethAttributes.java | 33 +++-- .../manager/ShibbolethAttributesTest.java | 70 ++++++--- 17 files changed, 181 insertions(+), 185 deletions(-) diff --git a/src/main/java/org/olat/shibboleth/ShibbolethDispatcher.java b/src/main/java/org/olat/shibboleth/ShibbolethDispatcher.java index b0b321506c1..2297062cf8c 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 8f65951b474..3a1afa418b1 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 d18450030f9..a713782c159 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 6576fea6eda..8f36a2361a9 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 071ec0e196b..21d7ec4d5af 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 dad681695e4..47a19cff420 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 566e9d7d749..f5efbb43255 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 424077a4a7e..6b2da53cfd7 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 5e0cb75ccb1..75c0b0b6a5e 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 7dfdacfe2f3..33726d5cf20 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 4787e477667..e4a59fe5d43 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 8cfd54fb20e..a09227ca8e0 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 ac627368306..78d01733daf 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 1034f657341..c26040d907c 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 b375df7451a..902f3d0f496 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 f642dfc3490..ca87369ee30 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 b93ac541b93..25d356490ef 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(); -- GitLab