railshoster 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG.textile CHANGED
@@ -45,4 +45,8 @@ bc. railshoster init -json '{"t":"h","u":"user999999999","a":"rails1","h":"zeta.
45
45
  h3. 0.2.1
46
46
 
47
47
  * Updated ROADMAP
48
- * Added bundler as railshoster gem dependency to avoid problems with "rake" vs "bundle exec rake".
48
+ * Added bundler as railshoster gem dependency to avoid problems with "rake" vs "bundle exec rake".
49
+
50
+ h3. 0.3.0
51
+
52
+ * SSH publick key file recognition and upload to authorized_keys to enable a passwordless deploy.rb.
data/ROADMAP.textile CHANGED
@@ -16,6 +16,6 @@ h3. Product Backlog
16
16
 
17
17
  h3. General TODOs
18
18
 
19
- * Railshoster::InitCommand - Check wether it is possible to replace "system" call with a pure ruby version possibly by using the capistrano gem directly via ruby.
19
+ * Railshoster::InitCommand - Check wether it is possible to replace "system" call with a pure ruby version possibly by using the capistrano gem directly via ruby. See branch "run_cap_task_from_ruby-2011-11-08" for a try on how to do it.
20
20
  * Test bin/railshoster
21
21
  * railshoster deploy should check capistrano's exit status and respond to that in case of a failure.
data/bin/railshoster CHANGED
@@ -1,12 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'rubygems'
4
- # require 'bundler/setup'
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'init'))
5
4
 
6
- gem "json"
7
- gem "git"
8
- gem 'erubis'
9
- gem "gli"
10
5
  require 'fileutils'
11
6
 
12
7
  require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'railshoster'))
data/gemfiles/Gemfile.ci CHANGED
@@ -11,4 +11,5 @@ gem 'erubis'
11
11
  group :test do
12
12
  gem 'rspec'
13
13
  gem 'fakefs'
14
+ gem 'mocha'
14
15
  end
data/lib/init.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'rubygems'
2
+ gem "json"
3
+ gem "git"
4
+ gem 'erubis'
5
+ gem "gli"
@@ -2,6 +2,7 @@ require 'base64'
2
2
  require 'json'
3
3
  require 'git'
4
4
  require 'fileutils'
5
+ require 'net/sftp'
5
6
 
6
7
  require File.expand_path(File.join(File.dirname(__FILE__), '/capistrano/h'))
7
8
 
@@ -31,9 +32,38 @@ module Railshoster
31
32
  def run_by_application_hash(application_hash_as_json_string)
32
33
  app_hash = parse_application_json_hash(application_hash_as_json_string)
33
34
 
35
+ # Extract GIT URL from project and add it to the app_hash
34
36
  git_url = get_git_remote_url_from_git_config
35
37
  app_hash["git"] = git_url
36
38
 
39
+ #TODO Add connection test -> If there's already access -> no need to do this
40
+ selected_key = Railshoster::Utilities.select_public_ssh_key
41
+ app_hash["public_ssh_key"] = Pathname.new(selected_key[:path]).basename.to_s.gsub(".pub", "")
42
+
43
+ create_remote_authorized_key_file_from_public_ssh_key(app_hash, selected_key)
44
+ deployrb_str = create_deployrb(app_hash)
45
+ write_deploy_rb(deployrb_str)
46
+ capify_project
47
+ success_message
48
+ end
49
+
50
+ protected
51
+
52
+ def create_remote_authorized_key_file_from_public_ssh_key(app_hash, key)
53
+ remote_dot_ssh_path = ".ssh"
54
+ remote_authorized_keys_path = remote_dot_ssh_path + "/authorized_keys"
55
+ Net::SFTP.start(app_hash["h"], app_hash["u"], :password => app_hash["p"]) do |sftp|
56
+ begin
57
+ sftp.mkdir!(remote_dot_ssh_path)
58
+ rescue Net::SFTP::StatusException => e
59
+ # Most likely the .ssh folder already exists raise again if not.
60
+ raise e unless e.code == 4
61
+ end
62
+ sftp.upload!(key[:path].to_s, remote_authorized_keys_path)
63
+ end
64
+ end
65
+
66
+ def create_deployrb(app_hash)
37
67
  deployrb_str = ""
