-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Updated new user filter. All that is missing is a call to the email service.
- Loading branch information
Bill Smith
committed
Jan 16, 2019
1 parent
b87325d
commit ba59bc4
Showing
3 changed files
with
60 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
61 changes: 49 additions & 12 deletions
61
pac4j-module/src/main/java/net/unicon/shibui/pac4j/AddNewUserFilter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,49 +1,86 @@ | ||
package net.unicon.shibui.pac4j; | ||
|
||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import edu.internet2.tier.shibboleth.admin.ui.controller.ErrorResponse; | ||
import edu.internet2.tier.shibboleth.admin.ui.security.model.Role; | ||
import edu.internet2.tier.shibboleth.admin.ui.security.model.User; | ||
import edu.internet2.tier.shibboleth.admin.ui.security.repository.RoleRepository; | ||
import edu.internet2.tier.shibboleth.admin.ui.security.repository.UserRepository; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import org.apache.commons.lang.RandomStringUtils; | ||
import org.apache.http.entity.ContentType; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.security.core.Authentication; | ||
import org.springframework.security.core.context.SecurityContextHolder; | ||
import org.springframework.security.crypto.bcrypt.BCrypt; | ||
|
||
import javax.servlet.Filter; | ||
import javax.servlet.FilterChain; | ||
import javax.servlet.FilterConfig; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.ServletRequest; | ||
import javax.servlet.ServletResponse; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
import java.io.IOException; | ||
import java.security.Principal; | ||
import java.util.Optional; | ||
|
||
/** | ||
* @author Bill Smith (wsmith@unicon.net) | ||
*/ | ||
public class AddNewUserFilter implements Filter { | ||
|
||
private static final Logger logger = LoggerFactory.getLogger(AddNewUserFilter.class); | ||
private static final String ROLE_NONE = "ROLE_NONE"; | ||
|
||
private UserRepository userRepository; | ||
private RoleRepository roleRepository; | ||
|
||
public AddNewUserFilter(UserRepository userRepository) { | ||
public AddNewUserFilter(UserRepository userRepository, RoleRepository roleRepository) { | ||
this.userRepository = userRepository; | ||
this.roleRepository = roleRepository; | ||
} | ||
|
||
@Override | ||
public void init(FilterConfig filterConfig) throws ServletException { | ||
logger.info("WOO! INIT!"); | ||
} | ||
|
||
@Override | ||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { | ||
logger.info("WOO! Doing filter..."); | ||
Principal principal = ((HttpServletRequest) request).getUserPrincipal(); | ||
String username = principal.getName(); | ||
logger.info("WOO! Principal: " + username); | ||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); | ||
if (authentication != null) { | ||
String username = authentication.getName(); | ||
if (username != null) { | ||
Optional<User> persistedUser = userRepository.findByUsername(username); | ||
User user; | ||
if (!persistedUser.isPresent()) { | ||
user = new User(); | ||
user.setUsername(username); | ||
user.setPassword(BCrypt.hashpw(RandomStringUtils.randomAlphanumeric(20), BCrypt.gensalt())); | ||
Role noRole = roleRepository.findByName(ROLE_NONE).orElse(new Role(ROLE_NONE)); | ||
user.getRoles().add(noRole); | ||
userRepository.save(user); | ||
//TODO: Add call to email service here | ||
} else { | ||
user = persistedUser.get(); | ||
} | ||
if (user.getRole().equals(ROLE_NONE)) { | ||
response.setContentType(ContentType.APPLICATION_JSON.getMimeType()); | ||
((HttpServletResponse) response).setStatus(HttpStatus.FORBIDDEN.value()); | ||
response.getOutputStream().write(getJsonResponseBytes( | ||
new ErrorResponse(String.valueOf(HttpStatus.FORBIDDEN.value()), | ||
"Your account is not yet authorized to access ShibUI."))); | ||
return; | ||
} // else, user is in the system already, carry on | ||
} | ||
} | ||
|
||
chain.doFilter(request, response); | ||
} | ||
|
||
@Override | ||
public void destroy() { | ||
logger.info("WOO! DESTROY!"); | ||
} | ||
|
||
private byte[] getJsonResponseBytes(ErrorResponse eErrorResponse) throws IOException { | ||
String errorResponseJson = new ObjectMapper().writeValueAsString(eErrorResponse); | ||
return errorResponseJson.getBytes(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters