Skip to content

Commit

Permalink
Merge 4325236 into 556a71b
Browse files Browse the repository at this point in the history
  • Loading branch information
dickschoeller committed Feb 13, 2019
2 parents 556a71b + 4325236 commit 535c2de
Show file tree
Hide file tree
Showing 30 changed files with 690 additions and 117 deletions.
4 changes: 4 additions & 0 deletions gedbrowser-security/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@
<groupId>org.schoellerfamily.gedbrowser</groupId>
<artifactId>gedbrowser-reader</artifactId>
</dependency>
<dependency>
<groupId>org.schoellerfamily.gedbrowser</groupId>
<artifactId>gedbrowser-writer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.schoellerfamily.gedbrowser.security.model.UserRequest;
import org.schoellerfamily.gedbrowser.security.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
// import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
Expand Down Expand Up @@ -80,9 +80,9 @@ public ResponseEntity<?> addUser(
1L, /* userRequest.getId(),*/ "Username already exists");
}
final SecurityUser user = this.userService.save(userRequest);
final HttpHeaders headers = new HttpHeaders();
headers.setLocation(ucBuilder.path("/v1/user/{userUsername}")
.buildAndExpand(user.getUsername()).toUri());
// final HttpHeaders headers = new HttpHeaders();
// headers.setLocation(ucBuilder.path("/v1/user/{userUsername}")
// .buildAndExpand(user.getUsername()).toUri());
return new ResponseEntity<SecurityUser>(user, HttpStatus.CREATED);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,47 +14,69 @@ public final class SecurityUsers implements Users<SecurityUser> {
private final Map<String, SecurityUser> users = new HashMap<>();

/**
* @param user the user to add
* @return that user
* The name of the file for persisting the users.
*/
private final String userFileName;

/**
* @param userFileName the name of the file for persisting the users
*/
public SecurityUsers(final String userFileName) {
this.userFileName = userFileName;
}

/**
* {@inheritDoc}
*/
@Override
public SecurityUser add(final SecurityUser user) {
return users.put(user.getUsername(), user);
}

/**
* @param user the user to remove
* @return that user
* {@inheritDoc}
*/
@Override
public SecurityUser remove(final SecurityUser user) {
return users.remove(user.getUsername());
}

/**
* @param username the username of the user we are getting
* @return that user
* {@inheritDoc}
*/
@Override
public SecurityUser get(final String username) {
return users.get(username);
}

/**
* Resets to an empty set.
* {@inheritDoc}
*/
@Override
public void clear() {
users.clear();
}

/**
* @return the iterator for the value collection
* {@inheritDoc}
*/
@Override
public Iterator<SecurityUser> iterator() {
return users.values().iterator();
}

/**
* @return the iterator for the value collection
* {@inheritDoc}
*/
@Override
public int size() {
return users.values().size();
}

/**
* @return the name of the file persisting the users
*/
public String getUserFileName() {
return userFileName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,32 @@
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.schoellerfamily.gedbrowser.security.model.SecurityUser;
import org.schoellerfamily.gedbrowser.security.model.SecurityUsers;
import org.schoellerfamily.gedbrowser.security.model.UserImpl;
import org.schoellerfamily.gedbrowser.security.model.UserRequest;
import org.schoellerfamily.gedbrowser.security.model.SecurityUsers;
import org.schoellerfamily.gedbrowser.security.service.UserService;
import org.schoellerfamily.gedbrowser.writer.users.UsersWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

/**
* @author Dick Schoeller
*/
@Service
public class UserServiceImpl implements UserService {
/** Logger. */
private final transient Log logger = LogFactory.getLog(getClass());

/** */
@Autowired
private SecurityUsers users;

/** */
@Autowired
private PasswordEncoder passwordEncoder;
Expand All @@ -48,41 +53,45 @@ public final SecurityUser findByUsername(final String username)
return users.get(username);
}

// /**
// * {@inheritDoc}
// */
// @PreAuthorize("hasRole('ADMIN')")
// @Override
// public final User findById(final Long id) throws AccessDeniedException {
// final User u = users.findOne(id);
// return u;
// }
// /**
// * {@inheritDoc}
// */
// @PreAuthorize("hasRole('ADMIN')")
// @Override
// public final User findById(final Long id) throws AccessDeniedException {
// final User u = users.findOne(id);
// return u;
// }

/**
* {@inheritDoc}
*/
@PreAuthorize("hasRole('ADMIN')")
@Override
public final List<SecurityUser> findAll() throws AccessDeniedException {
final List<SecurityUser> result = new ArrayList<>();
for (final SecurityUser user: users) {
result.add(user);
}
return result;
final List<SecurityUser> result = new ArrayList<>();
for (final SecurityUser user : users) {
result.add(user);
}
return result;
}

/**
* {@inheritDoc}
*/
@Override
public SecurityUser save(final UserRequest userRequest) {
final UserImpl user = new UserImpl();
user.setUsername(userRequest.getUsername());
user.setPassword(passwordEncoder.encode(userRequest.getPassword()));
user.setFirstname(userRequest.getFirstname());
user.setLastname(userRequest.getLastname());
user.addRole("USER");
users.add(user);
return user;
logger.info("save user" + userRequest.getUsername());
final UserImpl user = new UserImpl();
user.setUsername(userRequest.getUsername());
user.setPassword(passwordEncoder.encode(userRequest.getPassword()));
user.setFirstname(userRequest.getFirstname());
user.setLastname(userRequest.getLastname());
user.addRole("USER");
users.add(user);
final UsersWriter usersWriter = new UsersWriter(users,
users.getUserFileName());
usersWriter.write();
return user;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,17 @@

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.schoellerfamily.gedbrowser.security.model.SecurityUser;
import org.schoellerfamily.gedbrowser.security.model.UserImpl;
import org.schoellerfamily.gedbrowser.security.model.UserRequest;
import org.schoellerfamily.gedbrowser.security.test.Application;
import org.schoellerfamily.gedbrowser.security.test.SecurityTestHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.LocalServerPort;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
Expand Down Expand Up @@ -57,6 +60,10 @@ public class UserControllerTest {
@LocalServerPort
private int port;

/** */
@Value("${gedbrowser.home:/var/lib/gedbrowser}")
private String gedbrowserHome;

/**
* Handles login/logout for the tests.
*/
Expand All @@ -73,13 +80,22 @@ public class UserControllerTest {
private UserTestHelper userHelper;

/**
* Initialize the login helper.
* Initialize the helpers. Reset user file before.
*/
@Before
public void before() {
loginHelper = new LoginTestHelper(testRestTemplate, port);
passwordHelper = new PasswordTestHelper(testRestTemplate, port);
userHelper = new UserTestHelper(testRestTemplate, port);
SecurityTestHelper.resetUserFile(gedbrowserHome + "/testUserFile.csv");
}

/**
* Reset user file after.
*/
@After
public void after() {
SecurityTestHelper.resetUserFile(gedbrowserHome + "/testUserFile.csv");
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@

import java.util.List;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.schoellerfamily.gedbrowser.security.model.SecurityUser;
import org.schoellerfamily.gedbrowser.security.model.UserRequest;
import org.schoellerfamily.gedbrowser.security.service.UserService;
import org.schoellerfamily.gedbrowser.security.test.AbstractTest;
import org.schoellerfamily.gedbrowser.security.test.SecurityTestHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.AccessDeniedException;

/**
Expand All @@ -22,6 +26,26 @@ public class UserServiceTest extends AbstractTest {
@Autowired
private UserService userService;

/** */
@Value("${gedbrowser.home:/var/lib/gedbrowser}")
private String gedbrowserHome;

/**
* Reset test file before.
*/
@Before
public void before() {
SecurityTestHelper.resetUserFile(gedbrowserHome + "/testUserFile.csv");
}

/**
* Reset test file after.
*/
@After
public void after() {
SecurityTestHelper.resetUserFile(gedbrowserHome + "/testUserFile.csv");
}

/**
* @throws AccessDeniedException if we can't get it
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package org.schoellerfamily.gedbrowser.security.test;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* @author dick
*/
public final class SecurityTestHelper {
/** Logger. */
private static final transient Log LOGGER =
LogFactory.getLog(SecurityTestHelper.class);

/**
* Private constructor.
*/
private SecurityTestHelper() {
// Empty
}
/**
* @param userFile the path of the file to reset
*/
public static void resetUserFile(final String userFile) {
LOGGER.info("resetting " + userFile);
final String[] strings = {
"schoeller@comcast.net,Richard,Schoeller,"
+ "schoeller@comcast.net,HAHANOWAY,USER,ADMIN\n",
"guest,,,,guest,USER\n" };
try (FileOutputStream fstream = new FileOutputStream(userFile);
BufferedOutputStream bstream = new BufferedOutputStream(
fstream)) {
for (final String string : strings) {
bstream.write(string.getBytes(StandardCharsets.UTF_8));
}
} catch (IOException e) {
LOGGER.error("Problem writing user file", e);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ private SecurityUsers readUserFile(final String userFile) {
final UsersReader<SecurityUser, SecurityUsers> usersReader =
new UsersReader<>();
return (SecurityUsers) usersReader.readUserFile(userFile,
() -> new SecurityUsers(),
() -> new SecurityUsers(userFile),
() -> new UserImpl()
);
}
Expand Down
Loading

0 comments on commit 535c2de

Please sign in to comment.