38
68
 
39
69
  # Choose the further process depending on the application type by applying a strategy pattern.
@@ -46,13 +76,7 @@ module Railshoster
46
76
  else
47
77
  raise UnsupportedApplicationTypeError.new
48
78
  end
49
-
50
- write_deploy_rb(deployrb_str)
51
- capify_project
52
- success_message
53
- end
54
-
55
- protected
79
+ end
56
80
 
57
81
  # Decodoes token to get the JSON hash back.
58
82
  # gQkUSMakKRPhm0EIaer => {"key":"value"}
@@ -82,9 +106,7 @@ module Railshoster
82
106
  deployrb_path = File.join(deployrb_basepath, "deploy.rb")
83
107
  Railshoster::Utilities.backup_file(deployrb_path) if File.exists?(deployrb_path)
84
108
 
85
- File.open(deployrb_path, "w+") do |f|
86
- f << deployrb_str
87
- end
109
+ File.open(deployrb_path, "w+") { |f| f << deployrb_str }
88
110
  end
89
111
 
90
112
  def capify_project
@@ -0,0 +1,5 @@
1
+ module Railshoster
2
+ class InvalidPublicSshKeyError < ArgumentError
3
+ include Railshoster::Error
4
+ end
5
+ end
@@ -2,4 +2,4 @@ module Railshoster
2
2
  class PossiblyNotAGitRepoError < ArgumentError
3
3
  include Railshoster::Error
4
4
  end
5
- end
5
+ end
@@ -1,4 +1,6 @@
1
1
  require 'fileutils'
2
+ require 'etc'
3
+ require 'pathname'
2
4
 
3
5
  module Railshoster
4
6
  class Utilities
@@ -21,5 +23,61 @@ module Railshoster
21
23
 
22
24
  FileUtils.cp(path, backup_path)
23
25
  end
26
+
27
+ def self.get_user_home
28
+ homes = ["HOME", "HOMEPATH"]
29
+ home_key = homes.detect { |h| ENV[h] != nil }
30
+ ENV[home_key]
31
+ end
32
+
33
+ def self.select_public_ssh_key(ssh_dir = File.join(get_user_home, ".ssh"), options = {:verbose => true})
34
+ keys = Railshoster::Utilities.find_public_ssh_keys(ssh_dir, options)
35
+ return keys.first if keys.size == 1
36
+
37
+ puts "\nThere are multiple public ssh keys. Please choose your deploy key:"
38
+ keys.each_with_index do |key, i|
39
+ puts "#{i+1}) #{Pathname.new(key[:path]).basename.to_s}"
40
+ end
41
+
42
+ selected_key = nil
43
+ while selected_key.nil? do
44
+ print "Your choice: "
45
+ index = (STDIN.gets.chomp.to_i - 1)
46
+ selected_key = keys[index]
47
+ puts "Invalid choice!" unless selected_key
48
+ end
49
+
50
+ selected_key
51
+ end
52
+
53
+ def self.find_public_ssh_keys(ssh_dir = File.join(get_user_home, ".ssh"), options = {:verbose => true})
54
+ files_in_ssh_dir = Dir.glob(File.join(ssh_dir, "*.pub"))
55
+
56
+ ssh_keys = []
57
+
58
+ files_in_ssh_dir.each do |filepath|
59
+ filepathname = Pathname.new(filepath)
60
+
61
+ begin
62
+ ssh_keys << parse_public_ssh_key_file(filepathname)
63
+ rescue InvalidPublicSshKeyError => e
64
+ puts "\tNotice: #{filepathname} is not a valid public ssh key: #{e.message}" if (options && options[:verbose])
65
+ end
66
+ end
67
+ ssh_keys
68
+ end
69
+
70
+ def self.parse_public_ssh_key_file(path_to_key)
71
+ key = File.open(path_to_key).read
72
+ key_hash = parse_public_ssh_key(key)
73
+ key_hash[:path] = path_to_key
74
+ key_hash
75
+ end
76
+
77
+ def self.parse_public_ssh_key(key)
78
+ format_identifier, key_data = key.split(" ")
79
+ raise InvalidPublicSshKeyError.new("Couldn't recognize both format_identifier and/or key_data. One is missing") unless(format_identifier && key_data)
80
+ {:format => format_identifier.chomp, :key_data => key_data.chomp, :key => key.chomp}
81
+ end
24
82
  end
