blob: 77963457c1f46b3894a15880d80a41bc14911ef3 [file] [log] [blame]
margaretha56e8e552017-12-05 16:31:21 +01001package de.ids_mannheim.korap.authentication.http;
margaretha4b5c1412017-11-15 20:55:04 +01002
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.stereotype.Component;
5
margaretha0e8f4e72018-04-05 14:11:52 +02006import de.ids_mannheim.korap.constant.AuthenticationScheme;
margaretha4b5c1412017-11-15 20:55:04 +01007import de.ids_mannheim.korap.exceptions.KustvaktException;
8import de.ids_mannheim.korap.exceptions.StatusCodes;
9import de.ids_mannheim.korap.utils.ParameterChecker;
10
margaretha2afb97d2017-12-07 19:18:44 +010011/** Implementation of Basic HTTP authentication scheme (see RFC 7253
12 * and 7617) for client asking for authorization and sending user
13 * data.
margaretha4b5c1412017-11-15 20:55:04 +010014 *
15 * @author margaretha
16 *
17 */
18@Component
19public class HttpAuthorizationHandler {
20
21 @Autowired
22 private TransferEncoding transferEncoding;
margaretha2afb97d2017-12-07 19:18:44 +010023
24 public String createBasicAuthorizationHeaderValue (String username,
25 String password) throws KustvaktException {
margaretha4b5c1412017-11-15 20:55:04 +010026 ParameterChecker.checkStringValue(username, "username");
27 ParameterChecker.checkStringValue(password, "password");
28
29 String credentials = transferEncoding.encodeBase64(username, password);
margaretha2afb97d2017-12-07 19:18:44 +010030 return AuthenticationScheme.BASIC.displayName()+" " + credentials;
margaretha4b5c1412017-11-15 20:55:04 +010031 }
32
margaretha2afb97d2017-12-07 19:18:44 +010033 public AuthorizationData parseAuthorizationHeaderValue (
margaretha4b5c1412017-11-15 20:55:04 +010034 String authorizationHeader) throws KustvaktException {
35 ParameterChecker.checkStringValue(authorizationHeader,
36 "authorization header");
37
38 String[] values = authorizationHeader.split(" ");
39 if (values.length != 2) {
margaretha56e8e552017-12-05 16:31:21 +010040 throw new KustvaktException(StatusCodes.AUTHENTICATION_FAILED,
margaretha4b5c1412017-11-15 20:55:04 +010041 "Cannot parse authorization header value "
42 + authorizationHeader
43 + ". Use this format: [authentication "
44 + "scheme] [Base64-encoded token]",
45 authorizationHeader);
46 }
47
48 AuthorizationData data = new AuthorizationData();
margaretha2afb97d2017-12-07 19:18:44 +010049 data.setAuthenticationScheme(
50 AuthenticationScheme.valueOf(values[0].toUpperCase()));
margaretha4b5c1412017-11-15 20:55:04 +010051 data.setToken(values[1]);
52 return data;
53 }
54
margaretha2afb97d2017-12-07 19:18:44 +010055 public AuthorizationData parseBasicToken (AuthorizationData data)
margaretha56e8e552017-12-05 16:31:21 +010056 throws KustvaktException {
margarethacd206792017-11-17 14:48:09 +010057 String[] credentials = transferEncoding.decodeBase64(data.getToken());
58 data.setUsername(credentials[0]);
59 data.setPassword(credentials[1]);
60 return data;
margaretha4b5c1412017-11-15 20:55:04 +010061 }
margaretha4b5c1412017-11-15 20:55:04 +010062}