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