25
83
  end
@@ -1,3 +1,3 @@
1
1
  module Railshoster
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/railshoster.rb CHANGED
@@ -7,6 +7,7 @@ require File.join(File.dirname(__FILE__), 'railshoster/unsupported_application_t
7
7
  require File.join(File.dirname(__FILE__), 'railshoster/capify_project_failed_error')
8
8
  require File.join(File.dirname(__FILE__), 'railshoster/bad_application_json_hash_error')
9
9
  require File.join(File.dirname(__FILE__), 'railshoster/bad_appliction_token_error')
10
+ require File.join(File.dirname(__FILE__), 'railshoster/invalid_public_ssh_key_error')
10
11
  require File.join(File.dirname(__FILE__), 'railshoster/init_command')
11
12
  require File.join(File.dirname(__FILE__), 'railshoster/deploy_command')
12
13
  require File.join(File.dirname(__FILE__), 'railshoster/app_url_command')
data/railshoster.gemspec CHANGED
@@ -28,4 +28,5 @@ Gem::Specification.new do |s|
28
28
 
29
29
  s.add_development_dependency('rspec')
30
30
  s.add_development_dependency('fakefs')
31
+ s.add_development_dependency('mocha')
31
32
  end
@@ -0,0 +1 @@
1
+ thisisbullshit
@@ -0,0 +1 @@
1
+ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDwnMABQ9xWwYdhHaaoNSzFMfXmytWHgkBmDg6v8Fn3oILqOMs99IPd7ChPetDdUWYV2pzLVVKB/kwrcoodRC4H6YHn8xk1oI+gDsv4Yg7ytWwgnDf5zXwWMVQ/IqfOdfxRwS1UCrKL7UsVfIUPzXmkia7PoMoQNnM8jbDRDcfyis3Q1VZ9OjIlM/RfqjH0hGFS95nd6geNwpSbSpg4HxNmfltQ6GpoqclQXX0QdBO+q93sn33JjFPEhYuLvQcoea7Tl0zRY0AGQ9r7562QFlWqMmB+9YXcsZu2OZSk7t5a39jral0jEuEeJB56kb5ZUqRA1DJI5En09/WUPLCYprdb enterprise-rails
@@ -0,0 +1 @@
1
+ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDwnMABQ9xWwYdhHaaoNSzFMfXmytWHgkBmDg6v8Fn3oILqOMs99IPd7ChPetDdUWYV2pzLVVKB/kwrcoodRC4H6YHn8xk1oI+gDsv4Yg7ytWwgnDf5zXwWMVQ/IqfOdfxRwS1UCrKL7UsVfIUPzXmkia7PoMoQNnM8jbDRDcfyis3Q1VZ9OjIlM/RfqjH0hGFS95nd6geNwpSbSpg4HxNmfltQ6GpoqclQXX0QdBO+q93sn33JjFPEhYuLvQcoea7Tl0zRY0AGQ9r7562QFlWqMmB+9YXcsZu2OZSk7t5a39jral0jEuEeJB56kb5ZUqRA1DJI5En09/WUPLCYprdb enterprise-rails
@@ -0,0 +1 @@
1
+ ssh-dss AAAAB3NzaC1kc3MAAACASb4K1r69pd07CdApimtQvDD6VfKNCxv3BjyApoG4jQrrzhyMbuu1CKlbn7fIP4b18nQw3j02KIihcK/m6eN3pEkdI2+EbfGdpZeyZsxu7T0TgUDdB5+9wBHK46djOcB9n0PvY+uC/wO+nOXLMaL6dTzPOAF88QKr4Y88QMLzyNcAAAAVAIyNiIdszugwRjAefsa+JhGv+DR7AAAAgBonQljDlrI71sryROfA0KCu+wzB2mhou1iJEuFu0X079Urs6vhniT0qNXHMhLHFCxfZTrjbAGM3PY1SjW2XKmPLfyDwWoJrKtB10WZSlGZqSajMHahFdQ0fruibR/jGPI/etWbMSOHNZ2bBrM19LzuxPoZ2yWdigfCTLNl0bct6AAAAgDjakQkN1VfL/qFaAaX9VNS91ztUZo7HW2XuarGQ8GlTANsfWRhJLwXGJXkFaLB3Ja8DFeBLdnNBLKlMBh0MUIxOryrR6ShC5Ul5bmWfzpHq9WyTF6G/qmm7dIOSFJpe5OfAaZitaNjb7dHe6ruryYZ9IuPwuKWwy+BNJih+EEFJ
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "..", "..", "spec_helper.rb")
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
2
 
