| margaretha | 139d0f7 | 2017-11-14 18:56:22 +0100 | [diff] [blame] | 1 | package de.ids_mannheim.korap.authentication; |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 2 | |
| margaretha | a2ce63d | 2018-06-28 10:11:43 +0200 | [diff] [blame] | 3 | import java.time.ZoneId; |
| 4 | import java.time.ZonedDateTime; |
| margaretha | d479666 | 2017-11-09 16:11:40 +0100 | [diff] [blame] | 5 | import java.util.Map; |
| 6 | |
| margaretha | d479666 | 2017-11-09 16:11:40 +0100 | [diff] [blame] | 7 | import org.springframework.beans.factory.annotation.Autowired; |
| 8 | |
| margaretha | 56e8e55 | 2017-12-05 16:31:21 +0100 | [diff] [blame] | 9 | import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler; |
| 10 | import de.ids_mannheim.korap.authentication.http.TransferEncoding; |
| margaretha | d479666 | 2017-11-09 16:11:40 +0100 | [diff] [blame] | 11 | import de.ids_mannheim.korap.config.Attributes; |
| margaretha | 6b3ecdd | 2018-03-01 18:23:56 +0100 | [diff] [blame] | 12 | import de.ids_mannheim.korap.config.FullConfiguration; |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 13 | import de.ids_mannheim.korap.config.Scopes; |
| margaretha | 0e8f4e7 | 2018-04-05 14:11:52 +0200 | [diff] [blame] | 14 | import de.ids_mannheim.korap.constant.TokenType; |
| margaretha | 58dbcfb | 2017-11-15 23:00:23 +0100 | [diff] [blame] | 15 | import de.ids_mannheim.korap.dao.UserDao; |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 16 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 17 | import de.ids_mannheim.korap.exceptions.StatusCodes; |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 18 | import de.ids_mannheim.korap.interfaces.AuthenticationIface; |
| margaretha | 0e8f4e7 | 2018-04-05 14:11:52 +0200 | [diff] [blame] | 19 | import de.ids_mannheim.korap.security.context.TokenContext; |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 20 | import de.ids_mannheim.korap.user.User; |
| Michael Hanl | cb2d3f9 | 2016-06-02 17:34:06 +0200 | [diff] [blame] | 21 | import de.ids_mannheim.korap.utils.StringUtils; |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 22 | import de.ids_mannheim.korap.utils.TimeUtils; |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 23 | |
| margaretha | a2ce63d | 2018-06-28 10:11:43 +0200 | [diff] [blame] | 24 | /** |
| 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}. |
| margaretha | 4de4119 | 2017-11-15 11:47:11 +0100 | [diff] [blame] | 29 | * |
| margaretha | a2ce63d | 2018-06-28 10:11:43 +0200 | [diff] [blame] | 30 | * 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}) |
| margaretha | 2afb97d | 2017-12-07 19:18:44 +0100 | [diff] [blame] | 33 | * without passwords. |
| margaretha | 6b3ecdd | 2018-03-01 18:23:56 +0100 | [diff] [blame] | 34 | * |
| 35 | * <br /><br /> |
| 36 | * Latest changes: |
| 37 | * <ul> |
| 38 | * <li>Added userdao check |
| 39 | * </li> |
| 40 | * </ul> |
| 41 | * |
| margaretha | 58dbcfb | 2017-11-15 23:00:23 +0100 | [diff] [blame] | 42 | * |
| 43 | * @author margaretha |
| margaretha | 6b3ecdd | 2018-03-01 18:23:56 +0100 | [diff] [blame] | 44 | * @date 01/03/2018 |
| margaretha | 139d0f7 | 2017-11-14 18:56:22 +0100 | [diff] [blame] | 45 | * |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 46 | * @author hanl |
| 47 | * @date 28/04/2015 |
| 48 | */ |
| margaretha | 58dbcfb | 2017-11-15 23:00:23 +0100 | [diff] [blame] | 49 | public class BasicAuthentication implements AuthenticationIface { |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 50 | |
| margaretha | d479666 | 2017-11-09 16:11:40 +0100 | [diff] [blame] | 51 | @Autowired |
| margaretha | 58dbcfb | 2017-11-15 23:00:23 +0100 | [diff] [blame] | 52 | private TransferEncoding transferEncoding; |
| 53 | @Autowired |
| margaretha | 6b3ecdd | 2018-03-01 18:23:56 +0100 | [diff] [blame] | 54 | private FullConfiguration config; |
| margaretha | a2ce63d | 2018-06-28 10:11:43 +0200 | [diff] [blame] | 55 | // @Autowired |
| 56 | // private EncryptionIface crypto; |
| margaretha | d479666 | 2017-11-09 16:11:40 +0100 | [diff] [blame] | 57 | @Autowired |
| margaretha | 58dbcfb | 2017-11-15 23:00:23 +0100 | [diff] [blame] | 58 | private UserDao dao; |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 59 | |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 60 | @Override |
| margaretha | 58dbcfb | 2017-11-15 23:00:23 +0100 | [diff] [blame] | 61 | public TokenContext getTokenContext (String authToken) |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 62 | throws KustvaktException { |
| margaretha | 58dbcfb | 2017-11-15 23:00:23 +0100 | [diff] [blame] | 63 | String[] values = transferEncoding.decodeBase64(authToken); |
| margaretha | 6b3ecdd | 2018-03-01 18:23:56 +0100 | [diff] [blame] | 64 | User user = dao.getAccount(values[0]); |
| margaretha | a2ce63d | 2018-06-28 10:11:43 +0200 | [diff] [blame] | 65 | ZonedDateTime authenticationTime = |
| 66 | ZonedDateTime.now(ZoneId.of(Attributes.DEFAULT_TIME_ZONE)); |
| margaretha | 6b3ecdd | 2018-03-01 18:23:56 +0100 | [diff] [blame] | 67 | |
| 68 | if (user != null) { |
| Michael Hanl | 7368aa4 | 2016-02-05 18:15:47 +0100 | [diff] [blame] | 69 | TokenContext c = new TokenContext(); |
| Michael Hanl | e25dea2 | 2015-09-24 19:37:56 +0200 | [diff] [blame] | 70 | c.setUsername(values[0]); |
| margaretha | a2ce63d | 2018-06-28 10:11:43 +0200 | [diff] [blame] | 71 | c.setAuthenticationTime(authenticationTime); |
| margaretha | 58dbcfb | 2017-11-15 23:00:23 +0100 | [diff] [blame] | 72 | c.setExpirationTime(TimeUtils.plusSeconds(this.config.getTokenTTL()) |
| 73 | .getMillis()); |
| margaretha | 2afb97d | 2017-12-07 19:18:44 +0100 | [diff] [blame] | 74 | c.setTokenType(getTokenType()); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 75 | // todo: for production mode, set true |
| 76 | c.setSecureRequired(false); |
| margaretha | 58dbcfb | 2017-11-15 23:00:23 +0100 | [diff] [blame] | 77 | // EM: is this secure? |
| Michael Hanl | cb2d3f9 | 2016-06-02 17:34:06 +0200 | [diff] [blame] | 78 | c.setToken(StringUtils.stripTokenType(authToken)); |
| margaretha | a2ce63d | 2018-06-28 10:11:43 +0200 | [diff] [blame] | 79 | // fixme: you can make queries, but user sensitive data is |
| 80 | // off limits?! |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 81 | c.addContextParameter(Attributes.SCOPES, |
| 82 | Scopes.Scope.search.toString()); |
| Michael Hanl | 7368aa4 | 2016-02-05 18:15:47 +0100 | [diff] [blame] | 83 | return c; |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 84 | } |
| Michael Hanl | 7368aa4 | 2016-02-05 18:15:47 +0100 | [diff] [blame] | 85 | return null; |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 86 | } |
| 87 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 88 | |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 89 | // not supported! |
| 90 | @Override |
| margaretha | 58dbcfb | 2017-11-15 23:00:23 +0100 | [diff] [blame] | 91 | public TokenContext createTokenContext (User user, Map<String, Object> attr) |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 92 | throws KustvaktException { |
| 93 | return null; |
| 94 | } |
| 95 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 96 | |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 97 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 98 | public void removeUserSession (String token) throws KustvaktException { |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 99 | throw new KustvaktException(StatusCodes.NOT_SUPPORTED); |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 100 | } |
| 101 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 102 | |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 103 | @Override |
| margaretha | 58dbcfb | 2017-11-15 23:00:23 +0100 | [diff] [blame] | 104 | public TokenContext refresh (TokenContext context) |
| 105 | throws KustvaktException { |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 106 | return null; |
| 107 | } |
| 108 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 109 | |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 110 | @Override |
| margaretha | 2afb97d | 2017-12-07 19:18:44 +0100 | [diff] [blame] | 111 | public TokenType getTokenType () { |
| 112 | return TokenType.BASIC; |
| Michael Hanl | 87106d1 | 2015-09-14 18:13:51 +0200 | [diff] [blame] | 113 | } |
| 114 | } |