89 lines
3.0 KiB
Ruby
89 lines
3.0 KiB
Ruby
|
#/usr/bin/env ruby
|
||
|
## impersonate-lge.com.rb - fake version of *.lge.com
|
||
|
|
||
|
# serving a cooked version of busybox and base-files
|
||
|
|
||
|
require 'sinatra'
|
||
|
|
||
|
port = ENV['USER'].eql?('root') ? 80 : 8080
|
||
|
set :port, port
|
||
|
set :bind, '0.0.0.0'
|
||
|
|
||
|
set :public_folder, '_public'
|
||
|
|
||
|
@type = @real_file = @fake_file = nil
|
||
|
|
||
|
get '/fts/:file' do |file|
|
||
|
|
||
|
target_host = request.host
|
||
|
|
||
|
if target_host.match(/gfts/)
|
||
|
@type = :ngfts
|
||
|
# http://gfts.lge.com/fts/gftsFilePathDownload.lge?key=777863&hash=6Vsai7Ky71UPgetV&mtime=1479098823000
|
||
|
# this is the opkg update path
|
||
|
|
||
|
#redirect '/base-files/base-files.ipk'
|
||
|
|
||
|
# unfortunately, we need to set these headers:
|
||
|
# Server: Apache
|
||
|
# Content-Disposition: attachment; filename="16881482.ipk"
|
||
|
# Content-Transfer-Encoding: binary;
|
||
|
# Content-Type: application/octet-stream;charset=UTF-8
|
||
|
|
||
|
# and currently, we send:
|
||
|
# Content-Type: application/vnd.shana.informed.package
|
||
|
# and the other fields are empty
|
||
|
|
||
|
headers(
|
||
|
'Content-Disposition' => 'attachment; filename="base-files.ipk"',
|
||
|
'Content-Transfer-Encoding' => 'binary',
|
||
|
'Content-Type' => 'application/octet-stream;charset=UTF-8',
|
||
|
'Server' => 'Apache',
|
||
|
)
|
||
|
|
||
|
send_file File.join(settings.public_folder, '/base-files/base-files.ipk')
|
||
|
|
||
|
elsif target_host.match(/ngfts/)
|
||
|
@type = :ngfts
|
||
|
biz_code = '' # TODO fill this in
|
||
|
if biz_code.eql?('PREMIUMS')
|
||
|
# TODO /fts/gftsDownload.lge?biz_code=PREMIUM&func_code=RECOMM_PROMOTION_IMAGE&file_path=/todayrecomm/template/promotion/w1_8.png
|
||
|
elsif biz_code.eql?('META_IMG')
|
||
|
# TODO /fts/gftsDownload.lge?biz_code=META_IMG&func_code=CPLOGO&file_path=/appstore/app/icon/20161017/16837781.png
|
||
|
elsif biz_code.eql?('IBS')
|
||
|
# TODO /fts/gftsDownload.lge?biz_code=IBS&func_code=TMS_CHANNEL_IMG_US&file_path=/ibs/tms/channel_img_us/201412040000_9.zip
|
||
|
elsif biz_code.eql?('APP_STORE')
|
||
|
# TODO /fts/gftsDownload.lge?biz_code=APP_STORE&func_code=APP_PREVIEW&file_path=/appstore/app/preview/20160221/3.jpg
|
||
|
elsif biz_code.eql?('MAS')
|
||
|
# TODO /fts/gftsDownload.lge?biz_code=MAS&func_code=META_THUMBNAIL&file_path=%2Fmas%2Ftms%2Fprogram%2Fp185554_b_ap.jpg
|
||
|
end
|
||
|
redirect '/ngfts/faked-ngfts.zip'
|
||
|
elsif target_host.match(/aic/)
|
||
|
@type = :aic
|
||
|
@real_file = '/aic/faked-aic.zip'
|
||
|
@fake_file = '16881482.ipk'
|
||
|
redirect real_file
|
||
|
else
|
||
|
# failover
|
||
|
'your princess is in another castle'
|
||
|
end
|
||
|
end
|
||
|
|
||
|
after do
|
||
|
|
||
|
t = Time.now + (8 * 60 * 60)
|
||
|
timestamp = t.strftime('%a, %d %b %Y %H:%m:%S GMT')
|
||
|
|
||
|
if @type.eql?(:aic)
|
||
|
response['Server'] = 'Apache'
|
||
|
response['Content-Disposition'] = sprintf('attachment; filename="%s"', @fake_file)
|
||
|
response['Content-Transfer-Encoding'] = 'binary'
|
||
|
response['Content-Type'] = 'image/jpeg;charset=UTF-8'
|
||
|
response['Connection'] = 'keep-alive'
|
||
|
response['Content-Length'] = File.read(@real_file).size
|
||
|
response['Last-Modified'] = timestamp
|
||
|
response['Date'] = timestamp
|
||
|
end
|
||
|
|
||
|
@type = @real_file = @fake_file = nil
|
||
|
end
|