3
3
  describe Railshoster::Command do
4
4
  describe "#Basics" do
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper.rb"))
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
2
 
3
3
  describe Railshoster::InitCommand do
4
4
 
@@ -1,12 +1,13 @@
1
- require File.join(File.dirname(__FILE__), "..", "..", "spec_helper.rb")
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
2
 
3
3
  describe Railshoster::Utilities do
4
-
5
- before do
6
- FakeFS.activate!
7
- end
8
-
4
+
9
5
  describe "#Backup" do
6
+
7
+ before do
8
+ FakeFS.activate!
9
+ end
10
+
10
11
  include FakeFS::SpecHelpers
11
12
 
12
13
  it "should create a backup file" do
@@ -41,9 +42,49 @@ describe Railshoster::Utilities do
41
42
  # But the old backup is still there - being moved to .bak.bak.
42
43
  File.open("myfile.txt.bak.bak").read.should eql("2")
43
44
  end
44
- end
45
-
46
- after do
47
- FakeFS.deactivate!
45
+
46
+ after do
47
+ FakeFS.deactivate!
48
+ end
48
49
  end
50
+
51
+ describe "#ssh_tools" do
52
+ it "should parse a valid ssh public key" do
53
+ key = Railshoster::Utilities.parse_public_ssh_key("ssh-dss AAAAB3NzaC1kc3MAAACASb4K1r69pd07CdApimtQvDD6VfKNCxv3BjyApoG4jQrrzhyMbuu1CKlbn7fIP4b18nQw3j02KIihcK/m6eN3pEkdI2+EbfGdpZeyZsxu7T0TgUDdB5+9wBHK46djOcB9n0PvY+uC/wO+nOXLMaL6dTzPOAF88QKr4Y88QMLzyNcAAAAVAIyNiIdszugwRjAefsa+JhGv+DR7AAAAgBonQljDlrI71sryROfA0KCu+wzB2mhou1iJEuFu0X079Urs6vhniT0qNXHMhLHFCxfZTrjbAGM3PY1SjW2XKmPLfyDwWoJrKtB10WZSlGZqSajMHahFdQ0fruibR/jGPI/etWbMSOHNZ2bBrM19LzuxPoZ2yWdigfCTLNl0bct6AAAAgDjakQkN1VfL/qFaAaX9VNS91ztUZo7HW2XuarGQ8GlTANsfWRhJLwXGJXkFaLB3Ja8DFeBLdnNBLKlMBh0MUIxOryrR6ShC5Ul5bmWfzpHq9WyTF6G/qmm7dIOSFJpe5OfAaZitaNjb7dHe6ruryYZ9IuPwuKWwy+BNJih+EEFJ")
54
+ key[:format].should eql("ssh-dss")
55
+ key[:key_data].should eql("AAAAB3NzaC1kc3MAAACASb4K1r69pd07CdApimtQvDD6VfKNCxv3BjyApoG4jQrrzhyMbuu1CKlbn7fIP4b18nQw3j02KIihcK/m6eN3pEkdI2+EbfGdpZeyZsxu7T0TgUDdB5+9wBHK46djOcB9n0PvY+uC/wO+nOXLMaL6dTzPOAF88QKr4Y88QMLzyNcAAAAVAIyNiIdszugwRjAefsa+JhGv+DR7AAAAgBonQljDlrI71sryROfA0KCu+wzB2mhou1iJEuFu0X079Urs6vhniT0qNXHMhLHFCxfZTrjbAGM3PY1SjW2XKmPLfyDwWoJrKtB10WZSlGZqSajMHahFdQ0fruibR/jGPI/etWbMSOHNZ2bBrM19LzuxPoZ2yWdigfCTLNl0bct6AAAAgDjakQkN1VfL/qFaAaX9VNS91ztUZo7HW2XuarGQ8GlTANsfWRhJLwXGJXkFaLB3Ja8DFeBLdnNBLKlMBh0MUIxOryrR6ShC5Ul5bmWfzpHq9WyTF6G/qmm7dIOSFJpe5OfAaZitaNjb7dHe6ruryYZ9IuPwuKWwy+BNJih+EEFJ")
56
+ key[:key].should eql("ssh-dss AAAAB3NzaC1kc3MAAACASb4K1r69pd07CdApimtQvDD6VfKNCxv3BjyApoG4jQrrzhyMbuu1CKlbn7fIP4b18nQw3j02KIihcK/m6eN3pEkdI2+EbfGdpZeyZsxu7T0TgUDdB5+9wBHK46djOcB9n0PvY+uC/wO+nOXLMaL6dTzPOAF88QKr4Y88QMLzyNcAAAAVAIyNiIdszugwRjAefsa+JhGv+DR7AAAAgBonQljDlrI71sryROfA0KCu+wzB2mhou1iJEuFu0X079Urs6vhniT0qNXHMhLHFCxfZTrjbAGM3PY1SjW2XKmPLfyDwWoJrKtB10WZSlGZqSajMHahFdQ0fruibR/jGPI/etWbMSOHNZ2bBrM19LzuxPoZ2yWdigfCTLNl0bct6AAAAgDjakQkN1VfL/qFaAaX9VNS91ztUZo7HW2XuarGQ8GlTANsfWRhJLwXGJXkFaLB3Ja8DFeBLdnNBLKlMBh0MUIxOryrR6ShC5Ul5bmWfzpHq9WyTF6G/qmm7dIOSFJpe5OfAaZitaNjb7dHe6ruryYZ9IuPwuKWwy+BNJih+EEFJ")
57
+ end
58
+
59
+ it "should fail to parse a ssh key without a public key format identifier" do
60
+ expect {
61
+ Railshoster::Utilities.parse_public_ssh_key("AAAAB3NzaC1kc3MAAACASb4K1r69pd07CdApimtQvDD6VfKNCxv3BjyApoG4jQrrzhyMbuu1CKlbn7fIP4b18nQw3j02KIihcK/m6eN3pEkdI2+EbfGdpZeyZsxu7T0TgUDdB5+9wBHK46djOcB9n0PvY+uC/wO+nOXLMaL6dTzPOAF88QKr4Y88QMLzyNcAAAAVAIyNiIdszugwRjAefsa+JhGv+DR7AAAAgBonQljDlrI71sryROfA0KCu+wzB2mhou1iJEuFu0X079Urs6vhniT0qNXHMhLHFCxfZTrjbAGM3PY1SjW2XKmPLfyDwWoJrKtB10WZSlGZqSajMHahFdQ0fruibR/jGPI/etWbMSOHNZ2bBrM19LzuxPoZ2yWdigfCTLNl0bct6AAAAgDjakQkN1VfL/qFaAaX9VNS91ztUZo7HW2XuarGQ8GlTANsfWRhJLwXGJXkFaLB3Ja8DFeBLdnNBLKlMBh0MUIxOryrR6ShC5Ul5bmWfzpHq9WyTF6G/qmm7dIOSFJpe5OfAaZitaNjb7dHe6ruryYZ9IuPwuKWwy+BNJih+EEFJ")
62
+ }.to raise_error(Railshoster::InvalidPublicSshKeyError)
63
+ end
64
+
65
+ it "should fail to parse a ssh key without a public key/certificate data" do
66
+ expect {
67
+ Railshoster::Utilities.parse_public_ssh_key("ssh-dss ")
68
+ }.to raise_error(Railshoster::InvalidPublicSshKeyError)
69
+ end
70
+
71
+ it "should parse a public ssh key file" do
72
+ keys = Railshoster::Utilities.find_public_ssh_keys(File.join(File.dirname(__FILE__), "..", "..", "fake_dot_ssh", "1_valid_key"), :verbose => false)
73
+ keys.size.should be(1)
74
+ keys.first[:format].should eql("ssh-rsa")
75
+ keys.first[:key_data].should eql("AAAAB3NzaC1yc2EAAAADAQABAAABAQDwnMABQ9xWwYdhHaaoNSzFMfXmytWHgkBmDg6v8Fn3oILqOMs99IPd7ChPetDdUWYV2pzLVVKB/kwrcoodRC4H6YHn8xk1oI+gDsv4Yg7ytWwgnDf5zXwWMVQ/IqfOdfxRwS1UCrKL7UsVfIUPzXmkia7PoMoQNnM8jbDRDcfyis3Q1VZ9OjIlM/RfqjH0hGFS95nd6geNwpSbSpg4HxNmfltQ6GpoqclQXX0QdBO+q93sn33JjFPEhYuLvQcoea7Tl0zRY0AGQ9r7562QFlWqMmB+9YXcsZu2OZSk7t5a39jral0jEuEeJB56kb5ZUqRA1DJI5En09/WUPLCYprdb")
76
+ end
77
+
78
+ it "should select a public ssh key without a dialog if there is only a single valid key" do
79
+ key = Railshoster::Utilities.select_public_ssh_key(File.join(File.dirname(__FILE__), "..", "..", "fake_dot_ssh", "1_valid_key"), :verbose => false)
80
+ key[:format].should eql("ssh-rsa")
81
+ key[:key_data].should eql("AAAAB3NzaC1yc2EAAAADAQABAAABAQDwnMABQ9xWwYdhHaaoNSzFMfXmytWHgkBmDg6v8Fn3oILqOMs99IPd7ChPetDdUWYV2pzLVVKB/kwrcoodRC4H6YHn8xk1oI+gDsv4Yg7ytWwgnDf5zXwWMVQ/IqfOdfxRwS1UCrKL7UsVfIUPzXmkia7PoMoQNnM8jbDRDcfyis3Q1VZ9OjIlM/RfqjH0hGFS95nd6geNwpSbSpg4HxNmfltQ6GpoqclQXX0QdBO+q93sn33JjFPEhYuLvQcoea7Tl0zRY0AGQ9r7562QFlWqMmB+9YXcsZu2OZSk7t5a39jral0jEuEeJB56kb5ZUqRA1DJI5En09/WUPLCYprdb")
82
+ end
83
+
84
+ it "should select a public ssh key using a dialog if there is more than one valid public ssh key" do
85
+ STDIN.stubs(:gets).returns("1")
86
+ key = Railshoster::Utilities.select_public_ssh_key(File.join(File.dirname(__FILE__), "..", "..", "fake_dot_ssh", "2_valid_keys"), :verbose => false)
87
+ key[:format].size.should > 1
88
+ end
89
+ end
49
90
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rspec'
2
+
2
3
  require 'fakefs/safe'
