# 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