Skip to content

Commit b5c7318

Browse files
committed
convert LDAP authorization plugin configuration to YAML
1 parent 9fd1f26 commit b5c7318

File tree

7 files changed

+116
-251
lines changed

7 files changed

+116
-251
lines changed

plugins/pom.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ information: Portions Copyright [yyyy] [name of copyright owner]
1818
1919
CDDL HEADER END
2020
21-
Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved.
21+
Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved.
2222
Portions Copyright (c) 2020, Chris Fraire <cfraire@me.com>.
2323
2424
-->
@@ -75,6 +75,11 @@ Portions Copyright (c) 2020, Chris Fraire <cfraire@me.com>.
7575
<artifactId>jersey-media-json-jackson</artifactId>
7676
<version>${jersey.version}</version>
7777
</dependency>
78+
<dependency>
79+
<groupId>com.fasterxml.jackson.dataformat</groupId>
80+
<artifactId>jackson-dataformat-yaml</artifactId>
81+
<version>${jackson.version}</version>
82+
</dependency>
7883
<dependency>
7984
<groupId>org.glassfish.jersey.inject</groupId>
8085
<artifactId>jersey-hk2</artifactId>

plugins/src/main/java/opengrok/auth/plugin/configuration/Configuration.java

Lines changed: 31 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,10 @@
1818
*/
1919

2020
/*
21-
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
21+
* Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved.
2222
*/
2323
package opengrok.auth.plugin.configuration;
2424

25-
import java.beans.XMLDecoder;
26-
import java.beans.XMLEncoder;
27-
import java.io.BufferedInputStream;
28-
import java.io.BufferedOutputStream;
29-
import java.io.ByteArrayInputStream;
3025
import java.io.ByteArrayOutputStream;
3126
import java.io.File;
3227
import java.io.FileInputStream;
@@ -35,24 +30,46 @@
3530
import java.io.OutputStream;
3631
import java.io.Serializable;
3732
import java.util.ArrayList;
33+
import java.util.Arrays;
3834
import java.util.List;
35+
36+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
37+
import com.fasterxml.jackson.annotation.JsonProperty;
38+
import com.fasterxml.jackson.databind.ObjectMapper;
39+
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
40+
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
3941
import opengrok.auth.plugin.ldap.LdapServer;
4042
import opengrok.auth.plugin.util.WebHooks;
4143

