I've attached a simple patch for org.restlet.Guard which breaks out the
checking of identifier.equals(secret) to a separate method. We use
Acegi Security and this lets me simply delegate the username/password
check to the ProviderManager without having to override authenticate()
completely. By default, authenticate(identifier,secret) still delegates
to findSecret().
Index: Guard.java
===================================================================
--- Guard.java (revision 1549)
+++ Guard.java (working copy)
@@ -84,14 +84,14 @@
}
/**
- * Indicates if the call is properly authenticated. By default, a
call is
- * authenticated if the request has a challenge response with a
correct
- * login/password couple as verified via the findSecret() method.
- *
+ * Indicates if the call is properly authenticated. By default, this
+ * delegates credential checking to authenticate().
+ *
* @param request
* The request to authenticate.
* @return -1 if the given credentials were invalid, 0 if no
credentials
- * were found and 1 otherwise.
+ * were found and 1 otherwise.
+ * @see #authenticate(identifier,secret)
*/
public int authenticate(Request request) {
int result = 0;
@@ -110,11 +110,7 @@
// Check the credentials
if ((identifier != null) && (secret != null)) {
- if (secret.equals(findSecret(identifier))) {
- result = 1;
- } else {
- result = -1;
- }
+ result = authenticate(identifier, secret) ? 1 :
-1;
}
} else {
// The challenge schemes are incompatible, we need to
@@ -126,6 +122,19 @@
}
return result;
+ }
+
+ /**
+ * Indicates if the secret is valid for the given identifier. By
default,
+ * this returns true given the correct login/password couple as
verified
+ * via the findSecret() method.
+ *
+ * @param identifier the identifier
+ * @param secret the identifier's secret
+ * @return true if the secret is valid for the given
identifier
+ */
+ protected boolean authenticate(String identifier, String secret) {
+ return (secret.equals(findSecret(identifier)));
}
/**
Index: Guard.java
===================================================================
--- Guard.java (revision 1549)
+++ Guard.java (working copy)
@@ -84,14 +84,14 @@
}
/**
- * Indicates if the call is properly authenticated. By default, a call is
- * authenticated if the request has a challenge response with a correct
- * login/password couple as verified via the findSecret() method.
- *
+ * Indicates if the call is properly authenticated. By default, this
+ * delegates credential checking to authenticate().
+ *
* @param request
* The request to authenticate.
* @return -1 if the given credentials were invalid, 0 if no credentials
- * were found and 1 otherwise.
+ * were found and 1 otherwise.
+ * @see #authenticate(identifier,secret)
*/
public int authenticate(Request request) {
int result = 0;
@@ -110,11 +110,7 @@
// Check the credentials
if ((identifier != null) && (secret != null)) {
- if (secret.equals(findSecret(identifier))) {
- result = 1;
- } else {
- result = -1;
- }
+ result = authenticate(identifier, secret) ? 1 : -1;
}
} else {
// The challenge schemes are incompatible, we need to
@@ -126,6 +122,19 @@
}
return result;
+ }
+
+ /**
+ * Indicates if the secret is valid for the given identifier. By default,
+ * this returns true given the correct login/password couple as verified
+ * via the findSecret() method.
+ *
+ * @param identifier the identifier
+ * @param secret the identifier's secret
+ * @return true if the secret is valid for the given identifier
+ */
+ protected boolean authenticate(String identifier, String secret) {
+ return (secret.equals(findSecret(identifier)));
}
/**