module Zklib::UserManagement
Public Instance Methods
clear_admins()
click to toggle source
Clear admins
# File lib/zklib/user_management.rb, line 4 def clear_admins execute_cmd( command: CMD_CLEAR_ADMIN, command_string: '' ) do |opts| return puts "ERROR: #{options[:error]}" unless opts[:valid] data = opts[:data] if data.length > 7 data.split("\u0000").pop else puts 'ERROR: Invalid clear admins response' end end end
clear_users()
click to toggle source
Clear users
# File lib/zklib/user_management.rb, line 21 def clear_users execute_cmd( command: CMD_CLEAR_DATA, command_string: '' ) do |opts| return puts "ERROR: #{options[:error]}" unless opts[:valid] data = opts[:data] if data.length > 7 data.split("\u0000").pop else puts 'ERROR: Invalid clear users response' end end end
create_user(options)
click to toggle source
Create user param options
|_ uid UID |_ user_id User ID |_ name Name |_ password Password |_ role Role
# File lib/zklib/user_management.rb, line 44 def create_user(options) # command_string = (options[:uid] % 256).chr # command_string += (options[:uid] >> 8).chr command_string = options[:uid].chr.ljust(2, 0.chr) command_string += options[:role].chr command_string += options[:password].ljust(8, 0.chr) command_string += options[:name].ljust(28, 0.chr) command_string += 1.chr command_string += 0.chr * 8 command_string += options[:user_id].ljust(8, 0.chr) command_string += 0.chr * 16 execute_cmd( command: CMD_SET_USER, command_string: command_string ) do |opts| return puts "ERROR: #{options[:error]}" unless opts[:valid] data = opts[:data] if data.length > 7 data.split("\u0000").pop else puts 'ERROR: Invalid set user response' end end end
decode_user_data(options)
click to toggle source
Decode user data param options
|_ data User data to decode
# File lib/zklib/user_management.rb, line 74 def decode_user_data(options) data = options[:data] { uid: BinData::Uint16be.read(data[0..1]).snapshot, role: BinData::Uint16be.read(data[2..3]).snapshot, password: data[4..11].split("\0").pop, name: data[12..35].split("\0").pop, card_no: BinData::Uint32le.read(data[36..39]).snapshot, user_id: data[49..71].split("\0").pop } end
delete_user(options)
click to toggle source
Delete user param options
|_ uid UID
# File lib/zklib/user_management.rb, line 90 def delete_user(options) command_buffer = StringIO.new binary_writer = BinData::Uint16le.new binary_writer.value = options[:uid] command_buffer.pos = 0 binary_writer.write(command_buffer) command_string = command_buffer.string execute_cmd( command: CMD_DELETE_USER, command_string: command_string ) do |opts| return puts "ERROR: #{options[:error]}" unless opts[:valid] data = opts[:data] if data.length > 7 data.split("\u0000").pop else puts 'ERROR: Invalid clear admins response' end end end
get_user_count()
click to toggle source
Get user list size
# File lib/zklib/user_management.rb, line 116 def get_user_count return 0 if BinData::Uint16le.read(data_recv).snapshot != CMD_PREPARE_DATA BinData::Uint32le.read(data_recv[8..-1]).snapshot end
get_users()
click to toggle source
Get users
# File lib/zklib/user_management.rb, line 123 def get_users header = create_header( command: CMD_USERTEMP_RRQ, command_string: 5.chr, checksum: 0, session_id: session_id, reply_id: BinData::Uint16le.read(data_recv[6..-1]).snapshot ) # Send command socket = UDPSocket.new socket.bind('0.0.0.0', inport) socket.send(header, 0, ip, port) ### START Get response size ### self.data_recv = receive_nonblock(socket: socket)[0] return puts 'ERROR: Empty response' unless data_recv && data_recv.length > 0 self.session_id = BinData::Uint16le.read(data_recv[4..-1]).snapshot total_bytes = get_user_count # Stop if user list is empty if total_bytes <= 0 socket.close return [] end ### END Get response size ### ### START Get user list ### bytes_recv = 0 rem = nil offset = 0 user_data_size = 72 trim_first = 11 trim_others = 8 users = [] while true data = receive_nonblock(socket: socket)[0] if bytes_recv == 0 offset = trim_first bytes_recv = 4 else offset = trim_others end while(data.length - offset >= user_data_size) user_data = data[offset..-1] offset += user_data_size if rem && rem.length > 0 user_data.prepend(rem) offset -= rem.length rem = nil end users << decode_user_data(data: user_data) bytes_recv += user_data_size if bytes_recv == total_bytes socket.close return users end end rem = data[offset..-1] end ### END Get user list ### socket.close end