summaryrefslogtreecommitdiff
path: root/lib/nickserver/hkp/key_info.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nickserver/hkp/key_info.rb')
-rw-r--r--lib/nickserver/hkp/key_info.rb76
1 files changed, 47 insertions, 29 deletions
diff --git a/lib/nickserver/hkp/key_info.rb b/lib/nickserver/hkp/key_info.rb
index ed38643..5c8b845 100644
--- a/lib/nickserver/hkp/key_info.rb
+++ b/lib/nickserver/hkp/key_info.rb
@@ -1,65 +1,83 @@
require 'cgi'
require 'nickserver/hkp'
-#
-# Class to represent the key information result from a query to a key server
-# (but not the key itself).
-#
-# The initialize method parses the hkp 'machine readable' output.
-#
-# format definition of machine readable index output is here:
-# http://tools.ietf.org/html/draft-shaw-openpgp-hkp-00#section-5.2
-#
module Nickserver::Hkp
+ #
+ # Class to represent the key information result from a query to a key server
+ # (but not the key itself).
+ #
+ # The initialize method parses the hkp 'machine readable' output.
+ #
+ # format definition of machine readable index output is here:
+ # http://tools.ietf.org/html/draft-shaw-openpgp-hkp-00#section-5.2
+ #
class KeyInfo
- attr_accessor :uids, :keyid, :algo, :flags
+ attr_accessor :uids
def initialize(hkp_record)
uid_lines = hkp_record.split("\n")
pub_line = uid_lines.shift
- @keyid, @algo, @keylen_s, @creationdate_s, @expirationdate_s, @flags = pub_line.split(':')[1..-1]
- @uids = []
- uid_lines.each do |uid_line|
- uid, _creationdate, _expirationdate, _flags = uid_line.split(':')[1..-1]
- # for now, ignore the expirationdate and flags of uids. sks does return them anyway
- @uids << CGI.unescape(uid.sub(/.*<(.+)>.*/, '\1'))
- end
+ @properties = pub_line.split(':')[1..-1]
+ @uids = extract_uids(uid_lines)
+ end
+
+ def keyid
+ properties.first
+ end
+
+ def algo
+ properties.second
end
def keylen
- @keylen ||= @keylen_s.to_i
+ properties[2].to_i
end
def creationdate
- @creationdate ||= begin
- Time.at(@creationdate_s.to_i) if @creationdate_s
- end
+ created = properties[3]
+ Time.at(created.to_i)
end
def expirationdate
- @expirationdate ||= begin
- Time.at(@expirationdate_s.to_i) if @expirationdate_s
- end
+ expires = properties[4]
+ Time.at(expires.to_i)
+ end
+
+ def flags
+ properties.last
end
def rsa?
- @algo == '1'
+ algo == '1'
end
def dsa?
- @algo == '17'
+ algo == '17'
end
def revoked?
- @flags =~ /r/
+ flags =~ /r/
end
def disabled?
- @flags =~ /d/
+ flags =~ /d/
end
def expired?
- @flags =~ /e/
+ flags =~ /e/
+ end
+
+ protected
+
+ attr_reader :properties
+
+ def extract_uids(uid_lines)
+ uid_lines.map do |uid_line|
+ # for now, ignore the expirationdate and flags of uids.
+ # sks does return them anyway
+ uid, _creationdate, _expirationdate, _flags = uid_line.split(':')[1..-1]
+ CGI.unescape(uid.sub(/.*<(.+)>.*/, '\1'))
+ end
end
end
end