Hardware authentication for Linux using ordinary USB Flash Drives.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

80 lines
1.9 KiB

#!/usr/bin/env ruby
#
# fetch_doc.rb
#
# Fetch the documentation from the wiki and translate it
# to be human readable.
#
require 'open-uri'
BASE_URI = 'http://www.pamusb.org/wiki/doc/'
DOC_PATH = './pam_usb/doc/'
DOCS = [ 'installation', 'upgrading', 'configuration', 'faq' ]
MANS = [ 'pusb_hotplug', 'pusb_conf', 'pusb_check' ]
REPLACE_LIST = [
# Remove wiki links [[link|name]]
{ :pattern => /\[\[.+\|(.+)\]\]/, :with => '\1' },
# Remove misc xhtml/wiki characters
{ :pattern => /\/\//, :with => '' },
{ :pattern => /\\\\ /, :with => '' },
{ :pattern => /\*\*/, :with => '' },
{ :pattern => /&lt;/, :with => '<' },
{ :pattern => /&gt;/, :with => '>' },
{ :pattern => /&quot;/, :with => '"' },
{ :pattern => /<code .+>.*\n/, :with => '' },
{ :pattern => /<\/code>.*\n/, :with => '' },
{ :pattern => /<file>(.+)<\/file>/m, :with => '\1' },
# Remove trailing whitespaces
{ :pattern => /^ /, :with => '' },
# Fit 80 colums
{ :pattern => /(.{1,80})( +|$\n?)|(.{1,80})/, :with => "\\1\\3\n" },
]
def fetch_raw_doc(name)
uri = BASE_URI + name + '?do=edit'
body = open(uri) { |f| f.read }
body.gsub!(/.*<textarea .+>\n(.*)<\/textarea>.*/m, '\1')
body.gsub(/\r\n/, "\n")
end
def fetch_doc(name)
body = fetch_raw_doc(name)
REPLACE_LIST.each { |r| body.gsub!(r[:pattern], r[:with]) }
body
end
DOCS.each do |doc|
print "Fetching doc:#{doc}... "
STDOUT.flush
text = fetch_doc(doc)
File.open(File.join(DOC_PATH, doc.upcase), 'w') { |f| f.write(text) }
puts "Done."
end
MANS.each do |man|
print "Fetching man:#{man}... "
STDOUT.flush
doc = fetch_doc("man/#{man}")
cmd = "txt2man -v \"PAMUSB\" -s1 -t#{man}"
cmd += ' | sed "s/\\\\\\\\\\\\\\\\/\\\\\\/g"'
File.popen("#{cmd} > #{File.join(DOC_PATH, man)}.1", 'w') do |f|
f.write(doc)
end
begin
File.unlink("#{File.join(DOC_PATH, man)}.1.gz")
rescue Exception
end
system("gzip #{File.join(DOC_PATH, man)}.1")
puts "Done."
end