class Ucert::CvmTracker

Class to handle CVM user account IDs

Attributes

cvm_2_ad_user[R]
cvm_role_report[RW]

Class constant variables

cvm_user_entitlement[R]
cvm_user_report[RW]

Class constant variables

file_user_map[RW]

Class constant variables

verbose[RW]

Class constant variables

Public Class Methods

new(params ={}) click to toggle source

Instance default variables

# File lib/ucert/cvm_tracker.rb, line 20
def initialize (params ={})

  @verbose=params.fetch(:verbose, false)
  # CVM user entitlement report in XLSX format, generated by CVM export function
  @cvm_user_report = File.dirname(__FILE__)+"/../../data/cvm/cvm_user_list.xlsx"
              # CVM user role, which is mapped to YST data structure
  @cvm_role_report = File.dirname(__FILE__)+"/../../data/cvm/cvm_user_role.xlsx"
              # CVM user details entitlement report
  @cvm_func_report = File.dirname(__FILE__)+"/../../data/cvm/cvm_user_func.xlsx"
              # CVM to AD user map file
              @file_user_map =  File.dirname(__FILE__)+"/../../data/cvm/cvm_user_map.txt"
              # Load the user map file to an instance variable (for performance gain)
              @cvm_2_ad_user=load_known_user_map_from_file(@file_user_map)
              # Load the user entitlement instance variable from the native CVM user entitlement reports
              @cvm_user_entitlement=parse_cvm_user_report(@cvm_user_report)
              parse_cvm_role_report(@cvm_role_report)
              parse_cvm_func_report(@cvm_func_report)
              # Insert DN field into the user entitlement data structure
              insert_dn
              save!
      end

Public Instance Methods

cvm_id_2_index(id) click to toggle source
# File lib/ucert/cvm_tracker.rb, line 104
def cvm_id_2_index (id)
        @cvm_user_entitlement.each do |key,val|
                return key if val['用户编号'] == id.strip
        end
        return nil
end
cvm_search_by_dn(dn) click to toggle source

Search user entitlement record by AD DN

# File lib/ucert/cvm_tracker.rb, line 215
    def cvm_search_by_dn (dn)
            begin
  puts "Perform search on the user entitlement record by AD DN: #{dn}" if @verbose
  @cvm_user_entitlement.each do |key, val|
      return val if @cvm_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
parse_cvm_func_report(file) click to toggle source

Parsing the CVM user function report in xlsx format

# File lib/ucert/cvm_tracker.rb, line 145
def parse_cvm_func_report (file)
                #begin
                        workbook = RubyXL::Parser.parse(file)
                        worksheet=workbook.worksheets.first
func_entitlement=Hash.new
                        worksheet.count.times  do |row|
                                puts "Parsing workbook row: #{row}" if @verbose
  # skip the 1st line of the file (header line)
  next if row == 0
                        func_entitlement = Hash.new
                                func_entitlement['用户一事通ID'] = worksheet[row][0].value.to_s.strip unless worksheet[row].nil?
                                func_entitlement['功能ID'] = worksheet[row][3].value.to_s.strip unless worksheet[row].nil?
  func_entitlement['功能名称'] = worksheet[row][4].value.to_s.strip unless worksheet[row].nil?
                                func_entitlement['权限'] = worksheet[row][5].value.to_s.strip unless worksheet[row].nil?
                                func_entitlement['增减方向'] = worksheet[row][6].value.to_s.strip unless worksheet[row].nil?
                                func_entitlement['有效性'] = worksheet[row][7].value.to_s.strip unless worksheet[row].nil?
                                func_entitlement['有效期开始时间'] = worksheet[row][8].value.to_s.strip unless worksheet[row].nil?
                                func_entitlement['有效期结束时间'] = worksheet[row][9].value.to_s.strip unless worksheet[row].nil?
                                func_entitlement['功能机构全称'] = worksheet[row][10].value.to_s.strip unless worksheet[row].nil?
                                puts "Function: #{func_entitlement.inspect}" if @verbose
                                unless func_entitlement['用户一事通ID'].nil? or func_entitlement['功能ID'].nil?
                                        user_index = cvm_id_2_index(func_entitlement['用户一事通ID'])
                                        puts "Insert function information into record: #{user_index}" if @verbose
                                        @cvm_user_entitlement[user_index]['funcs']=Array.new unless @cvm_user_entitlement[user_index]['funcs']
                                        @cvm_user_entitlement[user_index]['funcs'].push(func_entitlement)
                                end
                  end
return func_entitlement
                #rescue => ee
                        #puts "Exception on method #{__method__}: #{ee}"
                #end
end
print_user()
print_user_entitlement() click to toggle source

Print out the user entitlement table in plain text, to be imported into database

Also aliased as: print_user
save!(file=@file_user_map)
Alias for: save_cvm_user_map!
save_cvm_user_map!(file=@file_user_map) click to toggle source

Save the CVM to AD user mapping relation into the cache file

