added new exception for userinfo, addresses #133
parent
c5244db1a2
commit
a65504c0cb
|
@ -0,0 +1,25 @@
|
|||
package org.mitre.openid.connect.exception;
|
||||
|
||||
public class UserNotFoundException extends RuntimeException {
|
||||
|
||||
public UserNotFoundException() {
|
||||
super();
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
public UserNotFoundException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
public UserNotFoundException(String message) {
|
||||
super(message);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
public UserNotFoundException(Throwable cause) {
|
||||
super(cause);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
}
|
|
@ -16,9 +16,11 @@
|
|||
package org.mitre.openid.connect.web;
|
||||
|
||||
import java.security.Principal;
|
||||
import java.util.Map;
|
||||
|
||||
import org.mitre.oauth2.service.OAuth2TokenEntityService;
|
||||
import org.mitre.openid.connect.exception.UnknownUserInfoSchemaException;
|
||||
import org.mitre.openid.connect.exception.UserNotFoundException;
|
||||
import org.mitre.openid.connect.model.UserInfo;
|
||||
import org.mitre.openid.connect.service.UserInfoService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -31,6 +33,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
||||
/**
|
||||
* OpenID Connect UserInfo endpoint, as specified in Standard sec 5 and Messages sec 2.4.
|
||||
*
|
||||
|
@ -41,13 +45,18 @@ import org.springframework.web.bind.annotation.RequestParam;
|
|||
public class UserInfoEndpoint {
|
||||
|
||||
@Autowired
|
||||
OAuth2TokenEntityService tokenService;
|
||||
private OAuth2TokenEntityService tokenService;
|
||||
|
||||
@Autowired
|
||||
UserInfoService userInfoService;
|
||||
private UserInfoService userInfoService;
|
||||
|
||||
private Map<String, String> schemaToViewNameMap = ImmutableMap.of(
|
||||
openIdSchema, jsonUserInfoViewName,
|
||||
pocoSchema, pocoUserInfoViewName
|
||||
);
|
||||
|
||||
// Valid schemas and associated views
|
||||
private static final String openIdSchema = "openId";
|
||||
private static final String openIdSchema = "openid";
|
||||
private static final String pocoSchema = "poco";
|
||||
private static final String jsonUserInfoViewName = "jsonUserInfoView";
|
||||
private static final String pocoUserInfoViewName = "pocoUserInfoView";
|
||||
|
@ -58,27 +67,24 @@ public class UserInfoEndpoint {
|
|||
* @throws UsernameNotFoundException if the user does not exist or cannot be found
|
||||
* @throws UnknownUserInfoSchemaException if an unknown schema is used
|
||||
*/
|
||||
@PreAuthorize("hasRole('ROLE_USER') and #oauth2.hasScope('openid')") // TODO: need to add the check for the "openid" scope, which is REQUIRED
|
||||
@PreAuthorize("hasRole('ROLE_USER') and #oauth2.hasScope('openid')")
|
||||
@RequestMapping(value="/userinfo", method= {RequestMethod.GET, RequestMethod.POST})
|
||||
public String getInfo(Principal p, @RequestParam("schema") String schema, Model model) {
|
||||
|
||||
if (p == null) {
|
||||
throw new UsernameNotFoundException("Invalid User");
|
||||
throw new UserNotFoundException("Invalid User");
|
||||
}
|
||||
|
||||
String viewName = null;
|
||||
if (schema.equalsIgnoreCase( openIdSchema )){
|
||||
viewName = jsonUserInfoViewName;
|
||||
} else if (schema.equalsIgnoreCase( pocoSchema )) {
|
||||
viewName = pocoUserInfoViewName;
|
||||
} else {
|
||||
String viewName = schemaToViewNameMap.get(schema);
|
||||
if (viewName == null) {
|
||||
throw new UnknownUserInfoSchemaException("Unknown User Info Schema: " + schema );
|
||||
}
|
||||
|
||||
String userId = p.getName();
|
||||
UserInfo userInfo = userInfoService.getByUserId(userId);
|
||||
|
||||
if (userInfo == null) {
|
||||
throw new UsernameNotFoundException("Invalid User");
|
||||
throw new UserNotFoundException("User not found: " + userId);
|
||||
}
|
||||
|
||||
if (p instanceof OAuth2Authentication) {
|
||||
|
|
|
@ -147,6 +147,7 @@
|
|||
<prop key="org.mitre.openid.connect.web.InvalidJwtSignatureException">exceptionAsJSONView</prop>
|
||||
<prop key="org.mitre.openid.connect.web.ExpiredTokenException">exceptionAsJSONView</prop>
|
||||
<prop key="org.mitre.openid.connect.web.InvalidJwtIssuerException">exceptionAsJSONView</prop>
|
||||
<prop key="org.mitre.openid.connect.exception.UserNotFoundException">exception/usernotfound</prop>
|
||||
</props>
|
||||
</property>
|
||||
</bean>
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
|
||||
pageEncoding="ISO-8859-1"%>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>User Not Found</title>
|
||||
</head>
|
||||
<body>
|
||||
<% response.setStatus(404); %>
|
||||
<h1>Error: requested user was not found</h1>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue