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 /* 21d0624dbbSVladimir Kotal * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved. 22b28a5538SAdam Hornacek */ 23b28a5538SAdam Hornacek package opengrok.auth.plugin.configuration; 24b28a5538SAdam Hornacek 25b28a5538SAdam Hornacek import java.beans.XMLDecoder; 26b28a5538SAdam Hornacek import java.beans.XMLEncoder; 27b28a5538SAdam Hornacek import java.io.BufferedInputStream; 28b28a5538SAdam Hornacek import java.io.BufferedOutputStream; 29b28a5538SAdam Hornacek import java.io.ByteArrayInputStream; 30b28a5538SAdam Hornacek import java.io.ByteArrayOutputStream; 31b28a5538SAdam Hornacek import java.io.File; 32b28a5538SAdam Hornacek import java.io.FileInputStream; 33b28a5538SAdam Hornacek import java.io.IOException; 34b28a5538SAdam Hornacek import java.io.InputStream; 35b28a5538SAdam Hornacek import java.io.OutputStream; 36b28a5538SAdam Hornacek import java.io.Serializable; 37b28a5538SAdam Hornacek import java.util.ArrayList; 38b28a5538SAdam Hornacek import java.util.List; 39b28a5538SAdam Hornacek import opengrok.auth.plugin.ldap.LdapServer; 40b28a5538SAdam Hornacek import opengrok.auth.plugin.util.WebHooks; 41b28a5538SAdam Hornacek 42d0624dbbSVladimir Kotal /** 43d0624dbbSVladimir Kotal * Encapsulates configuration for LDAP plugins. 44d0624dbbSVladimir Kotal */ 45b28a5538SAdam Hornacek public class Configuration implements Serializable { 46b28a5538SAdam Hornacek 47b28a5538SAdam Hornacek private static final long serialVersionUID = -1; 48b28a5538SAdam Hornacek 49b28a5538SAdam Hornacek private List<LdapServer> servers = new ArrayList<>(); 50b28a5538SAdam Hornacek private int interval; 51b28a5538SAdam Hornacek private String searchBase; 52b28a5538SAdam Hornacek private WebHooks webHooks; 53b28a5538SAdam Hornacek private int searchTimeout; 54b28a5538SAdam Hornacek private int connectTimeout; 55d0624dbbSVladimir Kotal private int readTimeout; 56b28a5538SAdam Hornacek private int countLimit; 57b28a5538SAdam Hornacek setServers(List<LdapServer> servers)58b28a5538SAdam Hornacek public void setServers(List<LdapServer> servers) { 59b28a5538SAdam Hornacek this.servers = servers; 60b28a5538SAdam Hornacek } 61b28a5538SAdam Hornacek getServers()62b28a5538SAdam Hornacek public List<LdapServer> getServers() { 63b28a5538SAdam Hornacek return servers; 64b28a5538SAdam Hornacek } 65b28a5538SAdam Hornacek setWebHooks(WebHooks webHooks)66b28a5538SAdam Hornacek public void setWebHooks(WebHooks webHooks) { 67b28a5538SAdam Hornacek this.webHooks = webHooks; 68b28a5538SAdam Hornacek } 69b28a5538SAdam Hornacek getWebHooks()70b28a5538SAdam Hornacek public WebHooks getWebHooks() { 71b28a5538SAdam Hornacek return webHooks; 72b28a5538SAdam Hornacek } 73b28a5538SAdam Hornacek getInterval()74b28a5538SAdam Hornacek public int getInterval() { 75b28a5538SAdam Hornacek return interval; 76b28a5538SAdam Hornacek } 77b28a5538SAdam Hornacek setInterval(int interval)78b28a5538SAdam Hornacek public void setInterval(int interval) { 79b28a5538SAdam Hornacek this.interval = interval; 80b28a5538SAdam Hornacek } 81b28a5538SAdam Hornacek getSearchTimeout()82b28a5538SAdam Hornacek public int getSearchTimeout() { 83b28a5538SAdam Hornacek return this.searchTimeout; 84b28a5538SAdam Hornacek } 85b28a5538SAdam Hornacek setSearchTimeout(int timeout)86b28a5538SAdam Hornacek public void setSearchTimeout(int timeout) { 87b28a5538SAdam Hornacek this.searchTimeout = timeout; 88b28a5538SAdam Hornacek } 89b28a5538SAdam Hornacek getConnectTimeout()90b28a5538SAdam Hornacek public int getConnectTimeout() { 91b28a5538SAdam Hornacek return this.connectTimeout; 92b28a5538SAdam Hornacek } 93b28a5538SAdam Hornacek setConnectTimeout(int timeout)94b28a5538SAdam Hornacek public void setConnectTimeout(int timeout) { 95b28a5538SAdam Hornacek this.connectTimeout = timeout; 96b28a5538SAdam Hornacek } 97b28a5538SAdam Hornacek getReadTimeout()98d0624dbbSVladimir Kotal public int getReadTimeout() { 99d0624dbbSVladimir Kotal return this.readTimeout; 100d0624dbbSVladimir Kotal } 101d0624dbbSVladimir Kotal setReadTimeout(int timeout)102d0624dbbSVladimir Kotal public void setReadTimeout(int timeout) { 103d0624dbbSVladimir Kotal this.readTimeout = timeout; 104d0624dbbSVladimir Kotal } 105d0624dbbSVladimir Kotal getCountLimit()106b28a5538SAdam Hornacek public int getCountLimit() { 107b28a5538SAdam Hornacek return this.countLimit; 108b28a5538SAdam Hornacek } 109b28a5538SAdam Hornacek setCountLimit(int limit)110b28a5538SAdam Hornacek public void setCountLimit(int limit) { 111b28a5538SAdam Hornacek this.countLimit = limit; 112b28a5538SAdam Hornacek } 113b28a5538SAdam Hornacek getSearchBase()114b28a5538SAdam Hornacek public String getSearchBase() { 115b28a5538SAdam Hornacek return searchBase; 116b28a5538SAdam Hornacek } 117b28a5538SAdam Hornacek setSearchBase(String base)118b28a5538SAdam Hornacek public void setSearchBase(String base) { 119b28a5538SAdam Hornacek this.searchBase = base; 120b28a5538SAdam Hornacek } 121b28a5538SAdam Hornacek getXMLRepresentationAsString()122b28a5538SAdam Hornacek public String getXMLRepresentationAsString() { 123b28a5538SAdam Hornacek ByteArrayOutputStream bos = new ByteArrayOutputStream(); 124b28a5538SAdam Hornacek this.encodeObject(bos); 125b28a5538SAdam Hornacek return bos.toString(); 126b28a5538SAdam Hornacek } 127b28a5538SAdam Hornacek encodeObject(OutputStream out)128b28a5538SAdam Hornacek private void encodeObject(OutputStream out) { 129b28a5538SAdam Hornacek try (XMLEncoder e = new XMLEncoder(new BufferedOutputStream(out))) { 130b28a5538SAdam Hornacek e.writeObject(this); 131b28a5538SAdam Hornacek } 132b28a5538SAdam Hornacek } 133b28a5538SAdam Hornacek 134b28a5538SAdam Hornacek /** 135b28a5538SAdam Hornacek * Read a configuration from a file in XML format. 136b28a5538SAdam Hornacek * 137b28a5538SAdam Hornacek * @param file input file 138b28a5538SAdam Hornacek * @return the new configuration object 139b28a5538SAdam Hornacek * @throws IOException if any error occurs 140b28a5538SAdam Hornacek */ read(File file)141b28a5538SAdam Hornacek public static Configuration read(File file) throws IOException { 142b28a5538SAdam Hornacek try (FileInputStream in = new FileInputStream(file)) { 143b28a5538SAdam Hornacek return decodeObject(in); 144b28a5538SAdam Hornacek } 145b28a5538SAdam Hornacek } 146b28a5538SAdam Hornacek 147b28a5538SAdam Hornacek /** 148b28a5538SAdam Hornacek * Read a configuration from a string in xml format. 149b28a5538SAdam Hornacek * 150b28a5538SAdam Hornacek * @param xmlconfig input string 151b28a5538SAdam Hornacek * @return the new configuration object 152b28a5538SAdam Hornacek * @throws IOException if any error occurs 153b28a5538SAdam Hornacek */ makeXMLStringAsConfiguration(String xmlconfig)154b28a5538SAdam Hornacek public static Configuration makeXMLStringAsConfiguration(String xmlconfig) throws IOException { 155b28a5538SAdam Hornacek final Configuration ret; 156b28a5538SAdam Hornacek final ByteArrayInputStream in = new ByteArrayInputStream(xmlconfig.getBytes()); 157b28a5538SAdam Hornacek ret = decodeObject(in); 158b28a5538SAdam Hornacek return ret; 159b28a5538SAdam Hornacek } 160b28a5538SAdam Hornacek decodeObject(InputStream in)161b28a5538SAdam Hornacek private static Configuration decodeObject(InputStream in) throws IOException { 162b28a5538SAdam Hornacek final Object ret; 163b28a5538SAdam Hornacek 164*e5d05ee2SVladimir Kotal try (XMLDecoder d = new XMLDecoder(new BufferedInputStream(in), null, null, 165*e5d05ee2SVladimir Kotal new PluginConfigurationClassLoader())) { 166b28a5538SAdam Hornacek ret = d.readObject(); 167b28a5538SAdam Hornacek } 168b28a5538SAdam Hornacek 169b28a5538SAdam Hornacek if (!(ret instanceof Configuration)) { 170b28a5538SAdam Hornacek throw new IOException("Not a valid configuration file"); 171b28a5538SAdam Hornacek } 172b28a5538SAdam Hornacek 173b28a5538SAdam Hornacek return (Configuration) ret; 174b28a5538SAdam Hornacek } 175b28a5538SAdam Hornacek } 176