4244
/**
4345
* Encapsulates configuration for LDAP plugins.
4446
*/
47+
@JsonAutoDetect(
48+
fieldVisibility = JsonAutoDetect.Visibility.NONE,
49+
setterVisibility = JsonAutoDetect.Visibility.NONE,
50+
getterVisibility = JsonAutoDetect.Visibility.NONE,
51+
isGetterVisibility = JsonAutoDetect.Visibility.NONE,
52+
creatorVisibility = JsonAutoDetect.Visibility.NONE
53+
)
4554
public class Configuration implements Serializable {
4655

4756
private static final long serialVersionUID = -1;
4857

58+
@JsonProperty
4959
private List<LdapServer> servers = new ArrayList<>();
60+
@JsonProperty
5061
private int interval;
62+
@JsonProperty
5163
private String searchBase;
64+
@JsonProperty
5265
private WebHooks webHooks;
66+
@JsonProperty
5367
private int searchTimeout;
68+
@JsonProperty
5469
private int connectTimeout;
70+
@JsonProperty
5571
private int readTimeout;
72+
@JsonProperty
5673
private int countLimit;
5774

5875
public void setServers(List<LdapServer> servers) {
@@ -119,20 +136,19 @@ public void setSearchBase(String base) {
119136
this.searchBase = base;
120137
}
121138

122-
public String getXMLRepresentationAsString() {
139+
String getObjectRepresentationAsString() throws IOException {
123140
ByteArrayOutputStream bos = new ByteArrayOutputStream();
124141
this.encodeObject(bos);
125142
return bos.toString();
126143
}
127144

128-
private void encodeObject(OutputStream out) {
129-
try (XMLEncoder e = new XMLEncoder(new BufferedOutputStream(out))) {
130-
e.writeObject(this);
131-
}
145+
void encodeObject(OutputStream out) throws IOException {
146+
var mapper = new ObjectMapper(new YAMLFactory().disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER));
147+
mapper.writeValue(out, this);
132148
}
133149

134150
/**
135-
* Read a configuration from a file in XML format.
151+
* Read a configuration from a file.
136152
*
137153
* @param file input file
138154
* @return the new configuration object
@@ -144,32 +160,8 @@ public static Configuration read(File file) throws IOException {
144160
}
145161
}
146162

147-
/**
148-
* Read a configuration from a string in xml format.
149-
*
150-
* @param xmlconfig input string
151-
* @return the new configuration object
152-
* @throws IOException if any error occurs
153-
*/
154-
public static Configuration makeXMLStringAsConfiguration(String xmlconfig) throws IOException {
155-
final Configuration ret;
156-
final ByteArrayInputStream in = new ByteArrayInputStream(xmlconfig.getBytes());
157-
ret = decodeObject(in);
158-
return ret;
159-
}
160-
161-
private static Configuration decodeObject(InputStream in) throws IOException {
162-
final Object ret;
163-
164-
try (XMLDecoder d = new XMLDecoder(new BufferedInputStream(in), null, null,
165-
new PluginConfigurationClassLoader())) {
166-
ret = d.readObject();
167-
}
168-
169-
if (!(ret instanceof Configuration)) {
170-
throw new IOException("Not a valid configuration file");
171-
}
172-
173-
return (Configuration) ret;
163+
static Configuration decodeObject(InputStream in) throws IOException {
164+
var mapper = new ObjectMapper(new YAMLFactory().disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER));
165+
return mapper.readValue(in, Configuration.class);
174166
}
175167
}

plugins/src/main/java/opengrok/auth/plugin/configuration/PluginConfigurationClassLoader.java

Lines changed: 0 additions & 58 deletions
This file was deleted.

plugins/src/main/java/opengrok/auth/plugin/ldap/LdapServer.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,15 @@
1818
*/
1919

2020
/*
21-
* Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved.
21+
* Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved.
2222
*/
2323
package opengrok.auth.plugin.ldap;
2424

25+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
26+
import com.fasterxml.jackson.annotation.JsonIgnore;
27+
import com.fasterxml.jackson.annotation.JsonProperty;
28+
import org.jetbrains.annotations.Nullable;
29+
2530
import java.io.IOException;
2631
import java.io.Serializable;
2732
import java.net.InetAddress;
@@ -44,6 +49,13 @@
4449
import javax.naming.ldap.InitialLdapContext;
4550
import javax.naming.ldap.LdapContext;
4651

52+
@JsonAutoDetect(
53+
fieldVisibility = JsonAutoDetect.Visibility.NONE,
54+
setterVisibility = JsonAutoDetect.Visibility.NONE,
55+
getterVisibility = JsonAutoDetect.Visibility.NONE,
56+
isGetterVisibility = JsonAutoDetect.Visibility.NONE,
57+
creatorVisibility = JsonAutoDetect.Visibility.NONE
58+
)
4759
public class LdapServer implements Serializable {
4860

4961
private static final long serialVersionUID = -1;
@@ -55,17 +67,22 @@ public class LdapServer implements Serializable {
5567
private static final String LDAP_CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
5668

5769
// default connectTimeout value in milliseconds
58-
private static final int LDAP_CONNECT_TIMEOUT = 5000;
70+
private static final int DEFAULT_LDAP_CONNECT_TIMEOUT = 5000;
5971
// default readTimeout value in milliseconds
60-
private static final int LDAP_READ_TIMEOUT = 3000;
72+
private static final int DEFAULT_LDAP_READ_TIMEOUT = 3000;
6173

74+
@JsonProperty
6275
private String url;
76+
@JsonProperty
6377
private String username;
78+
@JsonProperty
6479
private String password;
80+
@JsonProperty
6581
private int connectTimeout;
82+
@JsonProperty
6683
private int readTimeout;
67-
private int interval = 10 * 1000;
6884

85+
private int interval = 10 * 1000;
6986
private final Map<String, String> env;
7087
private transient LdapContext ctx;
7188
private long errorTimestamp = 0;
@@ -166,6 +183,7 @@ public int getPort() throws URISyntaxException {
166183
}
167184
}
168185

186+
@JsonIgnore
169187
private boolean isReachable(InetAddress addr, int port, int timeOutMillis) {
170188
try (Socket soc = new Socket()) {
171189
soc.connect(new InetSocketAddress(addr, port), timeOutMillis);
@@ -190,6 +208,7 @@ public InetAddress[] getAddresses(String hostname) throws UnknownHostException {
190208
* Go through all IP addresses and find out if they are reachable.
191209
* @return true if all IP addresses are reachable, false otherwise
192210
*/
211+
@JsonIgnore
193212
public boolean isReachable() {
194213
try {
195214
InetAddress[] addresses = getAddresses(urlToHostname(getUrl()));
@@ -224,6 +243,7 @@ public boolean isReachable() {
224243
*
225244
* @return true if it is working
226245
*/
246+
@JsonIgnore
227247
public synchronized boolean isWorking() {
228248
if (ctx == null) {
229249
if (!isReachable()) {
@@ -240,6 +260,7 @@ public synchronized boolean isWorking() {
240260
*
241261
* @return the new connection or null
242262
*/
263+
@Nullable
243264
private synchronized LdapContext connect() {
244265
LOGGER.log(Level.INFO, "Connecting to LDAP server {0} ", this);
245266

@@ -354,8 +375,8 @@ private static Map<String, String> prepareEnv() {
354375
var e = new HashMap<String, String>();
355376

356377
e.put(Context.INITIAL_CONTEXT_FACTORY, LDAP_CONTEXT_FACTORY);
357-
e.put(LDAP_CONNECT_TIMEOUT_PARAMETER, Integer.toString(LDAP_CONNECT_TIMEOUT));
358-
e.put(LDAP_READ_TIMEOUT_PARAMETER, Integer.toString(LDAP_READ_TIMEOUT));
378+
e.put(LDAP_CONNECT_TIMEOUT_PARAMETER, Integer.toString(DEFAULT_LDAP_CONNECT_TIMEOUT));
379+
e.put(LDAP_READ_TIMEOUT_PARAMETER, Integer.toString(DEFAULT_LDAP_READ_TIMEOUT));
359380

360381
return e;
361382
}

0 commit comments

Comments
 (0)