c59deca51e
Raw OpenSSL sockets don't find the system CA bundle the same way Net::HTTP does. ssl_verify (default: true) is now a config setting that applies to both HTTP REST calls and WebSocket connections. Set via `portainer-cli configure`. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
59 lines
1.4 KiB
Ruby
59 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'yaml'
|
|
require 'fileutils'
|
|
|
|
module PortainerCli
|
|
class Config
|
|
CONFIG_DIR = File.expand_path('~/.portainer-cli').freeze
|
|
CONFIG_FILE = File.join(CONFIG_DIR, 'config.yml').freeze
|
|
|
|
attr_accessor :url, :token, :api_key, :ssl_verify
|
|
|
|
def self.load
|
|
new.tap(&:read)
|
|
end
|
|
|
|
def read
|
|
return unless File.exist?(CONFIG_FILE)
|
|
|
|
data = YAML.safe_load(File.read(CONFIG_FILE), permitted_classes: [], symbolize_names: false) || {}
|
|
@url = data['url']
|
|
@token = data['token']
|
|
@api_key = data['api_key']
|
|
@ssl_verify = data.fetch('ssl_verify', true)
|
|
end
|
|
|
|
def save
|
|
FileUtils.mkdir_p(CONFIG_DIR)
|
|
data = {}
|
|
data['url'] = @url if @url
|
|
data['token'] = @token if @token
|
|
data['api_key'] = @api_key if @api_key
|
|
data['ssl_verify'] = @ssl_verify unless @ssl_verify.nil?
|
|
File.write(CONFIG_FILE, YAML.dump(data))
|
|
File.chmod(0o600, CONFIG_FILE)
|
|
end
|
|
|
|
def valid?
|
|
!@url.nil? && !@url.empty? && auth_set?
|
|
end
|
|
|
|
def auth_header
|
|
if @api_key && !@api_key.empty?
|
|
{ 'X-API-Key' => @api_key }
|
|
elsif @token && !@token.empty?
|
|
{ 'Authorization' => "Bearer #{@token}" }
|
|
else
|
|
{}
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def auth_set?
|
|
(@token && !@token.empty?) || (@api_key && !@api_key.empty?)
|
|
end
|
|
end
|
|
end
|