# File lib/ucert/cvm_tracker.rb, line 195
def save_cvm_user_map!(file=@file_user_map)
        puts "Saving the known Cvm to AD user mapping relationship to file: #{file} ..." if @verbose
        begin
                timestamp=Time.now
                f=File.open(file, 'w')
                f.write "# local Cvm to AD user map file created by the #{self.class} class #{__method__} method at: #{timestamp}"
                @cvm_user_entitlement.values.map do |record|
                        key = record['用户编号']
                        value = record['DN']
                        f.write "\n#{key}|#{value}"
                end
                f.close
                puts "CVM 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!
search_by_dn(dn)
Alias for: cvm_search_by_dn

Private Instance Methods

insert_dn() click to toggle source

add DN to the cvm_user_entitlement record

# File lib/ucert/cvm_tracker.rb, line 89
def insert_dn
        puts "Insert DN into the record ..." if @verbose
        tracker = Ucert::YstTracker.new(:verbose => @verbose)
        @cvm_user_entitlement.each do |index, record|
                puts "Processing user record #{index}: #{record}" if @verbose
                key1=record['用户编号']
                if @cvm_2_ad_user.key?(key1) && !@cvm_2_ad_user[key1].nil?
                        @cvm_user_entitlement[index]['DN'] = @cvm_2_ad_user[record['用户编号']]
                else
                        @cvm_user_entitlement[index]['DN'] = tracker.yst_id_2_dn(record['用户编号'])
                end
        end
        tracker=nil
end
parse_cvm_role_report(file) click to toggle source

Parsing the CVM role entitlement report in xlsx format

# File lib/ucert/cvm_tracker.rb, line 112
def parse_cvm_role_report (file)
                #begin
                        workbook = RubyXL::Parser.parse(file)
                        worksheet=workbook.worksheets.first
role_entitlement=Hash.new
                        worksheet.count.times  do |row|
                                puts "Parsing workbook row: #{row}" if @verbose
  # skip the 1st line of the file (header line)
  next if row == 0
                        role_entitlement = Hash.new
                                role_entitlement['用户一事通ID'] = worksheet[row][0].value.to_s.strip unless worksheet[row].nil?
                                role_entitlement['角色ID'] = worksheet[row][3].value.to_s.strip unless worksheet[row].nil?
  role_entitlement['角色名称'] = worksheet[row][4].value.to_s.strip unless worksheet[row].nil?
                                role_entitlement['有效性'] = worksheet[row][5].value.to_s.strip unless worksheet[row].nil?
                                role_entitlement['有效期开始时间'] = worksheet[row][6].value.to_s.strip unless worksheet[row].nil?
                                role_entitlement['有效期结束时间'] = worksheet[row][7].value.to_s.strip unless worksheet[row].nil?
                                role_entitlement['角色机构全称'] = worksheet[row][8].value.to_s.strip unless worksheet[row].nil?
                                role_entitlement['是否展开'] = worksheet[row][9].value.to_s.strip unless worksheet[row].nil?
                                puts "Role: #{role_entitlement.inspect}" if @verbose
                                unless role_entitlement['用户一事通ID'].nil? or role_entitlement['角色ID'].nil?
                                        user_index = cvm_id_2_index(role_entitlement['用户一事通ID'])
                                        puts "Insert roles information into record: #{user_index}" if @verbose
                                        @cvm_user_entitlement[user_index]['roles']=Array.new unless @cvm_user_entitlement[user_index]['roles']
                                        @cvm_user_entitlement[user_index]['roles'].push(role_entitlement)
                                end
                  end
return role_entitlement
                #rescue => ee
                        #puts "Exception on method #{__method__}: #{ee}"
                #end
end
parse_cvm_user_report(file) click to toggle source

Parsing the Cvm user entitlement report in CSV format

# File lib/ucert/cvm_tracker.rb, line 43
def parse_cvm_user_report (file)
        #begin
                puts "Start parsing Excel workbook file: #{file}" if @verbose
                cvm_user_entitlement=Hash.new
                workbook = RubyXL::Parser.parse(file)
                worksheet=workbook.worksheets.first
                row_cnt=0
                header=Array.new
                user_index=0
                worksheet.count.times  do |row|
                        row_cnt+=1
                        puts "Parsing workbook row: #{row_cnt}" if @verbose
                        entry=Array.new
                        # Processing Header Row
                        if row_cnt==1
                                0.upto(worksheet[row].size) do |col|
                                        if worksheet[row][col].nil?
                                                header.push(nil)
                                        else
                                                header.push(worksheet[row][col].value.to_s)
                                        end
                                end
                                next
                        else
                                0.upto(worksheet[row].size) do |col|
                                        if worksheet[row][col].nil?
                                                entry.push(nil)
                                        else
                                                entry.push(worksheet[row][col].value.to_s.strip)
                                        end
                                end
                                user_index += 1
                        end
                        record = header.zip(entry).to_h.reject {|k,v| k.nil?}
                        puts "User record: #{record}" if @verbose
                        next if record["用户编号"].empty?
                        cvm_user_entitlement[user_index] = record unless cvm_user_entitlement.key?(user_index)
                end
                workbook=nil
                return cvm_user_entitlement
        #rescue => ee
                #puts "Exception on method #{__method__}: #{ee}"
        #end
end