Module: Aspera::Cli::PresetActions

Included in:
Aspera::Cli::Plugins::Config
Defined in:
lib/aspera/cli/preset_actions.rb

Overview

Mixin for Config plugin: preset CRUD actions

Constant Summary collapse

GLOBAL_DEFAULT_KEYWORD =

Used to identify the global default preset keyword

'GLOBAL'
CONF_OVERVIEW_KEYS =

Display columns for preset overview

%w[preset parameter value].freeze

Instance Method Summary collapse

Instance Method Details

#action_preset_ask(name:, option_names:) ⇒ Object



127
128
129
130
131
132
133
134
135
136
# File 'lib/aspera/cli/preset_actions.rb', line 127

def action_preset_ask(name:, option_names:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  cp[name] ||= {}
  option_names.each do |option_name|
    option_value = options.get_interactive(option_name, check_option: true)
    cp[name][option_name] = option_value
  end
  Result::Status.new("Updated: #{name}")
end

#action_preset_delete(name:) ⇒ Object



74
75
76
77
78
79
80
# File 'lib/aspera/cli/preset_actions.rb', line 74

def action_preset_delete(name:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  raise "no such preset: #{name}" unless cp.key?(name)
  cp.delete(name)
  Result::Status.new("Deleted: #{name}")
end

#action_preset_get(name:, param_name:) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/aspera/cli/preset_actions.rb', line 82

def action_preset_get(name:, param_name:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  raise "no such preset: #{name}" unless cp.key?(name)
  value = cp[name][param_name]
  raise "no such option in preset #{name} : #{param_name}" if value.nil?
  case value
  when Numeric, String then return Result::Text.new(ExtendedValue.instance.evaluate(value.to_s, context: 'preset'))
  end
  Result::SingleObject.new(value)
end

#action_preset_initialize(name:, config_value:) ⇒ Object



109
110
111
112
113
114
115
# File 'lib/aspera/cli/preset_actions.rb', line 109

def action_preset_initialize(name:, config_value:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  Log.log.warn{"configuration already exists: #{name}, overwriting"} if cp.key?(name)
  cp[name] = config_value
  Result::Status.new("Modified: #{@option_config_file}")
end

#action_preset_listObject



14
15
16
# File 'lib/aspera/cli/preset_actions.rb', line 14

def action_preset_list(**)
  Result::ValueList.new(presets.config_presets.keys, name: 'name')
end

#action_preset_lookupObject



32
33
34
35
36
37
38
39
# File 'lib/aspera/cli/preset_actions.rb', line 32

def action_preset_lookup(**)
  Plugins::BasicAuth.declare_options(options)
  url = options.get_option(:url, mandatory: true)
  user = options.get_option(:username, mandatory: true)
  result = presets.lookup_preset(url: url, username: user)
  Aspera.assert(!result.nil?, type: Error){'no such config found'}
  Result::SingleObject.new(result)
end

#action_preset_overviewObject



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/aspera/cli/preset_actions.rb', line 18

def action_preset_overview(**)
  cp = presets.config_presets
  # Display process modifies the value (hide secrets): we do not want to save removed secrets
  data = PresetManager.deep_clone(cp)
  formatter.hide_secrets(data)
  result = []
  data.each do |config, preset|
    preset.each do |parameter, value|
      result.push(CONF_OVERVIEW_KEYS.zip([config, parameter, value]).to_h)
    end
  end
  Result::ObjectList.new(result, fields: CONF_OVERVIEW_KEYS)
end

#action_preset_secure(config_name: nil) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/aspera/cli/preset_actions.rb', line 41

def action_preset_secure(config_name: nil, **)
  cp = presets.config_presets
  preset_names = config_name.nil? ? cp.keys : [config_name]
  secret_keywords = %w[password secret].freeze
  preset_names.each do |preset_name|
    preset = cp[preset_name]
    next unless preset.is_a?(Hash)
    preset.each_key do |option_name|
      secret_keywords.each do |keyword|
        next unless option_name.end_with?(keyword)
        vault_label = preset_name
        incr = 0
        until vault.get(label: vault_label, exception: false).nil?
          vault_label = "#{preset_name}#{incr}"
          incr += 1
        end
        to_set = {label: vault_label, password: preset[option_name]}
        puts "need to encode #{preset_name}.#{option_name} -> #{vault_label} -> #{to_set}"
        vault.set(to_set)
        preset[option_name] = "@vault:#{vault_label}.password"
      end
    end
  end
  Result::Status.new('Secrets secured in vault: Make sure to save the vault password securely.')
end

#action_preset_set(name:, param_name:, param_value:) ⇒ Object



102
103
104
105
106
107
# File 'lib/aspera/cli/preset_actions.rb', line 102

def action_preset_set(name:, param_name:, param_value:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  param_name = Parser.option_line_to_name(param_name)
  presets.set_key(name, param_name, param_value)
  Result::Nothing.new
end

#action_preset_show(name:) ⇒ Object



67
68
69
70
71
72
# File 'lib/aspera/cli/preset_actions.rb', line 67

def action_preset_show(name:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  raise "no such preset: #{name}" unless cp.key?(name)
  Result::SingleObject.new(PresetManager.deep_clone(cp[name]))
end

#action_preset_unset(name:, param_name:) ⇒ Object



94
95
96
97
98
99
100
# File 'lib/aspera/cli/preset_actions.rb', line 94

def action_preset_unset(name:, param_name:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  cp = presets.config_presets
  raise "no such preset: #{name}" unless cp.key?(name)
  cp[name].delete(param_name)
  Result::Status.new("Removed: #{name}: #{param_name}")
end

#action_preset_update(name:) ⇒ Object



117
118
119
120
121
122
123
124
125
# File 'lib/aspera/cli/preset_actions.rb', line 117

def action_preset_update(name:, **)
  name = presets.global_default_preset if name.eql?(GLOBAL_DEFAULT_KEYWORD)
  unprocessed_options = options.unprocessed_options_with_value
  Log.log.debug{"opts=#{unprocessed_options}"}
  cp = presets.config_presets
  cp[name] ||= {}
  cp[name].merge!(unprocessed_options)
  Result::Status.new("Updated: #{name}")
end