diff options
| author | Zack Hobson | 2013-11-21 15:21:24 -0800 | 
|---|---|---|
| committer | Zack Hobson | 2013-11-21 15:21:24 -0800 | 
| commit | 6d42e52a997514f02beab65f8e465c3614cef041 (patch) | |
| tree | eccea95ca82af531d0f72c127785e59adb5fd730 /lib | |
| parent | 63a48ab55f6cf1e2a2c5a8e309c10442f7416f96 (diff) | |
| download | hcl-6d42e52a997514f02beab65f8e465c3614cef041.tar.bz2 | |
Fix user setup, reconfigure on auth failure.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/hcl/app.rb | 31 | ||||
| -rw-r--r-- | lib/hcl/timesheet_resource.rb | 12 | 
2 files changed, 27 insertions, 16 deletions
| diff --git a/lib/hcl/app.rb b/lib/hcl/app.rb index 970bd6d..4ff63d5 100644 --- a/lib/hcl/app.rb +++ b/lib/hcl/app.rb @@ -2,14 +2,13 @@ require 'yaml'  require 'fileutils'  require 'trollop' -require 'highline' +require 'highline/import'  module HCl    class App      include HCl::Utility      include HCl::Commands -      HCL_DIR = ENV['HCL_DIR'] || "#{ENV['HOME']}/.hcl"      SETTINGS_FILE = "#{HCL_DIR}/settings.yml"      CONFIG_FILE = "#{HCL_DIR}/config.yml" @@ -61,6 +60,10 @@ module HCl        rescue SocketError => e          STDERR.puts "Connection failed. (#{e.message})"          exit 1 +      rescue TimesheetResource::AuthFailure => e +        STDERR.puts "Unable to authenticate: #{e}" +        request_config +        run        rescue TimesheetResource::Failure => e          STDERR.puts "API failure: #{e}"          exit 1 @@ -122,9 +125,9 @@ EOM        self      end -    protected +    private -    def read_config +    def read_config force=false        if File.exists? CONFIG_FILE          config = YAML::load File.read(CONFIG_FILE)          TimesheetResource.configure config @@ -133,17 +136,21 @@ EOM          TimesheetResource.configure config          write_config config        else -        config = {} -        puts "Please specify your Harvest credentials.\n" -        config['login'] = ask("Email Address: ").to_s -        config['password'] = ask("Password: ") { |q| q.echo = false }.to_s -        config['subdomain'] = ask("Subdomain: ").to_s -        config['ssl'] = %w(y yes).include?(ask("Use SSL? (y/n): ").downcase) -        TimesheetResource.configure config -        write_config config +        request_config        end      end +    def request_config +      config = {} +      puts "Please specify your Harvest credentials.\n" +      config['login'] = ask("Email Address: ").to_s +      config['password'] = ask("Password: ") { |q| q.echo = false }.to_s +      config['subdomain'] = ask("Subdomain: ").to_s +      config['ssl'] = %w(y yes).include?(ask("Use SSL? (y/n): ").downcase) +      TimesheetResource.configure config +      write_config config +    end +      def write_config config        puts "Writing configuration to #{CONFIG_FILE}."        File.open(CONFIG_FILE, 'w') do |f| diff --git a/lib/hcl/timesheet_resource.rb b/lib/hcl/timesheet_resource.rb index 615fb2a..7ab99ec 100644 --- a/lib/hcl/timesheet_resource.rb +++ b/lib/hcl/timesheet_resource.rb @@ -16,6 +16,7 @@ end  module HCl    class TimesheetResource      class Failure < StandardError; end +    class AuthFailure < StandardError; end      def self.configure opts = nil        if opts @@ -64,12 +65,15 @@ module HCl        request.content_type = 'application/xml'        request['Accept']    = 'application/xml'        response = https.request request, data -      if response.kind_of? Net::HTTPSuccess +      case response +      when Net::HTTPSuccess          response.body -      elsif response.kind_of? Net::HTTPFound -        raise Failure, "Redirected in the request. Perhaps your ssl configuration variable is set incorrectly?" +      when Net::HTTPFound +        raise Failure, "Redirected! Perhaps your ssl configuration variable is set incorrectly?" +      when Net::HTTPUnauthorized +        raise AuthFailure, "Login failed."        else -        raise Failure, "Unexpected response from the upstream API" +        raise Failure, "Unexpected response from the upstream API."        end      end | 
