Skip to content

Commit f5010aa

Browse files
committed
Merge pull request #4 from IMSGlobal/jackson2
Jackson2
2 parents 43c24ba + 352f104 commit f5010aa

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+2039
-543
lines changed

pom.xml

Lines changed: 71 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,52 @@
77
<url>https://github.com/IMSGlobal/basiclti-util-java</url>
88
<groupId>org.imsglobal</groupId>
99
<artifactId>basiclti-util</artifactId>
10-
<version>1.0.1-SNAPSHOT</version>
10+
<version>1.1.0-SNAPSHOT</version>
1111
<organization>
1212
<name>IMS Global Learning Consortium</name>
1313
<url>www.imsglobal.org/</url>
1414
</organization>
1515
<inceptionYear>2009</inceptionYear>
1616
<packaging>jar</packaging>
1717
<licenses>
18-
<license>
19-
<name>The Apache Software License, Version 2.0</name>
20-
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
21-
</license>
18+
<license>
19+
<name>The Apache Software License, Version 2.0</name>
20+
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
21+
</license>
2222
</licenses>
2323
<developers>
24-
<developer>
25-
<name>Charles Severance</name>
26-
<email>csev@umich.edu</email>
27-
<organization>University of Michigan</organization>
28-
<organizationUrl>https://www.si.umich.edu/</organizationUrl>
29-
</developer>
30-
<developer>
31-
<name>Paul Gray</name>
32-
<email>pfbgray@gmail.com</email>
33-
<organization>Learning Objects</organization>
34-
<organizationUrl>http://www.learningobjects.com/</organizationUrl>
35-
</developer>
36-
<developer>
37-
<name>Braden Anderson</name>
38-
<email>braden@instructure.com</email>
39-
<organization>Instructure</organization>
40-
<organizationUrl>http://www.instructure.com/</organizationUrl>
41-
</developer>
24+
<developer>
25+
<name>Charles Severance</name>
26+
<email>csev@umich.edu</email>
27+
<organization>University of Michigan</organization>
28+
<organizationUrl>https://www.si.umich.edu/</organizationUrl>
29+
</developer>
30+
<developer>
31+
<name>Paul Gray</name>
32+
<email>pfbgray@gmail.com</email>
33+
<organization>Learning Objects</organization>
34+
<organizationUrl>http://www.learningobjects.com/</organizationUrl>
35+
</developer>
36+
<developer>
37+
<name>Braden Anderson</name>
38+
<email>braden@instructure.com</email>
39+
<organization>Instructure</organization>
40+
<organizationUrl>http://www.instructure.com/</organizationUrl>
41+
</developer>
4242
</developers>
43+
44+
<reporting>
45+
<plugins>
46+
<plugin>
47+
<groupId>org.apache.maven.plugins</groupId>
48+
<artifactId>maven-javadoc-plugin</artifactId>
49+
<version>2.10.1</version>
50+
<configuration>
51+
</configuration>
52+
</plugin>
53+
</plugins>
54+
</reporting>
55+
4356
<scm>
4457
<connection>scm:git:git@github.com:IMSGlobal/basiclti-util-java.git</connection>
4558
<developerConnection>scm:git:git@github.com:IMSGlobal/basiclti-util-java.git</developerConnection>
@@ -69,7 +82,13 @@
6982
<dependency>
7083
<groupId>org.codehaus.jackson</groupId>
7184
<artifactId>jackson-mapper-asl</artifactId>
72-
<version>1.8.5</version>
85+
<version>1.9.3</version>
86+
</dependency>
87+
<dependency>
88+
<groupId>org.codehaus.jackson</groupId>
89+
<artifactId>jackson-core-asl</artifactId>
90+
<version>1.9.3</version>
91+
<type>jar</type>
7392
</dependency>
7493
<dependency>
7594
<groupId>commons-logging</groupId>
@@ -87,14 +106,29 @@
87106
<version>4.0.1</version>
88107
</dependency>
89108
<dependency>
90-
<groupId>oauth.signpost</groupId>
91-
<artifactId>signpost-core</artifactId>
92-
<version>1.2.1.2</version>
109+
<groupId>oauth.signpost</groupId>
110+
<artifactId>signpost-core</artifactId>
111+
<version>1.2.1.2</version>
112+
</dependency>
113+
<dependency>
114+
<groupId>oauth.signpost</groupId>
115+
<artifactId>signpost-commonshttp4</artifactId>
116+
<version>1.2.1.2</version>
93117
</dependency>
94118
<dependency>
95-
<groupId>oauth.signpost</groupId>
96-
<artifactId>signpost-commonshttp4</artifactId>
97-
<version>1.2.1.2</version>
119+
<groupId>com.fasterxml.jackson.core</groupId>
120+
<artifactId>jackson-core</artifactId>
121+
<version>2.4.1</version>
122+
</dependency>
123+
<dependency>
124+
<groupId>com.fasterxml.jackson.core</groupId>
125+
<artifactId>jackson-annotations</artifactId>
126+
<version>2.4.1</version>
127+
</dependency>
128+
<dependency>
129+
<groupId>com.fasterxml.jackson.core</groupId>
130+
<artifactId>jackson-databind</artifactId>
131+
<version>2.4.1</version>
98132
</dependency>
99133
<dependency>
100134
<groupId>junit</groupId>
@@ -126,6 +160,13 @@
126160
<version>${powermock.version}</version>
127161
<scope>test</scope>
128162
</dependency>
163+
<dependency>
164+
<groupId>commons-io</groupId>
165+
<artifactId>commons-io</artifactId>
166+
<version>2.4</version>
167+
<scope>test</scope>
168+
<type>jar</type>
169+
</dependency>
129170
</dependencies>
130171

