class Ucert::SomTracker
Class to handle SOM user account IDs
Attributes
file_user_map[RW]
Class constant variables
som_2_ad_user[R]
som_user_entitlement[R]
som_user_report[RW]
Class constant variables
verbose[RW]
Class constant variables
Public Class Methods
new(params ={})
click to toggle source
Instance default variables
# File lib/ucert/som_tracker.rb, line 18 def initialize (params ={}) @verbose=params.fetch(:verbose, false) # Som to AD user map file @file_user_map = File.dirname(__FILE__)+"/../../data/som/som_user_map.txt" @som_user_report = File.dirname(__FILE__)+"/../../data/som/som_user_report.csv" # Load the user map file to an instance variable (for performance gain) @som_2_ad_user=load_known_user_map_from_file(@file_user_map) # Load the user entitlement instance variable from the native Som user entitlement report parse_som_user_report(@som_user_report) # Insert DN field into the user entitlement data structure insert_dn save! end
Public Instance Methods
print_user_entitlement()
click to toggle source
Print out the user entitlement table in plain text, to be imported into database
# File lib/ucert/som_tracker.rb, line 127 def print_user_entitlement begin puts "User Entitlement Report in Plain-text Format" if @verbose @som_user_entitlement.first[1].each {|k,v| print k,"|"} if @verbose puts if @verbose @som_user_entitlement.values.map do |rec| next if rec.nil? rec.each {|k,v| print v,"|" unless k.nil? } puts end rescue => ee puts "Exception on method #{__method__}: #{ee}" end end
Also aliased as: print_user
save_som_user_map!(file=@file_user_map)
click to toggle source
Save the SOM to AD user mapping relation into the cache file
# File lib/ucert/som_tracker.rb, line 144 def save_som_user_map!(file=@file_user_map) puts "Saving the known Som to AD user mapping relationship to file: #{file} ..." if @verbose begin timestamp=Time.now f=File.open(file, 'w') f.write "# local Som to AD user map file created by the #{self.class} class #{__method__} method at: #{timestamp}" @som_user_entitlement.each do |key,record| value = record['DN'] f.write "\n#{record['uid'].upcase}|#{value}" end f.close puts "Som to AD user map file is successfully saved to: #{file}" if @verbose rescue => ee puts "Exception on method #{__method__}: #{ee}" if @verbose end end
Also aliased as: save!
som_id_2_dn(id)
click to toggle source
DN lookup via SOM for ssomems under SOM, such as CVM
# File lib/ucert/som_tracker.rb, line 214 def som_id_2_dn (id) @som_user_entitlement.each do |key,val| return val["DN"] if val["uid"] == id.strip end return nil end
som_search_by_dn(dn)
click to toggle source
Search user entitlement record by AD DN
# File lib/ucert/som_tracker.rb, line 163 def som_search_by_dn (dn) begin puts "Perform search on the user entitlement record by AD DN: #{dn}" if @verbose @som_user_entitlement.each do |key, val| return val if @som_user_entitlement[key]['DN'].eql? dn end return nil rescue => ee puts "Exception on method #{__method__}: #{ee}" end end
Also aliased as: search_by_dn
som_search_by_id(uid)
click to toggle source
Search user entitlement record by USER_ID
# File lib/ucert/som_tracker.rb, line 200 def som_search_by_id (uid) #begin puts "Perform search on the user entitlement record by USER_ID: #{uid}" if @verbose @som_user_entitlement.each do |key, val| return val if @som_user_entitlement[key]['USER_ID'].eql? uid.strip end return nil #rescue => ee # puts "Exception on method #{__method__}: #{ee}" #end end
Also aliased as: search_by_id
uid_2_index(uid)
click to toggle source
Search user entitlement instance valueable for uid, return index for match uid; return nil if no match found
# File lib/ucert/som_tracker.rb, line 191 def uid_2_index (uid) puts "Perform search on the user entitlement record by user ID: #{uid}" if @verbose @som_user_entitlement.each do |key,val| return key if val['uid'] == uid.strip end return nil end
uid_include?(uid)
click to toggle source
Search user entitlement instance valueable for uid, return true if found
# File lib/ucert/som_tracker.rb, line 177 def uid_include? (uid) puts "Determine if UID is already known: #{uid}" if @verbose return false if @som_user_entitlement.nil? @som_user_entitlement.each do |key,val| if val['uid'] == uid.strip #puts "Found" if @verbose return true end end #puts "Unfound" if @verbose return false end
Private Instance Methods
insert_dn()
click to toggle source
Procedures to add additonal field 'dn' into the @som_user_entitlement data structure, by person the AD search
# File lib/ucert/som_tracker.rb, line 85 def insert_dn #begin puts "Insert DN into the record ..." if @verbose tracker = Ucert::AdTracker.new(:verbose=>@verbose) @som_user_entitlement.delete(nil) @som_user_entitlement.each do |index, record| next if record.nil? puts "\n\nPerform DN lookup for record: #{record['uid']}" if @verbose key1 = record['uid'] unless record['uid'].nil? next if key1.nil? if key1 =~ /\\/ key2 = key1.split('\\')[1] end my_key = key1.upcase puts "Perform 1st order search from the local cache: #{my_key}" if @verbose if @som_2_ad_user.key?(my_key) dn=@som_2_ad_user[my_key] # additional logic to update the existing DN record unless tracker.ad_person_records.key?(dn) dn = update_dn(tracker,dn) end puts "Found in the local cache file: #{dn}" if @verbose else if dn.nil? and !key1.nil? puts "Perform 2nd order search only if the 1st one fail, by using: #{key1}" if @verbose dn = tracker.ad_search_by_text(key1, "person") end if dn.nil? and !key2.nil? puts "Perform 3rd order search only if the last fail, by using: #{key2}" if @verbose dn = tracker.ad_search_by_text(key2, "person") end end @som_user_entitlement[index]['DN'] = dn end tracker=nil #rescue => ee #puts "Exception on method #{__method__}: #{ee}" #tracker=nil #end end
parse_som_user_report(file)
click to toggle source
Parsing the Som user entitlement report in CSV format
# File lib/ucert/som_tracker.rb, line 33 def parse_som_user_report (file) #begin puts "Parse the user entitlement report: #{file}" if @verbose @som_user_entitlement=Hash.new user_record_index=0 line_cnt=0 cur_user_id=String.new header=Array.new #File.open(file,'r:gb18030:UTF-8').each do |line| File.open(file,'r:gb18030:UTF-8').each do |line| puts "Processing SOM user report line number #{line_cnt.inspect}" if @verbose entry=line.chomp.split(",").map {|x| x.gsub(/(\s|\")/,"")} # skip the 1st line of the file (header line) if line_cnt == 0 header=entry line_cnt+=1 next end # clean the entry data puts entry.inspect if @verbose # Determine current user entry[0].strip! if entry[0].nil? line_cnt+=1 next elsif entry[0].empty? line_cnt+=1 next #app=Hash.new elsif entry[5] != cur_user_id cur_user_id=entry[5] end record=Hash[header.zip(entry)] unless entry[0].nil? puts "User record: #{record}" if @verbose if uid_include?(cur_user_id) index = uid_2_index(cur_user_id) @som_user_entitlement[index]['systems'].push(record) else user_record_index += 1 @som_user_entitlement[user_record_index]=Hash.new @som_user_entitlement[user_record_index]['uid']=cur_user_id @som_user_entitlement[user_record_index]['systems']=Array.new @som_user_entitlement[user_record_index]['systems'].push(record) end line_cnt += 1 end #rescue => ee # puts "Exception on method #{__method__}: #{ee}" #end end