Class: Ucert::CvmTracker

Inherits:
Object
  • Object
show all
Includes:
Utils
Defined in:
lib/ucert/cvm_tracker.rb

Overview

Class to handle CVM user account IDs

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Utils

#file_2_list, #is_fqdn?, #is_ip?, #is_url?, #list_2_file, #load_known_user_map_from_file, #nslookup, #search_ad, #update_dn

Constructor Details

#initialize(params = {}) ⇒ CvmTracker

Instance default variables



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 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

Instance Attribute Details

#cvm_2_ad_userObject (readonly)

Returns the value of attribute cvm_2_ad_user.



17
18
19
# File 'lib/ucert/cvm_tracker.rb', line 17

def cvm_2_ad_user
  @cvm_2_ad_user
end

#cvm_role_reportObject

Class constant variables



16
17
18
# File 'lib/ucert/cvm_tracker.rb', line 16

def cvm_role_report
  @cvm_role_report
end

#cvm_user_entitlementObject (readonly)

Returns the value of attribute cvm_user_entitlement.



17
18
19
# File 'lib/ucert/cvm_tracker.rb', line 17

def cvm_user_entitlement
  @cvm_user_entitlement
end

#cvm_user_reportObject

Class constant variables



16
17
18
# File 'lib/ucert/cvm_tracker.rb', line 16

def cvm_user_report
  @cvm_user_report
end

#file_user_mapObject

Class constant variables



16
17
18
# File 'lib/ucert/cvm_tracker.rb', line 16

def file_user_map
  @file_user_map
end

#verboseObject

Class constant variables



16
17
18
# File 'lib/ucert/cvm_tracker.rb', line 16

def verbose
  @verbose
end

Instance Method Details

#cvm_id_2_index(id) ⇒ Object



104
105
106
107
108
109
# 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) ⇒ Object Also known as: search_by_dn

Search user entitlement record by AD DN



215
216
217
218
219
220
221
222
223
224
225
# 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

#parse_cvm_func_report(file) ⇒ Object

Parsing the CVM user function report in xlsx format



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# 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 out the user entitlement table in plain text, to be imported into database



179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'lib/ucert/cvm_tracker.rb', line 179

def print_user_entitlement
	#begin
     puts "user Entitlement Report in Plain-text Format" if @verbose
		@cvm_user_entitlement.first[1].each {|k,v| print k,"|"} if @verbose
		puts if @verbose
		@cvm_user_entitlement.values.map do |rec|
			rec.each {|k,v| print v,"|"}
			puts
     end
	#rescue => ee
		#puts "Exception on method #{__method__}: #{ee}"
	#end
end

#save_cvm_user_map!(file = @file_user_map) ⇒ Object Also known as: save!

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



195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# 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