Merge branch 'develop' of bitbucket.org:jamkazam/jam-cloud into develop
This commit is contained in:
commit
116cf8cfce
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue