Guest User

Untitled

a guest
Oct 3rd, 2018
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2. class NeterDbAuthorization
  3. def initialize(config_file = 'config.yml')
  4. # load config
  5. require 'yaml'
  6. @cfg = YAML.load_file(config_file)
  7.  
  8. # load logger
  9. if @cfg['log']['file']
  10. require 'logger'
  11. @log = Logger.new(@cfg['log']['file'])
  12. log 'Start authorization'
  13. end
  14.  
  15. # connect to db
  16. require 'rubyGems'
  17. require 'mysql2'
  18.  
  19. @db = Mysql2::Client.new(:host => @cfg['database']['host'], :username => @cfg['database']['username'],
  20. :password => @cfg['database']['password'], :database => @cfg['database']['database'])
  21.  
  22. # listen input
  23. buffer = String.new
  24. while STDIN.sysread(2, buffer) && buffer.length == 2
  25. debug 'Get packet'
  26. length = buffer.unpack('n')[0]
  27. debug "Packet length #{length}"
  28. operation, username, domain, password = STDIN.sysread(length).split(':')
  29. debug "Do '#{operation}' for '#{username}', '#{password}'"
  30. STDOUT.syswrite([2,
  31. case operation
  32. when 'auth', 'isuser'
  33. debug "test #{username.inspect}"
  34. debug "test #{password.inspect}"
  35. send(operation, username, password)
  36. when 'setpass'
  37. 0
  38. else
  39. log 'Unknown operation: ' + operation
  40. 0
  41. end ].pack('nn')
  42. )
  43. end
  44. rescue Exception => boom
  45. debug "Error #{boom}" unless boom.instance_of? EOFError
  46. ensure
  47. disconnect
  48. end
  49.  
  50. def auth(username, password)
  51. log "SELECT 1 FROM users WHERE id = #{username}"
  52. result = @db.query(
  53. "SELECT 1 FROM users WHERE id = #{username}"
  54. ).count
  55. log "#{result}"
  56. result > 0 ? 1 : 0
  57. end
  58.  
  59. def isuser(username, password)
  60. result = @db.query(
  61. "SELECT 1 FROM users WHERE id = #{username}"
  62. ).count
  63. log "#{result}"
  64. result > 0 ? 1 : 0
  65. end
  66.  
  67. def disconnect
  68. log 'Port closed'
  69. @db.close if @db
  70. exit
  71. end
  72.  
  73. def log(message)
  74. @log.info message if @log
  75. end
  76.  
  77. def debug(message)
  78. @log.debug message if @log && @cfg['log']['debug']
  79. end
  80. end
  81.  
  82. NeterDbAuthorization.new
Add Comment
Please, Sign In to add comment