Testing spring basic authentication.
Change-Id: I1ceb0f88523ff35f5f10f01ee19000e04bfd8e83
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/spring/BasicAuthenticationManager.java b/full/src/main/java/de/ids_mannheim/korap/authentication/spring/BasicAuthenticationManager.java
new file mode 100644
index 0000000..49ec065
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/authentication/spring/BasicAuthenticationManager.java
@@ -0,0 +1,66 @@
+package de.ids_mannheim.korap.authentication.spring;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+
+import de.ids_mannheim.korap.config.Attributes;
+import de.ids_mannheim.korap.config.KustvaktConfiguration;
+import de.ids_mannheim.korap.config.Scopes;
+import de.ids_mannheim.korap.config.TokenType;
+import de.ids_mannheim.korap.dao.UserDao;
+import de.ids_mannheim.korap.interfaces.EncryptionIface;
+import de.ids_mannheim.korap.user.KorAPUser;
+import de.ids_mannheim.korap.user.TokenContext;
+import de.ids_mannheim.korap.user.User;
+import de.ids_mannheim.korap.utils.TimeUtils;
+
+/** * Basic authentication manager is intended to be used with a database.
+ * It is currently only used for testing using a dummy DAO (@see {@link UserDao})
+ * without passwords.
+ *
+ * @author margaretha
+ *
+ */
+public class BasicAuthenticationManager implements AuthenticationManager{
+
+ @Autowired
+ private KustvaktConfiguration config;
+ @Autowired
+ private EncryptionIface crypto;
+ @Autowired
+ private UserDao dao;
+
+ @Override
+ public Authentication authenticate (Authentication authentication)
+ throws AuthenticationException {
+
+ String username = (String) authentication.getPrincipal();
+ String password = (String) authentication.getCredentials();
+
+ TokenContext c = new TokenContext();
+ User user = dao.getAccount(username);
+ if (user instanceof KorAPUser
+ && ((KorAPUser) user).getPassword() != null) {
+ boolean check = crypto.checkHash(password,
+ ((KorAPUser) user).getPassword());
+
+ if (!check) return null;
+ }
+
+ c.setUsername(username);
+ c.setExpirationTime(TimeUtils.plusSeconds(this.config.getTokenTTL())
+ .getMillis());
+ c.setTokenType(TokenType.BASIC);
+ // todo: for production mode, set true
+ c.setSecureRequired(false);
+ // EM: is this secure?
+ c.setToken(authentication.toString());
+ c.addContextParameter(Attributes.SCOPES,
+ Scopes.Scope.search.toString());
+
+ return authentication;
+ }
+
+}