Files
grzlus f263088d15 Add README, LICENSE (GPL-3), and update config dir to XDG path
Config moved to ~/.config/portainer-cli/config.yml following XDG convention.
README covers installation, configuration, all commands, container name
resolution logic, and debugging. Tool noted as AI-generated.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 15:18:27 +01:00

59 lines
1.4 KiB
Ruby

# frozen_string_literal: true
require 'yaml'
require 'fileutils'
module PortainerCli
class Config
CONFIG_DIR = File.expand_path('~/.config/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