131172
<build>

src/main/java/org/imsglobal/aspect/LtiLaunchVerifier.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
import org.aspectj.lang.ProceedingJoinPoint;
1010
import org.aspectj.lang.annotation.Around;
1111
import org.aspectj.lang.annotation.Aspect;
12-
import org.imsglobal.basiclti.BasicLTIUtil;
13-
import org.imsglobal.basiclti.LtiVerificationResult;
12+
import org.imsglobal.lti.launch.LtiVerificationResult;
13+
import org.imsglobal.lti.launch.LtiVerifier;
1414

1515
import java.util.ArrayList;
1616
import java.util.List;
@@ -24,11 +24,13 @@ public class LtiLaunchVerifier {
2424

2525
public LtiKeySecretService keyService;
2626

27-
public LtiLaunchVerifier(LtiKeySecretService ltiKeySecretService) {
28-
this.keyService = ltiKeySecretService;
27+
public LtiVerifier ltiVerifier;
28+
29+
public LtiLaunchVerifier(LtiKeySecretService keyService, LtiVerifier ltiVerifier) {
30+
this.keyService = keyService;
31+
this.ltiVerifier = ltiVerifier;
2932
}
3033

31-
//@Around("@annotation(launch) && execution(* *(javax.servlet.http.HttpServletRequest+, org.imsglobal.basiclti.LtiVerificationResult, ..)) && args(request, result)")
3234
@Around("@annotation(launch)")
3335
public Object verifyLtiLaunch(ProceedingJoinPoint pjp, Lti launch) throws Throwable {
3436
HttpServletRequest request = null;
@@ -41,9 +43,8 @@ public Object verifyLtiLaunch(ProceedingJoinPoint pjp, Lti launch) throws Throwa
4143
throw new IllegalStateException(getErrorMessageForArgumentClass("HttpServletRequest", pjp.getSignature().toLongString()));
4244
}
4345

44-
System.out.println("checking lti params...");
4546
String oauthSecret = keyService.getSecretForKey(request.getParameter("oauth_consumer_key"));
46-
LtiVerificationResult ltiResult = BasicLTIUtil.validateMessage(request, request.getRequestURL().toString(), oauthSecret);
47+
LtiVerificationResult ltiResult = ltiVerifier.verify(request, oauthSecret);//BasicLTIUtil.validateMessage(request, request.getRequestURL().toString(), oauthSecret);
4748

4849
Boolean ltiVerificationResultExists = false;
4950
//This array will hold the arguments to the join point, so we can pass them along to the advised function.

src/main/java/org/imsglobal/basiclti/BasicLTIConstants.java renamed to src/main/java/org/imsglobal/lti/BasicLTIConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* implied. See the License for the specific language governing
1414
* permissions and limitations under the License.
1515
*/
16-
package org.imsglobal.basiclti;
16+
package org.imsglobal.lti;
1717

1818
public class BasicLTIConstants {
1919
/**

src/main/java/org/imsglobal/basiclti/BasicLTIUtil.java renamed to src/main/java/org/imsglobal/lti/BasicLTIUtil.java

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@
1616
* implied. See the License for the specific language governing
1717
* permissions and limitations under the License.
1818
*/
19-
package org.imsglobal.basiclti;
20-
21-
import static org.imsglobal.basiclti.BasicLTIConstants.CUSTOM_PREFIX;
22-
import static org.imsglobal.basiclti.BasicLTIConstants.EXTENSION_PREFIX;
23-
import static org.imsglobal.basiclti.BasicLTIConstants.LTI_MESSAGE_TYPE;
24-
import static org.imsglobal.basiclti.BasicLTIConstants.LTI_VERSION;
25-
import static org.imsglobal.basiclti.BasicLTIConstants.OAUTH_PREFIX;
26-
import static org.imsglobal.basiclti.BasicLTIConstants.TOOL_CONSUMER_INSTANCE_CONTACT_EMAIL;
27-
import static org.imsglobal.basiclti.BasicLTIConstants.TOOL_CONSUMER_INSTANCE_DESCRIPTION;
28-
import static org.imsglobal.basiclti.BasicLTIConstants.TOOL_CONSUMER_INSTANCE_GUID;
29-
import static org.imsglobal.basiclti.BasicLTIConstants.TOOL_CONSUMER_INSTANCE_NAME;
30-
import static org.imsglobal.basiclti.BasicLTIConstants.TOOL_CONSUMER_INSTANCE_URL;
19+
package org.imsglobal.lti;
20+
21+
import static org.imsglobal.lti.BasicLTIConstants.CUSTOM_PREFIX;
22+
import static org.imsglobal.lti.BasicLTIConstants.EXTENSION_PREFIX;
23+
import static org.imsglobal.lti.BasicLTIConstants.LTI_MESSAGE_TYPE;
24+
import static org.imsglobal.lti.BasicLTIConstants.LTI_VERSION;
25+
import static org.imsglobal.lti.BasicLTIConstants.OAUTH_PREFIX;
26+
import static org.imsglobal.lti.BasicLTIConstants.TOOL_CONSUMER_INSTANCE_CONTACT_EMAIL;
27+
import static org.imsglobal.lti.BasicLTIConstants.TOOL_CONSUMER_INSTANCE_DESCRIPTION;
28+
import static org.imsglobal.lti.BasicLTIConstants.TOOL_CONSUMER_INSTANCE_GUID;
29+
import static org.imsglobal.lti.BasicLTIConstants.TOOL_CONSUMER_INSTANCE_NAME;
30+
import static org.imsglobal.lti.BasicLTIConstants.TOOL_CONSUMER_INSTANCE_URL;
3131

3232
import java.io.IOException;
3333
import java.net.URISyntaxException;
@@ -51,6 +51,9 @@
5151
import net.oauth.server.OAuthServlet;
5252
import net.oauth.signature.OAuthSignatureMethod;
5353
import org.apache.commons.lang3.StringUtils;
54+
import org.imsglobal.lti.launch.LtiError;
55+
import org.imsglobal.lti.launch.LtiLaunch;
56+
import org.imsglobal.lti.launch.LtiVerificationResult;
5457

5558
/* Leave out until we have JTidy 0.8 in the repository
5659
import org.w3c.tidy.Tidy;
@@ -73,8 +76,8 @@
7376
* &lt;extensions&nbsp;platform=&quot;www.lms.com&quot;&gt;
7477
* &lt;parameter&nbsp;key=&quot;keyname&quot;&gt;value&lt;/parameter&gt;
7578
* &lt;/extensions&gt;
76-
* &lt;launch_url&gt;url&nbsp;to&nbsp;the&nbsp;basiclti&nbsp;launch&nbsp;URL&lt;/launch_url&gt;
77-
* &lt;secure_launch_url&gt;url&nbsp;to&nbsp;the&nbsp;basiclti&nbsp;launch&nbsp;URL&lt;/secure_launch_url&gt;
79+
* &lt;launch_url&gt;url&nbsp;to&nbsp;the&nbsp;lti&nbsp;launch&nbsp;URL&lt;/launch_url&gt;
80+
* &lt;secure_launch_url&gt;url&nbsp;to&nbsp;the&nbsp;lti&nbsp;launch&nbsp;URL&lt;/secure_launch_url&gt;
7881
* &lt;icon&gt;url&nbsp;to&nbsp;an&nbsp;icon&nbsp;for&nbsp;this&nbsp;tool&nbsp;(optional)&lt;/icon&gt;
7982
* &lt;secure_icon&gt;url&nbsp;to&nbsp;an&nbsp;icon&nbsp;for&nbsp;this&nbsp;tool&nbsp;(optional)&lt;/secure_icon&gt;
8083
* &lt;cartridge_icon&nbsp;identifierref=&quot;BLTI001_Icon&quot;/&gt;

src/main/java/org/imsglobal/basiclti/XMLMap.java renamed to src/main/java/org/imsglobal/lti/XMLMap.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**********************************************************************************
2-
* $URL: https://source.sakaiproject.org/svn/basiclti/trunk/basiclti-util/src/java/org/imsglobal/basiclti/XMLMap.java $
2+
* $URL: https://source.sakaiproject.org/svn/lti/trunk/lti-util/src/java/org/imsglobal/lti/XMLMap.java $
33
* $Id: XMLMap.java 308965 2014-04-29 06:37:09Z csev@umich.edu $
44
**********************************************************************************
55
*
@@ -19,7 +19,7 @@
1919
*
2020
**********************************************************************************/
2121

22-
package org.imsglobal.basiclti;
22+
package org.imsglobal.lti;
2323

2424
/*
2525
* This is a little project I call mdom.org which stands for "Map-Dom" or "XML Doms in Maps"

src/main/java/org/imsglobal/basiclti/LtiError.java renamed to src/main/java/org/imsglobal/lti/launch/LtiError.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.imsglobal.basiclti;
1+
package org.imsglobal.lti.launch;
22

33
/**
44
* Created by paul on 5/28/14.

src/main/java/org/imsglobal/basiclti/LtiLaunch.java renamed to src/main/java/org/imsglobal/lti/launch/LtiLaunch.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package org.imsglobal.basiclti;
1+
package org.imsglobal.lti.launch;
22

33
import javax.servlet.http.HttpServletRequest;
4+
import java.util.Map;
45

56
/**
67
* Created by paul on 5/28/14.
@@ -27,6 +28,16 @@ public LtiLaunch(HttpServletRequest request) {
2728
this.toolConsumerInstanceGuid = request.getParameter("tool_consumer_instance_guid");
2829
}
2930

31+
public LtiLaunch(Map<String, String> parameters) {
32+
this.user = new LtiUser(parameters);
33+
this.version = parameters.get("lti_version");
34+
this.messageType = parameters.get("lti_message_type");
35+
this.resourceLinkId = parameters.get("resource_link_id");
36+
this.contextId = parameters.get("context_id");
37+
this.launchPresentationReturnUrl = parameters.get("launch_presentation_return_url");
38+
this.toolConsumerInstanceGuid = parameters.get("tool_consumer_instance_guid");
39+
}
40+
3041
public LtiUser getUser() {
3142
return user;
3243
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package org.imsglobal.lti.launch;
2+
3+
import net.oauth.OAuthAccessor;
4+
import net.oauth.OAuthConsumer;
5+
import net.oauth.OAuthException;
6+
import net.oauth.OAuthMessage;
7+
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
8+
import oauth.signpost.exception.OAuthCommunicationException;
9+
import oauth.signpost.exception.OAuthExpectationFailedException;
10+
import oauth.signpost.exception.OAuthMessageSignerException;
11+
import org.apache.http.HttpRequest;
12+
13+
import java.io.IOException;
14+
import java.net.URISyntaxException;
15+
import java.util.HashMap;
16+
import java.util.Map;
17+
18+
/**
19+
* This class <b>signs</b> LTI requests according to the Oauth 1.0 spec
20+
* @author Paul Gray
21+
* @since 1.1
22+
*/
23+
public class LtiOauthSigner implements LtiSigner {
24+
25+
@Override
26+
public HttpRequest sign(HttpRequest request, String key, String secret) throws LtiSigningException {
27+
CommonsHttpOAuthConsumer signer = new CommonsHttpOAuthConsumer(key, secret);
28+
try {
29+
signer.sign(request);
30+
} catch (OAuthMessageSignerException|OAuthExpectationFailedException|OAuthCommunicationException e) {
31+
throw new LtiSigningException("Exception encountered while singing Lti request...", e);
32+
}
33+
return request;
34+
}
35+
36+
@Override
37+
public Map<String, String> signParameters(Map<String, String> parameters, String key, String secret, String url, String method) throws LtiSigningException {
38+
OAuthMessage oam = new OAuthMessage(method, url, parameters.entrySet());
39+
OAuthConsumer cons = new OAuthConsumer(null, key, secret, null);
40+
OAuthAccessor acc = new OAuthAccessor(cons);
41+
try {
42+
oam.addRequiredParameters(acc);
43+
44+
Map<String, String> signedParameters = new HashMap<>();
45+
for(Map.Entry<String, String> param : oam.getParameters()){
46+
signedParameters.put(param.getKey(), param.getValue());
47+
}
48+
return signedParameters;
49+
} catch (OAuthException |IOException |URISyntaxException e) {
50+
throw new LtiSigningException("Error signing LTI request.", e);
51+
}
52+
}
53+
54+
}

0 commit comments

Comments
 (0)