sconb 0.0.4 → 0.0.5
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.
- checksums.yaml +4 -4
- data/.rspec +2 -0
- data/README.md +1 -5
- data/Rakefile +6 -0
- data/lib/sconb/version.rb +1 -1
- data/lib/sconb.rb +18 -15
- data/sconb.gemspec +1 -0
- data/spec/config_test +7 -0
- data/spec/config_test_multi +15 -0
- data/spec/github_rsa +1 -0
- data/spec/sconb_spec.rb +141 -0
- data/spec/spec_helper.rb +16 -0
- metadata +28 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 633f856637a76bba26ed83506c62ea187aa37b68
|
4
|
+
data.tar.gz: 2953d0670461bd8331d956daa6584215028ca8c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d6a82afbe9aa090ccd9ac9844f053dd507c38f9a9ef9366e98c9a8a3855eb0046603a1e5b30f1b5493b8848982d884213b347d28ae1d632444c868e0236b328
|
7
|
+
data.tar.gz: fc8c2c6c76d245e35f25ee655d3a2b90f4ede37894e1c0fb40b6578017cd8e1007c1e9173cd87f4a490d1c43afe5c069ec9da7e96571bbf6d7e67f12812d9a24
|
data/.rspec
ADDED
data/README.md
CHANGED
@@ -52,12 +52,8 @@ And append github.com config to .ssh/config
|
|
52
52
|
|
53
53
|
## Contributing
|
54
54
|
|
55
|
-
1. Fork it ( https://github.com/
|
55
|
+
1. Fork it ( https://github.com/k1LoW/sconb/fork )
|
56
56
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
57
57
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
58
58
|
4. Push to the branch (`git push origin my-new-feature`)
|
59
59
|
5. Create a new Pull Request
|
60
|
-
|
61
|
-
## TODO
|
62
|
-
|
63
|
-
- Make test
|
data/Rakefile
CHANGED
data/lib/sconb/version.rb
CHANGED
data/lib/sconb.rb
CHANGED
@@ -13,7 +13,10 @@ module Sconb
|
|
13
13
|
path = options[:config]
|
14
14
|
file = File.expand_path(path)
|
15
15
|
configs = {}
|
16
|
-
|
16
|
+
unless File.readable?(file)
|
17
|
+
puts configs
|
18
|
+
return
|
19
|
+
end
|
17
20
|
|
18
21
|
allconfig = config_load(path, '*')
|
19
22
|
configs['*'] = allconfig unless allconfig.size == 1
|
@@ -44,14 +47,11 @@ module Sconb
|
|
44
47
|
|
45
48
|
desc "restore < dump.json > .ssh/config", "Restore .ssh/config from JSON"
|
46
49
|
def restore()
|
47
|
-
|
48
|
-
json =
|
49
|
-
while str = $stdin.gets
|
50
|
-
json << str
|
51
|
-
end
|
50
|
+
ssh_configs = []
|
51
|
+
json = stdin_read
|
52
52
|
configs = JSON.parse(json)
|
53
53
|
configs.each do |host, config|
|
54
|
-
ssh_config
|
54
|
+
ssh_config = ''
|
55
55
|
ssh_config << 'Host ' + host + "\n"
|
56
56
|
config.each do |key, value|
|
57
57
|
next if key.downcase == 'host' || key.downcase == 'identityfilecontent'
|
@@ -63,17 +63,15 @@ module Sconb
|
|
63
63
|
ssh_config << ' ' + key + ' ' + value + "\n"
|
64
64
|
end
|
65
65
|
end
|
66
|
+
ssh_configs.push ssh_config
|
66
67
|
end
|
67
|
-
puts
|
68
|
+
puts ssh_configs.join("\n")
|
68
69
|
end
|
69
70
|
|
70
71
|
method_option :force, :type => :boolean, :aliases => '-f', :default => false, :banner => 'force generate'
|
71
72
|
desc "keyregen < dump.json", "Regenerate private keys from JSON"
|
72
73
|
def keyregen()
|
73
|
-
json =
|
74
|
-
while str = $stdin.gets
|
75
|
-
json << str
|
76
|
-
end
|
74
|
+
json = $stdin.read
|
77
75
|
configs = JSON.parse(json)
|
78
76
|
configs.each do |host, config|
|
79
77
|
config.each do |key, value|
|
@@ -82,7 +80,7 @@ module Sconb
|
|
82
80
|
value.each_with_index do |keycontent,i|
|
83
81
|
identity_file = File.expand_path(identity_files[i])
|
84
82
|
if File.exists?(identity_file) and !options[:force]
|
85
|
-
raise Thor::Error, "Error:
|
83
|
+
raise Thor::Error, "Error: " + identity_files[i] + " is exists. If you want to overwrite, use --force option."
|
86
84
|
end
|
87
85
|
puts 'Regenerate ' + identity_files[i] + ' ...'
|
88
86
|
File.open(identity_file, 'w') do |file|
|
@@ -94,7 +92,12 @@ module Sconb
|
|
94
92
|
end
|
95
93
|
end
|
96
94
|
|
97
|
-
|
95
|
+
private
|
96
|
+
def stdin_read()
|
97
|
+
return $stdin.read
|
98
|
+
end
|
99
|
+
|
100
|
+
# Original code is Net::SSH::Config.load (https://github.com/net-ssh/net-ssh/blob/master/LICENSE.txt)
|
98
101
|
private
|
99
102
|
def config_load(path, host)
|
100
103
|
settings = {}
|
@@ -169,7 +172,7 @@ module Sconb
|
|
169
172
|
end
|
170
173
|
|
171
174
|
private
|
172
|
-
# Original code Net::SSH::Config.pattern2regex
|
175
|
+
# Original code is Net::SSH::Config.pattern2regex (https://github.com/net-ssh/net-ssh/blob/master/LICENSE.txt)
|
173
176
|
def pattern2regex(pattern)
|
174
177
|
pattern = "^" + pattern.to_s.gsub(/\./, "\\.").
|
175
178
|
gsub(/\?/, '.').
|
data/sconb.gemspec
CHANGED
data/spec/config_test
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Host github.com
|
2
|
+
User git
|
3
|
+
Port 22
|
4
|
+
Hostname github.com
|
5
|
+
IdentityFile spec/github_rsa
|
6
|
+
TCPKeepAlive yes
|
7
|
+
IdentitiesOnly yes
|
8
|
+
|
9
|
+
Host gist
|
10
|
+
User git
|
11
|
+
Port 22
|
12
|
+
Hostname gist.github.com
|
13
|
+
IdentityFile spec/github_rsa
|
14
|
+
TCPKeepAlive yes
|
15
|
+
IdentitiesOnly yes
|
data/spec/github_rsa
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1234567890
|
data/spec/sconb_spec.rb
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Sconb do
|
5
|
+
context '`dump` command' do
|
6
|
+
|
7
|
+
it "should convert from .ssh/config to JSON" do
|
8
|
+
expect(capture(:stdout) {
|
9
|
+
Sconb::CLI.new.invoke(:dump, [], {config: File.expand_path('../config_test', __FILE__)})
|
10
|
+
}).to eq <<OUT
|
11
|
+
{
|
12
|
+
"github.com": {
|
13
|
+
"Host": "github.com",
|
14
|
+
"User": "git",
|
15
|
+
"Port": "22",
|
16
|
+
"Hostname": "github.com",
|
17
|
+
"IdentityFile": [
|
18
|
+
"spec/github_rsa"
|
19
|
+
],
|
20
|
+
"TCPKeepAlive": "yes",
|
21
|
+
"IdentitiesOnly": "yes"
|
22
|
+
}
|
23
|
+
}
|
24
|
+
OUT
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should convert from multi config to JSON" do
|
28
|
+
expect(capture(:stdout) {
|
29
|
+
Sconb::CLI.new.invoke(:dump, [], {config: File.expand_path('../config_test_multi', __FILE__)})
|
30
|
+
}).to eq <<OUT
|
31
|
+
{
|
32
|
+
"github.com": {
|
33
|
+
"Host": "github.com",
|
34
|
+
"User": "git",
|
35
|
+
"Port": "22",
|
36
|
+
"Hostname": "github.com",
|
37
|
+
"IdentityFile": [
|
38
|
+
"spec/github_rsa"
|
39
|
+
],
|
40
|
+
"TCPKeepAlive": "yes",
|
41
|
+
"IdentitiesOnly": "yes"
|
42
|
+
},
|
43
|
+
"gist": {
|
44
|
+
"Host": "gist",
|
45
|
+
"User": "git",
|
46
|
+
"Port": "22",
|
47
|
+
"Hostname": "gist.github.com",
|
48
|
+
"IdentityFile": [
|
49
|
+
"spec/github_rsa"
|
50
|
+
],
|
51
|
+
"TCPKeepAlive": "yes",
|
52
|
+
"IdentitiesOnly": "yes"
|
53
|
+
}
|
54
|
+
}
|
55
|
+
OUT
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should convert from .ssh/config to JSON with private keys" do
|
59
|
+
expect(capture(:stdout) {
|
60
|
+
Sconb::CLI.new.invoke(:dump, [], {config: File.expand_path('../config_test', __FILE__), all: true})
|
61
|
+
}).to eq <<OUT
|
62
|
+
{
|
63
|
+
"github.com": {
|
64
|
+
"Host": "github.com",
|
65
|
+
"User": "git",
|
66
|
+
"Port": "22",
|
67
|
+
"Hostname": "github.com",
|
68
|
+
"IdentityFile": [
|
69
|
+
"spec/github_rsa"
|
70
|
+
],
|
71
|
+
"IdentityFileContent": [
|
72
|
+
"1234567890"
|
73
|
+
],
|
74
|
+
"TCPKeepAlive": "yes",
|
75
|
+
"IdentitiesOnly": "yes"
|
76
|
+
}
|
77
|
+
}
|
78
|
+
OUT
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context '`restore` command' do
|
83
|
+
before do
|
84
|
+
@cli = Sconb::CLI.new
|
85
|
+
allow(@cli).to receive_messages(:stdin_read => <<INN
|
86
|
+
{
|
87
|
+
"github.com": {
|
88
|
+
"Host": "github.com",
|
89
|
+
"User": "git",
|
90
|
+
"Port": "22",
|
91
|
+
"Hostname": "github.com",
|
92
|
+
"IdentityFile": [
|
93
|
+
"spec/github_rsa"
|
94
|
+
],
|
95
|
+
"IdentityFileContent": [
|
96
|
+
"1234567890"
|
97
|
+
],
|
98
|
+
"TCPKeepAlive": "yes",
|
99
|
+
"IdentitiesOnly": "yes"
|
100
|
+
},
|
101
|
+
"gist": {
|
102
|
+
"Host": "gist",
|
103
|
+
"User": "git",
|
104
|
+
"Port": "22",
|
105
|
+
"Hostname": "gist.github.com",
|
106
|
+
"IdentityFile": [
|
107
|
+
"spec/github_rsa"
|
108
|
+
],
|
109
|
+
"IdentityFileContent": [
|
110
|
+
"1234567890"
|
111
|
+
],
|
112
|
+
"TCPKeepAlive": "yes",
|
113
|
+
"IdentitiesOnly": "yes"
|
114
|
+
}
|
115
|
+
}
|
116
|
+
INN
|
117
|
+
)
|
118
|
+
end
|
119
|
+
it "should convert from JSON to config" do
|
120
|
+
expect(capture(:stdout) {
|
121
|
+
@cli.restore
|
122
|
+
}).to eq <<OUT
|
123
|
+
Host github.com
|
124
|
+
User git
|
125
|
+
Port 22
|
126
|
+
Hostname github.com
|
127
|
+
IdentityFile spec/github_rsa
|
128
|
+
TCPKeepAlive yes
|
129
|
+
IdentitiesOnly yes
|
130
|
+
|
131
|
+
Host gist
|
132
|
+
User git
|
133
|
+
Port 22
|
134
|
+
Hostname gist.github.com
|
135
|
+
IdentityFile spec/github_rsa
|
136
|
+
TCPKeepAlive yes
|
137
|
+
IdentitiesOnly yes
|
138
|
+
OUT
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
2
|
+
require 'sconb'
|
3
|
+
|
4
|
+
# this method is written by wycats
|
5
|
+
def capture(stream)
|
6
|
+
begin
|
7
|
+
stream = stream.to_s
|
8
|
+
eval "$#{stream} = StringIO.new"
|
9
|
+
yield
|
10
|
+
result = eval("$#{stream}").string
|
11
|
+
ensure
|
12
|
+
eval("$#{stream} = #{stream.upcase}")
|
13
|
+
end
|
14
|
+
|
15
|
+
result
|
16
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sconb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- k1LoW
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-ssh
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: thor
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,6 +103,7 @@ extensions: []
|
|
89
103
|
extra_rdoc_files: []
|
90
104
|
files:
|
91
105
|
- ".gitignore"
|
106
|
+
- ".rspec"
|
92
107
|
- Gemfile
|
93
108
|
- LICENSE.txt
|
94
109
|
- README.md
|
@@ -97,6 +112,11 @@ files:
|
|
97
112
|
- lib/sconb.rb
|
98
113
|
- lib/sconb/version.rb
|
99
114
|
- sconb.gemspec
|
115
|
+
- spec/config_test
|
116
|
+
- spec/config_test_multi
|
117
|
+
- spec/github_rsa
|
118
|
+
- spec/sconb_spec.rb
|
119
|
+
- spec/spec_helper.rb
|
100
120
|
homepage: ''
|
101
121
|
licenses:
|
102
122
|
- MIT
|
@@ -121,4 +141,9 @@ rubygems_version: 2.2.2
|
|
121
141
|
signing_key:
|
122
142
|
specification_version: 4
|
123
143
|
summary: Ssh CONfig Buckup tool.
|
124
|
-
test_files:
|
144
|
+
test_files:
|
145
|
+
- spec/config_test
|
146
|
+
- spec/config_test_multi
|
147
|
+
- spec/github_rsa
|
148
|
+
- spec/sconb_spec.rb
|
149
|
+
- spec/spec_helper.rb
|