blob: c3538841036701647b4c9a52be047e0d65394438 [file] [log] [blame]
margaretha139d0f72017-11-14 18:56:22 +01001package de.ids_mannheim.korap.authentication;
Michael Hanl87106d12015-09-14 18:13:51 +02002
margarethad4796662017-11-09 16:11:40 +01003import java.util.Map;
4
margarethad4796662017-11-09 16:11:40 +01005import org.springframework.beans.factory.annotation.Autowired;
6
margaretha56e8e552017-12-05 16:31:21 +01007import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
8import de.ids_mannheim.korap.authentication.http.TransferEncoding;
margarethad4796662017-11-09 16:11:40 +01009import de.ids_mannheim.korap.config.Attributes;
margaretha6b3ecdd2018-03-01 18:23:56 +010010import de.ids_mannheim.korap.config.FullConfiguration;
Michael Hanl19390652016-01-16 11:01:24 +010011import de.ids_mannheim.korap.config.Scopes;
margaretha6b3ecdd2018-03-01 18:23:56 +010012import de.ids_mannheim.korap.config.TokenType;
margaretha58dbcfb2017-11-15 23:00:23 +010013import de.ids_mannheim.korap.dao.UserDao;
Michael Hanl87106d12015-09-14 18:13:51 +020014import de.ids_mannheim.korap.exceptions.KustvaktException;
Michael Hanlf1e85e72016-01-21 16:55:45 +010015import de.ids_mannheim.korap.exceptions.StatusCodes;
Michael Hanl87106d12015-09-14 18:13:51 +020016import de.ids_mannheim.korap.interfaces.AuthenticationIface;
Michael Hanl87106d12015-09-14 18:13:51 +020017import de.ids_mannheim.korap.user.TokenContext;
18import de.ids_mannheim.korap.user.User;
Michael Hanlcb2d3f92016-06-02 17:34:06 +020019import de.ids_mannheim.korap.utils.StringUtils;
Michael Hanlc0ed00f2016-06-23 14:33:10 +020020import de.ids_mannheim.korap.utils.TimeUtils;
Michael Hanl87106d12015-09-14 18:13:51 +020021
margaretha58dbcfb2017-11-15 23:00:23 +010022/**
23 * Implementation of encoding and decoding access token is moved to
24 * {@link TransferEncoding}. Moreover, implementation of HTTP
25 * Authentication framework, i.e. creation of authorization header,
26 * is defined in {@link HttpAuthorizationHandler}.
margaretha4de41192017-11-15 11:47:11 +010027 *
margaretha58dbcfb2017-11-15 23:00:23 +010028 * Basic authentication is intended to be used with a database. It is
margaretha2afb97d2017-12-07 19:18:44 +010029 * currently only used for testing using a dummy DAO (@see {@link UserDao})
30 * without passwords.
margaretha6b3ecdd2018-03-01 18:23:56 +010031 *
32 * <br /><br />
33 * Latest changes:
34 * <ul>
35 * <li>Added userdao check
36 * </li>
37 * </ul>
38 *
margaretha58dbcfb2017-11-15 23:00:23 +010039 *
40 * @author margaretha
margaretha6b3ecdd2018-03-01 18:23:56 +010041 * @date 01/03/2018
margaretha139d0f72017-11-14 18:56:22 +010042 *
Michael Hanl87106d12015-09-14 18:13:51 +020043 * @author hanl
44 * @date 28/04/2015
45 */
margaretha58dbcfb2017-11-15 23:00:23 +010046public class BasicAuthentication implements AuthenticationIface {
Michael Hanl87106d12015-09-14 18:13:51 +020047
margarethad4796662017-11-09 16:11:40 +010048 @Autowired
margaretha58dbcfb2017-11-15 23:00:23 +010049 private TransferEncoding transferEncoding;
50 @Autowired
margaretha6b3ecdd2018-03-01 18:23:56 +010051 private FullConfiguration config;
52// @Autowired
53// private EncryptionIface crypto;
margarethad4796662017-11-09 16:11:40 +010054 @Autowired
margaretha58dbcfb2017-11-15 23:00:23 +010055 private UserDao dao;
Michael Hanlc0ed00f2016-06-23 14:33:10 +020056
Michael Hanl87106d12015-09-14 18:13:51 +020057 @Override
margaretha58dbcfb2017-11-15 23:00:23 +010058 public TokenContext getTokenContext (String authToken)
Michael Hanl19390652016-01-16 11:01:24 +010059 throws KustvaktException {
margaretha58dbcfb2017-11-15 23:00:23 +010060 String[] values = transferEncoding.decodeBase64(authToken);
margaretha6b3ecdd2018-03-01 18:23:56 +010061 User user = dao.getAccount(values[0]);
62
63 if (user != null) {
Michael Hanl7368aa42016-02-05 18:15:47 +010064 TokenContext c = new TokenContext();
Michael Hanle25dea22015-09-24 19:37:56 +020065 c.setUsername(values[0]);
margaretha58dbcfb2017-11-15 23:00:23 +010066 c.setExpirationTime(TimeUtils.plusSeconds(this.config.getTokenTTL())
67 .getMillis());
margaretha2afb97d2017-12-07 19:18:44 +010068 c.setTokenType(getTokenType());
Michael Hanl19390652016-01-16 11:01:24 +010069 // todo: for production mode, set true
70 c.setSecureRequired(false);
margaretha58dbcfb2017-11-15 23:00:23 +010071 // EM: is this secure?
Michael Hanlcb2d3f92016-06-02 17:34:06 +020072 c.setToken(StringUtils.stripTokenType(authToken));
Michael Hanl87106d12015-09-14 18:13:51 +020073 // fixme: you can make queries, but user sensitive data is off limits?!
Michael Hanl19390652016-01-16 11:01:24 +010074 c.addContextParameter(Attributes.SCOPES,
75 Scopes.Scope.search.toString());
Michael Hanl7368aa42016-02-05 18:15:47 +010076 return c;
Michael Hanl87106d12015-09-14 18:13:51 +020077 }
Michael Hanl7368aa42016-02-05 18:15:47 +010078 return null;
Michael Hanl87106d12015-09-14 18:13:51 +020079 }
80
Michael Hanl8abaf9e2016-05-23 16:46:35 +020081
Michael Hanl87106d12015-09-14 18:13:51 +020082 // not supported!
83 @Override
margaretha58dbcfb2017-11-15 23:00:23 +010084 public TokenContext createTokenContext (User user, Map<String, Object> attr)
Michael Hanl87106d12015-09-14 18:13:51 +020085 throws KustvaktException {
86 return null;
87 }
88
Michael Hanl8abaf9e2016-05-23 16:46:35 +020089
Michael Hanl87106d12015-09-14 18:13:51 +020090 @Override
Michael Hanl8abaf9e2016-05-23 16:46:35 +020091 public void removeUserSession (String token) throws KustvaktException {
Michael Hanlf1e85e72016-01-21 16:55:45 +010092 throw new KustvaktException(StatusCodes.NOT_SUPPORTED);
Michael Hanl87106d12015-09-14 18:13:51 +020093 }
94
Michael Hanl8abaf9e2016-05-23 16:46:35 +020095
Michael Hanl87106d12015-09-14 18:13:51 +020096 @Override
margaretha58dbcfb2017-11-15 23:00:23 +010097 public TokenContext refresh (TokenContext context)
98 throws KustvaktException {
Michael Hanl87106d12015-09-14 18:13:51 +020099 return null;
100 }
101
Michael Hanl8abaf9e2016-05-23 16:46:35 +0200102
Michael Hanl87106d12015-09-14 18:13:51 +0200103 @Override
margaretha2afb97d2017-12-07 19:18:44 +0100104 public TokenType getTokenType () {
105 return TokenType.BASIC;
Michael Hanl87106d12015-09-14 18:13:51 +0200106 }
107}