Author: btellier Date: Thu Dec 17 14:54:07 2015 New Revision: 1720569 URL: http://svn.apache.org/viewvc?rev=1720569&view=rev Log: JAMES-1618 Add a memory implementation for UsersRepository for testing purposes
Added: james/project/trunk/server/data/data-memory/ james/project/trunk/server/data/data-memory/pom.xml james/project/trunk/server/data/data-memory/src/ james/project/trunk/server/data/data-memory/src/main/ james/project/trunk/server/data/data-memory/src/main/java/ james/project/trunk/server/data/data-memory/src/main/java/org/ james/project/trunk/server/data/data-memory/src/main/java/org/apache/ james/project/trunk/server/data/data-memory/src/main/java/org/apache/james/ james/project/trunk/server/data/data-memory/src/main/java/org/apache/james/user/ james/project/trunk/server/data/data-memory/src/main/java/org/apache/james/user/memory/ james/project/trunk/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java james/project/trunk/server/data/data-memory/src/test/ james/project/trunk/server/data/data-memory/src/test/java/ james/project/trunk/server/data/data-memory/src/test/java/org/ james/project/trunk/server/data/data-memory/src/test/java/org/apache/ james/project/trunk/server/data/data-memory/src/test/java/org/apache/james/ james/project/trunk/server/data/data-memory/src/test/java/org/apache/james/user/ james/project/trunk/server/data/data-memory/src/test/java/org/apache/james/user/memory/ james/project/trunk/server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryUsersRepositoryTest.java Modified: james/project/trunk/server/pom.xml Added: james/project/trunk/server/data/data-memory/pom.xml URL: http://svn.apache.org/viewvc/james/project/trunk/server/data/data-memory/pom.xml?rev=1720569&view=auto ============================================================================== --- james/project/trunk/server/data/data-memory/pom.xml (added) +++ james/project/trunk/server/data/data-memory/pom.xml Thu Dec 17 14:54:07 2015 @@ -0,0 +1,106 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <artifactId>james-server</artifactId> + <groupId>org.apache.james</groupId> + <version>3.0.0-beta5-SNAPSHOT</version> + <relativePath>../../pom.xml</relativePath> + </parent> + + <artifactId>james-server-data-memory</artifactId> + <packaging>bundle</packaging> + + <name>Apache James :: Server :: Data :: MEMORY</name> + + <dependencies> + <dependency> + <groupId>org.apache.james</groupId> + <artifactId>james-server-data-api</artifactId> + </dependency> + <dependency> + <groupId>org.apache.james</groupId> + <artifactId>james-server-data-library</artifactId> + </dependency> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> + <dependency> + <groupId>${javax.mail.groupId}</groupId> + <artifactId>${javax.mail.artifactId}</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.james</groupId> + <artifactId>james-server-data-library</artifactId> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>info.cukes</groupId> + <artifactId>cucumber-java</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>info.cukes</groupId> + <artifactId>cucumber-junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>test-jar</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <extensions>true</extensions> + </plugin> + </plugins> + </build> +</project> Added: james/project/trunk/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java?rev=1720569&view=auto ============================================================================== --- james/project/trunk/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java (added) +++ james/project/trunk/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java Thu Dec 17 14:54:07 2015 @@ -0,0 +1,104 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.user.memory; + +import com.google.common.base.Function; +import com.google.common.base.Optional; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.HierarchicalConfiguration; +import org.apache.james.user.api.UsersRepositoryException; +import org.apache.james.user.api.model.User; +import org.apache.james.user.lib.AbstractUsersRepository; +import org.apache.james.user.lib.model.DefaultUser; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class MemoryUsersRepository extends AbstractUsersRepository { + + private final Map<String, User> userByName; + private String algo; + + public MemoryUsersRepository() { + this.userByName = new HashMap<String, User>(); + this.algo = "MD5"; + } + + @Override + public void doConfigure(HierarchicalConfiguration config) throws ConfigurationException { + algo = config.getString("algorithm", "MD5"); + super.doConfigure(config); + } + + @Override + protected void doAddUser(String username, String password) throws UsersRepositoryException { + DefaultUser user = new DefaultUser(username, algo); + user.setPassword(password); + userByName.put(username.toLowerCase(), user); + } + + @Override + public User getUserByName(String name) throws UsersRepositoryException { + return userByName.get(name); + } + + @Override + public void updateUser(User user) throws UsersRepositoryException { + User existingUser = getUserByName(user.getUserName()); + if (existingUser == null) { + throw new UsersRepositoryException("Please provide an existing user to update"); + } + userByName.put(user.getUserName().toLowerCase(), user); + } + + @Override + public void removeUser(String name) throws UsersRepositoryException { + if (userByName.remove(name) == null) { + throw new UsersRepositoryException("unable to remove unknown user " + name); + } + } + + @Override + public boolean contains(String name) throws UsersRepositoryException { + return userByName.containsKey(name.toLowerCase()); + } + + @Override + public boolean test(String name, final String password) throws UsersRepositoryException { + return Optional.fromNullable(userByName.get(name)) + .transform(new Function<User, Boolean>() { + public Boolean apply(User user) { + System.out.println(user); + return user.verifyPassword(password); + } + }).or(false); + } + + @Override + public int countUsers() throws UsersRepositoryException { + return userByName.size(); + } + + @Override + public Iterator<String> list() throws UsersRepositoryException { + return userByName.keySet().iterator(); + } +} Added: james/project/trunk/server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryUsersRepositoryTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryUsersRepositoryTest.java?rev=1720569&view=auto ============================================================================== --- james/project/trunk/server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryUsersRepositoryTest.java (added) +++ james/project/trunk/server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryUsersRepositoryTest.java Thu Dec 17 14:54:07 2015 @@ -0,0 +1,31 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.user.memory; + +import org.apache.james.user.lib.AbstractUsersRepository; +import org.apache.james.user.lib.AbstractUsersRepositoryTest; + +public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest { + + @Override + protected AbstractUsersRepository getUsersRepository() throws Exception { + return new MemoryUsersRepository(); + } +} Modified: james/project/trunk/server/pom.xml URL: http://svn.apache.org/viewvc/james/project/trunk/server/pom.xml?rev=1720569&r1=1720568&r2=1720569&view=diff ============================================================================== --- james/project/trunk/server/pom.xml (original) +++ james/project/trunk/server/pom.xml Thu Dec 17 14:54:07 2015 @@ -87,6 +87,7 @@ <module>data/data-file</module> <module>data/data-ldap</module> <module>data/data-hbase</module> + <module>data/data-memory</module> <module>protocols/fetchmail</module> <module>protocols/protocols-imap4</module> --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org