/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2016 ForgeRock AS. */ package org.opends.server.config; import static java.nio.charset.Charset.defaultCharset; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.Reader; import java.net.URI; import java.util.Properties; import java.util.regex.Pattern; import org.forgerock.util.encode.Base64; /** Functions which can be invoked from within expressions. */ final class Functions { // URL scheme: alpha *( alpha | digit | "+" | "-" | "." ) private static final Pattern URL_SCHEME_PATTERN = Pattern.compile("^[A-Za-z][A-Za-z0-9+-.]*:.*"); public static String trim(String value) { return value != null ? value.trim() : null; } public static String encodeBase64(final String value) { return value != null ? Base64.encode(value.getBytes()) : null; } public static String decodeBase64(final String value) { return value != null ? new String(Base64.decode(value)) : null; } public static String read(final String url) throws Exception { try (final BufferedReader reader = new BufferedReader(open(url))) { final StringBuilder builder = new StringBuilder(); boolean isFirst = true; for (String line = reader.readLine(); line != null; line = reader.readLine()) { if (!isFirst) { builder.append(System.lineSeparator()); } builder.append(line); isFirst = false; } return builder.toString(); } } public static Properties readProperties(final String url) throws Exception { try (final Reader reader = open(url)) { final Properties properties = new Properties(); properties.load(reader); return properties; } } private static InputStreamReader open(final String url) throws Exception { // Check if the URL is actually just a relative path name without a scheme. If it is then URL parsing will // fail, so parse it as a file and open it directly, otherwise assume we have a valid URL with a scheme. if (URL_SCHEME_PATTERN.matcher(url).matches()) { return new InputStreamReader(new URI(url).toURL().openStream(), defaultCharset()); } return new InputStreamReader(new FileInputStream(url), defaultCharset()); } private Functions() { /* Utility class. */ } }