r1354 - trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services
Author: bpoussin Date: 2012-01-24 11:39:11 +0100 (Tue, 24 Jan 2012) New Revision: 1354 Url: http://nuiton.org/repositories/revision/wikitty/1354 Log: Evolution #1916: Split WikittyServiceSecurity in two service Authentication and Authorization - remove login/logout method from WikittyServiceAuthorization this methods are now in WikittyServiceAuthentication Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java 2012-01-23 18:51:14 UTC (rev 1353) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java 2012-01-24 10:39:11 UTC (rev 1354) @@ -27,13 +27,10 @@ import static org.nuiton.i18n.I18n._; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.Date; import java.util.List; import java.util.Set; -import java.util.UUID; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; @@ -47,19 +44,22 @@ import org.nuiton.wikitty.entities.WikittyExtension; import org.nuiton.wikitty.entities.WikittyGroup; import org.nuiton.wikitty.entities.WikittyGroupHelper; -import org.nuiton.wikitty.entities.WikittyImpl; import org.nuiton.wikitty.entities.WikittyMetaExtensionUtil; import org.nuiton.wikitty.WikittyService; import org.nuiton.wikitty.entities.WikittyTokenHelper; import org.nuiton.wikitty.entities.WikittyTreeNode; -import org.nuiton.wikitty.entities.WikittyUser; -import org.nuiton.wikitty.entities.WikittyUserHelper; import org.nuiton.wikitty.WikittyUtil; import org.nuiton.wikitty.query.WikittyQuery; import org.nuiton.wikitty.query.WikittyQueryMaker; /** + * Cette classe gere les autorisations d'acces en utilisant les + * WikittyAuthorization, il faut donc que la personne soit loggue et donc + * qu'il y ait un WikittyServiceAuthentication dans la pile des services, le + * plus souvent avant le WikittyServiceAuthorization pour que la methode de + * login ne but pas sur les autorisations. * + * * FIXME add security policy level two on wikittyAuthorisation to prevent writing * * @author poussin @@ -79,10 +79,6 @@ /** cache de l'id du groupe AppAdmin */ transient protected String appAdminGroupId = null; - /** si non null alors un mecanisme d'authentification externe est utilise */ - protected WikittyServiceSecurityExternalAuthentication auth; - protected boolean externalAuthOnly = false; - /** * * @param config @@ -90,17 +86,13 @@ * @param auth si non null alors un mecanisme d'authentification externe est * utilise */ - public WikittyServiceAuthorization(ApplicationConfig config, WikittyService ws, - WikittyServiceSecurityExternalAuthentication auth) { + public WikittyServiceAuthorization(ApplicationConfig config, WikittyService ws) { super(ws); - this.auth = auth; if (config != null) { - externalAuthOnly = config.getOptionAsBoolean(WikittyConfigOption. - WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_ONLY.getKey()); long timeToLogInfo = config.getOptionAsInt(WikittyConfigOption. - WIKITTY_SECURITY_TIME_TO_LOG_INFO.getKey()); + WIKITTY_SERVICE_TIME_TO_LOG_INFO.getKey()); long timeToLogWarn = config.getOptionAsInt(WikittyConfigOption. - WIKITTY_SECURITY_TIME_TO_LOG_WARN.getKey()); + WIKITTY_SERVICE_TIME_TO_LOG_WARN.getKey()); timeLog.setTimeToLogInfo(timeToLogInfo); timeLog.setTimeToLogWarn(timeToLogWarn); } @@ -117,91 +109,6 @@ } @Override - public String login(String login, String password) { - long start = TimeLog.getTime(); - - Wikitty user = null; - String tokenId; - - WikittyQuery criteria = new WikittyQueryMaker() - .eq(WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).end(); - String userId = getDelegate().findByQuery(null, - Collections.singletonList(criteria)).get(0); - - boolean authenticated = false; - if (auth != null) { - // on a un moyen externe d'authentification, on l'utilise en 1er - authenticated = auth.login(login, password); - if (authenticated) { - log.info(String.format( - "External authentication success for account '%s'", login)); - // authentification reussi - // si l'utilisateur n'existe pas encore on le cree - if (userId == null) { - user = new WikittyImpl(); - WikittyUserHelper.addExtension(user); - WikittyUserHelper.setLogin(user, login); - // on met un mot de passe genere car l'authentification - // est faite par un moyen externe. Si pour une raison - // celui-ci n'est pas active, il ne faut pas que l'utilisateur - // puisse se loguer avec une mot de passe reel (trouvable facilement) - String generatedPassword = "external-" + UUID.randomUUID(); - WikittyUserHelper.setPassword(user, generatedPassword); - getDelegate().store(null, Collections.singletonList(user), false); - log.info(String.format( - "Automatic user creation for account '%s'", login)); - } else { - // sinon on le charge - user = WikittyServiceEnhanced.restore( - getDelegate(), null, userId); - } - } - } - - // si pas authentification externe ou l'authentification n'a pas reussi - // c'est peut-etre un utilisateur local, et qu'on authorise l'authentification - // local - if (!authenticated && !externalAuthOnly) { - if (userId == null) { - log.info(String.format("no such account '%s'", login)); - } else { - user = WikittyServiceEnhanced.restore( - getDelegate(), null, userId); - // check password is valid - authenticated = WikittyUserHelper.getPassword(user).equals(password); - } - } - - if (authenticated) { - tokenId = WikittyUtil.genSecurityTokenId(); - Wikitty wikittyToken = new WikittyImpl(tokenId); - // force add extension to wikitty - WikittyTokenHelper.addExtension(wikittyToken); - WikittyTokenHelper.setUser(wikittyToken, user.getId()); - WikittyTokenHelper.setDate(wikittyToken, new Date()); - getDelegate().store(null, Arrays.asList(wikittyToken), false); - if (log.isDebugEnabled()) { - log.debug(String.format("token '%s' is for login '%s'", - tokenId, login)); - } - } else { - throw new SecurityException("bad login or password"); - } - - timeLog.log(start, "login"); - return tokenId; - } - - @Override - public void logout(String securityToken) { - long start = TimeLog.getTime(); - if (securityToken != null) { - getDelegate().delete(securityToken, Arrays.asList(securityToken)); - } - timeLog.log(start, "logout"); - } - - @Override public WikittyEvent clear(String securityToken) { String userId = getUserId(securityToken); if (isAppAdmin(securityToken, userId)) {
participants (1)
-
bpoussin@users.nuiton.org