xref: /OpenGrok/plugins/src/main/java/opengrok/auth/plugin/configuration/Configuration.java (revision 0e4c55544f8ea0a68e8bae37b0e502097e008ec1)
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