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 }