Author: krasserm Date: Sat Apr 10 06:50:11 2010 New Revision: 932672 URL: http://svn.apache.org/viewvc?rev=932672&view=rev Log: added javadocs and removed unnecessary servlet mapping.
Modified: camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialController.java camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialRouteBuilder.java camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialService.java camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialTokenProcessor.java camel/trunk/examples/camel-example-gauth/src/main/webapp/WEB-INF/web.xml Modified: camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialController.java URL: http://svn.apache.org/viewvc/camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialController.java?rev=932672&r1=932671&r2=932672&view=diff ============================================================================== --- camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialController.java (original) +++ camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialController.java Sat Apr 10 06:50:11 2010 @@ -29,6 +29,19 @@ import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +/** + * Single controller for the demo application that handles GET requests. Obtains OAuth access + * token and access token secret from cookies and uses them to obtain calendar names from the + * Google Calendar API. If the interaction with the calendar API fails due to invalid or non- + * existing OAuth tokens an error message is displayed in authorize.jsp. If it succeeds the + * calendar names are displayed in calendar.jsp. + * <p> + * In production systems it is <em>not</em> recommended to store access tokens in cookies. The + * recommended approach is to store them in a database. The demo application is only doing that + * to keep the example as simple as possible. However, an attacker could not use an access token + * alone to get access to a user's calendar data because the application's consumer secret is + * necessary for that as well. The consumer secret never leaves the demo application. + */ @Controller @RequestMapping("/calendar") public class TutorialController { @@ -44,7 +57,8 @@ public class TutorialController { ModelMap model) throws Exception { List<String> calendarNames = null; - + + // Get OAuth tokens from cookies String accessToken = getAccessToken(request); String accessTokenSecret = getAccessTokenSecret(request); @@ -54,6 +68,7 @@ public class TutorialController { } try { + // Get calendar names from Google Calendar API calendarNames = service.getCalendarNames(accessToken, accessTokenSecret); } catch (AuthenticationException e) { model.put("message", "OAuth access token invalid"); Modified: camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialRouteBuilder.java URL: http://svn.apache.org/viewvc/camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialRouteBuilder.java?rev=932672&r1=932671&r2=932672&view=diff ============================================================================== --- camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialRouteBuilder.java (original) +++ camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialRouteBuilder.java Sat Apr 10 06:50:11 2010 @@ -20,10 +20,18 @@ import java.net.URLEncoder; import org.apache.camel.builder.RouteBuilder; +/** + * Builds the OAuth-specific routes (implements the OAuth integration layer) of the demo application. + */ public class TutorialRouteBuilder extends RouteBuilder { private String application; + /** + * Sets the name of the GAE application. + * + * @param application a GAE application name. + */ public void setApplication(String application) { this.application = application; } @@ -31,12 +39,22 @@ public class TutorialRouteBuilder extend @Override public void configure() throws Exception { + // Callback URL for sending back an authorized access token. String encodedCallback = URLEncoder.encode(String.format("https://%s.appspot.com/camel/handler", application), "UTF-8"); + // Google should issue an access token that is scoped to calendar feeds. String encodedScope = URLEncoder.encode("http://www.google.com/calendar/feeds/", "UTF-8"); + // Route for obtaining an unauthorized request token from Google Accounts. The + // response redirects the browser to an authorization page provided by Google. from("ghttp:///authorize") .to("gauth:authorize?callback=" + encodedCallback + "&scope=" + encodedScope); + + // Handles callbacks from Google Accounts which contain an authorized request token. + // The authorized request token is upgraded to an access token which is stored in + // the response message header. The TutorialTokenProcessor is application-specific + // and stores the access token (plus access token secret) is cookies. It further + // redirects the user to the application's main location (/oauth/calendar). from("ghttp:///handler") .to("gauth:upgrade") .process(new TutorialTokenProcessor()); Modified: camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialService.java URL: http://svn.apache.org/viewvc/camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialService.java?rev=932672&r1=932671&r2=932672&view=diff ============================================================================== --- camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialService.java (original) +++ camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialService.java Sat Apr 10 06:50:11 2010 @@ -27,14 +27,31 @@ import com.google.gdata.client.calendar. import com.google.gdata.data.calendar.CalendarEntry; import com.google.gdata.data.calendar.CalendarFeed; +/** + * Facade for getting calendar names from the Google Calendar API. The access is made on + * behalf of a user by providing an OAuth access token and access token secret. + */ public class TutorialService { private Properties credentials; - + + /** + * Sets properties that contains the application's consumer key and consumer secret. + * + * @param credentials consumer key and consumer secret. + */ public void setCredentials(Properties credentials) { this.credentials = credentials; } - + + /** + * Obtains a list of names of a user's public and private calendars from the Google + * Calendar API. + * + * @param accessToken OAuth access token. + * @param accessTokenSecret OAuth access token secret. + * @return list of names of a user's public and private calendars. + */ public List<String> getCalendarNames(String accessToken, String accessTokenSecret) throws Exception { CalendarService calendarService = new CalendarService("apache-camel-2.3"); OAuthParameters params = getOAuthParams(accessToken, accessTokenSecret); Modified: camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialTokenProcessor.java URL: http://svn.apache.org/viewvc/camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialTokenProcessor.java?rev=932672&r1=932671&r2=932672&view=diff ============================================================================== --- camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialTokenProcessor.java (original) +++ camel/trunk/examples/camel-example-gauth/src/main/java/org/apache/camel/example/gauth/TutorialTokenProcessor.java Sat Apr 10 06:50:11 2010 @@ -25,6 +25,19 @@ import org.apache.camel.Processor; import static org.apache.camel.component.gae.auth.GAuthUpgradeBinding.GAUTH_ACCESS_TOKEN; import static org.apache.camel.component.gae.auth.GAuthUpgradeBinding.GAUTH_ACCESS_TOKEN_SECRET; +/** + * Reads an OAuth access token plus access token secret from a Camel message and stores them in + * cookies. These cookies are needed by {...@link org.apache.camel.example.gauth.TutorialController} + * for accessing a user's calendar via the Google Calendar API. The cookies are valid for one + * hour. Finally, it generates an HTTP 302 response that redirects the user to the application's + * main location (/oauth/calendar). + * <p> + * In production systems it is <em>not</em> recommended to store access tokens in cookies. The + * recommended approach is to store them in a database. The demo application is only doing that + * to keep the example as simple as possible. However, an attacker could not use an access token + * alone to get access to a user's calendar data because the application's consumer secret is + * necessary for that as well. The consumer secret never leaves the demo application. + */ public class TutorialTokenProcessor implements Processor { private static final int ONE_HOUR = 3600; Modified: camel/trunk/examples/camel-example-gauth/src/main/webapp/WEB-INF/web.xml URL: http://svn.apache.org/viewvc/camel/trunk/examples/camel-example-gauth/src/main/webapp/WEB-INF/web.xml?rev=932672&r1=932671&r2=932672&view=diff ============================================================================== --- camel/trunk/examples/camel-example-gauth/src/main/webapp/WEB-INF/web.xml (original) +++ camel/trunk/examples/camel-example-gauth/src/main/webapp/WEB-INF/web.xml Sat Apr 10 06:50:11 2010 @@ -51,10 +51,6 @@ http://java.sun.com/xml/ns/javaee/web-ap <servlet-name>CamelServlet</servlet-name> <url-pattern>/camel/*</url-pattern> </servlet-mapping> - <servlet-mapping> - <servlet-name>CamelServlet</servlet-name> - <url-pattern>/worker/*</url-pattern> - </servlet-mapping> - + </web-app>