Skip to content

Instantly share code, notes, and snippets.

@pullmonkey
Created July 27, 2012 15:36
Show Gist options
  • Select an option

  • Save pullmonkey/3188719 to your computer and use it in GitHub Desktop.

Select an option

Save pullmonkey/3188719 to your computer and use it in GitHub Desktop.
Using the magtek class in Ruby
require File.dirname(__FILE__) + '/magtek.rb'
require 'logger'
require 'rubygems'
require 'httpi'
require 'curb'
Process.daemon
logger = Logger.new("/var/log/monitor_usb.log")
logger.level = Logger::INFO
logger.info "Starting usb monitor:"
logger.info "kiniting as user"
kinit -k -t ...`
mt = MagTek.new
mt.open
# loop forever, just keep monitoring
loop do
success, name, drivers_license_number = mt.read
if success
url = ""
params = "?user=#{name}&drivers_license_number=#{drivers_license_number}"
url = URI.escape("http://url.com/user_swiped#{params}")
begin
HTTPI.adapter = :curb
req = HTTPI::Request.new
req.url = url
# use spnego when in prod and dev
req.auth.gssnegotiate
resp = HTTPI.get req do |http|
http.use_ssl
end
if resp.code == 200
logger.info "User was swiped in successfully."
else
logger.error "Got response code: #{resp.code}"
logger.error "User could not be updated in the database"
end
rescue Errno::ECONNREFUSED => e
logger.error e.message
logger.error "You need to make sure the application server is running."
rescue Exception => e
logger.error e.message
end
else
# TODO warn user on the screen that they need to try again
logger.warn "Did not get a successful read from the USB stream"
end
end
mt.close
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment