1df226684Sopenharmony_ci/* 2df226684Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3df226684Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4df226684Sopenharmony_ci * you may not use this file except in compliance with the License. 5df226684Sopenharmony_ci * You may obtain a copy of the License at 6df226684Sopenharmony_ci * 7df226684Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8df226684Sopenharmony_ci * 9df226684Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10df226684Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11df226684Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12df226684Sopenharmony_ci * See the License for the specific language governing permissions and 13df226684Sopenharmony_ci * limitations under the License. 14df226684Sopenharmony_ci */ 15df226684Sopenharmony_ci 16df226684Sopenharmony_ciimport UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'; 17df226684Sopenharmony_ciimport ability from '@ohos.ability.ability'; 18df226684Sopenharmony_ciimport dlpPermission from '@ohos.dlpPermission'; 19df226684Sopenharmony_ciimport hiSysEvent from '@ohos.hiSysEvent'; 20df226684Sopenharmony_ciimport router from '@ohos.router'; 21df226684Sopenharmony_ciimport picker from '@ohos.file.picker'; 22df226684Sopenharmony_ciimport fileUri from '@ohos.file.fileuri'; 23df226684Sopenharmony_ciimport fs from '@ohos.file.fs'; 24df226684Sopenharmony_ciimport osAccount from '@ohos.account.osAccount'; 25df226684Sopenharmony_ciimport { BusinessError } from '@ohos.base'; 26df226684Sopenharmony_ciimport common from '@ohos.app.ability.common'; 27df226684Sopenharmony_ciimport { EncryptingPanel } from '../common/encryptionComponents/encrypting'; 28df226684Sopenharmony_ciimport { DlpAlertDialog } from '../common/components/dlp_alert_dialog'; 29df226684Sopenharmony_ciimport { 30df226684Sopenharmony_ci PermissionType, 31df226684Sopenharmony_ci getOsAccountInfo, 32df226684Sopenharmony_ci checkDomainAccountInfo, 33df226684Sopenharmony_ci getUserId, 34df226684Sopenharmony_ci removeDuplicate, 35df226684Sopenharmony_ci directionStatus, 36df226684Sopenharmony_ci AuthAccount, 37df226684Sopenharmony_ci getFileUriByPath, 38df226684Sopenharmony_ci sendDlpFileCreateProperties, 39df226684Sopenharmony_ci sendDlpManagerFileConfiguration, 40df226684Sopenharmony_ci getFileSizeByUri 41df226684Sopenharmony_ci} from '../common/utils'; 42df226684Sopenharmony_ciimport Constants from '../common/constant'; 43df226684Sopenharmony_ciimport { 44df226684Sopenharmony_ci permissionTypeSelect, 45df226684Sopenharmony_ci validDateTypeMenu, 46df226684Sopenharmony_ci validDateTypeMenuItem 47df226684Sopenharmony_ci} from '../common/encryptionComponents/permission_type_select'; 48df226684Sopenharmony_ciimport { AddStaff } from '../common/encryptionComponents/AddStaff'; 49df226684Sopenharmony_ciimport GlobalContext from '../common/GlobalContext'; 50df226684Sopenharmony_ciimport IDLDLPProperty from '../serviceExtensionAbility/sequenceable/dlpClass'; 51df226684Sopenharmony_ciimport { IAuthUser } from '../serviceExtensionAbility/sequenceable/dlpClass'; 52df226684Sopenharmony_ciimport HomeFeature from '../feature/HomeFeature'; 53df226684Sopenharmony_ciimport { GetAlertMessage } from '../common/GetAlertMessage'; 54df226684Sopenharmony_ciimport { HiLog } from '../common/HiLog'; 55df226684Sopenharmony_ciimport FileUtils, { FileMsg } from '../common/FileUtils'; 56df226684Sopenharmony_ciimport { SystemUtils } from '../common/systemUtils'; 57df226684Sopenharmony_ci 58df226684Sopenharmony_ciconst TAG = 'Encrypt'; 59df226684Sopenharmony_cilet abilityResult: ability.AbilityResult = { 60df226684Sopenharmony_ci 'resultCode': 0, 61df226684Sopenharmony_ci 'want': {} 62df226684Sopenharmony_ci}; 63df226684Sopenharmony_ci 64df226684Sopenharmony_ciinterface dlpDataType { 65df226684Sopenharmony_ci ownerAccount: string; 66df226684Sopenharmony_ci ownerAccountID: string; 67df226684Sopenharmony_ci ownerAccountType: number; 68df226684Sopenharmony_ci authUserList: Array<dlpPermission.AuthUser>; 69df226684Sopenharmony_ci contactAccount: string; 70df226684Sopenharmony_ci offlineAccess: boolean; 71df226684Sopenharmony_ci everyoneAccessList: Array<dlpPermission.DLPFileAccess>; 72df226684Sopenharmony_ci} 73df226684Sopenharmony_cilet defaultDlpProperty: dlpPermission.DLPProperty = { 74df226684Sopenharmony_ci ownerAccount: '', 75df226684Sopenharmony_ci ownerAccountType: dlpPermission.AccountType.DOMAIN_ACCOUNT, 76df226684Sopenharmony_ci authUserList: [], 77df226684Sopenharmony_ci contactAccount: '', 78df226684Sopenharmony_ci offlineAccess: true, 79df226684Sopenharmony_ci ownerAccountID: '', 80df226684Sopenharmony_ci everyoneAccessList: [] 81df226684Sopenharmony_ci}; 82df226684Sopenharmony_ci 83df226684Sopenharmony_ci@Component 84df226684Sopenharmony_cistruct DlpDialog { 85df226684Sopenharmony_ci @State dlpProperty: dlpDataType = 86df226684Sopenharmony_ci GlobalContext.load('dlpProperty') !== undefined ? GlobalContext.load('dlpProperty') : defaultDlpProperty; 87df226684Sopenharmony_ci private homeFeature: HomeFeature = GlobalContext.load('homeFeature'); 88df226684Sopenharmony_ci @State session: UIExtensionContentSession | undefined = 89df226684Sopenharmony_ci storage === undefined ? undefined : storage.get<UIExtensionContentSession>('session'); 90df226684Sopenharmony_ci srcFileName: string = ''; 91df226684Sopenharmony_ci isDlpFile: boolean = false; 92df226684Sopenharmony_ci linkFileName: string = ''; 93df226684Sopenharmony_ci dlpAlertDialog?: CustomDialogController; 94df226684Sopenharmony_ci @State directionStatus: number = 0; 95df226684Sopenharmony_ci @State authPerm: number = 2; 96df226684Sopenharmony_ci @State handlePopupReadOnly: boolean = false; 97df226684Sopenharmony_ci @State handlePopupEdit: boolean = false; 98df226684Sopenharmony_ci @State processing: boolean = false; 99df226684Sopenharmony_ci @State prepareData: boolean = false; 100df226684Sopenharmony_ci @State validity: Date = AppStorage.get('validity') || new Date(); 101df226684Sopenharmony_ci @State selectedIndex: number = AppStorage.get('permanent') === false ? 1 : 0; 102df226684Sopenharmony_ci @State permissionDict: PermissionType[] = [ 103df226684Sopenharmony_ci { 104df226684Sopenharmony_ci value: $r('app.string.PERMISSION_TYPE_SELECT_TARGET'), data: 'target', index: 0 105df226684Sopenharmony_ci } as PermissionType, 106df226684Sopenharmony_ci { 107df226684Sopenharmony_ci value: $r('app.string.PERMISSION_TYPE_SELECT_ALL'), data: 'all', index: 1 108df226684Sopenharmony_ci } as PermissionType, 109df226684Sopenharmony_ci { 110df226684Sopenharmony_ci value: $r('app.string.PERMISSION_TYPE_SELECT_SELF'), data: 'self', index: 2 111df226684Sopenharmony_ci } as PermissionType 112df226684Sopenharmony_ci ]; 113df226684Sopenharmony_ci @State isAccountCheckSuccess: boolean = true; 114df226684Sopenharmony_ci @State staffDataArrayReadOnly: AuthAccount[] = []; 115df226684Sopenharmony_ci @State staffDataArrayEdit: AuthAccount[] = []; 116df226684Sopenharmony_ci @State selectedPermissionTypeReadOnly: PermissionType = 117df226684Sopenharmony_ci { data: '', value: { id: 0, type: 0, params: [], bundleName: '', moduleName: '' }, index: -1 }; 118df226684Sopenharmony_ci @State selectedPermissionTypeEdit: PermissionType = 119df226684Sopenharmony_ci { data: '', value: { id: 0, type: 0, params: [], bundleName: '', moduleName: '' }, index: -1 }; 120df226684Sopenharmony_ci 121df226684Sopenharmony_ci @Builder popupBuilderReadOnly() { 122df226684Sopenharmony_ci Row() { 123df226684Sopenharmony_ci Text($r('app.string.header_title_readonly_tips')) 124df226684Sopenharmony_ci .fontFamily('HarmonyHeiTi') 125df226684Sopenharmony_ci .fontSize($r('sys.float.ohos_id_text_size_body2')) 126df226684Sopenharmony_ci .fontColor($r('sys.color.ohos_id_color_text_primary')) 127df226684Sopenharmony_ci } 128df226684Sopenharmony_ci .width(Constants.HEADER_COLUMN_MESSAGE_TIPS) 129df226684Sopenharmony_ci .padding({ 130df226684Sopenharmony_ci left: Constants.ROW_FONT_SIZE, 131df226684Sopenharmony_ci right: Constants.ROW_FONT_SIZE, 132df226684Sopenharmony_ci top: Constants.DA_MARGIN_TOP, 133df226684Sopenharmony_ci bottom: Constants.DA_MARGIN_TOP 134df226684Sopenharmony_ci }) 135df226684Sopenharmony_ci } 136df226684Sopenharmony_ci 137df226684Sopenharmony_ci @Builder popupBuilderEdit() { 138df226684Sopenharmony_ci Row() { 139df226684Sopenharmony_ci Text($r('app.string.header_title_edit_tips')) 140df226684Sopenharmony_ci .fontSize($r('sys.float.ohos_id_text_size_body2')) 141df226684Sopenharmony_ci .fontColor($r('sys.color.ohos_id_color_text_primary')) 142df226684Sopenharmony_ci } 143df226684Sopenharmony_ci .width(Constants.HEADER_COLUMN_MESSAGE_TIPS) 144df226684Sopenharmony_ci .padding({ 145df226684Sopenharmony_ci left: Constants.ROW_FONT_SIZE, 146df226684Sopenharmony_ci right: Constants.ROW_FONT_SIZE, 147df226684Sopenharmony_ci top: Constants.DA_MARGIN_TOP, 148df226684Sopenharmony_ci bottom: Constants.DA_MARGIN_TOP 149df226684Sopenharmony_ci }) 150df226684Sopenharmony_ci } 151df226684Sopenharmony_ci 152df226684Sopenharmony_ci @Builder 153df226684Sopenharmony_ci MenuBuilder() { 154df226684Sopenharmony_ci validDateTypeMenuItem({ selectedIndex: $selectedIndex }); 155df226684Sopenharmony_ci } 156df226684Sopenharmony_ci 157df226684Sopenharmony_ci showErrorDialog(title: string | Resource, message: string | Resource) { 158df226684Sopenharmony_ci this.dlpAlertDialog = new CustomDialogController({ 159df226684Sopenharmony_ci builder: DlpAlertDialog({ 160df226684Sopenharmony_ci title: title, 161df226684Sopenharmony_ci message: message, 162df226684Sopenharmony_ci action: () => { 163df226684Sopenharmony_ci } 164df226684Sopenharmony_ci }), 165df226684Sopenharmony_ci autoCancel: false, 166df226684Sopenharmony_ci customStyle: true, 167df226684Sopenharmony_ci maskColor: Constants.TRANSPARENT_BACKGROUND_COLOR 168df226684Sopenharmony_ci }) 169df226684Sopenharmony_ci this.dlpAlertDialog.open(); 170df226684Sopenharmony_ci } 171df226684Sopenharmony_ci 172df226684Sopenharmony_ci showErrorDialogNoTitle(message: Resource) { 173df226684Sopenharmony_ci this.dlpAlertDialog = new CustomDialogController({ 174df226684Sopenharmony_ci builder: DlpAlertDialog({ 175df226684Sopenharmony_ci message: message, 176df226684Sopenharmony_ci action: () => { 177df226684Sopenharmony_ci } 178df226684Sopenharmony_ci }), 179df226684Sopenharmony_ci autoCancel: false, 180df226684Sopenharmony_ci customStyle: true, 181df226684Sopenharmony_ci maskColor: Constants.TRANSPARENT_BACKGROUND_COLOR 182df226684Sopenharmony_ci }) 183df226684Sopenharmony_ci this.dlpAlertDialog.open(); 184df226684Sopenharmony_ci } 185df226684Sopenharmony_ci 186df226684Sopenharmony_ci async sendDlpFileCreateFault(code: number, reason?: string) { 187df226684Sopenharmony_ci let event: hiSysEvent.SysEventInfo = { 188df226684Sopenharmony_ci domain: 'DLP', 189df226684Sopenharmony_ci name: 'DLP_FILE_CREATE', 190df226684Sopenharmony_ci eventType: hiSysEvent.EventType.FAULT, 191df226684Sopenharmony_ci params: { 192df226684Sopenharmony_ci 'CODE': code, 193df226684Sopenharmony_ci 'REASON': reason 194df226684Sopenharmony_ci } as Record<string, number | string> 195df226684Sopenharmony_ci }; 196df226684Sopenharmony_ci 197df226684Sopenharmony_ci try { 198df226684Sopenharmony_ci let userId = await getUserId(); 199df226684Sopenharmony_ci if (event.params) { 200df226684Sopenharmony_ci event.params['USER_ID'] = userId; 201df226684Sopenharmony_ci await hiSysEvent.write(event); 202df226684Sopenharmony_ci } 203df226684Sopenharmony_ci } catch (err) { 204df226684Sopenharmony_ci HiLog.error(TAG, `sendDlpFileCreateFault failed, err: ${JSON.stringify(err)}`); 205df226684Sopenharmony_ci } 206df226684Sopenharmony_ci } 207df226684Sopenharmony_ci 208df226684Sopenharmony_ci async sendDlpFileCreateEvent(code: number) { 209df226684Sopenharmony_ci let event: hiSysEvent.SysEventInfo = { 210df226684Sopenharmony_ci domain: 'DLP', 211df226684Sopenharmony_ci name: 'DLP_FILE_CREATE_EVENT', 212df226684Sopenharmony_ci eventType: hiSysEvent.EventType.BEHAVIOR, 213df226684Sopenharmony_ci params: { 214df226684Sopenharmony_ci 'CODE': code, 215df226684Sopenharmony_ci } as Record<string, number> 216df226684Sopenharmony_ci }; 217df226684Sopenharmony_ci try { 218df226684Sopenharmony_ci let userId = await getUserId(); 219df226684Sopenharmony_ci if (event.params) { 220df226684Sopenharmony_ci event.params['USER_ID'] = userId; 221df226684Sopenharmony_ci await hiSysEvent.write(event); 222df226684Sopenharmony_ci } 223df226684Sopenharmony_ci } catch (err) { 224df226684Sopenharmony_ci HiLog.error(TAG, `sendDlpFileCreateEvent, err: ${JSON.stringify(err)}`); 225df226684Sopenharmony_ci } 226df226684Sopenharmony_ci } 227df226684Sopenharmony_ci 228df226684Sopenharmony_ci async catchProcess() { 229df226684Sopenharmony_ci this.processing = false; 230df226684Sopenharmony_ci if (GlobalContext.load('requestIsFromSandBox') as boolean) { 231df226684Sopenharmony_ci HiLog.info(TAG, `resumeFuseLink: ${this.srcFileName}`); 232df226684Sopenharmony_ci this.homeFeature.resumeFuseLinkHome(GlobalContext.load('uri'), (err: number) => { 233df226684Sopenharmony_ci if (err !== 0) { 234df226684Sopenharmony_ci HiLog.error(TAG, `resumeFuseLink failed: ${err}`); 235df226684Sopenharmony_ci } 236df226684Sopenharmony_ci }); 237df226684Sopenharmony_ci } 238df226684Sopenharmony_ci } 239df226684Sopenharmony_ci 240df226684Sopenharmony_ci async setUserStat() { 241df226684Sopenharmony_ci if (this.selectedPermissionTypeReadOnly.index === 0) { 242df226684Sopenharmony_ci AppStorage.setOrCreate('hiReadScope', 'User'); 243df226684Sopenharmony_ci } else if (this.selectedPermissionTypeReadOnly.index === 1) { 244df226684Sopenharmony_ci AppStorage.setOrCreate('hiReadScope', 'Everyone'); 245df226684Sopenharmony_ci } 246df226684Sopenharmony_ci if (this.selectedPermissionTypeEdit.index === 0) { 247df226684Sopenharmony_ci AppStorage.setOrCreate('hiWriteScope', 'User'); 248df226684Sopenharmony_ci } else if (this.selectedPermissionTypeEdit.index === 1) { 249df226684Sopenharmony_ci AppStorage.setOrCreate('hiWriteScope', 'Everyone'); 250df226684Sopenharmony_ci } else { 251df226684Sopenharmony_ci AppStorage.setOrCreate('hiWriteScope', 'Onlyme'); 252df226684Sopenharmony_ci } 253df226684Sopenharmony_ci } 254df226684Sopenharmony_ci 255df226684Sopenharmony_ci async changeEncrypt() { 256df226684Sopenharmony_ci this.processing = true; 257df226684Sopenharmony_ci await this.setUserStat(); 258df226684Sopenharmony_ci if (GlobalContext.load('requestIsFromSandBox') as boolean) { 259df226684Sopenharmony_ci try { 260df226684Sopenharmony_ci await this.stopFuseLinkHome(); 261df226684Sopenharmony_ci } catch { 262df226684Sopenharmony_ci return; 263df226684Sopenharmony_ci } 264df226684Sopenharmony_ci } 265df226684Sopenharmony_ci let filePath = getContext(this).filesDir + '/' + (new Date().getTime()); 266df226684Sopenharmony_ci let file: fs.File | undefined; 267df226684Sopenharmony_ci try { 268df226684Sopenharmony_ci file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE); 269df226684Sopenharmony_ci HiLog.info(TAG, `open temp file`); 270df226684Sopenharmony_ci } catch (err) { 271df226684Sopenharmony_ci HiLog.error(TAG, `open temp failed: ${JSON.stringify(err)}`); 272df226684Sopenharmony_ci this.showErrorDialog($r('app.string.TITLE_APP_ERROR'), $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR')); 273df226684Sopenharmony_ci await this.catchProcess(); 274df226684Sopenharmony_ci return; 275df226684Sopenharmony_ci } finally { 276df226684Sopenharmony_ci if (file) { 277df226684Sopenharmony_ci fs.closeSync(file); 278df226684Sopenharmony_ci } 279df226684Sopenharmony_ci }; 280df226684Sopenharmony_ci let filePathUri = getFileUriByPath(filePath); 281df226684Sopenharmony_ci try { 282df226684Sopenharmony_ci await new Promise<void>((resolve, reject) => { 283df226684Sopenharmony_ci this.homeFeature.recoverDLPFileHome(GlobalContext.load('uri'), filePathUri, async (err: number) => { 284df226684Sopenharmony_ci if (err !== 0) { 285df226684Sopenharmony_ci fs.unlinkSync(filePath); 286df226684Sopenharmony_ci HiLog.error(TAG, `recoverDLPFile: ${this.srcFileName}, failed: ${err}`); 287df226684Sopenharmony_ci let errorInfo = 288df226684Sopenharmony_ci {'title': '', 'msg': $r('app.string.MESSAGE_RECOVER_DLP_ERROR') } as Record<string, string | Resource>; 289df226684Sopenharmony_ci this.showErrorDialog(errorInfo.title, errorInfo.msg); 290df226684Sopenharmony_ci await this.catchProcess(); 291df226684Sopenharmony_ci reject(); 292df226684Sopenharmony_ci } 293df226684Sopenharmony_ci resolve(); 294df226684Sopenharmony_ci }); 295df226684Sopenharmony_ci }) 296df226684Sopenharmony_ci } catch { 297df226684Sopenharmony_ci return; 298df226684Sopenharmony_ci } 299df226684Sopenharmony_ci this.changeToGenDlpFileHome(filePathUri, filePath); 300df226684Sopenharmony_ci } 301df226684Sopenharmony_ci 302df226684Sopenharmony_ci stopFuseLinkHome() { 303df226684Sopenharmony_ci return new Promise<void>((resolve, reject) => { 304df226684Sopenharmony_ci this.homeFeature.stopFuseLinkHome(GlobalContext.load('uri'), (err: number) => { 305df226684Sopenharmony_ci if (err !== 0) { 306df226684Sopenharmony_ci HiLog.error(TAG, `stopFuseLink failed: ${err}`); 307df226684Sopenharmony_ci this.showErrorDialog($r('app.string.TITLE_APP_ERROR'), $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR')); 308df226684Sopenharmony_ci this.processing = false; 309df226684Sopenharmony_ci reject(); 310df226684Sopenharmony_ci } 311df226684Sopenharmony_ci resolve(); 312df226684Sopenharmony_ci }); 313df226684Sopenharmony_ci }) 314df226684Sopenharmony_ci } 315df226684Sopenharmony_ci 316df226684Sopenharmony_ci changeToGenDlpFileHome(filePathUri: string, filePath: string) { 317df226684Sopenharmony_ci let _dlp = this.tempData(); 318df226684Sopenharmony_ci this.homeFeature.genDlpFileHome(filePathUri, GlobalContext.load('uri'), _dlp, async(err: number) => { 319df226684Sopenharmony_ci if (err !== 0) { 320df226684Sopenharmony_ci HiLog.error(TAG, `generateDLPFile failed: ${err}`); 321df226684Sopenharmony_ci fs.unlinkSync(filePath); 322df226684Sopenharmony_ci let errorInfo = 323df226684Sopenharmony_ci {'title': '', 'msg': $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR') } as Record<string, string | Resource>; 324df226684Sopenharmony_ci this.showErrorDialog(errorInfo.title, errorInfo.msg); 325df226684Sopenharmony_ci await this.catchProcess(); 326df226684Sopenharmony_ci } else { 327df226684Sopenharmony_ci if (GlobalContext.load('requestIsFromSandBox') as boolean) { 328df226684Sopenharmony_ci this.homeFeature.replaceDLPLinkFileHome(GlobalContext.load('uri'), this.linkFileName, (err: number) => { 329df226684Sopenharmony_ci if (err !== 0) { 330df226684Sopenharmony_ci HiLog.error(TAG, `replaceDLPLinkFile failed: ${err}`); 331df226684Sopenharmony_ci } 332df226684Sopenharmony_ci }); 333df226684Sopenharmony_ci } 334df226684Sopenharmony_ci fs.unlinkSync(filePath); 335df226684Sopenharmony_ci await this.catchProcess(); 336df226684Sopenharmony_ci this.processing = false; 337df226684Sopenharmony_ci GlobalContext.store('dlpFileName', this.srcFileName); 338df226684Sopenharmony_ci GlobalContext.store('dlpProperty', _dlp); 339df226684Sopenharmony_ci sendDlpManagerFileConfiguration(); 340df226684Sopenharmony_ci router.replaceUrl({ 341df226684Sopenharmony_ci url: 'pages/encryptionSuccess', 342df226684Sopenharmony_ci params: { 343df226684Sopenharmony_ci staffDataArrayReadOnly: this.staffDataArrayReadOnly, 344df226684Sopenharmony_ci staffDataArrayEdit: this.staffDataArrayEdit, 345df226684Sopenharmony_ci selectedPermissionTypeReadOnly: this.selectedPermissionTypeReadOnly, 346df226684Sopenharmony_ci selectedPermissionTypeEdit: this.selectedPermissionTypeEdit, 347df226684Sopenharmony_ci } 348df226684Sopenharmony_ci }) 349df226684Sopenharmony_ci } 350df226684Sopenharmony_ci }); 351df226684Sopenharmony_ci } 352df226684Sopenharmony_ci 353df226684Sopenharmony_ci async beginEncrypt() { 354df226684Sopenharmony_ci this.processing = true; 355df226684Sopenharmony_ci HiLog.info(TAG, `begin encryption for: ${this.srcFileName}`); 356df226684Sopenharmony_ci let uri: string = ''; 357df226684Sopenharmony_ci let displayName: string = this.srcFileName; 358df226684Sopenharmony_ci await this.setUserStat(); 359df226684Sopenharmony_ci try { 360df226684Sopenharmony_ci let srcFileUri: string = GlobalContext.load('uri'); 361df226684Sopenharmony_ci let srcFileMsg: FileMsg = FileUtils.getSuffixFileMsgByUri(srcFileUri); 362df226684Sopenharmony_ci let srcFileSize: number = await getFileSizeByUri(srcFileUri); 363df226684Sopenharmony_ci AppStorage.setOrCreate('hiFileSize', srcFileSize); 364df226684Sopenharmony_ci AppStorage.setOrCreate('hiFileType', srcFileMsg.fileType); 365df226684Sopenharmony_ci let documentSaveOptions = new picker.DocumentSaveOptions(); 366df226684Sopenharmony_ci displayName = displayName + '.dlp'; 367df226684Sopenharmony_ci documentSaveOptions.newFileNames = [decodeURIComponent(srcFileMsg.fileName)]; 368df226684Sopenharmony_ci documentSaveOptions.fileSuffixChoices = [srcFileMsg.fileType + '.dlp']; 369df226684Sopenharmony_ci documentSaveOptions.defaultFilePathUri = srcFileUri.substring(0, 370df226684Sopenharmony_ci srcFileUri.length - srcFileMsg.fileType.length - srcFileMsg.fileName.length); 371df226684Sopenharmony_ci let documentPicker = new picker.DocumentViewPicker(); 372df226684Sopenharmony_ci documentPicker.save(documentSaveOptions).then(async (saveRes) => { 373df226684Sopenharmony_ci if (saveRes === undefined || saveRes.length === 0) { 374df226684Sopenharmony_ci HiLog.error(TAG, `fail to get uri`); 375df226684Sopenharmony_ci this.processing = false; 376df226684Sopenharmony_ci return; 377df226684Sopenharmony_ci } 378df226684Sopenharmony_ci HiLog.info(TAG, `get uri success`); 379df226684Sopenharmony_ci uri = saveRes[0]; 380df226684Sopenharmony_ci let uriInfo: fileUri.FileUri = new fileUri.FileUri(''); 381df226684Sopenharmony_ci try { 382df226684Sopenharmony_ci uriInfo = new fileUri.FileUri(uri); 383df226684Sopenharmony_ci } catch (err) { 384df226684Sopenharmony_ci HiLog.info(TAG, `fileUri fail: ${JSON.stringify(err)}`); 385df226684Sopenharmony_ci } 386df226684Sopenharmony_ci this.beginToGenDlpFileHome(srcFileUri, uri, uriInfo); 387df226684Sopenharmony_ci }).catch((err: BusinessError) => { 388df226684Sopenharmony_ci HiLog.error(TAG, `DocumentViewPicker save failed: ${JSON.stringify(err)}`); 389df226684Sopenharmony_ci let errorInfo = GetAlertMessage.getAlertMessage(err, $r('app.string.TITLE_APP_ERROR'), $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR')); 390df226684Sopenharmony_ci this.showErrorDialog(errorInfo.title, errorInfo.msg); 391df226684Sopenharmony_ci this.processing = false; 392df226684Sopenharmony_ci return; 393df226684Sopenharmony_ci }); 394df226684Sopenharmony_ci } catch (err) { 395df226684Sopenharmony_ci HiLog.error(TAG, `DocumentViewPicker failed: ${JSON.stringify(err)}`); 396df226684Sopenharmony_ci this.processing = false; 397df226684Sopenharmony_ci return; 398df226684Sopenharmony_ci } 399df226684Sopenharmony_ci } 400df226684Sopenharmony_ci 401df226684Sopenharmony_ci beginToGenDlpFileHome(srcFileUri: string, uri: string, uriInfo: fileUri.FileUri) { 402df226684Sopenharmony_ci let _dlp = this.tempData(); 403df226684Sopenharmony_ci this.homeFeature.genDlpFileHome(srcFileUri, uri, _dlp, async (err: number) => { 404df226684Sopenharmony_ci if (err !== 0) { 405df226684Sopenharmony_ci if (err === 100) { 406df226684Sopenharmony_ci this.showErrorDialog($r('app.string.TITLE_APP_ERROR'), $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR')); 407df226684Sopenharmony_ci this.processing = false; 408df226684Sopenharmony_ci return; 409df226684Sopenharmony_ci } 410df226684Sopenharmony_ci try { 411df226684Sopenharmony_ci await fs.unlink(uriInfo.path); 412df226684Sopenharmony_ci } catch (err) { 413df226684Sopenharmony_ci HiLog.info(TAG, `unlink fail: ${JSON.stringify(err)}`); 414df226684Sopenharmony_ci } 415df226684Sopenharmony_ci await this.sendDlpFileCreateFault(102, (err.toString())); // 102: DLP_FILE_CREATE_ERROR 416df226684Sopenharmony_ci let errorInfo = 417df226684Sopenharmony_ci {'title': '', 'msg': $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR') } as Record<string, string | Resource>; 418df226684Sopenharmony_ci this.showErrorDialog(errorInfo.title, errorInfo.msg); 419df226684Sopenharmony_ci this.processing = false; 420df226684Sopenharmony_ci return; 421df226684Sopenharmony_ci } else { 422df226684Sopenharmony_ci await this.sendDlpFileCreateEvent(201); // 201: DLP_FILE_CREATE_SUCCESS 423df226684Sopenharmony_ci let dstFileSize: number = await getFileSizeByUri(uri); 424df226684Sopenharmony_ci AppStorage.setOrCreate('hiPolicySizeEnc', dstFileSize); 425df226684Sopenharmony_ci AppStorage.setOrCreate('hiCode', 201); 426df226684Sopenharmony_ci sendDlpFileCreateProperties(dlpPermission.AccountType.DOMAIN_ACCOUNT); // 201: DLP_FILE_CREATE_SUCCESS 427df226684Sopenharmony_ci GlobalContext.store('dlpFileName', uriInfo.name); 428df226684Sopenharmony_ci GlobalContext.store('dlpProperty', _dlp); 429df226684Sopenharmony_ci GlobalContext.store('uri', uri); 430df226684Sopenharmony_ci this.processing = false; 431df226684Sopenharmony_ci sendDlpManagerFileConfiguration(); 432df226684Sopenharmony_ci router.replaceUrl({ 433df226684Sopenharmony_ci url: 'pages/encryptionSuccess', 434df226684Sopenharmony_ci params: { 435df226684Sopenharmony_ci staffDataArrayReadOnly: this.staffDataArrayReadOnly, 436df226684Sopenharmony_ci staffDataArrayEdit: this.staffDataArrayEdit, 437df226684Sopenharmony_ci selectedPermissionTypeReadOnly: this.selectedPermissionTypeReadOnly, 438df226684Sopenharmony_ci selectedPermissionTypeEdit: this.selectedPermissionTypeEdit, 439df226684Sopenharmony_ci } 440df226684Sopenharmony_ci }) 441df226684Sopenharmony_ci } 442df226684Sopenharmony_ci }); 443df226684Sopenharmony_ci } 444df226684Sopenharmony_ci 445df226684Sopenharmony_ci tempData() { 446df226684Sopenharmony_ci let accountInfo: osAccount.OsAccountInfo = GlobalContext.load('accountInfo'); 447df226684Sopenharmony_ci let property: dlpPermission.DLPProperty = GlobalContext.load('dlpProperty') !== 448df226684Sopenharmony_ci undefined ? GlobalContext.load('dlpProperty') : defaultDlpProperty; 449df226684Sopenharmony_ci this.staffDataArrayReadOnly = removeDuplicate(this.staffDataArrayReadOnly, 'authAccount'); 450df226684Sopenharmony_ci this.staffDataArrayEdit = removeDuplicate(this.staffDataArrayEdit, 'authAccount'); 451df226684Sopenharmony_ci this.staffDataArrayReadOnly = this.staffDataArrayReadOnly.filter((item) => 452df226684Sopenharmony_ci !this.staffDataArrayEdit.some((ele) => ele.authAccount === item.authAccount) 453df226684Sopenharmony_ci ); 454df226684Sopenharmony_ci property.ownerAccount = accountInfo.domainInfo.accountName; 455df226684Sopenharmony_ci property.ownerAccountID = accountInfo.domainInfo.accountId ?? ''; 456df226684Sopenharmony_ci property.authUserList = []; 457df226684Sopenharmony_ci property.everyoneAccessList = []; 458df226684Sopenharmony_ci property.offlineAccess = this.selectedIndex === 0 ? true : false; 459df226684Sopenharmony_ci property.expireTime = this.selectedIndex === 0 ? 0 : this.reconfigurationTime(new Date(this.validity)).getTime(); 460df226684Sopenharmony_ci if (this.selectedPermissionTypeEdit.data === 'all') { 461df226684Sopenharmony_ci property.everyoneAccessList = [dlpPermission.DLPFileAccess.CONTENT_EDIT]; 462df226684Sopenharmony_ci this.staffDataArrayReadOnly = []; 463df226684Sopenharmony_ci this.staffDataArrayEdit = []; 464df226684Sopenharmony_ci } else { 465df226684Sopenharmony_ci this.propertyAddData(property); 466df226684Sopenharmony_ci } 467df226684Sopenharmony_ci let authUserListNew: IAuthUser[] = []; 468df226684Sopenharmony_ci property.authUserList.forEach(item => { 469df226684Sopenharmony_ci authUserListNew.push( 470df226684Sopenharmony_ci new IAuthUser( 471df226684Sopenharmony_ci item.authAccount, 472df226684Sopenharmony_ci item.authAccountType, 473df226684Sopenharmony_ci item.dlpFileAccess, 474df226684Sopenharmony_ci item.permExpiryTime 475df226684Sopenharmony_ci ) 476df226684Sopenharmony_ci ) 477df226684Sopenharmony_ci }) 478df226684Sopenharmony_ci let _dlp = new IDLDLPProperty( 479df226684Sopenharmony_ci property.ownerAccount, 480df226684Sopenharmony_ci property.ownerAccountID, 481df226684Sopenharmony_ci property.ownerAccountType, 482df226684Sopenharmony_ci authUserListNew, 483df226684Sopenharmony_ci property.contactAccount, 484df226684Sopenharmony_ci property.offlineAccess, 485df226684Sopenharmony_ci property.everyoneAccessList, 486df226684Sopenharmony_ci property.expireTime 487df226684Sopenharmony_ci ); 488df226684Sopenharmony_ci return _dlp; 489df226684Sopenharmony_ci } 490df226684Sopenharmony_ci 491df226684Sopenharmony_ci propertyAddData(property: dlpPermission.DLPProperty) { 492df226684Sopenharmony_ci let isReadyOnlyAll = this.selectedPermissionTypeReadOnly.data === 'all'; 493df226684Sopenharmony_ci if (isReadyOnlyAll) { 494df226684Sopenharmony_ci property.everyoneAccessList = [dlpPermission.DLPFileAccess.READ_ONLY]; 495df226684Sopenharmony_ci } 496df226684Sopenharmony_ci if (this.selectedPermissionTypeReadOnly.data === 'all') { 497df226684Sopenharmony_ci this.staffDataArrayReadOnly = [] 498df226684Sopenharmony_ci } 499df226684Sopenharmony_ci if (['all', 'self'].includes(this.selectedPermissionTypeEdit.data)) { 500df226684Sopenharmony_ci this.staffDataArrayEdit = []; 501df226684Sopenharmony_ci } 502df226684Sopenharmony_ci this.staffDataArrayReadOnly && this.staffDataArrayReadOnly.forEach(item => { 503df226684Sopenharmony_ci property.authUserList?.push({ 504df226684Sopenharmony_ci authAccount: item.authAccount, 505df226684Sopenharmony_ci dlpFileAccess: dlpPermission.DLPFileAccess.READ_ONLY, 506df226684Sopenharmony_ci permExpiryTime: Date.UTC(9999, 1, 1), 507df226684Sopenharmony_ci authAccountType: dlpPermission.AccountType.DOMAIN_ACCOUNT, 508df226684Sopenharmony_ci }) 509df226684Sopenharmony_ci }) 510df226684Sopenharmony_ci this.staffDataArrayEdit && this.staffDataArrayEdit.forEach(item => { 511df226684Sopenharmony_ci property.authUserList?.push({ 512df226684Sopenharmony_ci authAccount: item.authAccount, 513df226684Sopenharmony_ci dlpFileAccess: dlpPermission.DLPFileAccess.CONTENT_EDIT, 514df226684Sopenharmony_ci permExpiryTime: Date.UTC(9999, 1, 1), 515df226684Sopenharmony_ci authAccountType: dlpPermission.AccountType.DOMAIN_ACCOUNT, 516df226684Sopenharmony_ci }) 517df226684Sopenharmony_ci }) 518df226684Sopenharmony_ci } 519df226684Sopenharmony_ci 520df226684Sopenharmony_ci async prepareDlpProperty() { 521df226684Sopenharmony_ci let accountInfo: osAccount.OsAccountInfo = GlobalContext.load('accountInfo') as osAccount.OsAccountInfo; 522df226684Sopenharmony_ci this.dlpProperty.ownerAccount = accountInfo.domainInfo.accountName; 523df226684Sopenharmony_ci this.dlpProperty.contactAccount = accountInfo.domainInfo.accountName; 524df226684Sopenharmony_ci this.dlpProperty.ownerAccountID = accountInfo.domainInfo.accountId ?? ''; 525df226684Sopenharmony_ci let ownerAccount: dlpPermission.AuthUser = { 526df226684Sopenharmony_ci authAccount: this.dlpProperty.ownerAccount, 527df226684Sopenharmony_ci dlpFileAccess: dlpPermission.DLPFileAccess.FULL_CONTROL, 528df226684Sopenharmony_ci permExpiryTime: Date.UTC(9999, 1, 1), 529df226684Sopenharmony_ci authAccountType: dlpPermission.AccountType.DOMAIN_ACCOUNT, 530df226684Sopenharmony_ci } 531df226684Sopenharmony_ci this.dlpProperty.authUserList?.push(ownerAccount) 532df226684Sopenharmony_ci return 533df226684Sopenharmony_ci } 534df226684Sopenharmony_ci 535df226684Sopenharmony_ci async showData(defaultDlpProperty: dlpPermission.DLPProperty) { 536df226684Sopenharmony_ci let routerParams: Record<string, AuthAccount[]> = router.getParams() as Record<string, AuthAccount[]>; 537df226684Sopenharmony_ci this.permissionDict.forEach(async (item, index) => { 538df226684Sopenharmony_ci this.permissionDict[index].value = 539df226684Sopenharmony_ci $r(await getContext(this).resourceManager.getStringValue(item.value.id)) 540df226684Sopenharmony_ci }) 541df226684Sopenharmony_ci let readOnlyData: dlpPermission.AuthUser[] = 542df226684Sopenharmony_ci defaultDlpProperty.authUserList?.filter((item: dlpPermission.AuthUser) => { 543df226684Sopenharmony_ci return item.dlpFileAccess === 1; 544df226684Sopenharmony_ci }) ?? [] 545df226684Sopenharmony_ci let editData: dlpPermission.AuthUser[] = defaultDlpProperty.authUserList?.filter((item: dlpPermission.AuthUser) => { 546df226684Sopenharmony_ci return item.dlpFileAccess === 2; 547df226684Sopenharmony_ci }) ?? [] 548df226684Sopenharmony_ci const filterEditFilter = () => { 549df226684Sopenharmony_ci if (editData.length === 0) { 550df226684Sopenharmony_ci this.selectedPermissionTypeEdit = this.permissionDict[2]; 551df226684Sopenharmony_ci } else { 552df226684Sopenharmony_ci this.staffDataArrayEdit = routerParams.staffDataArrayEdit as AuthAccount[]; 553df226684Sopenharmony_ci } 554df226684Sopenharmony_ci } 555df226684Sopenharmony_ci if ((defaultDlpProperty.everyoneAccessList !== undefined) && (defaultDlpProperty.everyoneAccessList.length > 0)) { 556df226684Sopenharmony_ci let perm = Math.max(...defaultDlpProperty.everyoneAccessList); 557df226684Sopenharmony_ci if (perm === dlpPermission.DLPFileAccess.CONTENT_EDIT) { 558df226684Sopenharmony_ci this.selectedPermissionTypeEdit = this.permissionDict[1]; 559df226684Sopenharmony_ci this.staffDataArrayReadOnly = readOnlyData; 560df226684Sopenharmony_ci } else if (perm === dlpPermission.DLPFileAccess.READ_ONLY) { 561df226684Sopenharmony_ci this.selectedPermissionTypeReadOnly = this.permissionDict[1]; 562df226684Sopenharmony_ci this.staffDataArrayReadOnly = []; 563df226684Sopenharmony_ci filterEditFilter() 564df226684Sopenharmony_ci } 565df226684Sopenharmony_ci } else { 566df226684Sopenharmony_ci this.staffDataArrayReadOnly = routerParams.staffDataArrayReadOnly as AuthAccount[]; 567df226684Sopenharmony_ci filterEditFilter() 568df226684Sopenharmony_ci } 569df226684Sopenharmony_ci } 570df226684Sopenharmony_ci 571df226684Sopenharmony_ci async checkAccount() { 572df226684Sopenharmony_ci try { 573df226684Sopenharmony_ci GlobalContext.store('accountInfo', await getOsAccountInfo()); 574df226684Sopenharmony_ci } catch (err) { 575df226684Sopenharmony_ci HiLog.error(TAG, `getOsAccountInfo failed: ${JSON.stringify(err)}`); 576df226684Sopenharmony_ci if (this.session !== undefined) { 577df226684Sopenharmony_ci let errorInfo = GetAlertMessage.getAlertMessage({ code: Constants.ERR_JS_GET_ACCOUNT_ERROR } as BusinessError); 578df226684Sopenharmony_ci this.showErrorDialog(errorInfo.title, errorInfo.msg); 579df226684Sopenharmony_ci } 580df226684Sopenharmony_ci return; 581df226684Sopenharmony_ci } 582df226684Sopenharmony_ci let codeMessage = checkDomainAccountInfo(GlobalContext.load('accountInfo') as osAccount.OsAccountInfo); 583df226684Sopenharmony_ci if (codeMessage) { 584df226684Sopenharmony_ci if (this.session !== undefined) { 585df226684Sopenharmony_ci let errorInfo = GetAlertMessage.getAlertMessage( 586df226684Sopenharmony_ci { code: codeMessage } as BusinessError); 587df226684Sopenharmony_ci this.showErrorDialog(errorInfo.title, errorInfo.msg); 588df226684Sopenharmony_ci } 589df226684Sopenharmony_ci return; 590df226684Sopenharmony_ci } 591df226684Sopenharmony_ci } 592df226684Sopenharmony_ci 593df226684Sopenharmony_ci reconfigurationTime(date: Date) { 594df226684Sopenharmony_ci let year = date.getFullYear(); 595df226684Sopenharmony_ci let month = date.getMonth(); 596df226684Sopenharmony_ci let day = date.getDate(); 597df226684Sopenharmony_ci return new Date(year, month, day, 23, 59, 59); 598df226684Sopenharmony_ci } 599df226684Sopenharmony_ci 600df226684Sopenharmony_ci async aboutToAppear() { 601df226684Sopenharmony_ci this.prepareData = true; 602df226684Sopenharmony_ci await this.checkAccount(); 603df226684Sopenharmony_ci AppStorage.setOrCreate('hiAccountVerifySucc', 0); 604df226684Sopenharmony_ci AppStorage.setOrCreate('hiAccountVerifyFail', 0); 605df226684Sopenharmony_ci if (GlobalContext.load('requestIsFromSandBox') as boolean) { 606df226684Sopenharmony_ci HiLog.info(TAG, `encryption request from sandbox`); 607df226684Sopenharmony_ci this.linkFileName = GlobalContext.load('linkFileName') as string; 608df226684Sopenharmony_ci this.srcFileName = GlobalContext.load('dlpFileName') as string; 609df226684Sopenharmony_ci setTimeout(() => { 610df226684Sopenharmony_ci this.showData(GlobalContext.load('dlpProperty')); 611df226684Sopenharmony_ci }, Constants.ENCRYPTION_SET_TIMEOUT_TIME) 612df226684Sopenharmony_ci this.isDlpFile = true; 613df226684Sopenharmony_ci setTimeout(() => { 614df226684Sopenharmony_ci this.prepareData = false; 615df226684Sopenharmony_ci }, Constants.ENCRYPTION_SET_TIMEOUT_TIME) 616df226684Sopenharmony_ci return 617df226684Sopenharmony_ci } else { 618df226684Sopenharmony_ci let routerParams = router.getParams(); 619df226684Sopenharmony_ci if (routerParams !== undefined) { // is a dlp file 620df226684Sopenharmony_ci HiLog.info(TAG, `encryption request from router`); 621df226684Sopenharmony_ci this.srcFileName = GlobalContext.load('dlpFileName') as string; 622df226684Sopenharmony_ci } else { // not a dlp file 623df226684Sopenharmony_ci HiLog.info(TAG, `encryption request from ability`); 624df226684Sopenharmony_ci this.srcFileName = GlobalContext.load('originFileName') as string; 625df226684Sopenharmony_ci } 626df226684Sopenharmony_ci } 627df226684Sopenharmony_ci 628df226684Sopenharmony_ci let isDlpSuffix: boolean = this.srcFileName.endsWith('.dlp'); 629df226684Sopenharmony_ci if (!isDlpSuffix) { 630df226684Sopenharmony_ci await this.prepareDlpProperty(); 631df226684Sopenharmony_ci this.isDlpFile = false; 632df226684Sopenharmony_ci } else { 633df226684Sopenharmony_ci setTimeout(() => { 634df226684Sopenharmony_ci this.showData(GlobalContext.load('dlpProperty')); 635df226684Sopenharmony_ci }, Constants.ENCRYPTION_SET_TIMEOUT_TIME) 636df226684Sopenharmony_ci this.isDlpFile = true; 637df226684Sopenharmony_ci } 638df226684Sopenharmony_ci setTimeout(() => { 639df226684Sopenharmony_ci this.prepareData = false; 640df226684Sopenharmony_ci }, Constants.ENCRYPTION_SET_TIMEOUT_TIME) 641df226684Sopenharmony_ci 642df226684Sopenharmony_ci this.directionStatus = (getContext(this) as common.UIAbilityContext).config.direction ?? -1; 643df226684Sopenharmony_ci directionStatus((counter) => { 644df226684Sopenharmony_ci this.directionStatus = counter; 645df226684Sopenharmony_ci }) 646df226684Sopenharmony_ci } 647df226684Sopenharmony_ci 648df226684Sopenharmony_ci build() { 649df226684Sopenharmony_ci Flex({ alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 650df226684Sopenharmony_ci EncryptingPanel({ processing: $processing }) 651df226684Sopenharmony_ci if (!this.processing) { 652df226684Sopenharmony_ci Column() { 653df226684Sopenharmony_ci Row() { 654df226684Sopenharmony_ci Text($r('app.string.header_title')) 655df226684Sopenharmony_ci .fontWeight(FontWeight.Bold) 656df226684Sopenharmony_ci .fontFamily($r('app.string.typeface')) 657df226684Sopenharmony_ci .fontColor($r('sys.color.ohos_id_color_text_primary')) 658df226684Sopenharmony_ci .fontSize($r('sys.float.ohos_id_text_size_dialog_tittle')) 659df226684Sopenharmony_ci .width(Constants.HEADER_TEXT_WIDTH) 660df226684Sopenharmony_ci .align(Alignment.Start) 661df226684Sopenharmony_ci } 662df226684Sopenharmony_ci .width(Constants.HEADER_COLUMN_WIDTH) 663df226684Sopenharmony_ci .height(Constants.HEADER_COLUMN_HEIGHT) 664df226684Sopenharmony_ci .padding({ 665df226684Sopenharmony_ci left: Constants.HEADER_COLUMN_PADDING_LEFT, 666df226684Sopenharmony_ci right: Constants.HEADER_COLUMN_PADDING_RIGHT 667df226684Sopenharmony_ci }) 668df226684Sopenharmony_ci .margin({ bottom: Constants.HEADER_COLUMN_MARGIN_BOTTOM }); 669df226684Sopenharmony_ci 670df226684Sopenharmony_ci Scroll() { 671df226684Sopenharmony_ci Column() { 672df226684Sopenharmony_ci Row() { 673df226684Sopenharmony_ci Text($r('app.string.header_title_list')) 674df226684Sopenharmony_ci .fontWeight(FontWeight.Regular) 675df226684Sopenharmony_ci .fontColor($r('sys.color.ohos_id_color_text_secondary')) 676df226684Sopenharmony_ci .fontSize($r('sys.float.ohos_id_text_size_body1')) 677df226684Sopenharmony_ci .width(Constants.HEADER_TEXT_WIDTH) 678df226684Sopenharmony_ci .align(Alignment.Start) 679df226684Sopenharmony_ci } 680df226684Sopenharmony_ci .width(Constants.HEADER_COLUMN_WIDTH) 681df226684Sopenharmony_ci .margin({ bottom: Constants.ENCRYPTION_CHANGE_TIPS_MARGIN_BOTTOM }) 682df226684Sopenharmony_ci 683df226684Sopenharmony_ci Row() { 684df226684Sopenharmony_ci Text($r('app.string.header_title_readonly')) 685df226684Sopenharmony_ci .fontWeight(FontWeight.Medium) 686df226684Sopenharmony_ci .fontColor($r('sys.color.ohos_id_color_text_primary')) 687df226684Sopenharmony_ci .fontSize($r('sys.float.ohos_id_text_size_body1')) 688df226684Sopenharmony_ci SymbolGlyph($r('sys.symbol.info_circle')) 689df226684Sopenharmony_ci .fontSize(`${Constants.FOOTER_ROW_PAD_RIGHT}vp`) 690df226684Sopenharmony_ci .fontColor([$r('sys.color.icon_secondary')]) 691df226684Sopenharmony_ci .margin({ 692df226684Sopenharmony_ci right: SystemUtils.isRTL() ? Constants.AP_TEXT_PAD_RIGHT : Constants.AP_TEXT_PAD_LEFT, 693df226684Sopenharmony_ci left: SystemUtils.isRTL() ? Constants.AP_TEXT_PAD_LEFT : Constants.AP_TEXT_PAD_RIGHT, 694df226684Sopenharmony_ci }) 695df226684Sopenharmony_ci .onClick(() => { 696df226684Sopenharmony_ci this.handlePopupReadOnly = !this.handlePopupReadOnly 697df226684Sopenharmony_ci }) 698df226684Sopenharmony_ci .draggable(false) 699df226684Sopenharmony_ci .bindPopup(this.handlePopupReadOnly, { 700df226684Sopenharmony_ci builder: this.popupBuilderReadOnly, 701df226684Sopenharmony_ci placement: SystemUtils.isRTL() ? Placement.BottomRight : Placement.BottomLeft, 702df226684Sopenharmony_ci offset: { x: SystemUtils.isRTL() ? Constants.POPUP_OFFSET_RTL_X : Constants.POPUP_OFFSET_X }, 703df226684Sopenharmony_ci enableArrow: true, 704df226684Sopenharmony_ci showInSubWindow: false, 705df226684Sopenharmony_ci onStateChange: (e) => { 706df226684Sopenharmony_ci if (!e.isVisible) { 707df226684Sopenharmony_ci this.handlePopupReadOnly = false 708df226684Sopenharmony_ci } 709df226684Sopenharmony_ci } 710df226684Sopenharmony_ci }) 711df226684Sopenharmony_ci Blank() 712df226684Sopenharmony_ci permissionTypeSelect({ 713df226684Sopenharmony_ci selectedItem: $selectedPermissionTypeReadOnly, 714df226684Sopenharmony_ci staffArray: $staffDataArrayReadOnly, 715df226684Sopenharmony_ci isDisable: this.selectedPermissionTypeEdit?.data === 'all', 716df226684Sopenharmony_ci isReadType: true 717df226684Sopenharmony_ci }) 718df226684Sopenharmony_ci } 719df226684Sopenharmony_ci .width(Constants.FOOTER_ROW_WIDTH) 720df226684Sopenharmony_ci .margin({ 721df226684Sopenharmony_ci top: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_TOP, 722df226684Sopenharmony_ci bottom: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_BOTTOM 723df226684Sopenharmony_ci }) 724df226684Sopenharmony_ci 725df226684Sopenharmony_ci Row() { 726df226684Sopenharmony_ci if (!['all', 'self'].includes(this.selectedPermissionTypeReadOnly?.data ?? '')) { 727df226684Sopenharmony_ci AddStaff({ 728df226684Sopenharmony_ci isAccountCheckSuccess: $isAccountCheckSuccess, 729df226684Sopenharmony_ci staffArray: $staffDataArrayReadOnly, 730df226684Sopenharmony_ci isDisable: this.selectedPermissionTypeEdit?.data === 'all', 731df226684Sopenharmony_ci }) 732df226684Sopenharmony_ci } 733df226684Sopenharmony_ci } 734df226684Sopenharmony_ci .margin({ bottom: Constants.ENCRYPTION_STAFF_ITEM_MARGIN_BOTTOM }) 735df226684Sopenharmony_ci 736df226684Sopenharmony_ci Row() { 737df226684Sopenharmony_ci Text($r('app.string.header_title_edit')) 738df226684Sopenharmony_ci .fontWeight(FontWeight.Medium) 739df226684Sopenharmony_ci .fontColor($r('sys.color.ohos_id_color_text_primary')) 740df226684Sopenharmony_ci .fontSize($r('sys.float.ohos_id_text_size_body1')) 741df226684Sopenharmony_ci SymbolGlyph($r('sys.symbol.info_circle')) 742df226684Sopenharmony_ci .fontSize(`${Constants.FOOTER_ROW_PAD_RIGHT}vp`) 743df226684Sopenharmony_ci .fontColor([$r('sys.color.icon_secondary')]) 744df226684Sopenharmony_ci .margin({ 745df226684Sopenharmony_ci right: SystemUtils.isRTL() ? Constants.AP_TEXT_PAD_RIGHT : Constants.AP_TEXT_PAD_LEFT, 746df226684Sopenharmony_ci left: SystemUtils.isRTL() ? Constants.AP_TEXT_PAD_LEFT : Constants.AP_TEXT_PAD_RIGHT, 747df226684Sopenharmony_ci }) 748df226684Sopenharmony_ci .onClick(() => { 749df226684Sopenharmony_ci this.handlePopupEdit = !this.handlePopupEdit 750df226684Sopenharmony_ci }) 751df226684Sopenharmony_ci .draggable(false) 752df226684Sopenharmony_ci .bindPopup(this.handlePopupEdit, { 753df226684Sopenharmony_ci builder: this.popupBuilderEdit, 754df226684Sopenharmony_ci placement: SystemUtils.isRTL() ? Placement.BottomRight : Placement.BottomLeft, 755df226684Sopenharmony_ci offset: { x: SystemUtils.isRTL() ? Constants.POPUP_OFFSET_RTL_X : Constants.POPUP_OFFSET_X }, 756df226684Sopenharmony_ci enableArrow: true, 757df226684Sopenharmony_ci showInSubWindow: false, 758df226684Sopenharmony_ci onStateChange: (e) => { 759df226684Sopenharmony_ci if (!e.isVisible) { 760df226684Sopenharmony_ci this.handlePopupEdit = false 761df226684Sopenharmony_ci } 762df226684Sopenharmony_ci } 763df226684Sopenharmony_ci }) 764df226684Sopenharmony_ci Blank() 765df226684Sopenharmony_ci permissionTypeSelect({ 766df226684Sopenharmony_ci selectedItem: $selectedPermissionTypeEdit, 767df226684Sopenharmony_ci staffArray: $staffDataArrayEdit, 768df226684Sopenharmony_ci isDisable: false, 769df226684Sopenharmony_ci isReadType: false 770df226684Sopenharmony_ci }) 771df226684Sopenharmony_ci } 772df226684Sopenharmony_ci .width(Constants.FOOTER_ROW_WIDTH) 773df226684Sopenharmony_ci .margin({ 774df226684Sopenharmony_ci top: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_TOP, 775df226684Sopenharmony_ci bottom: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_BOTTOM 776df226684Sopenharmony_ci }) 777df226684Sopenharmony_ci 778df226684Sopenharmony_ci Row() { 779df226684Sopenharmony_ci if (!['all', 'self'].includes(this.selectedPermissionTypeEdit?.data ?? '')) { 780df226684Sopenharmony_ci AddStaff({ 781df226684Sopenharmony_ci isAccountCheckSuccess: $isAccountCheckSuccess, 782df226684Sopenharmony_ci staffArray: $staffDataArrayEdit, 783df226684Sopenharmony_ci isDisable: false 784df226684Sopenharmony_ci }) 785df226684Sopenharmony_ci } 786df226684Sopenharmony_ci } 787df226684Sopenharmony_ci .margin({ bottom: Constants.ENCRYPTION_STAFF_ITEM_MARGIN_BOTTOM }) 788df226684Sopenharmony_ci 789df226684Sopenharmony_ci Row() { 790df226684Sopenharmony_ci Text($r('app.string.Document_valid_until')) 791df226684Sopenharmony_ci .fontWeight(FontWeight.Medium) 792df226684Sopenharmony_ci .fontColor($r('sys.color.ohos_id_color_text_primary')) 793df226684Sopenharmony_ci .fontSize($r('sys.float.ohos_id_text_size_body1')) 794df226684Sopenharmony_ci Blank() 795df226684Sopenharmony_ci if (this.selectedIndex === 1) { 796df226684Sopenharmony_ci CalendarPicker({ selected: new Date(this.validity) }) 797df226684Sopenharmony_ci .onChange((value) => { 798df226684Sopenharmony_ci this.validity = value; 799df226684Sopenharmony_ci }) 800df226684Sopenharmony_ci Row() { 801df226684Sopenharmony_ci SymbolGlyph($r('sys.symbol.arrowtriangle_down_fill')) 802df226684Sopenharmony_ci .fontSize(`${Constants.VALIDITY_IMAGE_WIDTH}vp`) 803df226684Sopenharmony_ci .fontColor([$r('sys.color.ohos_id_color_tertiary')]) 804df226684Sopenharmony_ci } 805df226684Sopenharmony_ci .height(Constants.VALIDITY_IMAGE_HEIGHT) 806df226684Sopenharmony_ci .padding({ 807df226684Sopenharmony_ci right: Constants.VALIDITY_IMAGE_PADDING_RIGHT, 808df226684Sopenharmony_ci left: Constants.VALIDITY_IMAGE_PADDING_LEFT 809df226684Sopenharmony_ci }) 810df226684Sopenharmony_ci .bindMenu(this.MenuBuilder, { placement: Placement.BottomRight, showInSubWindow: false }) 811df226684Sopenharmony_ci } else { 812df226684Sopenharmony_ci validDateTypeMenu({ 813df226684Sopenharmony_ci selectedIndex: $selectedIndex, 814df226684Sopenharmony_ci isDisable: false, 815df226684Sopenharmony_ci }) 816df226684Sopenharmony_ci } 817df226684Sopenharmony_ci } 818df226684Sopenharmony_ci .width(Constants.FOOTER_ROW_WIDTH) 819df226684Sopenharmony_ci .margin({ 820df226684Sopenharmony_ci top: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_TOP, 821df226684Sopenharmony_ci bottom: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_BOTTOM 822df226684Sopenharmony_ci }) 823df226684Sopenharmony_ci } 824df226684Sopenharmony_ci }.constraintSize({ 825df226684Sopenharmony_ci maxHeight: this.directionStatus === 826df226684Sopenharmony_ci 0 ? Constants.CHANGE_MAX_HEIGHT : Constants.ENCRYPTION_SUCCESS_MAX_HEIGHT 827df226684Sopenharmony_ci }) 828df226684Sopenharmony_ci .padding({ 829df226684Sopenharmony_ci left: Constants.HEADER_COLUMN_PADDING_LEFT, 830df226684Sopenharmony_ci right: Constants.HEADER_COLUMN_PADDING_RIGHT 831df226684Sopenharmony_ci }) 832df226684Sopenharmony_ci 833df226684Sopenharmony_ci Flex({ direction: FlexDirection.Row }) { 834df226684Sopenharmony_ci Button($r('app.string.ban'), { type: ButtonType.Capsule, stateEffect: true }) 835df226684Sopenharmony_ci .backgroundColor($r('sys.color.ohos_id_color_button_normal')) 836df226684Sopenharmony_ci .width(Constants.HEADER_TEXT_WIDTH) 837df226684Sopenharmony_ci .focusable(true) 838df226684Sopenharmony_ci .fontColor($r('sys.color.ohos_id_color_text_primary_activated')) 839df226684Sopenharmony_ci .controlSize(ControlSize.NORMAL) 840df226684Sopenharmony_ci .onClick(async (event) => { 841df226684Sopenharmony_ci if (this.isDlpFile && !(GlobalContext.load('requestIsFromSandBox') as boolean)) { 842df226684Sopenharmony_ci this.homeFeature.closeDLPFileHome(GlobalContext.load('uri'), (err: number) => { 843df226684Sopenharmony_ci if (err !== 0) { 844df226684Sopenharmony_ci HiLog.error(TAG, `closeDLPFile failed: ${err}`); 845df226684Sopenharmony_ci } 846df226684Sopenharmony_ci }); 847df226684Sopenharmony_ci } 848df226684Sopenharmony_ci if (this.session !== undefined) { 849df226684Sopenharmony_ci this.session.terminateSelfWithResult({ 850df226684Sopenharmony_ci 'resultCode': 0, 851df226684Sopenharmony_ci 'want': { 852df226684Sopenharmony_ci 'bundleName': Constants.DLP_MANAGER_BUNDLE_NAME, 853df226684Sopenharmony_ci }, 854df226684Sopenharmony_ci }); 855df226684Sopenharmony_ci } else { 856df226684Sopenharmony_ci if (GlobalContext.load('fileOpenHistoryFromMain')) { 857df226684Sopenharmony_ci (GlobalContext.load('fileOpenHistoryFromMain') as Map<string, Object>).delete(GlobalContext.load('uri') as string) 858df226684Sopenharmony_ci } 859df226684Sopenharmony_ci abilityResult.resultCode = 0; 860df226684Sopenharmony_ci (getContext(this) as common.UIAbilityContext).terminateSelfWithResult(abilityResult); 861df226684Sopenharmony_ci } 862df226684Sopenharmony_ci }) 863df226684Sopenharmony_ci .margin({ 864df226684Sopenharmony_ci right: SystemUtils.isRTL() ? 865df226684Sopenharmony_ci Constants.ADD_STAFF_ITEM_MARGIN_LEFT : Constants.ENCRYPTION_PROTECTION_BUTTON_MARGIN, 866df226684Sopenharmony_ci left: SystemUtils.isRTL() ? 867df226684Sopenharmony_ci Constants.ENCRYPTION_PROTECTION_BUTTON_MARGIN : Constants.ADD_STAFF_ITEM_MARGIN_LEFT, 868df226684Sopenharmony_ci }) 869df226684Sopenharmony_ci Button($r('app.string.sure'), { type: ButtonType.Capsule, stateEffect: true }) 870df226684Sopenharmony_ci .backgroundColor($r('sys.color.ohos_id_color_button_normal')) 871df226684Sopenharmony_ci .width(Constants.HEADER_TEXT_WIDTH) 872df226684Sopenharmony_ci .focusable(true) 873df226684Sopenharmony_ci .fontColor($r('sys.color.ohos_id_color_text_primary_activated')) 874df226684Sopenharmony_ci .enabled( 875df226684Sopenharmony_ci this.isAccountCheckSuccess && 876df226684Sopenharmony_ci (this.staffDataArrayReadOnly.length > 0 || 877df226684Sopenharmony_ci this.staffDataArrayEdit.length > 0 || 878df226684Sopenharmony_ci ['all', 'self'].includes(this.selectedPermissionTypeReadOnly.data ?? '') || 879df226684Sopenharmony_ci ['all', 'self'].includes(this.selectedPermissionTypeEdit.data ?? '')) 880df226684Sopenharmony_ci ) 881df226684Sopenharmony_ci .controlSize(ControlSize.NORMAL) 882df226684Sopenharmony_ci .onClick(async (event) => { 883df226684Sopenharmony_ci AppStorage.setOrCreate('hiValidDate', false); 884df226684Sopenharmony_ci if (this.selectedIndex === 1) { 885df226684Sopenharmony_ci let currentTime = new Date().getTime(); 886df226684Sopenharmony_ci let validity = this.reconfigurationTime(new Date(this.validity)).getTime(); 887df226684Sopenharmony_ci if (currentTime >= validity) { 888df226684Sopenharmony_ci this.showErrorDialogNoTitle($r('app.string.Timeout_is_not_supported')); 889df226684Sopenharmony_ci return; 890df226684Sopenharmony_ci } 891df226684Sopenharmony_ci AppStorage.setOrCreate('validity', this.reconfigurationTime(new Date(this.validity))); 892df226684Sopenharmony_ci AppStorage.setOrCreate('hiValidDate', true); 893df226684Sopenharmony_ci } 894df226684Sopenharmony_ci AppStorage.setOrCreate('permanent', this.selectedIndex ? false : true); 895df226684Sopenharmony_ci AppStorage.setOrCreate('hiAdvancedSettings', false); 896df226684Sopenharmony_ci AppStorage.setOrCreate('hiStorePath', false); 897df226684Sopenharmony_ci if (this.isDlpFile) { 898df226684Sopenharmony_ci AppStorage.setOrCreate('hiOperation', 'Change_policy'); 899df226684Sopenharmony_ci await this.changeEncrypt(); 900df226684Sopenharmony_ci } else { 901df226684Sopenharmony_ci AppStorage.setOrCreate('hiOperation', 'Pack_policy'); 902df226684Sopenharmony_ci await this.beginEncrypt(); 903df226684Sopenharmony_ci } 904df226684Sopenharmony_ci }) 905df226684Sopenharmony_ci .margin({ 906df226684Sopenharmony_ci right: SystemUtils.isRTL() ? 907df226684Sopenharmony_ci Constants.ENCRYPTION_PROTECTION_BUTTON_MARGIN : Constants.ADD_STAFF_ITEM_MARGIN_LEFT, 908df226684Sopenharmony_ci left: SystemUtils.isRTL() ? 909df226684Sopenharmony_ci Constants.ADD_STAFF_ITEM_MARGIN_LEFT : Constants.ENCRYPTION_PROTECTION_BUTTON_MARGIN, 910df226684Sopenharmony_ci }) 911df226684Sopenharmony_ci } 912df226684Sopenharmony_ci .margin({ 913df226684Sopenharmony_ci left: Constants.ENCRYPTION_BUTTON_TO_BUTTON_WIDTH, 914df226684Sopenharmony_ci right: Constants.ENCRYPTION_BUTTON_TO_BUTTON_WIDTH, 915df226684Sopenharmony_ci bottom: Constants.ENCRYPTION_BUTTON_MARGIN_BOTTOM, 916df226684Sopenharmony_ci top: Constants.ENCRYPTION_BUTTON_TO_BUTTON_WIDTH 917df226684Sopenharmony_ci }) 918df226684Sopenharmony_ci } 919df226684Sopenharmony_ci .visibility(this.processing ? Visibility.Hidden : Visibility.Visible) 920df226684Sopenharmony_ci .width(Constants.ENCRYPTION_PC_FIXING_WIDTH) 921df226684Sopenharmony_ci .backgroundColor($r('sys.color.ohos_id_color_dialog_bg')) 922df226684Sopenharmony_ci .borderRadius($r('sys.float.ohos_id_corner_radius_dialog')) 923df226684Sopenharmony_ci .constraintSize({minWidth: Constants.ENCRYPTION_PC_FIXING_WIDTH}) 924df226684Sopenharmony_ci .backgroundBlurStyle(BlurStyle.COMPONENT_ULTRA_THICK); 925df226684Sopenharmony_ci } 926df226684Sopenharmony_ci } 927df226684Sopenharmony_ci } 928df226684Sopenharmony_ci} 929df226684Sopenharmony_ci 930df226684Sopenharmony_cilet storage = LocalStorage.getShared(); 931df226684Sopenharmony_ci@Entry(storage) 932df226684Sopenharmony_ci@Component 933df226684Sopenharmony_cistruct encryptionProtection { 934df226684Sopenharmony_ci aboutToAppear() { 935df226684Sopenharmony_ci } 936df226684Sopenharmony_ci 937df226684Sopenharmony_ci build() { 938df226684Sopenharmony_ci GridRow({ 939df226684Sopenharmony_ci columns: { 940df226684Sopenharmony_ci xs: Constants.XS_COLUMNS, 941df226684Sopenharmony_ci sm: Constants.SM_COLUMNS, 942df226684Sopenharmony_ci md: Constants.MD_COLUMNS, 943df226684Sopenharmony_ci lg: Constants.LG_COLUMNS 944df226684Sopenharmony_ci }, 945df226684Sopenharmony_ci gutter: Constants.DIALOG_GUTTER 946df226684Sopenharmony_ci }) { 947df226684Sopenharmony_ci GridCol({ 948df226684Sopenharmony_ci span: { 949df226684Sopenharmony_ci xs: Constants.XS_SPAN, 950df226684Sopenharmony_ci sm: Constants.SM_SPAN, 951df226684Sopenharmony_ci md: Constants.DIALOG_MD_SPAN, 952df226684Sopenharmony_ci lg: Constants.DIALOG_LG_SPAN 953df226684Sopenharmony_ci }, 954df226684Sopenharmony_ci offset: { 955df226684Sopenharmony_ci xs: Constants.XS_OFFSET, 956df226684Sopenharmony_ci sm: Constants.SM_OFFSET, 957df226684Sopenharmony_ci md: Constants.DIALOG_MD_OFFSET, 958df226684Sopenharmony_ci lg: Constants.DIALOG_LG_OFFSET 959df226684Sopenharmony_ci } 960df226684Sopenharmony_ci }) { 961df226684Sopenharmony_ci Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, 962df226684Sopenharmony_ci direction: FlexDirection.Column }) { 963df226684Sopenharmony_ci DlpDialog() 964df226684Sopenharmony_ci } 965df226684Sopenharmony_ci } 966df226684Sopenharmony_ci } 967df226684Sopenharmony_ci .backgroundColor($r('sys.color.mask_fourth')) 968df226684Sopenharmony_ci } 969df226684Sopenharmony_ci} 970