simple-gnupg-keyserver 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +47 -0
- data/lib/simpleHKP.rb +1 -1
- data/lib/simpleHKP/echo.rb +86 -0
- metadata +2 -1
data/README.rdoc
CHANGED
@@ -90,6 +90,53 @@ the use of humans:
|
|
90
90
|
* uploadForm.html
|
91
91
|
* footer.html
|
92
92
|
|
93
|
+
== SYNCHRONIZATION
|
94
|
+
|
95
|
+
A 'simpleHKP/echo' class has been added which knows how to echo keys from
|
96
|
+
one key server to another.
|
97
|
+
|
98
|
+
So that for example the following ruby script could be placed into one
|
99
|
+
of your machine's /etc/daily directories and the script would ensure
|
100
|
+
all key servers are synchronized daily.
|
101
|
+
|
102
|
+
#!/usr/bin/env ruby
|
103
|
+
|
104
|
+
# A simple key server sychronization example
|
105
|
+
#
|
106
|
+
# We use a hub-spoke model. We choose one "hub" key server to act as
|
107
|
+
# the master key server and amalgamate all of the keys from the spoke
|
108
|
+
# key server back to the hub key server. We then push the amalgamated
|
109
|
+
# keys in the hub back to the spokes, so that after two passes, all key
|
110
|
+
# servers have the same keys.
|
111
|
+
|
112
|
+
require 'simpleHKP/echo'
|
113
|
+
|
114
|
+
hubKeyServer = 'hubKeyServer'
|
115
|
+
spokeKeyServers = [
|
116
|
+
'spokeKeyServer1',
|
117
|
+
'spokeKeyServer2',
|
118
|
+
'spokeKeyServer3'
|
119
|
+
]
|
120
|
+
|
121
|
+
# Start by bringing all spoke keys into the hub
|
122
|
+
#
|
123
|
+
spokeKeyServers.each do | aKeyServer |
|
124
|
+
SimpleHKPEcho.echoFromTo(aKeyServer, hubKeyServer)
|
125
|
+
end
|
126
|
+
|
127
|
+
# now send the amalgamated hub keys back to each spoke
|
128
|
+
#
|
129
|
+
spokeKeyServers.each do | aKeyServer |
|
130
|
+
SimpleHKPEcho.echoFromTo(hubKeyServer, aKeyServer)
|
131
|
+
end
|
132
|
+
|
133
|
+
Where the "hubKeyServer" and "spokeKeyServersX" are the fully qualified
|
134
|
+
domain or IP address of each of your key servers.
|
135
|
+
|
136
|
+
The SimpleHKPEcho.echoFromTo method fails gracefully if a given key
|
137
|
+
server is offline, by simply returning. In the example above, all other
|
138
|
+
echo pairs (from, to) will be tried.
|
139
|
+
|
93
140
|
== REQUIREMENTS:
|
94
141
|
|
95
142
|
There are explicitly no external Ruby requirements other than Ruby and
|
data/lib/simpleHKP.rb
CHANGED
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'net/http'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
# This code provides a simple way to ensure keys are synchronized
|
6
|
+
# between a pair of key servers.
|
7
|
+
|
8
|
+
# It conforms to: The OpenPGP HTTP Keyserver Protocol (HKP)
|
9
|
+
# draft-shaw-openpgp-hkp-00.txt
|
10
|
+
# http://tools.ietf.org/html/draft-shaw-openpgp-hkp-00
|
11
|
+
|
12
|
+
# See also the doc/DETAILS file in the gnupg2 source code
|
13
|
+
|
14
|
+
# Copyright (C) 2015 Stephen Gaito
|
15
|
+
#
|
16
|
+
# (The MIT License)
|
17
|
+
#
|
18
|
+
# Copyright (c) 2015 Stephen Gaito
|
19
|
+
#
|
20
|
+
# Permission is hereby granted, free of charge, to any person obtaining a
|
21
|
+
# copy of this software and associated documentation files (the
|
22
|
+
# 'Software'), to deal in the Software without restriction, including
|
23
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
24
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
25
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
26
|
+
# the following conditions:
|
27
|
+
#
|
28
|
+
# The above copyright notice and this permission notice shall be included
|
29
|
+
# in all copies or substantial portions of the Software.
|
30
|
+
#
|
31
|
+
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
32
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
33
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
34
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
35
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
36
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
37
|
+
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
38
|
+
|
39
|
+
class SimpleHKPEcho
|
40
|
+
|
41
|
+
class << self
|
42
|
+
|
43
|
+
def convertToHttp(aKeyServerStr)
|
44
|
+
aKeyServerStr = aKeyServerStr+':11371' unless
|
45
|
+
aKeyServerStr =~ /:/
|
46
|
+
aKeyServerStr = 'http://'+aKeyServerStr unless
|
47
|
+
aKeyServerStr =~ /^http/
|
48
|
+
aKeyServerStr
|
49
|
+
end
|
50
|
+
|
51
|
+
def echoFromTo(fromKeyServer, toKeyServer, options = {})
|
52
|
+
begin
|
53
|
+
debug = options.delete('debug')
|
54
|
+
puts fromKeyServer if debug
|
55
|
+
fromKeyServer = convertToHttp(fromKeyServer)
|
56
|
+
puts fromKeyServer if debug
|
57
|
+
puts toKeyServer if debug
|
58
|
+
toKeyServer = convertToHttp(toKeyServer)
|
59
|
+
puts toKeyServer if debug
|
60
|
+
|
61
|
+
keys = Array.new
|
62
|
+
url = URI.parse(fromKeyServer+'/lookup?search=&op=index&options=mr')
|
63
|
+
response = Net::HTTP.get_response(url)
|
64
|
+
response.body.each_line do | aLine |
|
65
|
+
next unless aLine =~ /^pub/
|
66
|
+
keys.push(aLine.split(/:/)[1])
|
67
|
+
end
|
68
|
+
pp keys if debug
|
69
|
+
keys.each do | aKey |
|
70
|
+
keyData = ""
|
71
|
+
url = URI.parse(fromKeyServer+"/lookup?op=get&options=mr&search=#{aKey}")
|
72
|
+
response = Net::HTTP.get_response(url)
|
73
|
+
keyData = response.body
|
74
|
+
puts aKey if debug
|
75
|
+
puts keyData if debug
|
76
|
+
url = URI.parse(toKeyServer+'/add')
|
77
|
+
Net::HTTP.post_form(url, { 'keytext' => keyData })
|
78
|
+
end
|
79
|
+
rescue SocketError => se
|
80
|
+
puts "Cound not echo keys from #{fromKeyServer} to #{toKeyServer}"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple-gnupg-keyserver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -64,6 +64,7 @@ files:
|
|
64
64
|
- README.rdoc
|
65
65
|
- Rakefile
|
66
66
|
- lib/simpleHKP.rb
|
67
|
+
- lib/simpleHKP/echo.rb
|
67
68
|
homepage: https://github.com/stephengaito/rGem-simple-gnupg-keyserver
|
68
69
|
licenses:
|
69
70
|
- MIT
|