xref: /OpenGrok/plugins/src/main/java/opengrok/auth/plugin/decoders/UserPrincipalDecoder.java (revision aa6abf429bacc2c0baa482bff3022e77ef23c183)
1b28a5538SAdam Hornacek /*
2b28a5538SAdam Hornacek  * CDDL HEADER START
3b28a5538SAdam Hornacek  *
4b28a5538SAdam Hornacek  * The contents of this file are subject to the terms of the
5b28a5538SAdam Hornacek  * Common Development and Distribution License (the "License").
6b28a5538SAdam Hornacek  * You may not use this file except in compliance with the License.
7b28a5538SAdam Hornacek  *
8b28a5538SAdam Hornacek  * See LICENSE.txt included in this distribution for the specific
9b28a5538SAdam Hornacek  * language governing permissions and limitations under the License.
10b28a5538SAdam Hornacek  *
11b28a5538SAdam Hornacek  * When distributing Covered Code, include this CDDL HEADER in each
12b28a5538SAdam Hornacek  * file and include the License file at LICENSE.txt.
13b28a5538SAdam Hornacek  * If applicable, add the following below this CDDL HEADER, with the
14b28a5538SAdam Hornacek  * fields enclosed by brackets "[]" replaced with your own identifying
15b28a5538SAdam Hornacek  * information: Portions Copyright [yyyy] [name of copyright owner]
16b28a5538SAdam Hornacek  *
17b28a5538SAdam Hornacek  * CDDL HEADER END
18b28a5538SAdam Hornacek  */
19b28a5538SAdam Hornacek 
20b28a5538SAdam Hornacek /*
21b28a5538SAdam Hornacek  * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
22b28a5538SAdam Hornacek  */
23b28a5538SAdam Hornacek package opengrok.auth.plugin.decoders;
24b28a5538SAdam Hornacek 
25*aa6abf42SAdam Hornacek import jakarta.servlet.http.HttpServletRequest;
26b28a5538SAdam Hornacek import opengrok.auth.plugin.entity.User;
27b28a5538SAdam Hornacek 
28b28a5538SAdam Hornacek import java.util.logging.Level;
29b28a5538SAdam Hornacek import java.util.logging.Logger;
30b28a5538SAdam Hornacek 
31b28a5538SAdam Hornacek /**
32b28a5538SAdam Hornacek  * Get authenticated user principal and use it to create User object.
33b28a5538SAdam Hornacek  * This works e.g. with HTTP Basic authentication headers as per RFC 7617.
34b28a5538SAdam Hornacek  *
35b28a5538SAdam Hornacek  * @author Vladimir Kotal
36b28a5538SAdam Hornacek  */
37b28a5538SAdam Hornacek public class UserPrincipalDecoder implements IUserDecoder {
38b28a5538SAdam Hornacek 
39b28a5538SAdam Hornacek     private static final Logger LOGGER = Logger.getLogger(UserPrincipalDecoder.class.getName());
40b28a5538SAdam Hornacek 
41b28a5538SAdam Hornacek     @Override
fromRequest(HttpServletRequest request)42b28a5538SAdam Hornacek     public User fromRequest(HttpServletRequest request) {
43b28a5538SAdam Hornacek         if (request.getUserPrincipal() == null) {
44b28a5538SAdam Hornacek             return null;
45b28a5538SAdam Hornacek         }
46b28a5538SAdam Hornacek 
47b28a5538SAdam Hornacek         String username = request.getUserPrincipal().getName();
48b28a5538SAdam Hornacek         if (username == null || username.isEmpty()) {
49b28a5538SAdam Hornacek             LOGGER.log(Level.WARNING,
50b28a5538SAdam Hornacek                     "Can not construct User object: cannot get user principal from: {0}",
51b28a5538SAdam Hornacek                     request);
52b28a5538SAdam Hornacek             return null;
53b28a5538SAdam Hornacek         }
54b28a5538SAdam Hornacek 
55b28a5538SAdam Hornacek         return new User(username);
56b28a5538SAdam Hornacek     }
57b28a5538SAdam Hornacek }