3
4
  require 'fakefs/spec_helpers'
4
5
 
@@ -10,6 +11,6 @@ require 'fakefs/spec_helpers'
10
11
 
11
12
  require File.join(File.dirname(__FILE__), '..', 'lib', 'railshoster')
12
13
 
13
- #RSpec.configure do |c|
14
- # c.mock_with :rspec
15
- #end
14
+ RSpec.configure do |c|
15
+ c.mock_with :mocha
16
+ end
@@ -16,11 +16,17 @@ require 'bundler/capistrano'
16
16
  # user to login to the target server
17
17
  set :user, "<%= app["u"] %>"
18
18
 
19
+ <% if app["public_ssh_key"] then %>
20
+
21
+ # allow SSH-Key-Forwarding
22
+ set :ssh_options, { :forward_agent => true }
23
+ ssh_options[:keys] = [File.join(ENV["HOME"], ".ssh", "<%= app["public_ssh_key"] %>")]
24
+ <% else %>
25
+
19
26
  # password to login to the target server
20
27
  set :password, "<%= app["p"] %>"
21
28
 
22
- # allow SSH-Key-Forwarding
23
- set :ssh_options, { :forward_agent => true }
29
+ <% end %>
24
30
 
25
31
  ## Application name and repository
26
32
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railshoster
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 1
10
- version: 0.2.1
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Julian Fischer
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-07 00:00:00 Z
18
+ date: 2011-11-12 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: bundler
@@ -147,6 +147,20 @@ dependencies:
147
147
  version: "0"
