Merge branch 'develop' of bitbucket.org:jamkazam/jam-cloud into develop

This commit is contained in:
Seth Call 2014-12-31 20:39:27 -06:00
commit 116cf8cfce
3 changed files with 21 additions and 62 deletions

View File

@ -1,14 +1,13 @@
require 'faraday'
#require 'thin'
require 'launchy'
require 'cgi'
require 'json'
require 'google/api_client'
require 'google/api_client/client_secrets'
require 'google/api_client/auth/installed_app'
require 'socket' # Provides TCPServer and TCPSocket classes
# require 'youtube_client'; c = YouTubeClient.new
# Youtube API functionality:
require 'socket'
# Youtube OAuth and API functionality:
module JamRuby
class YouTubeClient
attr_accessor :client
@ -28,13 +27,7 @@ module JamRuby
:application_version => '1.0.0'
)
youtube = client.discovered_api('youtube', 'v3')
# client.authorization = nil
# result = client.execute
# :key => config.youtube_developer_key,
# :api_method => youtube.videos.list,
# :parameters => {:id => '<YOUR_VIDEO_ID>', :part => 'snippet'}
# result = JSON.parse(result.data.to_json)
youtube = client.discovered_api('youtube', 'v3')
end
# Return a login URL that will show a web page with
@ -42,7 +35,6 @@ module JamRuby
uri = "https://accounts.google.com/o/oauth2/auth"
uri << "?scope=#{CGI.escape('https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload https://gdata.youtube.com email profile ')}" # # https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload
uri << "&client_id=#{CGI.escape(self.config.google_email)}"
#uri << "&client_secret=#{CGI.escape(self.config.google_secret)}"
uri << "&response_type=code"
uri << "&access_type=online"
uri << "&prompt=consent"
@ -62,6 +54,7 @@ module JamRuby
# https://developers.google.com/youtube/v3/guides/using_resumable_upload_protocol
def upload_sign(user, filename, length)
raise ArgumentError, "Length is required and should be > 0" if length.to_i.zero?
# Something like this:
# POST /upload/youtube/v3/videos?uploadType=resumable&part=snippet,status,contentDetails HTTP/1.1
# Host: www.googleapis.com
@ -104,38 +97,24 @@ module JamRuby
}
conn = Faraday.new(:url =>"https://www.googleapis.com",:ssl => {:verify => false}) do |faraday|
faraday.request :url_encoded
faraday.response :logger
faraday.adapter Faraday.default_adapter
faraday.request :url_encoded
faraday.adapter Faraday.default_adapter
end
video_json=video_data.to_json
# result = conn.post do |req|
# req.url('/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status')
# req.headers['authorization']="bearer #{(auth.token)}"
# req.headers['content-type']='application/json;charset=utf-8'
# req.headers['x-Upload-Content-Length']="#{length}"
# req.headers['x-upload-content-type']="video/*"
# req.body = video_json
# end
# access_token=#{CGI.escape(auth.token)}
result = conn.post("/upload/youtube/v3/videos?access_token=#{CGI.escape(auth.token)}&uploadType=resumable&part=snippet,status,contentDetails",
video_json,
{
# 'client_id'=>"#{(self.config.google_email)}",
# 'client_secret'=>config.google_secret,
#'Authorization'=>"bearer #{(auth.token)}",
'content-type'=>'application/json;charset=utf-8',
'x-Upload-Content-Length'=>"#{length}",
'x-upload-content-type'=>"video/*"
}
)
#puts result.inspect
# Response should something look like:
# HTTP/1.1 200 OK
# Location: https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&upload_id=xa298sd_f&part=snippet,status,contentDetails
# Content-Length: 0
# HTTP/1.1 200 OK
# Location: https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&upload_id=xa298sd_f&part=snippet,status,contentDetails
# Content-Length: 0
if (result.nil? || result.status!=200 || result.headers['location'].blank?)
msg = "Failed signing with status=#{result.status} #{result.inspect}: "
@ -158,8 +137,6 @@ module JamRuby
"Content-Type" => "video/*"
}
end
# This has everything one needs to start the upload to youtube:
end
# https://developers.google.com/youtube/v3/guides/using_resumable_upload_protocol#Check_Upload_Status
@ -178,7 +155,6 @@ module JamRuby
'Content-Length'=> "0",
'Content-Range' => "bytes */#{length}"
}) do |response, request, result|
# puts "response: #{response.class}: #{response.code} / #{response.headers} / #{response.body}"
# Result looks like this:
# 308 Resume Incomplete
# Content-Length: 0
@ -216,6 +192,8 @@ module JamRuby
(status_hash['status']>=200 && status_hash['status']<300)
end
# Set fully_uploaded if the upload can be verified.
# @return true if verified; false otherwise:
def complete_upload(recorded_video)
if (verify_upload(recorded_video.user, recorded_video.url, recorded_video.length))
recorded_video.update_attribute(:fully_uploaded, true)
@ -245,12 +223,10 @@ module JamRuby
end
# Must manually confirm to obtain refresh token:
# 4/ZwtU8nNgiEiu2JlJMrmnnw.Qo7Zys7XjRoZPm8kb2vw2M2j2ZEskgI
def get_refresh_token
config = Rails.application.config
conn = Faraday.new(:url => 'https://accounts.google.com',:ssl => {:verify => false}) do |faraday|
faraday.request :url_encoded
faraday.response :logger
faraday.request :url_encoded
faraday.adapter Faraday.default_adapter
end
@ -258,7 +234,6 @@ module JamRuby
Rails.logger.info("The refresh_token is #{refresh_token}")
end
result = conn.get '/o/oauth2/auth', {
'scope'=>'email profile',
'client_id'=>config.google_client_id,
@ -270,17 +245,15 @@ module JamRuby
def get_access_token(refresh_token)
refresh_token = "4/g9uZ8S4lq2Bj1J8PPIkgOFKhTKmCHSmRe68iHA75hRg.gj8Nt5bpVYQdPm8kb2vw2M23tnRnkgI"
#refresh_token = "4/ZwtU8nNgiEiu2JlJMrmnnw.Qo7Zys7XjRoZPm8kb2vw2M2j2ZEskgI"
config = Rails.application.config
conn = Faraday.new(:url => 'https://accounts.google.com',:ssl => {:verify => false}) do |faraday|
faraday.request :url_encoded
faraday.response :logger
faraday.request :url_encoded
faraday.adapter Faraday.default_adapter
end
wait_for_callback do |access_token|
Rails.logger.info("The access_token is #{access_token}")
#self.server.stop()
Rails.logger.info("The access_token is #{access_token}")
end
result = conn.post '/o/oauth2/token', nil, {
@ -288,9 +261,7 @@ module JamRuby
'client_id'=>config.google_client_id,
'client_secret'=>config.google_secret,
'refresh_token'=>refresh_token,
#'response_type'=>"code",
'grant_type'=>"refresh_token",
#'access_type'=>"offline",
'redirect_uri'=>redirect_uri
}
@ -334,19 +305,16 @@ module JamRuby
def exchange_for_token(access_code)
#puts "EXCHANGING token for code: [#{access_code}] #{access_code.class}"
Rails.logger.info("Exchanging token for code: [#{access_code}]")
conn = Faraday.new(:url =>"https://accounts.google.com",:ssl => {:verify => false}) do |faraday|
faraday.request :url_encoded
# faraday.request :multipart
faraday.response :logger
faraday.adapter Faraday.default_adapter
end
exchange_parms={
'grant_type'=>'authorization_code',
'code'=>(access_code),
'client_id'=>(config.google_email),#CGI.escape(config.google_client_id),
'client_id'=>(config.google_email),
'client_secret'=>(config.google_secret),
'redirect_uri'=>(redirect_uri),
}
@ -357,16 +325,12 @@ module JamRuby
end
body_hash = JSON.parse(result.body)
#puts "RESULT #{result.body.class}: #{result.body}"
#puts "EXCHANGING for token: [#{body_hash['access_token']}]"
body_hash['access_token']
end
# shutdown
def shutdown()
Rails.logger.info("Stopping oauth server...")
#Thread.kill(self.server)
if (self.socket)
begin
self.socket.close
@ -376,11 +340,6 @@ module JamRuby
end
self.socket = nil
end
# if (self.server)
# Thread.kill(self.server)
# self.server = nil
# end
end
end # class
end # module

View File

@ -1,5 +1,5 @@
require 'spec_helper'
require 'youtube_client'
require 'you_tube_client'
describe "OAuth", :slow=>true, :js=>true, :type=>:feature, :capybara_feature=>true do

View File

@ -1,5 +1,5 @@
require 'spec_helper'
require 'youtube_client'
require 'you_tube_client'
require 'rest_client'
describe "YouTube", :slow=>true, :js=>true, :type => :feature, :capybara_feature => true do