Class: Ucert::CitidirectSecuritiesTracker

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

Overview

Class to handle CitiDirect for Securities 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 = {}) ⇒ CitidirectSecuritiesTracker

Instance default variables



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/ucert/citidirect_securities_tracker.rb', line 20

def initialize (params ={})
   @verbose=params.fetch(:verbose, false)
   # CitiDirect for Securities user entitlement report generation: Logon to CitiDirect for Securities sites https://securities.citidirect.com
   # under "ISSUER" -> "AGENCY AND TRUST", Choose "Issuer And Paying Agent - NAM";
   # Select "Reports" -> "Report List" -> "Client" Report Categories -> "User Entitlements Report - CLNT", press "Get Parameters" button
   # Under "Sort Order - View", choose "Export" then press "Get Xml" button to generating the report
   # Press "Get File Directly" to download and unzip the xml report into a local file System
	#
   # Note: There is limitation in the entitlement report where 'Data Group' and 'Functional Group' details are not provided by the application
   #   You may need to logon to the application manually to review the entitlement details when necessary; the limitation also includes
	#   insufficient admin user data in the entitlement report.
   #@cds_user_entitlement_report = File.dirname(__FILE__)+"/../../data/citidirect_securities/User_Entitlements_Report___CLNT.xml"
	@cds_user_entitlement_report_dat = File.dirname(__FILE__)+"/../../data/citidirect_securities/User_Entitlements_Report___CLNT.dat"
	# CitiDirect for Securities to AD user map file
   @file_cds_user_map =  File.dirname(__FILE__)+"/../../data/citidirect_securities/citidirect_securities_user_map.txt"
	# the local cacsh file
	@cds_2_ad_user=load_known_user_map_from_file(@file_cds_user_map)
	# Load the user entitlement instance variable from the report
	@cds_user_entitlement=parse_cds_user_entitlement_report_dat(@cds_user_entitlement_report_dat)
	#@cds_user_entitlement=parse_cds_user_entitlement_report(@cds_user_entitlement_report)
	# Procedure to add DN foreign key to the @cds_user_entitlement, by using key1 key2 to perform the AD search
	insert_dn
	save!
end

Instance Attribute Details

#cds_2_ad_userObject (readonly)

Returns the value of attribute cds_2_ad_user.



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

def cds_2_ad_user
  @cds_2_ad_user
end

#cds_user_entitlementObject (readonly)

Returns the value of attribute cds_user_entitlement.



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

def cds_user_entitlement
  @cds_user_entitlement
end

#cds_user_status_reportObject

Class constant variables



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

def cds_user_status_report
  @cds_user_status_report
end

#file_cds_user_mapObject

Class constant variables



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

def file_cds_user_map
  @file_cds_user_map
end

#verboseObject

Class constant variables



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

def verbose
  @verbose
end

Instance Method Details

#cds_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/citidirect_securities_tracker.rb', line 215

def cds_search_by_dn (dn)
	begin
     puts "Perform search on the user entitlement records by AD DN: #{dn}" if @verbose
     @cds_user_entitlement.each do |key, val|
         return val if @cds_user_entitlement[key]['DN'].eql? dn
     end
		return nil
   rescue => ee
     puts "Exception on method #{__method__}: #{ee}"
   end
end

#dn_2_index(dn) ⇒ Object

Retrieve the user index from the @cds_user_entitlement data structure



129
130
131
132
133
134
135
136
137
# File 'lib/ucert/citidirect_securities_tracker.rb', line 129

def dn_2_index (dn)
		begin
       (1..@cds_user_entitlement.count).map do |index|
         return index if @cds_user_entitlement[index]["DN"]==dn
       end
		rescue => ee
			puts "Exception on method #{__method__}: #{ee}"
		end
end

#parse_cds_user_entitlement_report_dat(file) ⇒ Object

Parsing the CitiDirect for Securities user entitlement report in DAT format



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/ucert/citidirect_securities_tracker.rb', line 87

def parse_cds_user_entitlement_report_dat (file)
	#begin
     puts "Parse the user entitlement report: #{file}" if @verbose
     cds_user_entitlement=Hash.new
     user_index=0
		line_cnt=0
		cur_user=String.new
     dat_doc = File.open(file, 'r')
     dat_doc.each do |record|
			line_cnt+=1
			next if line_cnt == 1
			rec=record.chomp!.split(/\t/)
			ent=Hash.new
			ent['Application'] = rec[8]
			ent['Data Group'] = rec[9]
			ent['Functional Group'] = rec[10]
			if cur_user != rec[0]
				user_index+=1
				cur_user = rec[0]
				cds_user_entitlement[user_index]=Hash.new unless cds_user_entitlement.key?(user_index)
				cds_user_entitlement[user_index]['User Name'] = rec[0]
				cds_user_entitlement[user_index]['First Name'] = rec[1]
				cds_user_entitlement[user_index]['Last Name'] = rec[2]
				cds_user_entitlement[user_index]['Created'] = rec[3]
				cds_user_entitlement[user_index]['Last Login'] = rec[4]
				cds_user_entitlement[user_index]['Pwd Expired'] = rec[5]
				cds_user_entitlement[user_index]['Acct Disabled'] = rec[6]
				cds_user_entitlement[user_index]['Organization'] = rec[7]
				cds_user_entitlement[user_index]['Entitlements'] = Array.new
				cds_user_entitlement[user_index]['Entitlements'].push(ent)
			else
				cds_user_entitlement[user_index]['Entitlements'].push(ent)
			end
     end
     dat_doc=nil
     return cds_user_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/citidirect_securities_tracker.rb', line 179

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