Hi I tried to use the code as below
package vik.sakshum.sakshumweb.server.common; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.jackson.JacksonFactory; import com.google.api.services.drive.Drive; import com.google.api.services.oauth2.Oauth2; import com.google.api.services.oauth2.model.Userinfo; import com.google.gson.Gson; import com.google.gwt.user.server.rpc.RemoteServiceServlet; /** * Abstract servlet that sets up credentials and provides some convenience * methods. * * @author [email protected] (Vic Fryzel) * @author [email protected] (Burcu Dogan) */ @SuppressWarnings("serial") public abstract class GoogleDriveAuth extends RemoteServiceServlet { /** * Default transportation layer for Google Apis Java client. */ protected static final HttpTransport TRANSPORT = new NetHttpTransport(); /** * Default JSON factory for Google Apis Java client. */ protected static final JsonFactory JSON_FACTORY = new JacksonFactory(); /** * Key to get/set userId from and to the session. */ public static final String KEY_SESSION_USERID = "user_id"; /** * Default MIME type of files created or handled by DrEdit. * This is also set in the Google APIs Console under the Drive SDK tab. */ public static final String DEFAULT_MIMETYPE = "text/plain"; /** * Path component under war/ to locate client_secrets.json file. */ public static final String CLIENT_SECRETS_FILE_PATH = "/WEB-INF/client_secrets.json"; /** * A credential manager to get, set, delete credential objects. */ private CredentialManager credentialManager = null; /** * Initializes the Servlet. * @Override public void init() throws ServletException { super.init(); // init credential manager // credentialManager = new CredentialManager( // getClientSecrets(), TRANSPORT, JSON_FACTORY); }*/ /** * Dumps the given object as JSON and responds with given HTTP status code. * @param resp Response object. * @param code HTTP status code to respond with. * @param obj An object to be dumped as JSON. */ protected void sendJson(HttpServletResponse resp, int code, Object obj) { try { // TODO(burcud): Initialize Gson instance for once. resp.setContentType("application/json"); resp.getWriter().print(new Gson().toJson(obj).toString()); } catch (IOException e) { throw new RuntimeException(e); } } /** * Dumps the given object to JSON and responds with HTTP 200. * @param resp Response object. * @param obj An object to be dumped as JSON. */ protected void sendJson(HttpServletResponse resp, Object obj) { sendJson(resp, 200, obj); } /** * Responds with the given HTTP status code and message. * @param resp Response object. * @param code HTTP status code to respond with. * @param message Message body. */ protected void sendError(HttpServletResponse resp, int code, String message) { try { resp.sendError(code, message); } catch (IOException e) { throw new RuntimeException(message); } } /** * Transforms a GoogleJsonResponseException to an HTTP response. * @param resp Response object. * @param e Exception object to transform. */ protected void sendGoogleJsonResponseError(HttpServletResponse resp, GoogleJsonResponseException e) { sendError(resp, e.getStatusCode(), e.getLocalizedMessage()); } /** * Redirects to OAuth2 consent page if user is not logged in. * @param req Request object. * @param resp Response object. */ protected void loginIfRequired(HttpServletRequest req, HttpServletResponse resp) { Credential credential = getCredential(req, resp); if (credential == null) { // redirect to authorization url try { resp.sendRedirect(credentialManager.getAuthorizationUrl()); } catch (IOException e) { throw new RuntimeException("Can't redirect to auth page"); } } } /** * If OAuth2 redirect callback is invoked and there is a code query param, * retrieve user credentials and profile. Then, redirect to the home page. * @param req Request object. * @param resp Response object. * @throws IOException */ protected void handleCallbackIfRequired(HttpServletRequest req, HttpServletResponse resp) throws IOException { String code = req.getParameter("code"); System.out.println("Code is:" + code); if (code != null) { // retrieve new credentials with code Credential credential = credentialManager.retrieve(code); // request userinfo Oauth2 service = getOauth2Service(credential); try { Userinfo about = service.userinfo().get().execute(); String id = about.getId(); credentialManager.save(id, credential); req.getSession().setAttribute(KEY_SESSION_USERID, id); System.out.println("vik:: accessToken:" + credential.getAccessToken() + " refreshToken:" + credential.getRefreshToken()); } catch (IOException e) { throw new RuntimeException("Can't handle the OAuth2 callback, " + "make sure that code is valid."); } resp.sendRedirect("/"); } } @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { System.out.println("start of GoogleDriveAuth:::::::"); credentialManager = new CredentialManager( getClientSecrets(), TRANSPORT, JSON_FACTORY); handleCallbackIfRequired(req, resp); } /** * Returns the credentials of the user in the session. If user is not in the * session, returns null. * @param req Request object. * @param resp Response object. * @return Credential object of the user in session or null. */ protected Credential getCredential(HttpServletRequest req, HttpServletResponse resp) { String userId = (String) req.getSession().getAttribute(KEY_SESSION_USERID); if (userId != null) { return credentialManager.get(userId); } return null; } /** * Deletes the credentials of the user in the session permanently and removes * the user from the session. * @param req Request object. * @param resp Response object. */ protected void deleteCredential(HttpServletRequest req, HttpServletResponse resp) { String userId = (String) req.getSession().getAttribute(KEY_SESSION_USERID); if (userId != null) { credentialManager.delete(userId); req.getSession().removeAttribute(KEY_SESSION_USERID); } } /** * Build and return a Drive service object based on given request parameters. * @param credential User credentials. * @return Drive service object that is ready to make requests, or null if * there was a problem. */ protected Drive getDriveService(Credential credential) { return new Drive.Builder(TRANSPORT, JSON_FACTORY, credential).build(); } /** * Build and return an Oauth2 service object based on given request parameters. * @param credential User credentials. * @return Drive service object that is ready to make requests, or null if * there was a problem. */ protected Oauth2 getOauth2Service(Credential credential) { return new Oauth2.Builder(TRANSPORT, JSON_FACTORY, credential).build(); } /** * Reads client_secrets.json and creates a GoogleClientSecrets object. * @return A GoogleClientsSecrets object. */ private GoogleClientSecrets getClientSecrets() { // TODO: do not read on each request InputStream stream = getServletContext().getResourceAsStream(CLIENT_SECRETS_FILE_PATH); try { return GoogleClientSecrets.load(JSON_FACTORY, stream); } catch (IOException e) { throw new RuntimeException("No client_secrets.json found"); } } } But on running the servlet url as http://www.sakshum.org/GoogleOauth it throws 500 error with below exceptions in the logs 1. javax.servlet.ServletContext log: unavailable java.lang.InstantiationException at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at java.lang.Class.newInstance0(Class.java:370) at java.lang.Class.newInstance(Class.java:323) at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428) at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.google.appengine.tools.appstats.AppstatsFilter.doFilter(AppstatsFilter.java:141) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:57) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:439) at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:483) at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:490) at com.google.tracing.TraceContext.runInContext(TraceContext.java:777) at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:754) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:345) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:337) at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:487) at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) at java.lang.Thread.run(Thread.java:722) 2. W2013-06-18 18:26:57.398 /GoogleOauth java.lang.InstantiationException at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at java.lang.Class.newInstance0(Class.java:370) at java.lang.Class.newInstance(Class.java:323) at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428) at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.google.appengine.tools.appstats.AppstatsFilter.doFilter(AppstatsFilter.java:141) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:57) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:439) at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:483) at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:490) at com.google.tracing.TraceContext.runInContext(TraceContext.java:777) at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:754) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:345) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:337) at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:487) at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) at java.lang.Thread.run(Thread.java:722) 3. C2013-06-18 18:26:57.478 Uncaught exception from servlet java.lang.InstantiationException at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at java.lang.Class.newInstance0(Class.java:370) at java.lang.Class.newInstance(Class.java:323) at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428) at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.google.appengine.tools.appstats.AppstatsFilter.doFilter(AppstatsFilter.java:141) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:57) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:439) at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:483) at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:490) at com.google.tracing.TraceContext.runInContext(TraceContext.java:777) at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:754) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:345) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:337) at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:487) at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) at java.lang.Thread.run(Thread.java:722) Thankx and Regards Vik Founder http://www.sakshum.org http://blog.sakshum.org On Fri, Jun 14, 2013 at 8:59 AM, Vinny P <[email protected]> wrote: > Hello, > > On Thursday, June 13, 2013 10:32:11 PM UTC-5, Vivek Kumar wrote: > >> Can someone help us on this please >> http://stackoverflow.com/**questions/17057978/issues-in-** >> implementing-server-side-**authorization-to-google-drive<http://stackoverflow.com/questions/17057978/issues-in-implementing-server-side-authorization-to-google-drive> >> >> > The authorization code is passed back through the redirect URL you > provided. > > For example, here's a picture of the process to create an application: > http://imgur.com/a/UUXyI . You put a redirect URL in the section where it > says "Authorized Redirect URLs"; this way the user will be redirected back > to the app after they grant the app permissions to access their (the > user's) account information. But the redirect URL will also contain a > ?code= parameter, which contains the authorization code that you can > exchange for access credentials. For instance, if you set a redirect URL of > example.com/oauth, then the redirect URL that your app will receive will > look like: example.com/oauth?code=Ud3wq8943. Retrieve the authorization > code (it's just a standard parameter, use req.getParameter("code") ), and > send it back to Google to get back access credentials (that's what the code > fragment you posted does). > > BTW, the Java client library handles all of this automagically. Look > through the javadocs. > > > ----------------- > -Vinny P > Technology & Media Advisor > Chicago, IL > > My Go side project: http://invalidmail.com/ > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/google-appengine. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/google-appengine. For more options, visit https://groups.google.com/groups/opt_out.
