/* * (C) Copyright 2014 Kurento (http://kurento.org/) * * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser General Public License * (LGPL) version 2.1 which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl-2.1.html * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * */ package com.kurento.demo.cpbrazil.youtube; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.java6.auth.oauth2.FileCredentialStore; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; 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.jackson2.JacksonFactory; /** * Authorization for uploading videos to YouTube. * * @author Ivan Gracia (igracia@gsyc.es) * @since 1.0.1 * */ class Auth { /** * Global instance of the HTTP transport. */ public static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); /** * Global instance of the JSON factory. */ public static final JsonFactory JSON_FACTORY = new JacksonFactory(); /** * This is the directory that will be used under the user's home directory * where OAuth tokens will be stored. */ private static final String CREDENTIALS_DIRECTORY = ".oauth-credentials"; /** * Authorises the installed application to access user's protected data. * * @param scopes * list of scopes needed to run youtube upload. * @param credentialDatastore * @return * @throws IOException */ public static Credential authorise(List<String> scopes, String credentialDatastore) throws IOException { // Set up file credential store. File file = new File(System.getProperty("user.home"), CREDENTIALS_DIRECTORY + "/" + credentialDatastore); return authorise(scopes, file); } public static Credential authorise(List<String> scopes, File credentialDataStore) throws IOException { FileCredentialStore credentialStore = new FileCredentialStore( credentialDataStore, JSON_FACTORY); GoogleClientSecrets clientSecrets = GoogleClientSecrets.load( JSON_FACTORY, Auth.class.getResourceAsStream("/client_secrets.json")); GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, scopes) .setCredentialStore(credentialStore).build(); // TODO change this to remove the port LocalServerReceiver localReceiver = new LocalServerReceiver.Builder() .setPort(5555).build(); // Authorize. return new AuthorizationCodeInstalledApp(flow, localReceiver) .authorize("user"); } public static File inputStreamToFile(InputStream inputStream) throws IOException { File file = new File("credentialStore"); OutputStream output = new FileOutputStream(file); byte[] buf = new byte[1024]; int len; while ((len = inputStream.read(buf)) > 0) { output.write(buf, 0, len); } output.close(); inputStream.close(); return file; } }