blob: e272a3424dd0b1743bfe28e77f832f82c91034b1 [file] [log] [blame]
margaretha139d0f72017-11-14 18:56:22 +01001package de.ids_mannheim.korap.authentication;
Michael Hanl87106d12015-09-14 18:13:51 +02002
margarethaa2ce63d2018-06-28 10:11:43 +02003import java.time.ZoneId;
4import java.time.ZonedDateTime;
margarethad4796662017-11-09 16:11:40 +01005import java.util.Map;
6
margarethad4796662017-11-09 16:11:40 +01007import org.springframework.beans.factory.annotation.Autowired;
8
margaretha56e8e552017-12-05 16:31:21 +01009import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
10import de.ids_mannheim.korap.authentication.http.TransferEncoding;
margarethad4796662017-11-09 16:11:40 +010011import de.ids_mannheim.korap.config.Attributes;
margaretha6b3ecdd2018-03-01 18:23:56 +010012import de.ids_mannheim.korap.config.FullConfiguration;
Michael Hanl19390652016-01-16 11:01:24 +010013import de.ids_mannheim.korap.config.Scopes;
margaretha0e8f4e72018-04-05 14:11:52 +020014import de.ids_mannheim.korap.constant.TokenType;
margaretha58dbcfb2017-11-15 23:00:23 +010015import de.ids_mannheim.korap.dao.UserDao;
Michael Hanl87106d12015-09-14 18:13:51 +020016import de.ids_mannheim.korap.exceptions.KustvaktException;
Michael Hanlf1e85e72016-01-21 16:55:45 +010017import de.ids_mannheim.korap.exceptions.StatusCodes;
Michael Hanl87106d12015-09-14 18:13:51 +020018import de.ids_mannheim.korap.interfaces.AuthenticationIface;
margaretha0e8f4e72018-04-05 14:11:52 +020019import de.ids_mannheim.korap.security.context.TokenContext;
Michael Hanl87106d12015-09-14 18:13:51 +020020import de.ids_mannheim.korap.user.User;
Michael Hanlcb2d3f92016-06-02 17:34:06 +020021import de.ids_mannheim.korap.utils.StringUtils;
Michael Hanlc0ed00f2016-06-23 14:33:10 +020022import de.ids_mannheim.korap.utils.TimeUtils;
Michael Hanl87106d12015-09-14 18:13:51 +020023
margarethaa2ce63d2018-06-28 10:11:43 +020024/**
25 * Implementation of encoding and decoding access token is moved to
26 * {@link TransferEncoding}. Moreover, implementation of HTTP
27 * Authentication framework, i.e. creation of authorization header,
28 * is defined in {@link HttpAuthorizationHandler}.
margaretha4de41192017-11-15 11:47:11 +010029 *
margarethaa2ce63d2018-06-28 10:11:43 +020030 * Basic authentication is intended to be used with a database. It is
31 * currently only used for testing using a dummy DAO (@see
32 * {@link UserDao})
margaretha2afb97d2017-12-07 19:18:44 +010033 * without passwords.
margaretha6b3ecdd2018-03-01 18:23:56 +010034 *
35 * <br /><br />
36 * Latest changes:
37 * <ul>
38 * <li>Added userdao check
39 * </li>
40 * </ul>
41 *
margaretha58dbcfb2017-11-15 23:00:23 +010042 *
43 * @author margaretha
margaretha6b3ecdd2018-03-01 18:23:56 +010044 * @date 01/03/2018
margaretha139d0f72017-11-14 18:56:22 +010045 *
Michael Hanl87106d12015-09-14 18:13:51 +020046 * @author hanl
47 * @date 28/04/2015
48 */
margaretha58dbcfb2017-11-15 23:00:23 +010049public class BasicAuthentication implements AuthenticationIface {
Michael Hanl87106d12015-09-14 18:13:51 +020050
margarethad4796662017-11-09 16:11:40 +010051 @Autowired
margaretha58dbcfb2017-11-15 23:00:23 +010052 private TransferEncoding transferEncoding;
53 @Autowired
margaretha6b3ecdd2018-03-01 18:23:56 +010054 private FullConfiguration config;
margarethaa2ce63d2018-06-28 10:11:43 +020055 // @Autowired
56 // private EncryptionIface crypto;
margarethad4796662017-11-09 16:11:40 +010057 @Autowired
margaretha58dbcfb2017-11-15 23:00:23 +010058 private UserDao dao;
Michael Hanlc0ed00f2016-06-23 14:33:10 +020059
Michael Hanl87106d12015-09-14 18:13:51 +020060 @Override
margaretha58dbcfb2017-11-15 23:00:23 +010061 public TokenContext getTokenContext (String authToken)
Michael Hanl19390652016-01-16 11:01:24 +010062 throws KustvaktException {
margaretha58dbcfb2017-11-15 23:00:23 +010063 String[] values = transferEncoding.decodeBase64(authToken);
margaretha6b3ecdd2018-03-01 18:23:56 +010064 User user = dao.getAccount(values[0]);
margarethaa2ce63d2018-06-28 10:11:43 +020065 ZonedDateTime authenticationTime =
66 ZonedDateTime.now(ZoneId.of(Attributes.DEFAULT_TIME_ZONE));
margaretha6b3ecdd2018-03-01 18:23:56 +010067
68 if (user != null) {
Michael Hanl7368aa42016-02-05 18:15:47 +010069 TokenContext c = new TokenContext();
Michael Hanle25dea22015-09-24 19:37:56 +020070 c.setUsername(values[0]);
margarethaa2ce63d2018-06-28 10:11:43 +020071 c.setAuthenticationTime(authenticationTime);
margaretha58dbcfb2017-11-15 23:00:23 +010072 c.setExpirationTime(TimeUtils.plusSeconds(this.config.getTokenTTL())
73 .getMillis());
margaretha2afb97d2017-12-07 19:18:44 +010074 c.setTokenType(getTokenType());
Michael Hanl19390652016-01-16 11:01:24 +010075 // todo: for production mode, set true
76 c.setSecureRequired(false);
margaretha58dbcfb2017-11-15 23:00:23 +010077 // EM: is this secure?
Michael Hanlcb2d3f92016-06-02 17:34:06 +020078 c.setToken(StringUtils.stripTokenType(authToken));
margarethaa2ce63d2018-06-28 10:11:43 +020079 // fixme: you can make queries, but user sensitive data is
80 // off limits?!
Michael Hanl19390652016-01-16 11:01:24 +010081 c.addContextParameter(Attributes.SCOPES,
82 Scopes.Scope.search.toString());
Michael Hanl7368aa42016-02-05 18:15:47 +010083 return c;
Michael Hanl87106d12015-09-14 18:13:51 +020084 }
Michael Hanl7368aa42016-02-05 18:15:47 +010085 return null;
Michael Hanl87106d12015-09-14 18:13:51 +020086 }
87
Michael Hanl8abaf9e2016-05-23 16:46:35 +020088
Michael Hanl87106d12015-09-14 18:13:51 +020089 // not supported!
90 @Override
margaretha58dbcfb2017-11-15 23:00:23 +010091 public TokenContext createTokenContext (User user, Map<String, Object> attr)
Michael Hanl87106d12015-09-14 18:13:51 +020092 throws KustvaktException {
93 return null;
94 }
95
Michael Hanl8abaf9e2016-05-23 16:46:35 +020096
Michael Hanl87106d12015-09-14 18:13:51 +020097 @Override
Michael Hanl8abaf9e2016-05-23 16:46:35 +020098 public void removeUserSession (String token) throws KustvaktException {
Michael Hanlf1e85e72016-01-21 16:55:45 +010099 throw new KustvaktException(StatusCodes.NOT_SUPPORTED);
Michael Hanl87106d12015-09-14 18:13:51 +0200100 }
101
Michael Hanl8abaf9e2016-05-23 16:46:35 +0200102
Michael Hanl87106d12015-09-14 18:13:51 +0200103 @Override
margaretha58dbcfb2017-11-15 23:00:23 +0100104 public TokenContext refresh (TokenContext context)
105 throws KustvaktException {
Michael Hanl87106d12015-09-14 18:13:51 +0200106 return null;
107 }
108
Michael Hanl8abaf9e2016-05-23 16:46:35 +0200109
Michael Hanl87106d12015-09-14 18:13:51 +0200110 @Override
margaretha2afb97d2017-12-07 19:18:44 +0100111 public TokenType getTokenType () {
112 return TokenType.BASIC;
Michael Hanl87106d12015-09-14 18:13:51 +0200113 }
114}