remove hard coded reference to localhost:8080 in areas.2

This commit is contained in:
Keith Woodlock
2012-05-18 13:57:47 +01:00
parent ac8c68a435
commit 965429e30e
17 changed files with 582 additions and 402 deletions
@@ -0,0 +1,119 @@
package org.mifosng.ui;
import org.mifosng.configuration.ApplicationConfigurationService;
import org.mifosng.configuration.OAuthProviderDetails;
import org.mifosng.ui.infrastructure.BasicAuthUserDetails;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
/**
* Controller responsible for routing requests on client application to correct jsp page.
*/
@Controller
public class ApplicationPagesRoutesController {
private final ApplicationConfigurationService applicationConfigurationService;
@Autowired
public ApplicationPagesRoutesController(ApplicationConfigurationService applicationConfigurationService) {
this.applicationConfigurationService = applicationConfigurationService;
}
@ExceptionHandler(AccessDeniedException.class)
public String accessDeniedException() {
return "unAuthorizedAction";
}
@RequestMapping(value="/", method = RequestMethod.GET)
public String redirectToIndexPage(final Model model, final Authentication authentication) {
BasicAuthUserDetails userDetails = (BasicAuthUserDetails) authentication.getPrincipal();
model.addAttribute("basicAuthKey", userDetails.getBasicAuthenticationKey());
model.addAttribute("baseApiUrl", userDetails.getFullApiUrl());
return "redirect:/home";
}
@RequestMapping(value = "/home", method = RequestMethod.GET)
public ModelAndView showIndividualClientsOnHomePage(final Model model, final Authentication authentication) {
BasicAuthUserDetails userDetails = (BasicAuthUserDetails) authentication.getPrincipal();
model.addAttribute("basicAuthKey", userDetails.getBasicAuthenticationKey());
model.addAttribute("baseApiUrl", userDetails.getFullApiUrl());
return new ModelAndView("/home");
}
@RequestMapping(value="/switchToClient", method = RequestMethod.POST)
public String switchToClientView(@RequestParam("client") final Long client) {
return "redirect:/portfolio/client/" + client;
}
@RequestMapping(value = "/portfolio/client/{clientId}", method = RequestMethod.GET)
public String viewClientAccount(final Model model, final Authentication authentication, @PathVariable("clientId") final Long clientId) {
BasicAuthUserDetails userDetails = (BasicAuthUserDetails) authentication.getPrincipal();
model.addAttribute("basicAuthKey", userDetails.getBasicAuthenticationKey());
model.addAttribute("baseApiUrl", userDetails.getFullApiUrl());
model.addAttribute("clientId", clientId);
return "client/viewClientAccount";
}
@RequestMapping(value = "/org/admin", method = RequestMethod.GET)
public String organisationAdminScreen(final Model model, final Authentication authentication) {
BasicAuthUserDetails userDetails = (BasicAuthUserDetails) authentication.getPrincipal();
model.addAttribute("basicAuthKey", userDetails.getBasicAuthenticationKey());
model.addAttribute("baseApiUrl", userDetails.getFullApiUrl());
return "admin/orghome";
}
@RequestMapping(value = "/org/admin/user", method = RequestMethod.GET)
public String userAdminScreen(final Model model, final Authentication authentication) {
BasicAuthUserDetails userDetails = (BasicAuthUserDetails) authentication.getPrincipal();
model.addAttribute("basicAuthKey", userDetails.getBasicAuthenticationKey());
model.addAttribute("baseApiUrl", userDetails.getFullApiUrl());
return "admin/userhome";
}
@RequestMapping(value = "/org/admin/settings", method = RequestMethod.GET)
public String userSettingsScreen(final Model model, final Authentication authentication) {
BasicAuthUserDetails userDetails = (BasicAuthUserDetails) authentication.getPrincipal();
model.addAttribute("basicAuthKey", userDetails.getBasicAuthenticationKey());
model.addAttribute("baseApiUrl", userDetails.getFullApiUrl());
return "admin/accountsettings";
}
@RequestMapping(value = "/portfolio/client/{clientId}/loan/new", method = RequestMethod.GET)
public String loadLoanCreationWorkflow(final Model model, final Authentication authentication, @PathVariable("clientId") final Long clientId) {
BasicAuthUserDetails userDetails = (BasicAuthUserDetails) authentication.getPrincipal();
model.addAttribute("basicAuthKey", userDetails.getBasicAuthenticationKey());
model.addAttribute("baseApiUrl", userDetails.getFullApiUrl());
model.addAttribute("clientId", clientId);
return "newloanapplication";
}
@RequestMapping(value = "/reporting/flexireport", method = RequestMethod.GET)
public String viewFlexibleReportingPage(final Model model, final Authentication authentication) {
OAuthProviderDetails oauthDetails = this.applicationConfigurationService.retrieveOAuthProviderDetails();
BasicAuthUserDetails userDetails = (BasicAuthUserDetails) authentication.getPrincipal();
model.addAttribute("basicAuthKey", userDetails.getBasicAuthenticationKey());
model.addAttribute("baseApiUrl", userDetails.getFullApiUrl());
model.addAttribute("baseUrl", oauthDetails.getProviderBaseUrl());
return "reports/flexireport";
}
}
@@ -1,73 +0,0 @@
package org.mifosng.ui.admin;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
/**
* Controller responsible for routing requests on client application to correct jsp page.
*/
@Controller
public class ApplicationPagesRoutesController {
@ExceptionHandler(AccessDeniedException.class)
public String accessDeniedException() {
return "unAuthorizedAction";
}
@RequestMapping(value="/", method = RequestMethod.GET)
public String redirectToIndexPage() {
return "redirect:/home";
}
@RequestMapping(value = "/home", method = RequestMethod.GET)
public ModelAndView showIndividualClientsOnHomePage() {
return new ModelAndView("/home");
}
@RequestMapping(value="/switchToClient", method = RequestMethod.POST)
public String switchToClientView(@RequestParam("client") final Long client) {
return "redirect:/portfolio/client/" + client;
}
@RequestMapping(value = "/portfolio/client/{clientId}", method = RequestMethod.GET)
public String viewClientAccount(final Model model, @PathVariable("clientId") final Long clientId) {
model.addAttribute("clientId", clientId);
return "client/viewClientAccount";
}
@RequestMapping(value = "/org/admin", method = RequestMethod.GET)
public String organisationAdminScreen() {
return "admin/orghome";
}
@RequestMapping(value = "/org/admin/user", method = RequestMethod.GET)
public String userAdminScreen() {
return "admin/userhome";
}
@RequestMapping(value = "/org/admin/settings", method = RequestMethod.GET)
public String userSettingsScreen() {
return "admin/accountsettings";
}
@RequestMapping(value = "/portfolio/client/{clientId}/loan/new", method = RequestMethod.GET)
public String loadLoanCreationWorkflow(final Model model, @PathVariable("clientId") final Long clientId) {
// UsernamePasswordAuthenticationToken authenticationToken = (UsernamePasswordAuthenticationToken) principal;
// ConsumerUserDetails user = (ConsumerUserDetails) authenticationToken.getPrincipal();
// if (user.hasNoAuthorityToSumitLoanApplication()) {
// throw new AccessDeniedException("");
// }
model.addAttribute("clientId", clientId);
return "newloanapplication";
}
}
@@ -4,6 +4,8 @@ import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import org.mifosng.configuration.ApplicationConfigurationService;
import org.mifosng.configuration.OAuthProviderDetails;
import org.mifosng.data.AuthenticatedUserData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
@@ -13,20 +15,26 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio
import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.client.RestTemplate;
/**
* A {@link AbstractUserDetailsAuthenticationProvider} which is responsible for delegating authentication to the mifos platform API.
* A {@link AbstractUserDetailsAuthenticationProvider} which is responsible for delegating authentication to the mifos platform API.
*
* If successful, the permissions associated with the authenticated user are returned. As this class is used as a hook into spring security,
* a proper authentication object is persisted for this client applications {@link SecurityContext}.
*/
public class ApiDelegatingAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {
private final RestTemplate restTemplate;
private final ApplicationConfigurationService applicationConfigurationService;
@Autowired
public ApiDelegatingAuthenticationProvider(final RestTemplate restTemplate) {
public ApiDelegatingAuthenticationProvider(final RestTemplate restTemplate, final ApplicationConfigurationService applicationConfigurationService) {
this.restTemplate = restTemplate;
this.applicationConfigurationService = applicationConfigurationService;
}
@Override
@@ -38,7 +46,12 @@ public class ApiDelegatingAuthenticationProvider extends AbstractUserDetailsAuth
String password = (String) authentication.getCredentials();
URI restUri = URI.create("http://localhost:8080/mifosng-provider/api/v1/authentication?username=" + username + "&password=" + password);
OAuthProviderDetails oauthDetails = this.applicationConfigurationService.retrieveOAuthProviderDetails();
String apiVersion = "api/v1/";
String authUrlExtension = "authentication?username=" + username + "&password=" + password;
StringBuilder authenticationApiUrl = new StringBuilder(oauthDetails.getProviderBaseUrl()).append(apiVersion).append(authUrlExtension);
URI restUri = URI.create(authenticationApiUrl.toString());
ResponseEntity<AuthenticatedUserData> s = this.restTemplate.postForEntity(restUri, authRequest(), AuthenticatedUserData.class);
UserDetails userDetails = null;
@@ -49,7 +62,8 @@ public class ApiDelegatingAuthenticationProvider extends AbstractUserDetailsAuth
for (String permission : authenticatedUserData.getPermissions()) {
authorities.add(new SimpleGrantedAuthority(permission));
}
userDetails = new User(authenticatedUserData.getUsername(), "[not needed]", authorities);
User user = new User(authenticatedUserData.getUsername(), "[not needed]", authorities);
userDetails = new BasicAuthUserDetails(user, authenticatedUserData.getBase64EncodedAuthenticationKey(), oauthDetails.getProviderBaseUrl(), apiVersion);
}
return userDetails;
@@ -63,4 +77,4 @@ public class ApiDelegatingAuthenticationProvider extends AbstractUserDetailsAuth
HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestHeaders);
return requestEntity;
}
}
}
@@ -0,0 +1,73 @@
package org.mifosng.ui.infrastructure;
import java.util.Collection;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
public class BasicAuthUserDetails implements UserDetails {
private final User user;
private final String basicAuthenticationKey;
private final String apiBaseUrl;
private final String apiVersion;
public BasicAuthUserDetails(User user, String basicAuthenticationKey, String apiBaseUrl, String apiVersion) {
this.user = user;
this.basicAuthenticationKey = basicAuthenticationKey;
this.apiBaseUrl = apiBaseUrl;
this.apiVersion = apiVersion;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return this.user.getAuthorities();
}
@Override
public String getPassword() {
return this.getPassword();
}
@Override
public String getUsername() {
return this.user.getUsername();
}
@Override
public boolean isAccountNonExpired() {
return this.user.isAccountNonExpired();
}
@Override
public boolean isAccountNonLocked() {
return this.user.isAccountNonExpired();
}
@Override
public boolean isCredentialsNonExpired() {
return this.user.isCredentialsNonExpired();
}
@Override
public boolean isEnabled() {
return this.user.isEnabled();
}
public String getBasicAuthenticationKey() {
return basicAuthenticationKey;
}
public String getApiBaseUrl() {
return apiBaseUrl;
}
public String getApiVersion() {
return apiVersion;
}
public String getFullApiUrl() {
return this.apiBaseUrl + apiVersion;
}
}
@@ -1,48 +0,0 @@
package org.mifosng.ui.reporting;
import org.mifosng.configuration.ApplicationConfigurationService;
import org.mifosng.configuration.OAuthProviderDetails;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/reporting")
public class ReportingController {
private final ApplicationConfigurationService applicationConfigurationService;
@Autowired
public ReportingController(
ApplicationConfigurationService applicationConfigurationService) {
this.applicationConfigurationService = applicationConfigurationService;
}
@RequestMapping(value = "/flexireport", method = RequestMethod.GET)
public String viewFlexibleReportingPage(final Model model) {
// UsernamePasswordAuthenticationToken authenticationToken = (UsernamePasswordAuthenticationToken) principal;
// ConsumerUserDetails user = (ConsumerUserDetails) authenticationToken.getPrincipal();
// if (user.hasNoReportingAuthority()) {
// throw new AccessDeniedException("");
// }
OAuthProviderDetails oauthDetails = this.applicationConfigurationService
.retrieveOAuthProviderDetails();
model.addAttribute("baseUrl", oauthDetails.getProviderBaseUrl());
// model.addAttribute("consumerKey", oauthDetails.getConsumerkey());
// model.addAttribute("consumerSecret", oauthDetails.getSharedSecret());
//
return "reports/flexireport";
}
@ExceptionHandler(AccessDeniedException.class)
public String accessDeniedException() {
return "unAuthorizedAction";
}
}