From 32edddb11bcc204628fbdaddf3b0d0e86530f6f8 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Wed, 08 Jun 2016 15:18:05 +0000
Subject: [PATCH] OPENDJ-2955 Use i18n in rest2ldap

---
 opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAPHttpApplication.java |   63 ++++++++++++++++++++++---------
 1 files changed, 45 insertions(+), 18 deletions(-)

diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAPHttpApplication.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAPHttpApplication.java
index b994823..3e312f7 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAPHttpApplication.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAPHttpApplication.java
@@ -16,17 +16,21 @@
 
 package org.forgerock.opendj.rest2ldap;
 
+import static org.forgerock.opendj.rest2ldap.Rest2ldapMessages.*;
 import static org.forgerock.http.util.Json.readJsonLenient;
 import static org.forgerock.json.JsonValueFunctions.duration;
 import static org.forgerock.json.JsonValueFunctions.enumConstant;
 import static org.forgerock.json.JsonValueFunctions.setOf;
 import static org.forgerock.opendj.rest2ldap.Rest2LDAP.configureConnectionFactory;
+import static org.forgerock.opendj.rest2ldap.Utils.newLocalizedIllegalArgumentException;
+import static org.forgerock.opendj.rest2ldap.Utils.newJsonValueException;
 import static org.forgerock.opendj.rest2ldap.authz.AuthenticationStrategies.*;
 import static org.forgerock.opendj.rest2ldap.authz.Authorizations.*;
 import static org.forgerock.opendj.rest2ldap.authz.ConditionalFilters.*;
 import static org.forgerock.opendj.rest2ldap.authz.CredentialExtractors.*;
 import static org.forgerock.util.Reject.checkNotNull;
 import static org.forgerock.util.Utils.closeSilently;
+import static org.forgerock.util.Utils.joinAsString;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -57,7 +61,6 @@
 import org.forgerock.http.io.Buffer;
 import org.forgerock.http.protocol.Headers;
 import org.forgerock.json.JsonValue;
-import org.forgerock.json.JsonValueException;
 import org.forgerock.json.resource.RequestHandler;
 import org.forgerock.json.resource.Router;
 import org.forgerock.json.resource.http.CrestHttp;
@@ -112,16 +115,39 @@
 
     /** Define the method which should be used to resolve an OAuth2 access token. */
     private enum OAuth2ResolverType {
-        RFC7662,
-        OPENAM,
-        CTS,
-        FILE
+        RFC7662, OPENAM, CTS, FILE;
+
+        private static String listValues() {
+            final List<String> values = new ArrayList<>();
+            for (final OAuth2ResolverType value : OAuth2ResolverType.values()) {
+                values.add(value.name().toLowerCase());
+            }
+            return joinAsString(",", values);
+        }
     }
 
     @VisibleForTesting
     enum Policy { OAUTH2, BASIC, ANONYMOUS }
 
-    private enum BindStrategy { SIMPLE, SEARCH, SASL_PLAIN }
+    private enum BindStrategy {
+        SIMPLE("simple"),
+        SEARCH("search"),
+        SASL_PLAIN("sasl-plain");
+
+        private final String jsonField;
+
+        BindStrategy(final String jsonField) {
+            this.jsonField = jsonField;
+        }
+
+        private static String listValues() {
+            final List<String> values = new ArrayList<>();
+            for (final BindStrategy mapping : BindStrategy.values()) {
+                values.add(mapping.jsonField);
+            }
+            return joinAsString(",", values);
+        }
+    }
 
     /**
      * Default constructor called by the HTTP Framework which will use the default configuration file location.
@@ -154,8 +180,7 @@
                     CrestHttp.newHttpHandler(configureRest2Ldap(configuration)),
                     buildAuthorizationFilter(configuration.get("authorization").required()));
         } catch (final Exception e) {
-            // TODO i18n, once supported in opendj-rest2ldap
-            final String errorMsg = "Unable to start Rest2Ldap Http Application";
+            final String errorMsg = ERR_FAIL_PARSE_CONFIGURATION.get(e.getLocalizedMessage()).toString();
             LOG.error(errorMsg, e);
             stop();
             throw new HttpApplicationException(errorMsg, e);
@@ -267,7 +292,9 @@
         case FILE:
             return newFileAccessTokenResolver(configuration.get("file").get("folderPath").required().asString());
         default:
-            throw new JsonValueException(resolver, "is not a supported access token resolver");
+            throw newJsonValueException(resolver,
+                                        ERR_CONFIG_OAUTH2_UNSUPPORTED_ACCESS_TOKEN_RESOLVER.get(
+                                                resolver.getObject(), OAuth2ResolverType.listValues()));
         }
     }
 
@@ -280,8 +307,8 @@
                                                  rfc7662.get("clientId").required().asString(),
                                                  rfc7662.get("clientSecret").required().asString());
         } catch (final URISyntaxException e) {
-            throw new IllegalArgumentException("The token introspection endpoint '"
-                    + introspectionEndPointURL + "' URL has an invalid syntax: " + e.getLocalizedMessage(), e);
+            throw new IllegalArgumentException(ERR_CONIFG_OAUTH2_INVALID_INTROSPECT_URL.get(
+                    introspectionEndPointURL, e.getLocalizedMessage()).toString(), e);
         }
     }
 
@@ -289,15 +316,14 @@
         try {
             final Duration expiration = expirationJson.as(duration());
             if (expiration.isZero() || expiration.isUnlimited()) {
-                throw new JsonValueException(expirationJson, "The cache expiration duration cannot be "
-                        + (expiration.isZero() ? "zero" : "unlimited."));
+                throw newJsonValueException(expirationJson,
+                                            expiration.isZero() ? ERR_CONIFG_OAUTH2_CACHE_ZERO_DURATION.get()
+                                                                : ERR_CONIFG_OAUTH2_CACHE_UNLIMITED_DURATION.get());
             }
             return expiration;
         } catch (final Exception e) {
-            throw new JsonValueException(expirationJson,
-                      "Malformed duration value '" + expirationJson.toString() + "' for cache expiration. "
-                    + "The duration syntax supports all human readable notations from day ('days'', 'day'', 'd'') "
-                    + "to nanosecond ('nanoseconds', 'nanosecond', 'nanosec', 'nanos', 'nano', 'ns')");
+            throw newJsonValueException(expirationJson,
+                                        ERR_CONFIG_OAUTH2_CACHE_INVALID_DURATION.get(expirationJson.toString()));
         }
     }
 
@@ -381,7 +407,8 @@
         case SASL_PLAIN:
             return buildSASLBindStrategy(config);
         default:
-            throw new IllegalArgumentException("Unsupported strategy '" + strategy + "'");
+            throw newLocalizedIllegalArgumentException(ERR_CONFIG_UNSUPPORTED_BIND_STRATEGY.get(
+                    strategy, BindStrategy.listValues()));
         }
     }
 

--
Gitblit v1.10.0