From c23b176567dec5dc026b792636264395ad82377c Mon Sep 17 00:00:00 2001
From: Amanda Anganes <aanganes@mitre.org>
Date: Thu, 23 Aug 2012 10:46:08 -0400
Subject: [PATCH] Database backed authorization-code-service now works.

---
 .../mitre/oauth2/model/AuthorizationCodeEntity.java  | 12 ++++++++++--
 .../impl/JpaAuthorizationCodeRepository.java         |  5 ++++-
 .../impl/DefaultOAuth2AuthorizationCodeService.java  |  3 +--
 .../src/main/resources/META-INF/persistence.xml      |  1 +
 .../src/main/webapp/WEB-INF/application-context.xml  |  2 +-
 5 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/openid-connect-common/src/main/java/org/mitre/oauth2/model/AuthorizationCodeEntity.java b/openid-connect-common/src/main/java/org/mitre/oauth2/model/AuthorizationCodeEntity.java
index 70b5ac76c..2747b6f3a 100644
--- a/openid-connect-common/src/main/java/org/mitre/oauth2/model/AuthorizationCodeEntity.java
+++ b/openid-connect-common/src/main/java/org/mitre/oauth2/model/AuthorizationCodeEntity.java
@@ -32,13 +32,21 @@ public class AuthorizationCodeEntity {
 	
 	private AuthorizationRequestHolder authorizationRequestHolder;
 
+	/**
+	 * Default constructor.
+	 */
+	public AuthorizationCodeEntity() {
+		
+	}
+	
 	/**
 	 * Create a new AuthorizationCodeEntity with the given code.
 	 * 
 	 * @param code the authorization code
 	 */
-	public AuthorizationCodeEntity(String code) {
+	public AuthorizationCodeEntity(String code, AuthorizationRequestHolder authRequest) {
 		this.code = code;
+		this.authorizationRequestHolder = authRequest;
 	}
 	
 	/**
@@ -76,7 +84,7 @@ public class AuthorizationCodeEntity {
 	 * @return the authorizationRequestHolder
 	 */
 	@Lob
-	@Basic(fetch=FetchType.LAZY)
+	@Basic(fetch=FetchType.EAGER)
 	@Column(name="authorization_request_holder")
 	public AuthorizationRequestHolder getAuthorizationRequestHolder() {
 		return authorizationRequestHolder;
diff --git a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthorizationCodeRepository.java b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthorizationCodeRepository.java
index ccfe8acba..e549735fb 100644
--- a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthorizationCodeRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthorizationCodeRepository.java
@@ -53,7 +53,10 @@ public class JpaAuthorizationCodeRepository implements AuthorizationCodeReposito
 			throw new InvalidGrantException("JpaAuthorizationCodeRepository: no authorization code found for value " + code);
 		}
 		
-		return result.getAuthorizationRequestHolder();
+		AuthorizationRequestHolder authRequest = result.getAuthorizationRequestHolder();
+		//authRequest.getAuthenticationRequest();
+		
+		return authRequest;
 
 	}
 
diff --git a/openid-connect-server/src/main/java/org/mitre/oauth2/service/impl/DefaultOAuth2AuthorizationCodeService.java b/openid-connect-server/src/main/java/org/mitre/oauth2/service/impl/DefaultOAuth2AuthorizationCodeService.java
index f653d3a1d..fff72ce5b 100644
--- a/openid-connect-server/src/main/java/org/mitre/oauth2/service/impl/DefaultOAuth2AuthorizationCodeService.java
+++ b/openid-connect-server/src/main/java/org/mitre/oauth2/service/impl/DefaultOAuth2AuthorizationCodeService.java
@@ -31,8 +31,7 @@ public class DefaultOAuth2AuthorizationCodeService implements AuthorizationCodeS
 	public String createAuthorizationCode(AuthorizationRequestHolder authentication) {
 		String code = generator.generate();
 		
-		AuthorizationCodeEntity entity = new AuthorizationCodeEntity(code);
-		
+		AuthorizationCodeEntity entity = new AuthorizationCodeEntity(code, authentication);
 		repository.save(entity);
 		
 		return code;
diff --git a/openid-connect-server/src/main/resources/META-INF/persistence.xml b/openid-connect-server/src/main/resources/META-INF/persistence.xml
index 57aeaf32b..8cd495e85 100644
--- a/openid-connect-server/src/main/resources/META-INF/persistence.xml
+++ b/openid-connect-server/src/main/resources/META-INF/persistence.xml
@@ -9,6 +9,7 @@
         <class>org.mitre.oauth2.model.OAuth2AccessTokenEntity</class>
         <class>org.mitre.oauth2.model.OAuth2RefreshTokenEntity</class>
         <class>org.mitre.oauth2.model.AuthenticationHolder</class>
+        <class>org.mitre.oauth2.model.AuthorizationCodeEntity</class>
         <class>org.mitre.openid.connect.model.Address</class>
         <class>org.mitre.openid.connect.model.ApprovedSite</class>
         <class>org.mitre.openid.connect.model.Event</class>
diff --git a/openid-connect-server/src/main/webapp/WEB-INF/application-context.xml b/openid-connect-server/src/main/webapp/WEB-INF/application-context.xml
index b06dacfdc..7ba55d719 100644
--- a/openid-connect-server/src/main/webapp/WEB-INF/application-context.xml
+++ b/openid-connect-server/src/main/webapp/WEB-INF/application-context.xml
@@ -85,7 +85,7 @@
 		authorization-endpoint-url="/authorize" 
 		token-endpoint-url="/token">
 		
-		<oauth:authorization-code />
+		<oauth:authorization-code authorization-code-services-ref="defaultOAuth2AuthorizationCodeService"/>
 		<oauth:implicit />
 		
 	</oauth:authorization-server>