From: David Lutterkort <[email protected]> This makes it possible to specify a default provider and username/password in a config file. Dangerous, and mostly meant to ease development
Signed-off-by: David Lutterkort <[email protected]> --- server/bin/deltacloudd | 33 +++++++++++++++++++++++++++++++++ server/lib/sinatra/lazy_auth.rb | 5 +++++ 2 files changed, 38 insertions(+), 0 deletions(-) diff --git a/server/bin/deltacloudd b/server/bin/deltacloudd index addb1f5..f5d1cd2 100755 --- a/server/bin/deltacloudd +++ b/server/bin/deltacloudd @@ -15,6 +15,7 @@ def library_present?(name) end end +DEFAULT_CONFIG = "~/.deltacloud/config" options = { :env => 'development' } @@ -39,8 +40,27 @@ BANNER opts.on( '-P', '--provider PROVIDER', 'Use PROVIDER (default is set in the driver)') do |provider| ENV['API_PROVIDER'] = provider end + opts.on( '-c', '--config [FILE]', 'Read provider and other config from FILE (default: ~/.deltacloud/config)') do |config| + options[:config] = File::expand_path(config || DEFAULT_CONFIG) + end opts.on( '-e', '--env ENV', 'Environment (default: "development")') { |env| options[:env] = env } opts.on( '-h', '--help', '') { options[:help] = true } + + opts.separator <<EOS + +Config file: + + Server configuration can be specified in a YAML file; the file must + contain a hash, where the keys are driver names; each driver entry is + also a hash. Possible keys are + :provider - the provider to use for this driver + :user - the user name for this driver + :password - the password for this driver + + Note that specifying :user and :password turns off authentication on the + server, and any request is forwarded to the backend cloud with the + specified credentials. +EOS end optparse.parse! @@ -55,6 +75,15 @@ unless ENV["API_DRIVER"] exit(1) end +if options[:config] + cfg = YAML::load(File.read(options[:config])) + if c = cfg[ENV["API_DRIVER"].to_sym] + ENV["API_PROVIDER"] ||= c[:provider] + ENV["API_USER"] ||= c[:user] + ENV["API_PASSWORD"] ||= c[:password] + end +end + ENV["API_HOST"] = "localhost" unless ENV["API_HOST"] ENV["API_PORT"] = "3001" unless ENV["API_PORT"] @@ -62,6 +91,10 @@ msg = "Starting Deltacloud API :: #{ENV["API_DRIVER"]} " msg << ":: #{ENV['API_PROVIDER']} " if ENV['API_PROVIDER'] msg << ":: http://#{ENV["API_HOST"]}:#{ENV["API_PORT"]}/api" puts msg +if ENV['API_USER'] && ENV['API_PASSWORD'] + puts "Warning: API_USER and API_PASSWORD set in environment" + puts " anybody can access this server with your credentials" +end puts dirname="#{File.dirname(__FILE__)}/.." diff --git a/server/lib/sinatra/lazy_auth.rb b/server/lib/sinatra/lazy_auth.rb index d8652fb..ac8f5c7 100644 --- a/server/lib/sinatra/lazy_auth.rb +++ b/server/lib/sinatra/lazy_auth.rb @@ -42,6 +42,11 @@ module Sinatra private def credentials! + if ENV["API_USER"] && ENV["API_PASSWORD"] + @user = ENV["API_USER"] + @password = ENV["API_PASSWORD"] + @provided = true + end unless provided? auth = Rack::Auth::Basic::Request.new(@app.request.env) unless auth.provided? && auth.basic? && auth.credentials -- 1.7.4.4