148
148
  type: :development
149
149
  version_requirements: *id009
150
+ - !ruby/object:Gem::Dependency
151
+ name: mocha
152
+ prerelease: false
153
+ requirement: &id010 !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ hash: 3
159
+ segments:
160
+ - 0
161
+ version: "0"
162
+ type: :development
163
+ version_requirements: *id010
150
164
  description: Easily deploy your Rails app to RailsHoster.com by using this gem.
151
165
  email:
152
166
  - fischer@enterprise-rails.de
@@ -167,6 +181,7 @@ files:
167
181
  - Rakefile
168
182
  - bin/railshoster
169
183
  - gemfiles/Gemfile.ci
184
+ - lib/init.rb
170
185
  - lib/railshoster.rb
171
186
  - lib/railshoster/app_url_command.rb
172
187
  - lib/railshoster/bad_application_json_hash_error.rb
@@ -178,11 +193,16 @@ files:
178
193
  - lib/railshoster/deploy_command.rb
179
194
  - lib/railshoster/error.rb
180
195
  - lib/railshoster/init_command.rb
196
+ - lib/railshoster/invalid_public_ssh_key_error.rb
181
197
  - lib/railshoster/possibly_not_a_git_repo_error.rb
182
198
  - lib/railshoster/unsupported_application_type_error.rb
