class Bim::Action::SSL

SSL class used by Bim::Subcommands::SSL

Constants

CREATE_SSL_PROFILE_PATH
CRT_FILES_PATH
CRT_FILES_URI
CRT_PROFILES_PATH
CRT_PROFILES_URI
INSTALL_PATH
UPLOAD_PATH
VS_PATH

Public Class Methods

bundles() click to toggle source
# File lib/bim/action/ssl.rb, line 20
def bundles
  cond = proc { |item| item['isBundle'] == 'true' }
  select_map(CRT_FILES_URI, cond) do |item|
    { 'name' => item['name'].split('.')[0...-1].join('.') }
  end
end
create_ssl_profile(profilename, chain) click to toggle source
# File lib/bim/action/ssl.rb, line 66
def create_ssl_profile(profilename, chain)
  uri = URI.join(Bim::BASE_URL, Bim::Action::SSL::CREATE_SSL_PROFILE_PATH)
  j = { 'name' => profilename,
        'ciphers' => 'DEFAULT:!SSLv3',
        'certKeyChain' => [
          { 'name' => 'default',
            'key'   => "#{profilename}.key",
            'cert'  => "#{profilename}.crt",
            'chain' => "#{chain}.crt" }
        ] }.to_json

  req = request(uri, Bim::AUTH, 'application/json', 'POST', j)

  http(uri).request(req).body
end
detail(profile_name) click to toggle source
# File lib/bim/action/ssl.rb, line 33
def detail(profile_name)
  specify(CRT_PROFILES_URI) do |item|
    item['name'] == profile_name || item['fullPath'] == profile_name
  end
end
install(type, crt_name, local_file_path) click to toggle source
# File lib/bim/action/ssl.rb, line 51
def install(type, crt_name, local_file_path)
  uri = URI.join(Bim::BASE_URL, Bim::Action::SSL::INSTALL_PATH[type.to_sym])
  req = request(
    uri,
    Bim::AUTH,
    'application/json',
    'POST',
    { 'command' => 'install',
      'name' => crt_name,
      'from-local-file' => local_file_path }.to_json
  )

  http(uri).request(req).body
end
profiles() click to toggle source
# File lib/bim/action/ssl.rb, line 27
def profiles
  map(CRT_PROFILES_URI) do |item|
    { 'name' => item['name'], 'fullPath' => item['fullPath'], 'key' => item['key'], 'chain' => item['chain'] }
  end
end
replace(old_profilename, new_profilename, test = nil) click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/bim/action/ssl.rb, line 83
def replace(old_profilename, new_profilename, test = nil)
  result = { target_vs: [], change_vs: [], fail_vs: [] }
  JSON.parse(vs_list)['items'].each do |vs|
    next if test && vs['name'] != Bim::TEST_VS

    names = JSON.parse(profiles_items(vs['profilesReference']['link']))['items'].map { |p| p['name'] }

    next unless names.include?(old_profilename)
    # can not update only diff.
    old_names = names.map { |name| "/Common/#{name}" }
    names.delete(old_profilename) && names.push(new_profilename)
    names = names.map { |name| "/Common/#{name}" }

    next unless yes_or_no?(output_msg(vs['name'], old_names, names))

    result[:target_vs] << vs['name']
    res = update_profiles(vs['selfLink'], names)
    res.code == '200' ? result[:change_vs] << vs['name'] : result[:fail_vs] << vs['name']
  end
  result.to_json
end
upload(filepath) click to toggle source
# File lib/bim/action/ssl.rb, line 39
def upload(filepath)
  f = File.read(filepath)
  uri = URI.join(Bim::BASE_URL, Bim::Action::SSL::UPLOAD_PATH, File.basename(filepath))
  req = request(uri, Bim::AUTH, 'application/octet-stream', 'POST', f) do |req_in|
    req_in['Content-Length'] = f.size
    req_in['Content-Range']  = "0-#{f.size - 1}/#{f.size}"
    req_in
  end

  http(uri).request(req).body
end

Private Class Methods

output_msg(vs_name, old_names, new_names) click to toggle source
# File lib/bim/action/ssl.rb, line 117
        def output_msg(vs_name, old_names, new_names)
          puts <<~MSG
            virtual server: #{vs_name}
            replace #{old_names} to #{new_names}
            diff:
              --: #{(old_names - new_names)}
              ++: #{(new_names - old_names)}
MSG
          print 'is it ok? [y|n]: '
        end
profiles_items(link) click to toggle source
# File lib/bim/action/ssl.rb, line 107
def profiles_items(link)
  uri = URI.parse(link.sub('localhost', BIGIP_HOST))
  get_body(uri)
end
update_profiles(link, names) click to toggle source
# File lib/bim/action/ssl.rb, line 112
def update_profiles(link, names)
  uri = URI.parse(link.sub('localhost', BIGIP_HOST))
  post(uri, { profiles: names }.to_json)
end