Home | History | Annotate | Download | only in hello-java
      1 /*
      2  * The "Hello world!" of the Chrome Web Store Licensing API, in Java. This
      3  * program logs the user in with OpenID, fetches their license state with OAuth,
      4  * and prints one of these greetings as appropriate:
      5  *
      6  *   1. Hello *no* license!
      7  *   2. Hello *free trial* license!
      8  *   3. Hello *full* license!
      9  *
     10  * Copyright 2010 the Chromium Authors
     11  *
     12  * Use of this source code is governed by a BSD-style license that can be found
     13  * in the "LICENSE" file.
     14  *
     15  * Brian Kennish <bkennish (at) chromium.org>
     16  */
     17 package com.example;
     18 
     19 import java.io.*;
     20 import java.net.*;
     21 import java.util.HashSet;
     22 import javax.servlet.http.*;
     23 import com.google.appengine.api.users.*;
     24 import com.google.appengine.repackaged.org.json.JSONObject;
     25 import oauth.signpost.OAuthConsumer;
     26 import oauth.signpost.basic.DefaultOAuthConsumer;
     27 
     28 /* A Google App Engine servlet. */
     29 @SuppressWarnings("serial")
     30 public class HelloLicenseServlet extends HttpServlet {
     31   /* TODO: The app ID from the Chrome Developer Dashboard. */
     32   public static final String APP_ID = "[INSERT APP ID HERE]";
     33 
     34   /* TODO: The token from the Chrome Developer Dashboard. */
     35   private static final String TOKEN = "[INSERT TOKEN HERE]";
     36 
     37   /* TODO: The token secret from the Chrome Developer Dashboard. */
     38   private static final String TOKEN_SECRET = "[INSERT TOKEN SECRET HERE]";
     39 
     40   /*
     41    * The license server URL, where %s are placeholders for app and
     42    * user IDs
     43    */
     44   public static final String SERVER_URL =
     45       "https://www.googleapis.com/chromewebstore/v1/licenses/%s/%s";
     46 
     47   /* The consumer key. */
     48   public static final String CONSUMER_KEY = "anonymous";
     49 
     50   /* The consumer secret. */
     51   public static final String CONSUMER_SECRET = CONSUMER_KEY;
     52 
     53   /* Handles "GET" requests. */
     54   public void doGet(HttpServletRequest request, HttpServletResponse response)
     55       throws IOException {
     56     response.setContentType("text/html; charset=UTF-8");
     57     UserService userService = UserServiceFactory.getUserService();
     58     PrintWriter output = response.getWriter();
     59     String url = request.getRequestURI();
     60 
     61     if (userService.isUserLoggedIn()) {
     62       // Provide a logout path.
     63       User user = userService.getCurrentUser();
     64       output.printf(
     65         "<strong>%s</strong> | <a href=\"%s\">Sign out</a><br><br>",
     66         user.getEmail(),
     67         userService.createLogoutURL(url)
     68       );
     69 
     70       try {
     71         // Send a signed request for the user's license state.
     72         OAuthConsumer oauth =
     73             new DefaultOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
     74         oauth.setTokenWithSecret(TOKEN, TOKEN_SECRET);
     75         URLConnection http =
     76             new URL(
     77               String.format(
     78                 SERVER_URL,
     79                 APP_ID,
     80                 URLEncoder.encode(user.getFederatedIdentity(), "UTF-8")
     81               )
     82             ).openConnection();
     83         oauth.sign(http);
     84         http.connect();
     85 
     86         // Convert the response from the license server to a string.
     87         BufferedReader input =
     88             new BufferedReader(new InputStreamReader(http.getInputStream()));
     89         String file = "";
     90         for (String line; (line = input.readLine()) != null; file += line);
     91         input.close();
     92 
     93         // Parse the string as JSON and display the license state.
     94         JSONObject json = new JSONObject(file);
     95         output.printf(
     96           "Hello <strong>%s</strong> license!",
     97           "YES".equals(json.get("result")) ?
     98               "FULL".equals(json.get("accessLevel")) ? "full" : "free trial" :
     99               "no"
    100         );
    101       } catch (Exception exception) {
    102         // Dump any error.
    103         output.printf("Oops! <strong>%s</strong>", exception.getMessage());
    104       }
    105     } else { // The user isn't logged in.
    106       // Prompt for login.
    107       output.printf(
    108         "<a href=\"%s\">Sign in</a>",
    109         userService.createLoginURL(
    110           url,
    111           null,
    112           "https://www.google.com/accounts/o8/id",
    113           new HashSet<String>()
    114         )
    115       );
    116     }
    117   }
    118 }
    119