]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.enterprise/src/org/argeo/naming/LdifParser.java
Improve token authorisation
[lgpl/argeo-commons.git] / org.argeo.enterprise / src / org / argeo / naming / LdifParser.java
index e47d8133ed2fda27415068f3c5ff0e7d187a5947..9595b57f0b0d030e866b44856131ea3a6cfe5105 100644 (file)
@@ -1,11 +1,12 @@
 package org.argeo.naming;
 
-import static org.argeo.osgi.useradmin.LdifName.dn;
-
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Base64;
 import java.util.List;
@@ -28,6 +29,7 @@ import org.argeo.osgi.useradmin.UserDirectoryException;
 /** Basic LDIF parser. */
 public class LdifParser {
        private final static Log log = LogFactory.getLog(LdifParser.class);
+       private final static Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
 
        protected Attributes addAttributes(SortedMap<LdapName, Attributes> res, int lineNumber, LdapName currentDn,
                        Attributes currentAttributes) {
@@ -49,11 +51,26 @@ public class LdifParser {
                }
        }
 
+       /** With UTF-8 charset */
        public SortedMap<LdapName, Attributes> read(InputStream in) throws IOException {
+               try (Reader reader = new InputStreamReader(in, DEFAULT_CHARSET)) {
+                       return read(reader);
+               } finally {
+                       try {
+                               in.close();
+                       } catch (IOException e) {
+                               if (log.isTraceEnabled())
+                                       log.error("Cannot close stream", e);
+                       }
+               }
+       }
+
+       /** Will close the reader. */
+       public SortedMap<LdapName, Attributes> read(Reader reader) throws IOException {
                SortedMap<LdapName, Attributes> res = new TreeMap<LdapName, Attributes>();
                try {
                        List<String> lines = new ArrayList<>();
-                       try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) {
+                       try (BufferedReader br = new BufferedReader(reader)) {
                                String line;
                                while ((line = br.readLine()) != null) {
                                        lines.add(line);
@@ -101,7 +118,7 @@ public class LdifParser {
                                        Object attributeValue = isBase64 ? Base64.getDecoder().decode(cleanValueStr) : cleanValueStr;
 
                                        // manage DN attributes
-                                       if (attributeId.equals(dn.name()) || isLastLine) {
+                                       if (attributeId.equals(LdapAttrs.DN) || isLastLine) {
                                                if (currentDn != null) {
                                                        //
                                                        // ADD
@@ -113,7 +130,7 @@ public class LdifParser {
                                                        }
                                                }
 
-                                               if (attributeId.equals(dn.name()))
+                                               if (attributeId.equals(LdapAttrs.DN))
                                                        try {
                                                                currentDn = new LdapName(attributeValue.toString());
                                                                currentAttributes = new BasicAttributes(true);
@@ -138,7 +155,12 @@ public class LdifParser {
                                currentEntry.append(line);
                        }
                } finally {
-                       in.close();
+                       try {
+                               reader.close();
+                       } catch (IOException e) {
+                               if (log.isTraceEnabled())
+                                       log.error("Cannot close stream", e);
+                       }
                }
                return res;
        }