ssh2http 0.0.1 → 1.0.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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -1
- data/Gemfile +3 -0
- data/README.md +32 -6
- data/exe/ssh2http +11 -0
- data/lib/ssh2http.rb +105 -7
- data/lib/ssh2http/version.rb +2 -2
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17fc1afd739112cabb7957e881d29b21408f7191
|
4
|
+
data.tar.gz: 01e0ab012312aeb86404b46c30748f58162a0493
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a60bbd9c36b042b01cf35b0cf8ff980bc9b3eca6be29f4a6a258b0320d2d7cd5bab52c43e9853017d977afd098c583d9ecdbab44bdcf995ea594f603273aafc0
|
7
|
+
data.tar.gz: 2375843fc2e7e0aa5460639333729caecd8369cb9fd8919334f0ed9f502f60dc15bb9365dd9649040a43add4e559547616c9a939ef03f5ab989ab26426868ee9
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -10,12 +10,38 @@ which delegates git pull/push requests to a git http backend.
|
|
10
10
|
[](http://inch-ci.org/github/pmq20/ssh2http?branch=master)
|
11
11
|
|
12
12
|
|
13
|
-
##
|
13
|
+
## Installation
|
14
14
|
|
15
|
-
|
15
|
+
Add this line to your application's Gemfile:
|
16
16
|
|
17
|
-
|
17
|
+
```ruby
|
18
|
+
gem 'ssh2http'
|
19
|
+
```
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
21
|
+
And then execute:
|
22
|
+
|
23
|
+
$ bundle
|
24
|
+
|
25
|
+
Or install it yourself as:
|
26
|
+
|
27
|
+
$ gem install ssh2http
|
28
|
+
|
29
|
+
## Usage
|
30
|
+
|
31
|
+
Add this line to your ~<user>/.ssh/authorized_keys:
|
32
|
+
|
33
|
+
command="source $HOME/.profile && cd <your_project_path> && bundle exec ssh2http <HTTP destination>",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty <your_pub_key>
|
34
|
+
|
35
|
+
Or if you prefer to install the gem globally:
|
36
|
+
|
37
|
+
command="source $HOME/.profile && ssh2http <HTTP destination>",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty <your_pub_key>
|
38
|
+
|
39
|
+
For example,
|
40
|
+
|
41
|
+
command="source $HOME/.profile && cd /Users/pmq20/ssh2http && bundle exec ssh2http http://localhost",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa XXXXXXXXXXXXXXXXXXXX pmq2001@gmail.com
|
42
|
+
|
43
|
+
Then:
|
44
|
+
|
45
|
+
git clone pmq20@localhost:/path/to/repo.git
|
46
|
+
|
47
|
+
and the request will be delegated to `http://localhost/path/to/repo.git`.
|
data/exe/ssh2http
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
lib = File.expand_path('../../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'ssh2http'
|
6
|
+
|
7
|
+
Ssh2http.die "Only ssh allowed." unless ENV['SSH_CONNECTION']
|
8
|
+
Ssh2http.die "Please provide a destination url." unless ARGV[0] && ARGV[0].length > 0
|
9
|
+
|
10
|
+
Ssh2http.new(ARGV[0], *ENV['SSH_ORIGINAL_COMMAND'].to_s.split).run!
|
11
|
+
exit 0
|
data/lib/ssh2http.rb
CHANGED
@@ -1,12 +1,110 @@
|
|
1
|
+
require 'open-uri'
|
1
2
|
require "ssh2http/version"
|
2
3
|
|
3
|
-
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
class Ssh2http
|
5
|
+
def initialize(destination, *cmds)
|
6
|
+
@destination = destination
|
7
|
+
@cmds = cmds
|
8
|
+
end
|
9
|
+
|
10
|
+
def run!
|
11
|
+
case cmd
|
12
|
+
when 'git-upload-pack'
|
13
|
+
upload!
|
14
|
+
when 'git-receive-pack'
|
15
|
+
receive!
|
16
|
+
else
|
17
|
+
die 'Unknown command'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def upload!
|
22
|
+
open(url('/info/refs?service=git-upload-pack')) do |f|
|
23
|
+
f.each_line do |line|
|
24
|
+
if "001e# service=git-upload-pack\n" == line
|
25
|
+
f.read(4) # skip "0000"
|
26
|
+
next
|
27
|
+
end
|
28
|
+
print line
|
29
|
+
end
|
30
|
+
end
|
31
|
+
STDOUT.flush
|
32
|
+
|
33
|
+
input = ''
|
34
|
+
while line = STDIN.gets
|
35
|
+
input += line
|
36
|
+
break if line =~ /0009done\n$/
|
37
|
+
end
|
38
|
+
|
39
|
+
url = URI.parse(url('/git-upload-pack'))
|
40
|
+
Net::HTTP.start(url.host, url.port) do |http|
|
41
|
+
request = Net::HTTP::Post.new url.path
|
42
|
+
request.body = input
|
43
|
+
request['Content-Type'] = 'application/x-git-upload-pack-request'
|
44
|
+
http.request request do |response|
|
45
|
+
response.read_body do |chunk|
|
46
|
+
STDOUT.write chunk
|
47
|
+
STDOUT.flush
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def receive!
|
54
|
+
open(url('/info/refs?service=git-receive-pack')) do |f|
|
55
|
+
f.each_line do |line|
|
56
|
+
if "001f# service=git-receive-pack\n" == line
|
57
|
+
f.read(4) # skip "0000"
|
58
|
+
next
|
59
|
+
end
|
60
|
+
print line
|
61
|
+
end
|
62
|
+
end
|
63
|
+
STDOUT.flush
|
64
|
+
|
65
|
+
input = STDIN.read
|
66
|
+
url = URI.parse(url('/git-receive-pack'))
|
67
|
+
http = Net::HTTP.new(url.host, url.port)
|
68
|
+
request = Net::HTTP::Post.new(url.path)
|
69
|
+
request.body = input
|
70
|
+
request['Content-Type'] = 'application/x-git-receive-pack-request'
|
71
|
+
response = http.request(request)
|
72
|
+
print response.body
|
73
|
+
STDOUT.flush
|
74
|
+
end
|
75
|
+
|
76
|
+
def cmd
|
77
|
+
@cmds[0]
|
78
|
+
end
|
79
|
+
|
80
|
+
def key
|
81
|
+
@cmds[1].gsub(/['"]/, '')
|
82
|
+
end
|
83
|
+
|
84
|
+
def url(part)
|
85
|
+
"#{@destination}#{key}#{part}"
|
86
|
+
end
|
87
|
+
|
88
|
+
def debug
|
89
|
+
var('@cmds')
|
90
|
+
var('@destination')
|
91
|
+
var('RUBY_VERSION')
|
92
|
+
var('::Ssh2http::VERSION')
|
93
|
+
ENV.each do |k,v|
|
94
|
+
var("ENV[#{k.inspect}]")
|
8
95
|
end
|
9
|
-
|
10
|
-
|
96
|
+
end
|
97
|
+
|
98
|
+
def var(var)
|
99
|
+
STDERR.puts "#{var}=#{eval(var).inspect}"
|
100
|
+
end
|
101
|
+
|
102
|
+
def die(msg)
|
103
|
+
self.class.die("#{@destination} #{@cmds} #{msg}")
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.die(msg)
|
107
|
+
STDERR.puts msg
|
108
|
+
exit 1
|
11
109
|
end
|
12
110
|
end
|
data/lib/ssh2http/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.0
|
1
|
+
class Ssh2http
|
2
|
+
VERSION = "1.0.0"
|
3
3
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ssh2http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- P.S.V.R
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -56,7 +56,8 @@ description: A restricted login shell for Git-only SSH access, which delegates g
|
|
56
56
|
pull/push requests to a git http backend.
|
57
57
|
email:
|
58
58
|
- pmq2001@gmail.com
|
59
|
-
executables:
|
59
|
+
executables:
|
60
|
+
- ssh2http
|
60
61
|
extensions: []
|
61
62
|
extra_rdoc_files: []
|
62
63
|
files:
|
@@ -67,6 +68,7 @@ files:
|
|
67
68
|
- LICENSE
|
68
69
|
- README.md
|
69
70
|
- Rakefile
|
71
|
+
- exe/ssh2http
|
70
72
|
- lib/ssh2http.rb
|
71
73
|
- lib/ssh2http/version.rb
|
72
74
|
- ssh2http.gemspec
|
@@ -90,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
92
|
version: '0'
|
91
93
|
requirements: []
|
92
94
|
rubyforge_project:
|
93
|
-
rubygems_version: 2.
|
95
|
+
rubygems_version: 2.6.3
|
94
96
|
signing_key:
|
95
97
|
specification_version: 4
|
96
98
|
summary: delegating git ssh requests to git http backends
|