183
199
  - lib/railshoster/utilities.rb
184
200
  - lib/railshoster/version.rb
185
201
  - railshoster.gemspec
202
+ - spec/fake_dot_ssh/1_valid_key/bullshit.pub
203
+ - spec/fake_dot_ssh/1_valid_key/id_rsa.pub
204
+ - spec/fake_dot_ssh/2_valid_keys/github_rsa.pub
205
+ - spec/fake_dot_ssh/2_valid_keys/id_dsa.pub
186
206
  - spec/lib/railshoster/command_spec.rb
187
207
  - spec/lib/railshoster/init_command_spec.rb
188
208
  - spec/lib/railshoster/utilities_spec.rb
@@ -222,6 +242,10 @@ signing_key:
222
242
  specification_version: 3
223
243
  summary: RailsHoster Applicatoin Deployment Suite
224
244
  test_files:
245
+ - spec/fake_dot_ssh/1_valid_key/bullshit.pub
246
+ - spec/fake_dot_ssh/1_valid_key/id_rsa.pub
247
+ - spec/fake_dot_ssh/2_valid_keys/github_rsa.pub
248
+ - spec/fake_dot_ssh/2_valid_keys/id_dsa.pub
225
249
  - spec/lib/railshoster/command_spec.rb
226
250
  - spec/lib/railshoster/init_command_spec.rb
227
251
  - spec/lib/railshoster/utilities_spec.rb