r1733 - in trunk: wao-persistence/src/main/java/fr/ifremer/wao/entity wao-persistence/src/main/xmi wao-services/src/main/java/fr/ifremer/wao/services wao-services/src/main/java/fr/ifremer/wao/services/service/administration wao-web/src/main/java/fr/ifremer/wao/web wao-web/src/main/java/fr/ifremer/wao/web/action wao-web/src/main/java/fr/ifremer/wao/web/action/authentication wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer wao-web/src/main/resources wao-web/src/main/resources/i18n wao-web/
Author: bleny Date: 2014-03-20 17:53:39 +0100 (Thu, 20 Mar 2014) New Revision: 1733 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1733 Log: fixes #4496 user login and logout Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/InactiveWaoUserException.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/NoRoleAttributedException.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WrongCredentialsException.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/IndexAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/authentication/LogoutAction.java Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ObsProgram.java trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/UserRole.java trunk/wao-persistence/src/main/xmi/wao-model.zargo trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoInterceptor.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/authentication/LoginAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SamplingPlanAction.java trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties trunk/wao-web/src/main/resources/struts.xml trunk/wao-web/src/main/webapp/WEB-INF/content/authentication/login.jsp trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout-login.jsp trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp trunk/wao-web/src/main/webapp/css/wao.css Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ObsProgram.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ObsProgram.java 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ObsProgram.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -62,4 +62,7 @@ return OBSDEB == this; } + public String getI18nKey() { + return i18nKey; + } } Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -20,22 +20,10 @@ */ package fr.ifremer.wao.entity; -import java.util.UUID; +import com.google.common.base.Objects; public class UserProfileImpl extends UserProfileAbstract { - public UserProfileImpl() { - String newToken = UUID.randomUUID().toString(); - setToken(newToken); - } - - public UserProfileImpl(ObsProgram obsProgram, UserRole userRole, boolean canWrite) { - this(); - setObsProgram(obsProgram); - setUserRole(userRole); - setCanWrite(canWrite); - } - @Override public UserRole getUserRole() { return UserRole.valueOf(getUserRoleOrdinal()); @@ -105,36 +93,11 @@ return getObsProgram() == ObsProgram.OBSVENTE; } - @Override - public String getDescription() { - String role; - if (getUserRoleOrdinal() == null) { - role = "<no user role>"; - } else { - role = getUserRole().getTranslation(); - } - String program; - if (getObsProgramOrdinal() == null) { - program = "<no program>"; - } else { - program = getObsProgram().toString(); - } - String readOnly = ""; - if (getCanWrite() == null) { - program = "<no write access specified>"; - } else if (isReadOnly()) { - // readOnly = WaoUtils._("wao.business.readOnly"); - throw new UnsupportedOperationException(); - } - -// String result = WaoUtils._("wao.business.entity.UserProfile.description", -// role, program, readOnly); - throw new UnsupportedOperationException(); - -// return result; - } - public String toString() { - return getDescription() + " " + getTopiaId(); + String toString = Objects.toStringHelper(this) + .add("obsProgram", getObsProgram()) + .add("userRole", getUserRole()) + .add("readOnly", isReadOnly()).toString(); + return toString; } } \ No newline at end of file Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/UserRole.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/UserRole.java 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/UserRole.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -66,13 +66,8 @@ throw new IllegalArgumentException("ordinal " + userRoleOrdinal); } - // bleny 2011-01-26 calling this method toString make UI unstable. - // In Administration form, when choosing a role, changing the form value lead to - // an Enum.valueOf exception. It seems that Tapestry use toString() - // instead of name() to know witch value is chosen - public String getTranslation() { - throw new UnsupportedOperationException(); - // return WaoUtils.t(i18nKey); + public String getI18nKey() { + return i18nKey; } /** for a given program, return the roles that can be assigned by someone Modified: trunk/wao-persistence/src/main/xmi/wao-model.zargo =================================================================== (Binary files differ) Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -44,7 +44,7 @@ } public void logout() { - getCurrentUser().logout(); + // TODO brendan 20/03/14 getCurrentUser().logout(); } public boolean isAdmin() { Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/InactiveWaoUserException.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/InactiveWaoUserException.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/InactiveWaoUserException.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -0,0 +1,17 @@ +package fr.ifremer.wao.services.service.administration; + +import fr.ifremer.wao.WaoException; +import fr.ifremer.wao.entity.WaoUser; + +public class InactiveWaoUserException extends WaoException { + + protected WaoUser waoUser; + + public InactiveWaoUserException(WaoUser waoUser) { + this.waoUser = waoUser; + } + + public WaoUser getWaoUser() { + return waoUser; + } +} Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/NoRoleAttributedException.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/NoRoleAttributedException.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/NoRoleAttributedException.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -0,0 +1,17 @@ +package fr.ifremer.wao.services.service.administration; + +import fr.ifremer.wao.WaoException; +import fr.ifremer.wao.entity.WaoUser; + +public class NoRoleAttributedException extends WaoException { + + protected WaoUser waoUser; + + public NoRoleAttributedException(WaoUser waoUser) { + this.waoUser = waoUser; + } + + public WaoUser getWaoUser() { + return waoUser; + } +} Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -18,6 +18,8 @@ import fr.ifremer.wao.services.service.mail.UserCredentialsEmail; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaEntities; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaQueryBuilderAddCriteriaOrRunQueryStep; @@ -28,6 +30,8 @@ public class WaoUsersService extends WaoServiceSupport { + private static final Log log = LogFactory.getLog(WaoUsersService.class); + public List<WaoUser> getWaoUsers(Optional<String> optionalCompanyId) { WaoUserTopiaDao dao = getWaoUserDao(); @@ -207,4 +211,53 @@ } + public WaoUser authenticate(String login, String clearPassword) + throws WrongCredentialsException, NoRoleAttributedException, InactiveWaoUserException { + + WaoUserTopiaDao dao = getWaoUserDao(); + + Optional<WaoUser> optionalWaoUser = dao.forLoginEquals(login).tryFindUnique(); + + WaoUser waoUser; + + if ( ! optionalWaoUser.isPresent()) { + if (log.isInfoEnabled()) { + log.info("no such user " + login); + } + throw new WrongCredentialsException(); + } + + waoUser = optionalWaoUser.get(); + String hashedPassword = StringUtil.encodeMD5(clearPassword); + + if ( ! waoUser.getPassword().equals(hashedPassword)) { + if (log.isWarnEnabled()) { + log.warn("wrong credentials provided for " + login); + } + throw new WrongCredentialsException(); + } + + if ( ! waoUser.isActive()) { + throw new InactiveWaoUserException(waoUser); + } + + if (waoUser.isUserProfileEmpty()) { + throw new NoRoleAttributedException(waoUser); + } + + waoUser.sizeUserProfile(); + waoUser.sizeCanReadBoats(); + waoUser.getCompany().getTopiaId(); + + return waoUser; + + } + + public void acceptCgu(WaoUser waoUser) { + + waoUser.setCguAccepted(serviceContext.getNow()); + + commit(); + + } } Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WrongCredentialsException.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WrongCredentialsException.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WrongCredentialsException.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -0,0 +1,7 @@ +package fr.ifremer.wao.services.service.administration; + +import fr.ifremer.wao.WaoException; + +public class WrongCredentialsException extends WaoException { + +} Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoInterceptor.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoInterceptor.java 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoInterceptor.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -1,6 +1,7 @@ package fr.ifremer.wao.web; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableSet; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; import fr.ifremer.wao.WaoApplicationConfig; @@ -13,6 +14,7 @@ import fr.ifremer.wao.services.AuthenticatedWaoUser; import fr.ifremer.wao.services.WaoService; import fr.ifremer.wao.services.WaoServiceContext; +import fr.ifremer.wao.web.action.authentication.LoginAction; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -26,6 +28,9 @@ private static final Log log = LogFactory.getLog(WaoInterceptor.class); + protected static final ImmutableSet<Class<LoginAction>> ACTIONS_ACCESSIBLE_WITHOUT_LOGIN = + ImmutableSet.of(LoginAction.class); + public static final String SESSION_LAST_LOCATION = "lastLocation"; @Override @@ -53,17 +58,26 @@ WaoSession waoSession = getWaoSession(invocation); if (waoSession.getAuthenticatedWaoUser() == null) { - // login à l'arrache - WaoUser admin = serviceContext.getPersistenceContext().getWaoUserDao().forLoginEquals("admin").findUnique(); - admin.sizeUserProfile(); - admin.sizeCanReadBoats(); - admin.getCompany().getTopiaId(); - UserProfile userProfile = new UserProfileImpl(); - userProfile.setUserRole(UserRole.ADMIN); - userProfile.setObsProgram(ObsProgram.OBSMER); - userProfile.setCanWrite(true); - AuthenticatedWaoUser authenticatedWaoUser = new AuthenticatedWaoUser(admin, userProfile); - waoSession.setAuthenticatedWaoUser(authenticatedWaoUser); + + boolean loginCheat = false; + if (loginCheat) { + // login à l'arrache + WaoUser admin = serviceContext.getPersistenceContext().getWaoUserDao().forLoginEquals("admin").findUnique(); + admin.sizeUserProfile(); + admin.sizeCanReadBoats(); + admin.getCompany().getTopiaId(); + UserProfile userProfile = new UserProfileImpl(); + userProfile.setUserRole(UserRole.ADMIN); + userProfile.setObsProgram(ObsProgram.OBSMER); + userProfile.setCanWrite(true); + AuthenticatedWaoUser authenticatedWaoUser = new AuthenticatedWaoUser(admin, userProfile); + waoSession.setAuthenticatedWaoUser(authenticatedWaoUser); + } else { + if ( ! ACTIONS_ACCESSIBLE_WITHOUT_LOGIN.contains(waoAction.getClass())) { + return "redirect-to-login"; + } + } + } if (CollectionUtils.isNotEmpty(waoSession.getMessages())) { Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/IndexAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/IndexAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/IndexAction.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -0,0 +1,31 @@ +package fr.ifremer.wao.web.action; + +import fr.ifremer.wao.entity.ObsProgram; +import fr.ifremer.wao.web.WaoJspActionSupport; +import org.apache.struts2.convention.annotation.Result; +import org.apache.struts2.convention.annotation.Results; + +@Results({ + @Result(name="error", type="redirectAction", params = { "namespace", "/authentication", "actionName", "login!input" }), + @Result(name="success", type="redirectAction", params = { "namespace", "/${obsProgram.name().toLowerCase()}", "actionName", "news" }) +}) +public class IndexAction extends WaoJspActionSupport { + + protected ObsProgram obsProgram; + + @Override + public String execute() { + + if (getSession().getAuthenticatedWaoUser() == null) { + return ERROR; + } else { + obsProgram = getSession().getAuthenticatedWaoUser().getObsProgram(); + return SUCCESS; + } + + } + + public ObsProgram getObsProgram() { + return obsProgram; + } +} Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/authentication/LoginAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/authentication/LoginAction.java 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/authentication/LoginAction.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -1,12 +1,157 @@ package fr.ifremer.wao.web.action.authentication; +import com.google.common.collect.Iterables; +import fr.ifremer.wao.entity.ObsProgram; +import fr.ifremer.wao.entity.UserProfile; +import fr.ifremer.wao.entity.WaoUser; +import fr.ifremer.wao.services.AuthenticatedWaoUser; +import fr.ifremer.wao.services.service.administration.InactiveWaoUserException; +import fr.ifremer.wao.services.service.administration.NoRoleAttributedException; +import fr.ifremer.wao.services.service.administration.WaoUsersService; +import fr.ifremer.wao.services.service.administration.WrongCredentialsException; import fr.ifremer.wao.web.WaoJspActionSupport; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.struts2.convention.annotation.Result; +import org.apache.struts2.convention.annotation.Results; +import java.util.HashMap; +import java.util.Map; + +@Results({ + @Result(name="success", type="redirectAction", params = { "namespace", "/${obsProgram.name().toLowerCase()}", "actionName", "news" }) +}) public class LoginAction extends WaoJspActionSupport { + protected WaoUsersService service; + + protected String login; + + protected String password; + + protected String userProfileId; + + protected boolean userProfileAsked; + + protected Map<String, String> userProfiles; + + protected boolean acceptCguAsked; + + protected boolean cguAccepted; + + protected ObsProgram obsProgram; + + protected WaoUser waoUser; + + public void setLogin(String login) { + this.login = login; + } + + public void setPassword(String password) { + this.password = password; + } + + public void setService(WaoUsersService service) { + this.service = service; + } + + public void setUserProfileId(String userProfileId) { + this.userProfileId = userProfileId; + } + + public void setCguAccepted(boolean cguAccepted) { + this.cguAccepted = cguAccepted; + } + @Override + public void validate() { + + try { + + waoUser = service.authenticate(login, password); + + if (cguAccepted) { + service.acceptCgu(waoUser); + } + + if (waoUser.getCguAccepted() == null) { + acceptCguAsked = true; + addFieldError("cguAccepted", t("wao.ui.form.authentication.error.userMustAcceptCgu")); + } + + if (waoUser.getUserProfile().size() == 1) { + userProfileId = Iterables.getOnlyElement(waoUser.getUserProfile()).getTopiaId(); + } else { + userProfileAsked = true; + userProfiles = new HashMap<>(); + for (UserProfile userProfile : waoUser.getUserProfile()) { + String label = t(userProfile.getUserRole().getI18nKey()); + label += " " + t(userProfile.getObsProgram().getI18nKey()); + if (BooleanUtils.isTrue(userProfile.isReadOnly())) { + label += " (" + t("wao.ui.form.readOnly") + ")"; + } + userProfiles.put(userProfile.getTopiaId(), label); + } + } + + } catch (WrongCredentialsException e) { + addFieldError("login", t("wao.ui.form.authentication.error.wrongCredentials")); + } catch (NoRoleAttributedException e) { + addFieldError("login", t("wao.ui.form.authentication.error.noRoleAttributed")); + } catch (InactiveWaoUserException e) { + addFieldError("login", t("wao.ui.form.authentication.error.inactiveWaoUser")); + } + + } + + @Override public String execute() { + + if (StringUtils.isNotBlank(userProfileId)) { + + UserProfile userProfile = waoUser.getUserProfileByTopiaId(userProfileId); + AuthenticatedWaoUser authenticatedWaoUser = new AuthenticatedWaoUser(waoUser, userProfile); + session.setAuthenticatedWaoUser(authenticatedWaoUser); + + obsProgram = userProfile.getObsProgram(); + + return SUCCESS; + + } + return INPUT; + } + public String getPassword() { + return password; + } + + public String getLogin() { + return login; + } + + public String getUserProfileId() { + return userProfileId; + } + + public boolean isUserProfileAsked() { + return userProfileAsked; + } + + public ObsProgram getObsProgram() { + return obsProgram; + } + + public boolean isAcceptCguAsked() { + return acceptCguAsked; + } + + public boolean isCguAccepted() { + return cguAccepted; + } + + public Map<String, String> getUserProfiles() { + return userProfiles; + } } Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/authentication/LogoutAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/authentication/LogoutAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/authentication/LogoutAction.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -0,0 +1,20 @@ +package fr.ifremer.wao.web.action.authentication; + +import fr.ifremer.wao.web.WaoJspActionSupport; +import org.apache.struts2.convention.annotation.Result; +import org.apache.struts2.convention.annotation.Results; + +@Results({ + @Result(name="success", type="redirectAction", params = { "actionName", "login!input" }) +}) +public class LogoutAction extends WaoJspActionSupport { + + @Override + public String execute() { + + session.logout(); + + return SUCCESS; + + } +} Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SamplingPlanAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SamplingPlanAction.java 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SamplingPlanAction.java 2014-03-20 16:53:39 UTC (rev 1733) @@ -22,9 +22,6 @@ SampleRowsFilter filter = service.newSampleRowsFilter(getAuthenticatedWaoUser()); - filter.setPeriodFrom(null); - filter.setPeriodTo(null); - samplingPlan = service.getSamplingPlan(filter); return SUCCESS; Modified: trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-03-20 16:53:39 UTC (rev 1733) @@ -234,6 +234,14 @@ wao.ui.form.addComment=Add a comment wao.ui.form.addComment.success=Comment saved wao.ui.form.addRole=Add this ru00F4le +wao.ui.form.authentication.acceptCgu= +wao.ui.form.authentication.action.submit=Login +wao.ui.form.authentication.chooseUserProfile= +wao.ui.form.authentication.error.inactiveWaoUser=This wao user is not active. Please, contact an administrator +wao.ui.form.authentication.error.noRoleAttributed=This wao user has no role affected. Please, contact an administrator +wao.ui.form.authentication.error.userMustAcceptCgu=You must accept the end-user agreement +wao.ui.form.authentication.error.wrongCredentials=Incorrect credentials +wao.ui.form.authentication.title=WAO authentication wao.ui.form.boardingFrom=Boardings since wao.ui.form.contactsFile=Contacts file wao.ui.form.definePasswordManually=Define password manually Modified: trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-03-20 16:53:39 UTC (rev 1733) @@ -234,6 +234,14 @@ wao.ui.form.addComment=Ajouter un commentaire wao.ui.form.addComment.success=Commentaire enregistré wao.ui.form.addRole=Ajouter ce rôle +wao.ui.form.authentication.acceptCgu=Vous acceptez les CGU +wao.ui.form.authentication.action.submit=S'identifier +wao.ui.form.authentication.chooseUserProfile=Rôle +wao.ui.form.authentication.error.inactiveWaoUser=Ce compte est inactif, veuillez contacter un responsable +wao.ui.form.authentication.error.noRoleAttributed=Aucun rôle n'est attribué à ce compte, veuillez contacter un responsable +wao.ui.form.authentication.error.userMustAcceptCgu=Vous devez accepter les conditions générales d'utilisation +wao.ui.form.authentication.error.wrongCredentials=Les informations d'authenfication ne sont pas correctes +wao.ui.form.authentication.title=Identification WAO wao.ui.form.boardingFrom=Sollicitations du navire depuis le wao.ui.form.contactsFile=Fichier des contacts wao.ui.form.definePasswordManually=définir manuellement Modified: trunk/wao-web/src/main/resources/struts.xml =================================================================== --- trunk/wao-web/src/main/resources/struts.xml 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-web/src/main/resources/struts.xml 2014-03-20 16:53:39 UTC (rev 1733) @@ -52,6 +52,12 @@ <default-interceptor-ref name="waoStack"/> + <global-results> + <result name="redirect-to-login" type="redirect"> + /authentication/login!input + </result> + </global-results> + </package> Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/authentication/login.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/authentication/login.jsp 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/authentication/login.jsp 2014-03-20 16:53:39 UTC (rev 1733) @@ -1,28 +1,90 @@ <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<!DOCTYPE html> -<%@taglib uri="/struts-tags" prefix="s" %> -<%@taglib prefix="sj" uri="/struts-jquery-tags" %> +<%@taglib prefix="s" uri="/struts-tags" %> +<%@taglib prefix="sj" uri="/struts-jquery-tags" %> + <html> <head> - <title>Identification</title> + <title> + <s:text name="wao.ui.form.authentication.title" /> + </title> </head> <body> - <p>Veuillez entrer vos identifiants pour accéder à votre espace</p> + <h1> + <s:text name="wao.ui.form.authentication.title" /> + </h1> - <s:form action="login" namespace="/authentication" method="post" cssClass="form-horizontal"> + <s:form action="login" namespace="/authentication" method="POST" cssClass="form-horizontal"> - <s:textfield name="email" - label="Votre adresse de courrier électronique :"/> + <fieldset> - <s:password name="password" - label="Votre mot de passe :"/> + <s:textfield name="login" + label="%{getText('wao.ui.field.WaoUser.login')}" /> - <sj:a openDialog="forgottenPasswordForm" cssClass="controls">J'ai oublié mon mot de passe</sj:a> + <s:password name="password" + label="%{getText('wao.ui.field.WaoUser.password')}" /> - <s:submit value="S'identifier" type='button' cssClass="btn btn-primary"/> + <s:if test="userProfileAsked"> + <s:radio name="userProfileId" list="userProfiles" label="%{getText('wao.ui.form.authentication.chooseUserProfile')}" /> + + </s:if> + + <s:if test="acceptCguAsked"> + + <s:checkbox name="cguAccepted" label="%{getText('wao.ui.form.authentication.acceptCgu')}" /> + + </s:if> + + </fieldset> + + <s:submit type="button" cssClass="btn btn-primary"> + <s:text name="wao.ui.form.authentication.action.submit" /> + </s:submit> + </s:form> + <s:if test="acceptCguAsked"> + + <article id="cgu"> + <h2>CONDITIONS D’UTILISATION DU PORTAIL WAO (web applicatif obsmer)</h2> + <p>La base de données WAO est accessible via l’adresse internet suivante : http://www.ifremer.fr/wao/ (le « Portail »).</p> + <p>Les données et informations qui composent le Portail, quelle que soit leur forme, et notamment mais non exclusivement, les données nominatives et techniques, (ci-après communément et indistinctement désignées sous le terme « Données»), sont soumises aux présentes conditions d’utilisation.</p> + <p>Le titulaire (le « Titulaire ») du log in et du mot de passe accepte expressément et sans réserve les présentes conditions d’utilisation par le simple fait d’utiliser le log in et le mot de passe et d’accéder aux Données.</p> + <p>Le log in et le mot de passe sont strictement personnels et confidentiels. Ils ne peuvent être communiqués à un tiers sans l’accord préalable, exprès et écrit de la direction des pêches maritimes et de l’aquaculture (DPMA) et de l’Institut français de recherche pour l’exploitation de la mer (IFREMER). Sauf accord préalable et exprès de la DPMA et de l’IFREMER, seul le Titulaire est fondé à accéder aux Données, à l’exclusion de toute autre personne..</p> + <h3>ARTICLE 1 – PROPRIETE DES DONNEES</h3> + <p>Les Données sont la propriété exclusive de la DPMA et de l’IFREMER.</p> + <p>La divulgation des Données au Titulaire ne saurait, en aucun cas, être interprétée comme lui conférant, de manière expresse ou implicite un droit quelconque sur ces Donnéesappartenant conjointement à la DPMA et/ou à l’IFREMER.</p> + <h3>ARTICLE 2 – CONDITION D’UTILISATION DES DONNEES</h3> + <p>Les Données ne pourront être consultées et utilisées que dans le cadre du programme Obsmer (le « Programme Obsmer ») et dans les strictes limites suivantes :</p> + <p>Appui des observateurs des bureaux d’études mandatés par le MAAPRAT auprès des professionnels susceptibles d’embarquer un observateur scientifique</p> + <p>Appui auprès des professionnels pour la mise en conformité vis-à-vis des obligations administratives nécessaires pour l’embarquement d’un observateur scientifique (note de service DPMA/DAM 2307 du 20 octobre 2008)</p> + <p>Les Données consultables par le Titulaire sont strictement dédiées au Programme Obsmer de sorte qu’en dehors de la DPMA, de l’IFREMER, des bureaux d’étude en charge de la réalisation du Programme Obsmer et du Titulaire, aucune autre personne n’a accès aux Données.</p> + <p>Par conséquent, en cas de constat d’une utilisation des Données dans un domaine autre que le Programme Obsmer, la DPMA et l’IFREMER se réservent le droit de suspendre, sans formalité préalable, le log in et le mot de passe du Titulaire.</p> + <p>Cette suspension est non exclusive d’éventuelles actions destinées à réparer le préjudice subi par la DPMA et l’IFREMER.</p> + <p>Les Parties conviennent d’ores et déjà qu’en cas de contestation ou de litige, les données de connexion feront foi.</p> + <h3>ARTICLE 3 - INTERDICTION D’EXTRACTION OU DE DUPPLICATION DES DONNEES EN DEHORS DU PROGRAMME OBSMER</h3> + <p>Sauf dans le cadre du Programme Obsmer et dans les conditions de l’article 2 des présentes conditions d’utilisation des Données, le Titulaire ne pourra en aucun cas procéder à une extraction ou duplication des Données sans autorisation écrite et préalable de la DPMA et de l’IFREMER.</p> + <p>Le Titulaire s’interdit également de communiquer, revendre tout ou partie des Données auxquelles il a accès via le Portail.</p> + <p>A ce titre, le Titulaire ne procédera pas, notamment, à des copier / coller et / ou toute autre action ayant pour effet de permettre l’extraction ou la duplication de tout ou partie des Données.</p> + <h3>ARTICLE 4 – PERTE DU LOG IN ET DU MOT DE PASSE</h3> + <p>En cas de perte du log in et / ou du mot de passe, le Titulaire s’engage à prévenir la DPMA et l’IFREMER dans les plus brefs délais afin que ceux-ci soient désactivés. Il sera attribué au Titulaire un nouveau log in et un nouveau mot de passe.</p> + <h3>ARTICLE 5 - INFORMATIQUES ET LIBERTES</h3> + <p>Certaines des Données sont des données à caractère personnel ayant fait l’objet d’une déclaration auprès de la Commission National Informatique et Libertés.</p> + <p>Le Titulaire consulte et utilise les Données dans le respect de la loi n°78-17 du 6 janvier 1978 modifiée dite loi Informatique et Libertés.</p> + <h3>ARTICLE 6 - CONFIDENTIALITE</h3> + <p>Le Titulaire gardera confidentiel les Données qu’il consultera.</p> + <p>Le Titulaire traitera les Données avec le même degré de précaution et de protection que celui qu’il accorde à ses propres informations confidentielles de même importance.</p> + <p>Le Titulaire conservera de manière confidentielle, pour une durée de trente (30) ans à compter de la dernière consultation du Portail, les Données disponibles depuis la base de données WAO et s'abstiendra de les divulguer sauf à des employés ou à des préposés responsables qui, astreints au secret professionnel, en auront besoin pour l’accomplissement de leur mission au titre du Programme Obsmer.</p> + <p>Le Titulaire informera par écrit la DPMA et l’IFREMER de toute perte de document ou d’objet contenant des Données.</p> + <p>La DPMA et l’IFREMER pourront exiger, à tout moment et sous quelque forme que ce soit, que tous les documents portant des Données soient impérativement restitués ou détruits par le Titulaire.</p> + <h3>ARTICLE 7 - LIMITATION DE RESPONSABILITE</h3> + <p>La DPMA et l’IFREMER ne garantissent en rien que les Données seront exempts d’erreurs. Par conséquent, la DPMA et l’IFREMER déclinent toute responsabilité quant à l’utilisation qui en est faite et qui s’effectue sous la seule, pleine et entière responsabilité du Titulaire.</p> + <p>Par conséquent, le Titulaire ne pourra en aucun cas mettre en cause la responsabilité de la DPMA et de l’IFREMER en raison d’un préjudice subi par le Titulaire du fait de l’utilisation des Données, quel qu’il soit et quel qu’en soit la cause, que le préjudice ait été prévisible ou non.</p> + <p>En outre, la DPMA et l’IFREMER déclinent toute responsabilité sur l’utilisation du site internet et ne garantissent en rien que le site soit exempt de virus, bugs…</p> + </article> + + </s:if> + </body> </html> Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp 2014-03-20 16:53:39 UTC (rev 1733) @@ -18,6 +18,13 @@ <i class="icon-download"></i> <s:text name="wao.ui.action.csvExport" /> </s:a> + <s:if test="authenticatedWaoUser.authorizedToEditSamplingPlan"> + <s:url action="edit-sample-row!input" id="createSampleRow" /> + <s:a href="%{createSampleRow}" cssClass="btn"> + <i class="icon-plus"></i> <s:text name="wao.ui.action.createSampleRow" /> + </s:a> + </s:if> + <table class="large-table table-hover"> <thead> <th> @@ -102,11 +109,4 @@ </tfoot> </table> - <s:if test="authenticatedWaoUser.authorizedToEditSamplingPlan"> - <s:url action="edit-sample-row!input" id="createSampleRow" /> - <s:a href="%{createSampleRow}"> - <i class="icon-plus"></i> <s:text name="wao.ui.action.createSampleRow" /> - </s:a> - </s:if> - </html> Modified: trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout-login.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout-login.jsp 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout-login.jsp 2014-03-20 16:53:39 UTC (rev 1733) @@ -21,66 +21,12 @@ <body> - <content> + <main> <s:actionerror theme="bootstrap" /> <s:actionmessage theme="bootstrap" /> <s:fielderror theme="bootstrap" /> <decorator:body /> - </content> + </main> - <footer class="hidden-print<s:if test="%{instanceDisclaimer != null}"> disclaimer-displayed</s:if>" > - <ul> - <li> - <a href="http://maven-site.forge.codelutin.com/wao/" target="_blank"> - WAO - </a> - </li> - <li> - <a href="http://forge.codelutin.com/projects/wao/news" target="_blank"> - <%@include file="version.jsp" %> - </a> - </li> - <t:if test="connectedUser.obsMer"> - <li> - <a href="mailto:harmonie@ifremer.fr" title="Contacter un responsable Obsmer"> - Obsmer - </a> - </li> - </t:if> - <li> - <a href="http://sih.ifremer.fr/" title="Page d'accueil du SIH" target="_blank"> - Ifremer SIH - </a> - </li> - <li> - <a href="http://www.gnu.org/licenses/agpl.html" title="License AGPL v3" target="_blank"> - AGPLv3 - </a> - </li> - <li> - Copyright 2009-${currentYear} - <a href="http://www.ifremer.fr" title="Ifremer" target="_blank"> - Ifremer - </a>, - <a href="http://www.codelutin.com" title="Code Lutin" target="_blank"> - Code Lutin - </a> - </li> - </ul> - <s:if test="obsMer"> - <p class="cnil"> - ${message:wao.ui.disclaimer} - </p> - </s:if> - </footer> - - <s:if test="%{instanceDisclaimer != null}"> - <div id="instance-disclaimer"> - <div> - <s:property value="instanceDisclaimer" /> - </div> - </div> - </s:if> - </body> </html> Modified: trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2014-03-20 16:53:39 UTC (rev 1733) @@ -132,7 +132,10 @@ </s:a> </li> <li> - <a href="#"><i class="icon-off"></i> <s:text name="wao.ui.action.logout" /></a> + <s:url namespace="/authentication" action="logout" id="logoutUrl" /> + <s:a href="%{logoutUrl}"> + <i class="icon-off"></i> <s:text name="wao.ui.action.logout" /> + </s:a> </li> </ul> </li> Modified: trunk/wao-web/src/main/webapp/css/wao.css =================================================================== --- trunk/wao-web/src/main/webapp/css/wao.css 2014-03-20 10:21:05 UTC (rev 1732) +++ trunk/wao-web/src/main/webapp/css/wao.css 2014-03-20 16:53:39 UTC (rev 1733) @@ -74,7 +74,7 @@ list-style-type: none; } -.large-table tr:hover { +.large-table tbody tr:hover { background-color: #f5f5f5; } @@ -98,3 +98,15 @@ text-align: right; } +form#login button[type="submit"] { + margin-left: 180px; +} + +#cgu { + overflow-y: auto; + max-height: 300px; + padding: 5px; + border: solid 5px #f2f2f2; + margin-bottom: 20px; +} +
participants (1)
-
bleny@users.forge.codelutin.com