class Asperalm::Fasp::Uri

translates a “faspe:” URI (used in Faspex) into transfer spec hash

Public Class Methods

new(fasplink) click to toggle source
# File lib/asperalm/fasp/uri.rb, line 8
def initialize(fasplink)
  @fasp_uri=URI.parse(fasplink)
  # TODO: check scheme is faspe
end

Public Instance Methods

transfer_spec() click to toggle source
# File lib/asperalm/fasp/uri.rb, line 13
def transfer_spec
  result_ts={}
  result_ts['remote_host']=@fasp_uri.host
  result_ts['remote_user']=@fasp_uri.user
  result_ts['ssh_port']=@fasp_uri.port
  result_ts['paths']=[{"source"=>URI.decode_www_form_component(@fasp_uri.path)}]
  # faspex does not encode trailing base64 encoded tags, fix that
  fixed_query = @fasp_uri.query.gsub(/(=+)$/){|x|'%3D'*x.length}

  URI::decode_www_form(fixed_query).each do |i|
    name=i[0]
    value=i[1]
    case name
    when 'cookie'; result_ts['cookie']=value
    when 'token'; result_ts['token']=value
    when 'policy'; result_ts['rate_policy']=value
    when 'httpport'; result_ts['http_fallback_port']=value.to_i
    when 'targetrate'; result_ts['target_rate_kbps']=value.to_i
    when 'minrate'; result_ts['min_rate_kbps']=value.to_i
    when 'port'; result_ts['fasp_port']=value.to_i
    when 'enc'; result_ts['cipher']=value.gsub('-','') # aes-128 -> aes128
    when 'tags64'; result_ts['tags']=JSON.parse(Base64.strict_decode64(value))
    when 'bwcap'; result_ts['target_rate_cap_kbps']=value.to_i
    when 'createpath'; result_ts['create_dir']=CommandLineBuilder.yes_to_true(value)
    when 'fallback'; result_ts['http_fallback']=CommandLineBuilder.yes_to_true(value)
    when 'lockpolicy'; result_ts['lock_rate_policy']=CommandLineBuilder.yes_to_true(value)
    when 'lockminrate'; result_ts['lock_min_rate']=CommandLineBuilder.yes_to_true(value)
    when 'sshfp'; result_ts['sshfp']=value
    when 'auth'; Log.log.debug("ignoring #{name}=#{value}") # TODO: translate into transfer spec ? yes/no
    when 'v'; Log.log.debug("ignoring #{name}=#{value}") # TODO: translate into transfer spec ? 2
    when 'protect'; Log.log.debug("ignoring #{name}=#{value}") # TODO: translate into transfer spec ?
    else Log.log.error("non managed URI value: #{name} = #{value}")
    end
  end
  return result_ts
end