lib/fir/util/ali_uploader.rb
# frozen_string_literal: true
require_relative './app_uploader'
# require 'byebug'
module FIR
class AliUploader < AppUploader
def upload_icon
if skip_update_icon?
logger.info 'skip update icon...'
return
end
try_to_action('upload icon') do
# 拿到 icon 的授权
icon_url = uploading_info[:cert][:icon][:upload_url]
icon_info = uploading_icon_info
logger.debug "icon_url = #{icon_url}, icon_info = #{icon_info}"
put_file(icon_url, uploading_icon_info, uploading_info[:cert][:icon][:custom_headers])
callback_to_api(callback_url, callback_icon_information)
end
rescue StandardError => e
# ignore icon error
logger.info "ignore icon upload error #{e.message}"
end
def upload_binary
try_to_action 'upload binary ...' do
binary_url = uploading_info[:cert][:binary][:upload_url]
binary_info = uploading_binary_info
logger.debug "binary_url = #{binary_url}, binary_info = #{binary_info}"
headers = uploading_info[:cert][:binary][:custom_headers]
headers_copy = {
'CONTENT-DISPOSITION' => headers[:"CONTENT-DISPOSITION"],
'Content-Type' => headers[:"content-type"],
'date' => headers[:date],
'x-oss-date' => headers[:"x-oss-date"],
'authorization' => headers[:authorization]
}
logger.debug headers_copy
put_file(binary_url, binary_info, headers_copy)
callback_to_api(callback_url, callback_binary_information)
end
rescue StandardError => e
logger.error "binary upload to ali fail, #{e.message}"
exit 1
end
protected
def put_file(url, file, headers)
RestClient::Request.execute(
method: 'PUT',
url: url,
payload: file,
headers: headers,
timeout: 300
)
end
def callback_url
"#{fir_api[:base_url]}/auth/ali/callback"
end
def uploading_icon_info
File.new(icon_file_path, 'rb')
end
def uploading_binary_info
File.new(file_path, 'rb')
end
end
end