@@ -28,23 +28,55 @@ object DataSecurityUtil {
28
28
*/
29
29
def getSecurityLevel (jobId : String , orgId : String ): String = {
30
30
JobLogger .log(s " getSecurityLevel jobID:: $jobId orgid:: $orgId" , None , INFO )(new String ())
31
- val requestBody = Map (" request" -> Map (" orgId" -> orgId, " key" -> " dataSecurityPolicy" ))
31
+ val httpResponseBody = getTenantPreferanceDetails(orgId, " dataSecurityPolicy" )
32
+ val responseBody = JSONUtils .deserialize[Map [String , AnyRef ]](httpResponseBody)
33
+ val data = responseBody.getOrElse(" result" , Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
34
+ .getOrElse(" response" , Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
35
+ .getOrElse(" data" , Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
36
+ val globalLevel = data.getOrElse(" level" , " " ).asInstanceOf [String ]
37
+ val jobDetail = data.getOrElse(" job" , Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
38
+ .getOrElse(jobId, Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
39
+ val jobLevel = jobDetail.getOrElse(" level" , " " ).asInstanceOf [String ]
40
+ if (! StringUtils .isEmpty(jobLevel)) jobLevel else globalLevel
41
+ }
42
+
43
+ /**
44
+ * fetch the PII fields by calling tenant preference read API using orgId
45
+ *
46
+ * @param jobId
47
+ * @param orgId
48
+ * @return
49
+ */
50
+ def getPIIFieldDetails (jobId : String , orgId : String ): List [String ] = {
51
+ JobLogger .log(s " getSecurityLevel jobID:: $jobId orgid:: $orgId" , None , INFO )(new String ())
52
+ val httpResponseBody = getTenantPreferanceDetails(orgId, " userPrivateFields" )
53
+ val responseBody = JSONUtils .deserialize[Map [String , AnyRef ]](httpResponseBody)
54
+ val data = responseBody.getOrElse(" result" , Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
55
+ .getOrElse(" response" , Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
56
+ .getOrElse(" data" , Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
57
+ val piiFields = data.getOrElse(" piiFields" , List [String ]()).asInstanceOf [List [String ]]
58
+ piiFields
59
+ }
60
+
61
+ /**
62
+ * fetch the job security level by calling tenant preference read API using orgId
63
+ *
64
+ * @param jobId
65
+ * @param orgId
66
+ * @return
67
+ */
68
+ def getTenantPreferanceDetails (orgId : String , key : String ): String = {
69
+ JobLogger .log(s " getTenantPreferanceDetails orgid:: $orgId" , None , INFO )(new String ())
70
+ val requestBody = Map (" request" -> Map (" orgId" -> orgId, " key" -> key))
32
71
val request = JSONUtils .serialize(requestBody)
33
72
val headers : Map [String , String ] = Map (" Content-Type" -> " application/json" )
34
73
val readTenantPrefURL = Constants .TENANT_PREFERENCE_PRIVATE_READ_URL
35
- JobLogger .log(s " getSecurityLevel readTenantPrefURL:: $readTenantPrefURL" , None , INFO )(new String ())
74
+ JobLogger .log(s " getTenantPreferanceDetails readTenantPrefURL:: $readTenantPrefURL" , None , INFO )(new String ())
36
75
val httpResponse = httpUtil.post(readTenantPrefURL, request, headers)
37
76
if (httpResponse.status == 200 ) {
38
- JobLogger .log(s " dataSecurityPolicy for org= $orgId, response body= ${httpResponse.body}" , None , INFO )(new String ())
39
- val responseBody = JSONUtils .deserialize[Map [String , AnyRef ]](httpResponse.body)
40
- val data = responseBody.getOrElse(" result" , Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
41
- .getOrElse(" response" , Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
42
- .getOrElse(" data" , Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
43
- val globalLevel = data.getOrElse(" level" , " " ).asInstanceOf [String ]
44
- val jobDetail = data.getOrElse(" job" , Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
45
- .getOrElse(jobId, Map [String , AnyRef ]()).asInstanceOf [Map [String , AnyRef ]]
46
- val jobLevel = jobDetail.getOrElse(" level" , " " ).asInstanceOf [String ]
47
- if (! StringUtils .isEmpty(jobLevel)) jobLevel else globalLevel
77
+ JobLogger .log(s " getTenantPreferanceDetails for org= $orgId, response body= ${httpResponse.body}" , None , INFO )(new String ())
78
+ val responseBody = httpResponse.body
79
+ responseBody
48
80
} else {
49
81
JobLogger .log(s " Error response from Tenant Preferance read API for request :: $requestBody :: response is :: ${httpResponse.status} :: ${httpResponse.body}" , None , ERROR )(new String ())
50
82
" "
@@ -169,6 +201,7 @@ object DataSecurityUtil {
169
201
var tempDir = " "
170
202
if (level.nonEmpty) {
171
203
val storageService = fc.getStorageService(storageConfig.store, storageConfig.accountKey.getOrElse(" " ), storageConfig.secretKey.getOrElse(" " ));
204
+ val path = Paths .get(url)
172
205
val filePrefix = storageConfig.store.toLowerCase() match {
173
206
// $COVERAGE-OFF$ Disabling scoverage
174
207
case " s3" =>
@@ -179,19 +212,26 @@ object DataSecurityUtil {
179
212
CommonUtil .getGCloudFile(storageConfig.container, " " )
180
213
// $COVERAGE-ON$ for case: local
181
214
case _ =>
182
- storageConfig.fileName
215
+ val filePath = path.toString
216
+ if (filePath.contains(storageConfig.fileName)){
217
+ filePath
218
+ } else {
219
+ storageConfig.fileName + " /" + filePath
220
+ }
221
+
183
222
}
184
223
185
224
if (! url.isEmpty ) {
186
225
if (request != null ) {
187
226
tempDir = AppConf .getConfig(" spark_output_temp_dir" ) + request.request_id + " /"
188
227
} else {
228
+ val urlSplitArr = url.split(" /" )
189
229
if (! storageConfig.store.equals(" local" )) {
190
- val urlSplitArr = url.split(" /" )
191
230
tempDir = AppConf .getConfig(" spark_output_temp_dir" ) + urlSplitArr(3 ) + " /"
231
+ } else {
232
+ tempDir = AppConf .getConfig(" spark_output_temp_dir" ) + urlSplitArr(4 ) + " /"
192
233
}
193
234
}
194
- val path = Paths .get(url)
195
235
objKey = url.replace(filePrefix, " " )
196
236
localPath = tempDir + path.getFileName
197
237
fc.getHadoopFileUtil().delete(conf, tempDir)
@@ -237,9 +277,11 @@ object DataSecurityUtil {
237
277
if (request != null ) {
238
278
tempDir = AppConf .getConfig(" spark_output_temp_dir" ) + request.request_id + " /"
239
279
} else {
280
+ val urlSplitArr = url.split(" /" )
240
281
if (! storageConfig.store.equals(" local" )) {
241
- val urlSplitArr = url.split(" /" )
242
282
tempDir = AppConf .getConfig(" spark_output_temp_dir" ) + urlSplitArr(3 ) + " /"
283
+ } else {
284
+ tempDir = AppConf .getConfig(" spark_output_temp_dir" ) + urlSplitArr(4 ) + " /"
243
285
}
244
286
}
245
287
val path = Paths .get(url)
0 commit comments