You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by rd...@apache.org on 2008/12/31 16:14:17 UTC
svn commit: r730408 - in /james/protocols/imap/trunk:
deployment/src/test/java/org/apache/james/imap/functional/jpa/
deployment/src/test/java/org/apache/james/imap/functional/jpa/user/
jpa/src/main/java/org/apache/james/imap/jpa/
Author: rdonkin
Date: Wed Dec 31 07:14:16 2008
New Revision: 730408
URL: http://svn.apache.org/viewvc?rev=730408&view=rev
Log:
Split authentication (which will usually be delegated to a container) from subscription management (which is particular requirements related to IMAP). Aim to add JPA support for subscription (but not authentication) persistence.
Added:
james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/
james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/InMemoryUserManager.java
- copied, changed from r730402, james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/SimpleUserManager.java
james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/User.java
- copied, changed from r730402, james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/UserDetails.java
james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Authenticator.java
- copied, changed from r730402, james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UserManager.java
james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Subscriber.java
- copied, changed from r730402, james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UserManager.java
Removed:
james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/SimpleUserManager.java
james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/UserDetails.java
james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UserManager.java
Modified:
james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/JPAHostSystem.java
james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java
Modified: james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/JPAHostSystem.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/JPAHostSystem.java?rev=730408&r1=730407&r2=730408&view=diff
==============================================================================
--- james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/JPAHostSystem.java (original)
+++ james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/JPAHostSystem.java Wed Dec 31 07:14:16 2008
@@ -28,6 +28,7 @@
import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
import org.apache.james.imap.functional.ImapHostSystem;
import org.apache.james.imap.functional.SimpleMailboxManagerProvider;
+import org.apache.james.imap.functional.jpa.user.InMemoryUserManager;
import org.apache.james.imap.jpa.JPAMailboxManager;
import org.apache.james.imap.main.DefaultImapDecoderFactory;
import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
@@ -44,7 +45,7 @@
}
private final JPAMailboxManager mailboxManager;
- private final SimpleUserManager userManager;
+ private final InMemoryUserManager userManager;
public JPAHostSystem() throws Exception {
HashMap<String, String> properties = new HashMap<String, String>();
@@ -55,9 +56,9 @@
properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");
properties.put("openjpa.MetaDataFactory", "jpa(Types=org.apache.james.imap.jpa.om.Header;org.apache.james.imap.jpa.om.Mailbox;org.apache.james.imap.jpa.om.Message)");
- userManager = new SimpleUserManager();
+ userManager = new InMemoryUserManager();
final EntityManagerFactory entityManagerFactory = OpenJPAPersistence.getEntityManagerFactory(properties);
- mailboxManager = new JPAMailboxManager(userManager, entityManagerFactory);
+ mailboxManager = new JPAMailboxManager(userManager, userManager, entityManagerFactory);
SimpleMailboxManagerProvider provider = new SimpleMailboxManagerProvider();
final DefaultImapProcessorFactory defaultImapProcessorFactory = new DefaultImapProcessorFactory();
Copied: james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/InMemoryUserManager.java (from r730402, james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/SimpleUserManager.java)
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/InMemoryUserManager.java?p2=james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/InMemoryUserManager.java&p1=james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/SimpleUserManager.java&r1=730402&r2=730408&rev=730408&view=diff
==============================================================================
--- james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/SimpleUserManager.java (original)
+++ james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/InMemoryUserManager.java Wed Dec 31 07:14:16 2008
@@ -17,48 +17,52 @@
* under the License. *
****************************************************************/
-package org.apache.james.imap.functional.jpa;
+package org.apache.james.imap.functional.jpa.user;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
-import org.apache.james.imap.jpa.UserManager;
+import org.apache.james.imap.jpa.Authenticator;
+import org.apache.james.imap.jpa.Subscriber;
import org.apache.james.imap.mailbox.SubscriptionException;
-public class SimpleUserManager implements UserManager {
+/**
+ * Stores users in memory.
+ */
+public class InMemoryUserManager implements Authenticator, Subscriber {
- private final Map users;
+ private final Map<String, User> users;
- public SimpleUserManager() {
- this.users = new HashMap();
+ public InMemoryUserManager() {
+ this.users = new HashMap<String, User>();
}
- public boolean isAuthentic(String userid, String passwd) {
- UserDetails user = (UserDetails) users.get(userid);
+ public boolean isAuthentic(String userid, CharSequence password) {
+ User user = (User) users.get(userid);
final boolean result;
if (user == null) {
result = false;
} else {
- result = (passwd.equals(user.getPassword()));
+ result = user.isPassword(password);
}
return result;
}
public void subscribe(String userid, String mailbox)
throws SubscriptionException {
- UserDetails user = (UserDetails) users.get(userid);
+ User user = (User) users.get(userid);
if (user == null) {
- user = new UserDetails(userid);
+ user = new User(userid);
users.put(userid, user);
}
user.addSubscription(mailbox);
}
- public Collection subscriptions(String userid) throws SubscriptionException {
- UserDetails user = (UserDetails) users.get(userid);
+ public Collection<String> subscriptions(String userid) throws SubscriptionException {
+ User user = (User) users.get(userid);
if (user == null) {
- user = new UserDetails(userid);
+ user = new User(userid);
users.put(userid, user);
}
return user.getSubscriptions();
@@ -66,18 +70,18 @@
public void unsubscribe(String userid, String mailbox)
throws SubscriptionException {
- UserDetails user = (UserDetails) users.get(userid);
+ User user = (User) users.get(userid);
if (user == null) {
- user = new UserDetails(userid);
+ user = new User(userid);
users.put(userid, user);
}
user.removeSubscription(mailbox);
}
- public void addUser(String userid, String password) {
- UserDetails user = (UserDetails) users.get(userid);
+ public void addUser(String userid, CharSequence password) {
+ User user = (User) users.get(userid);
if (user == null) {
- user = new UserDetails(userid);
+ user = new User(userid);
users.put(userid, user);
}
user.setPassword(password);
Copied: james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/User.java (from r730402, james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/UserDetails.java)
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/User.java?p2=james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/User.java&p1=james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/UserDetails.java&r1=730402&r2=730408&rev=730408&view=diff
==============================================================================
--- james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/UserDetails.java (original)
+++ james/protocols/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/User.java Wed Dec 31 07:14:16 2008
@@ -17,33 +17,35 @@
* under the License. *
****************************************************************/
-package org.apache.james.imap.functional.jpa;
+package org.apache.james.imap.functional.jpa.user;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
+import java.util.Set;
-public class UserDetails {
+class User {
private final String userName;
- private String password;
+ private CharSequence password;
- private final Collection subscriptions;
+ private final Set<String> subscriptions;
- public UserDetails(final String userName) {
+ public User(final String userName) {
this.userName = userName;
- this.subscriptions = new HashSet();
+ this.subscriptions = new HashSet<String>();
}
- public String getPassword() {
- return password;
+ public String getUserName() {
+ return userName;
}
-
- public void setPassword(String password) {
+
+ public void setPassword(CharSequence password) {
this.password = password;
}
- public Collection getSubscriptions() {
- return subscriptions;
+ public Collection<String> getSubscriptions() {
+ return Collections.unmodifiableSet(subscriptions);
}
public void addSubscription(String subscription) {
@@ -53,4 +55,23 @@
public void removeSubscription(String mailbox) {
this.subscriptions.remove(mailbox);
}
+
+ public boolean isPassword(CharSequence password) {
+ final boolean result;
+ if (password == null) {
+ result = this.password == null;
+ } else if (this.password == null) {
+ result = false;
+ } else if (this.password.length() == password.length()) {
+ for (int i=0;i<password.length();i++) {
+ if (password.charAt(i) != this.password.charAt(i)) {
+ return false;
+ }
+ }
+ result = true;
+ } else {
+ result = false;
+ }
+ return result;
+ }
}
Copied: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Authenticator.java (from r730402, james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UserManager.java)
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Authenticator.java?p2=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Authenticator.java&p1=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UserManager.java&r1=730402&r2=730408&rev=730408&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UserManager.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Authenticator.java Wed Dec 31 07:14:16 2008
@@ -19,19 +19,17 @@
package org.apache.james.imap.jpa;
-import java.util.Collection;
-
-import org.apache.james.imap.mailbox.SubscriptionException;
-
-public interface UserManager {
-
- public boolean isAuthentic(String userid, String passwd);
-
- public void subscribe(String user, String mailbox)
- throws SubscriptionException;
-
- public Collection subscriptions(String user) throws SubscriptionException;
-
- public void unsubscribe(String user, String mailbox)
- throws SubscriptionException;
+/**
+ * Authenticates user credentials.
+ */
+public interface Authenticator {
+
+ /**
+ * Is the given user authentic?
+ * @param userid not null
+ * @param passwd not null
+ * @return true when the user is authentic,
+ * false otherwise
+ */
+ public boolean isAuthentic(String userid, CharSequence passwd);
}
Modified: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java?rev=730408&r1=730407&r2=730408&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java Wed Dec 31 07:14:16 2008
@@ -55,13 +55,16 @@
private final Map<String, JPAMailbox> mailboxes;
- private final UserManager userManager;
+ private final Authenticator authenticator;
+
+ private final Subscriber subscriber;
private final EntityManagerFactory entityManagerFactory;
- public JPAMailboxManager(final UserManager userManager, final EntityManagerFactory entityManagerFactory) {
+ public JPAMailboxManager(final Authenticator authenticator, final Subscriber subscriber, final EntityManagerFactory entityManagerFactory) {
mailboxes = new HashMap<String, JPAMailbox>();
- this.userManager = userManager;
+ this.authenticator = authenticator;
+ this.subscriber = subscriber;
this.entityManagerFactory = entityManagerFactory;
}
@@ -333,21 +336,21 @@
}
public boolean isAuthentic(String userid, String passwd) {
- return userManager.isAuthentic(userid, passwd);
+ return authenticator.isAuthentic(userid, passwd);
}
public void subscribe(String user, String mailbox)
throws SubscriptionException {
- userManager.subscribe(user, mailbox);
+ subscriber.subscribe(user, mailbox);
}
public Collection subscriptions(String user) throws SubscriptionException {
- return userManager.subscriptions(user);
+ return subscriber.subscriptions(user);
}
public void unsubscribe(String user, String mailbox)
throws SubscriptionException {
- userManager.unsubscribe(user, mailbox);
+ subscriber.unsubscribe(user, mailbox);
}
}
Copied: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Subscriber.java (from r730402, james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UserManager.java)
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Subscriber.java?p2=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Subscriber.java&p1=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UserManager.java&r1=730402&r2=730408&rev=730408&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UserManager.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Subscriber.java Wed Dec 31 07:14:16 2008
@@ -23,15 +23,34 @@
import org.apache.james.imap.mailbox.SubscriptionException;
-public interface UserManager {
-
- public boolean isAuthentic(String userid, String passwd);
-
+/**
+ * Subscribes users.
+ */
+public interface Subscriber {
+
+ /**
+ * Subscribes the named user to the given mailbox.
+ * @param user not null
+ * @param mailbox not null
+ * @throws SubscriptionException when subscription fails
+ */
public void subscribe(String user, String mailbox)
throws SubscriptionException;
- public Collection subscriptions(String user) throws SubscriptionException;
-
+ /**
+ * Finds all subscriptions for the given user.
+ * @param user not null
+ * @return not null
+ * @throws SubscriptionException when subscriptions cannot be read
+ */
+ public Collection<String> subscriptions(String user) throws SubscriptionException;
+
+ /**
+ * Unsubscribes the given user from the given mailbox.
+ * @param user not null
+ * @param mailbox not null
+ * @throws SubscriptionException when subscriptions cannot be read
+ */
public void unsubscribe(String user, String mailbox)
throws SubscriptionException;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org