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 measure from '@ohos.measure'; 17df226684Sopenharmony_ciimport window from '@ohos.window'; 18df226684Sopenharmony_ciimport ability from '@ohos.ability.ability'; 19df226684Sopenharmony_ciimport account_osAccount from '@ohos.account.osAccount'; 20df226684Sopenharmony_ciimport emitter from '@ohos.events.emitter'; 21df226684Sopenharmony_ciimport dlpPermission from '@ohos.dlpPermission'; 22df226684Sopenharmony_ciimport bundleManager from '@ohos.bundle.bundleManager'; 23df226684Sopenharmony_ciimport fs from '@ohos.file.fs'; 24df226684Sopenharmony_ciimport zlib from '@ohos.zlib'; 25df226684Sopenharmony_ciimport util from '@ohos.util'; 26df226684Sopenharmony_ciimport fileUri from '@ohos.file.fileuri'; 27df226684Sopenharmony_ciimport { BusinessError, Callback } from '@ohos.base' 28df226684Sopenharmony_ciimport Want from '@ohos.app.ability.Want'; 29df226684Sopenharmony_ciimport common from '@ohos.app.ability.common'; 30df226684Sopenharmony_ciimport connection from '@ohos.net.connection'; 31df226684Sopenharmony_ciimport UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'; 32df226684Sopenharmony_ciimport Constants from '../common/constant'; 33df226684Sopenharmony_ciimport GlobalContext from './GlobalContext'; 34df226684Sopenharmony_ciimport hiSysEvent from '@ohos.hiSysEvent'; 35df226684Sopenharmony_ciimport { HiLog } from '../common/HiLog'; 36df226684Sopenharmony_ci 37df226684Sopenharmony_ciconst TAG = 'Utils'; 38df226684Sopenharmony_ciconst HEAD_LENGTH_IN_BYTE = 28; 39df226684Sopenharmony_ciconst HEAD_LENGTH_IN_U32 = 7; 40df226684Sopenharmony_ciconst CERT_OFFSET = 5; 41df226684Sopenharmony_ciconst CERT_SIZE = 6; 42df226684Sopenharmony_ciclass ChangeOption { 43df226684Sopenharmony_ci public offset: number = 0 44df226684Sopenharmony_ci public length: number = 0 45df226684Sopenharmony_ci} 46df226684Sopenharmony_cilet defaultDlpProperty: dlpPermission.DLPProperty = { 47df226684Sopenharmony_ci ownerAccount: '', 48df226684Sopenharmony_ci ownerAccountType: dlpPermission.AccountType.DOMAIN_ACCOUNT, 49df226684Sopenharmony_ci authUserList: [], 50df226684Sopenharmony_ci contactAccount: '', 51df226684Sopenharmony_ci offlineAccess: true, 52df226684Sopenharmony_ci ownerAccountID: '', 53df226684Sopenharmony_ci everyoneAccessList: [] 54df226684Sopenharmony_ci} 55df226684Sopenharmony_ci 56df226684Sopenharmony_cilet defaultDlpFile: dlpPermission.DLPFile = { 57df226684Sopenharmony_ci dlpProperty: defaultDlpProperty, 58df226684Sopenharmony_ci recoverDLPFile: async () => {}, 59df226684Sopenharmony_ci closeDLPFile: async () => {}, 60df226684Sopenharmony_ci addDLPLinkFile: async () => {}, 61df226684Sopenharmony_ci stopFuseLink: async () => {}, 62df226684Sopenharmony_ci resumeFuseLink: async () => {}, 63df226684Sopenharmony_ci replaceDLPLinkFile: async () => {}, 64df226684Sopenharmony_ci deleteDLPLinkFile: async () => {} 65df226684Sopenharmony_ci}; 66df226684Sopenharmony_ci 67df226684Sopenharmony_ciinterface AuthAccount { 68df226684Sopenharmony_ci authAccount: string; 69df226684Sopenharmony_ci textContent?: string; 70df226684Sopenharmony_ci} 71df226684Sopenharmony_ci 72df226684Sopenharmony_ciinterface PermissionType { 73df226684Sopenharmony_ci value: Resource; 74df226684Sopenharmony_ci data: string; 75df226684Sopenharmony_ci index: number; 76df226684Sopenharmony_ci} 77df226684Sopenharmony_ci 78df226684Sopenharmony_ciinterface DLPInfo { 79df226684Sopenharmony_ci name: string; 80df226684Sopenharmony_ci versionCode: string; 81df226684Sopenharmony_ci} 82df226684Sopenharmony_ci 83df226684Sopenharmony_cifunction getFileUriByPath(filePath: string): string { 84df226684Sopenharmony_ci try { 85df226684Sopenharmony_ci let uri = fileUri.getUriFromPath(filePath); 86df226684Sopenharmony_ci return uri; 87df226684Sopenharmony_ci } catch (err) { 88df226684Sopenharmony_ci HiLog.info(TAG, `getUriFromPath error: ${JSON.stringify(err)}`); 89df226684Sopenharmony_ci return ''; 90df226684Sopenharmony_ci } 91df226684Sopenharmony_ci} 92df226684Sopenharmony_ci 93df226684Sopenharmony_cifunction getFileFd(uri: string, mode?: number): number { 94df226684Sopenharmony_ci mode = mode || fs.OpenMode.READ_ONLY; 95df226684Sopenharmony_ci try { 96df226684Sopenharmony_ci let file = fs.openSync(uri, mode); 97df226684Sopenharmony_ci HiLog.info(TAG, `open: ${uri}, as: ${file.fd}`); 98df226684Sopenharmony_ci return file.fd; 99df226684Sopenharmony_ci } catch (err) { 100df226684Sopenharmony_ci HiLog.info(TAG, `openSync error: ${JSON.stringify(err)}`); 101df226684Sopenharmony_ci return -1; 102df226684Sopenharmony_ci } 103df226684Sopenharmony_ci} 104df226684Sopenharmony_ci 105df226684Sopenharmony_ciasync function getOsAccountInfo(): Promise<account_osAccount.OsAccountInfo> { 106df226684Sopenharmony_ci let accountMgr = account_osAccount.getAccountManager(); 107df226684Sopenharmony_ci return await accountMgr.queryOsAccount(); 108df226684Sopenharmony_ci} 109df226684Sopenharmony_ci 110df226684Sopenharmony_cifunction checkDomainAccountInfo(accountInfo: account_osAccount.OsAccountInfo): number { 111df226684Sopenharmony_ci AppStorage.setOrCreate('hiAccountType', dlpPermission.AccountType.DOMAIN_ACCOUNT); 112df226684Sopenharmony_ci if (accountInfo.domainInfo.accountName === '' && 113df226684Sopenharmony_ci accountInfo.domainInfo.accountId === '') { 114df226684Sopenharmony_ci AppStorage.setOrCreate('hiAccountStatus', 0); 115df226684Sopenharmony_ci return Constants.ERR_JS_APP_NO_ACCOUNT_ERROR; 116df226684Sopenharmony_ci } 117df226684Sopenharmony_ci if (!accountInfo.domainInfo.isAuthenticated) { 118df226684Sopenharmony_ci AppStorage.setOrCreate('hiAccountStatus', 0); 119df226684Sopenharmony_ci return Constants.ERR_JS_APP_SYSTEM_IS_AUTHENTICATED; 120df226684Sopenharmony_ci } 121df226684Sopenharmony_ci AppStorage.setOrCreate('hiAccountStatus', 1); 122df226684Sopenharmony_ci return Constants.ERR_JS_APP_ACCOUNT_INFO; 123df226684Sopenharmony_ci} 124df226684Sopenharmony_ci 125df226684Sopenharmony_ciasync function getUserId(): Promise<number> { 126df226684Sopenharmony_ci let accountMgr = account_osAccount.getAccountManager(); 127df226684Sopenharmony_ci return await accountMgr.getOsAccountLocalId(); 128df226684Sopenharmony_ci} 129df226684Sopenharmony_ci 130df226684Sopenharmony_cifunction getAuthPerm(accountName: string, dlpProperty: dlpPermission.DLPProperty): dlpPermission.DLPFileAccess { 131df226684Sopenharmony_ci let perm: dlpPermission.DLPFileAccess = dlpPermission.DLPFileAccess.NO_PERMISSION; 132df226684Sopenharmony_ci if (accountName === dlpProperty.ownerAccount) { 133df226684Sopenharmony_ci return dlpPermission.DLPFileAccess.FULL_CONTROL; 134df226684Sopenharmony_ci } 135df226684Sopenharmony_ci if ((dlpProperty.everyoneAccessList !== undefined) && (dlpProperty.everyoneAccessList.length > 0)) { 136df226684Sopenharmony_ci perm = Math.max(...dlpProperty.everyoneAccessList); 137df226684Sopenharmony_ci } 138df226684Sopenharmony_ci let authUserList = dlpProperty.authUserList ?? []; 139df226684Sopenharmony_ci for (let i = 0; i < authUserList.length; ++i) { 140df226684Sopenharmony_ci let authUser = authUserList[i]; 141df226684Sopenharmony_ci if (authUser.authAccount === accountName) { 142df226684Sopenharmony_ci return authUser.dlpFileAccess; 143df226684Sopenharmony_ci } 144df226684Sopenharmony_ci } 145df226684Sopenharmony_ci return perm; 146df226684Sopenharmony_ci} 147df226684Sopenharmony_ci 148df226684Sopenharmony_cifunction terminateSelfWithResult(resultCode: number, result: string): void { 149df226684Sopenharmony_ci let abilityResult: ability.AbilityResult = { 150df226684Sopenharmony_ci resultCode: resultCode, 151df226684Sopenharmony_ci want: { 152df226684Sopenharmony_ci parameters: { 153df226684Sopenharmony_ci result: result 154df226684Sopenharmony_ci } 155df226684Sopenharmony_ci } 156df226684Sopenharmony_ci }; 157df226684Sopenharmony_ci (getContext() as common.UIAbilityContext).terminateSelfWithResult(abilityResult); 158df226684Sopenharmony_ci} 159df226684Sopenharmony_ci 160df226684Sopenharmony_cifunction judgeIsSandBox(want: Want) { 161df226684Sopenharmony_ci return new Promise<boolean>(async resolve => { 162df226684Sopenharmony_ci let callerToken: number = want.parameters?.['ohos.aafwk.param.callerToken'] as number; 163df226684Sopenharmony_ci let callerBundleName: string = want.parameters?.['ohos.aafwk.param.callerBundleName'] as string; 164df226684Sopenharmony_ci let applicationInfo = await bundleManager.getApplicationInfo( 165df226684Sopenharmony_ci callerBundleName, bundleManager.ApplicationFlag.GET_APPLICATION_INFO_DEFAULT); 166df226684Sopenharmony_ci if (callerToken === applicationInfo.accessTokenId) { 167df226684Sopenharmony_ci resolve(false); 168df226684Sopenharmony_ci } 169df226684Sopenharmony_ci resolve(true); 170df226684Sopenharmony_ci }) 171df226684Sopenharmony_ci} 172df226684Sopenharmony_ci 173df226684Sopenharmony_cilet removeDuplicate = (arr: AuthAccount[], arg: string) => { 174df226684Sopenharmony_ci let map: Map<string, AuthAccount> = new Map(); 175df226684Sopenharmony_ci for (let item of arr) { 176df226684Sopenharmony_ci if (!map.has(item.authAccount)) { 177df226684Sopenharmony_ci map.set(item.authAccount, item); 178df226684Sopenharmony_ci } 179df226684Sopenharmony_ci } 180df226684Sopenharmony_ci return Array.from<AuthAccount>(map.values()); 181df226684Sopenharmony_ci} 182df226684Sopenharmony_ci 183df226684Sopenharmony_ci 184df226684Sopenharmony_cilet calculate = (newValue: Area, allNames: AuthAccount[]) => { 185df226684Sopenharmony_ci let editLength = allNames.length; 186df226684Sopenharmony_ci let screenWidth = Number(newValue['width']); 187df226684Sopenharmony_ci let nameChange = Constants.ENCRYPTION_STAFF_WIDTH_NAME; 188df226684Sopenharmony_ci let rowNamesLen = Math.floor(screenWidth / (nameChange + Constants.ENCRYPTION_ADD_STAFF_MARGIN_RIGHT)); 189df226684Sopenharmony_ci let showNamesArr = editLength > Constants.ENCRYPTION_DOUBLED_NUMBER * rowNamesLen 190df226684Sopenharmony_ci ? allNames.slice(0, 2 * rowNamesLen - 1) 191df226684Sopenharmony_ci : allNames.slice(0, 2 * rowNamesLen); 192df226684Sopenharmony_ci let hideNamesNum = editLength - showNamesArr.length > 0 193df226684Sopenharmony_ci ? String(editLength - showNamesArr.length) 194df226684Sopenharmony_ci : '0'; 195df226684Sopenharmony_ci return { 196df226684Sopenharmony_ci 'rowNamesLen': rowNamesLen, 197df226684Sopenharmony_ci 'showNamesArr': showNamesArr, 198df226684Sopenharmony_ci 'hideNamesNum': hideNamesNum 199df226684Sopenharmony_ci } as Record<string, number | AuthAccount[] | string> 200df226684Sopenharmony_ci} 201df226684Sopenharmony_ci 202df226684Sopenharmony_cilet toggleShow = (allNames: AuthAccount[], showNamesArr: AuthAccount[], editFlag: boolean, rowNamesLen: number) => { 203df226684Sopenharmony_ci if (showNamesArr.length < allNames.length) { 204df226684Sopenharmony_ci let showFlag = !editFlag; 205df226684Sopenharmony_ci let showNamesArr = allNames; 206df226684Sopenharmony_ci return { 207df226684Sopenharmony_ci 'showNamesArr': showNamesArr, 208df226684Sopenharmony_ci 'showFlag': showFlag 209df226684Sopenharmony_ci } as Record<string, AuthAccount[] | boolean>; 210df226684Sopenharmony_ci } else { 211df226684Sopenharmony_ci let showFlag = !editFlag; 212df226684Sopenharmony_ci let showNamesArr = allNames.length > Constants.ENCRYPTION_DOUBLED_NUMBER * rowNamesLen 213df226684Sopenharmony_ci ? allNames.slice(0, Constants.ENCRYPTION_DOUBLED_NUMBER * rowNamesLen - 1) 214df226684Sopenharmony_ci : allNames.slice(0, Constants.ENCRYPTION_DOUBLED_NUMBER * rowNamesLen); 215df226684Sopenharmony_ci return { 216df226684Sopenharmony_ci 'showNamesArr': showNamesArr, 217df226684Sopenharmony_ci 'showFlag': showFlag 218df226684Sopenharmony_ci } as Record<string, AuthAccount[] | boolean>; 219df226684Sopenharmony_ci } 220df226684Sopenharmony_ci} 221df226684Sopenharmony_ci 222df226684Sopenharmony_cifunction directionStatus(func: Callback<number>) { 223df226684Sopenharmony_ci let innerEvent: emitter.InnerEvent = { 224df226684Sopenharmony_ci eventId: Constants.ENCRYPTION_EMIT_DIRECTION_STATUS 225df226684Sopenharmony_ci }; 226df226684Sopenharmony_ci emitter.on(innerEvent, (eventData: emitter.EventData) => { 227df226684Sopenharmony_ci func(eventData.data?.direction); 228df226684Sopenharmony_ci }); 229df226684Sopenharmony_ci} 230df226684Sopenharmony_ci 231df226684Sopenharmony_cifunction getAppId(bundleName: string) { 232df226684Sopenharmony_ci return new Promise<string>(async (resolve, reject) => { 233df226684Sopenharmony_ci let bundleFlags: number = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_SIGNATURE_INFO; 234df226684Sopenharmony_ci let userId = await getUserId(); 235df226684Sopenharmony_ci try { 236df226684Sopenharmony_ci let data = await bundleManager.getBundleInfo(bundleName, bundleFlags, userId); 237df226684Sopenharmony_ci if (data.signatureInfo.appId) { 238df226684Sopenharmony_ci resolve(data.signatureInfo.appId); 239df226684Sopenharmony_ci return; 240df226684Sopenharmony_ci } 241df226684Sopenharmony_ci reject(); 242df226684Sopenharmony_ci } catch (err) { 243df226684Sopenharmony_ci HiLog.error(TAG, `get appId failed: ${JSON.stringify(err)}`); 244df226684Sopenharmony_ci reject(); 245df226684Sopenharmony_ci } 246df226684Sopenharmony_ci }) 247df226684Sopenharmony_ci} 248df226684Sopenharmony_ci 249df226684Sopenharmony_cifunction getTime() { 250df226684Sopenharmony_ci let permanent: boolean | undefined = AppStorage.get('permanent'); 251df226684Sopenharmony_ci if (permanent) { 252df226684Sopenharmony_ci return $r('app.string.permanently'); 253df226684Sopenharmony_ci } 254df226684Sopenharmony_ci let dateTime: number | undefined = AppStorage.get('validity'); 255df226684Sopenharmony_ci if (dateTime !== undefined) { 256df226684Sopenharmony_ci let date = new Date(dateTime); 257df226684Sopenharmony_ci let year = date.getFullYear(); 258df226684Sopenharmony_ci let month = date.getMonth() + 1; 259df226684Sopenharmony_ci let day = date.getDate(); 260df226684Sopenharmony_ci let hour = date.getHours(); 261df226684Sopenharmony_ci let minute = date.getMinutes(); 262df226684Sopenharmony_ci return `${year}/${month}/${day} ${hour}:${minute}`; 263df226684Sopenharmony_ci } else { 264df226684Sopenharmony_ci return ''; 265df226684Sopenharmony_ci } 266df226684Sopenharmony_ci} 267df226684Sopenharmony_ci 268df226684Sopenharmony_ciasync function getFileSizeByUri(uri: string): Promise<number> { 269df226684Sopenharmony_ci let inFile: fs.File | undefined; 270df226684Sopenharmony_ci try { 271df226684Sopenharmony_ci inFile = await fs.open(uri, fs.OpenMode.READ_ONLY); 272df226684Sopenharmony_ci let stat = await fs.stat(inFile.fd); 273df226684Sopenharmony_ci HiLog.info(TAG, `get file info succeed, the size of file is: ${stat.size}`); 274df226684Sopenharmony_ci return stat.size; 275df226684Sopenharmony_ci } catch (err) { 276df226684Sopenharmony_ci HiLog.error(TAG, `open: ${uri}, failed: ${JSON.stringify(err)}`); 277df226684Sopenharmony_ci HiLog.info(TAG, `get file info failed with error message: ${JSON.stringify(err)}`); 278df226684Sopenharmony_ci return -1; 279df226684Sopenharmony_ci } finally { 280df226684Sopenharmony_ci if (inFile) { 281df226684Sopenharmony_ci fs.closeSync(inFile); 282df226684Sopenharmony_ci } 283df226684Sopenharmony_ci } 284df226684Sopenharmony_ci} 285df226684Sopenharmony_ci 286df226684Sopenharmony_cifunction getDLPInfo() { 287df226684Sopenharmony_ci return new Promise<DLPInfo>(async (resolve, reject) => { 288df226684Sopenharmony_ci let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT; 289df226684Sopenharmony_ci try { 290df226684Sopenharmony_ci bundleManager.getBundleInfoForSelf(bundleFlags, (err, data) => { 291df226684Sopenharmony_ci if (err) { 292df226684Sopenharmony_ci HiLog.error(TAG, `getBundleInfoForSelf failed. Cause: ${JSON.stringify(err)}`); 293df226684Sopenharmony_ci reject({name: '', versionCode: ''}); 294df226684Sopenharmony_ci } else { 295df226684Sopenharmony_ci resolve({name: data.name, versionCode: data.versionCode.toString()}); 296df226684Sopenharmony_ci } 297df226684Sopenharmony_ci }); 298df226684Sopenharmony_ci } catch (err) { 299df226684Sopenharmony_ci HiLog.error(TAG, `getBundleInfoForSelf failed. Cause: ${JSON.stringify(err)}`); 300df226684Sopenharmony_ci reject({name: '', versionCode: ''}); 301df226684Sopenharmony_ci } 302df226684Sopenharmony_ci }) 303df226684Sopenharmony_ci} 304df226684Sopenharmony_ci 305df226684Sopenharmony_cifunction sendDlpManagerAccountLogin(errorCode: number) { 306df226684Sopenharmony_ci let event: hiSysEvent.SysEventInfo = { 307df226684Sopenharmony_ci domain: 'DLP_UE', 308df226684Sopenharmony_ci name: 'DLP_MANAGER_ACCOUNT_LOGIN', 309df226684Sopenharmony_ci eventType: hiSysEvent?.EventType?.BEHAVIOR, 310df226684Sopenharmony_ci params: { 311df226684Sopenharmony_ci 'PNAMEID': AppStorage.get('hiPNameId') ?? '', 312df226684Sopenharmony_ci 'PVERSIONID': AppStorage.get('hiPVersionId') ?? '', 313df226684Sopenharmony_ci 'ACCOUNT_TYPE': AppStorage.get('hiAccountType') ?? '', 314df226684Sopenharmony_ci 'ACCOUNT_STATUS': AppStorage.get('hiAccountStatus') ?? -1, 315df226684Sopenharmony_ci 'LOGIN_FAIL_CODE': errorCode ?? -1, 316df226684Sopenharmony_ci 'PKG_NAME': AppStorage.get('hiPkgName') ?? '', 317df226684Sopenharmony_ci } as Record<string, number> 318df226684Sopenharmony_ci }; 319df226684Sopenharmony_ci 320df226684Sopenharmony_ci try { 321df226684Sopenharmony_ci hiSysEvent.write(event); 322df226684Sopenharmony_ci } catch (err) { 323df226684Sopenharmony_ci HiLog.error(TAG, `sendDlpManagerAccountLogin failed`); 324df226684Sopenharmony_ci } 325df226684Sopenharmony_ci} 326df226684Sopenharmony_ci 327df226684Sopenharmony_cifunction sendDlpManagerFileConfiguration() { 328df226684Sopenharmony_ci let event: hiSysEvent.SysEventInfo = { 329df226684Sopenharmony_ci domain: 'DLP_UE', 330df226684Sopenharmony_ci name: 'DLP_MANAGER_FILE_CONFIGURATION', 331df226684Sopenharmony_ci eventType: hiSysEvent?.EventType?.BEHAVIOR, 332df226684Sopenharmony_ci params: { 333df226684Sopenharmony_ci 'PNAMEID': AppStorage.get('hiPNameId') ?? '', 334df226684Sopenharmony_ci 'PVERSIONID': AppStorage.get('hiPVersionId') ?? '', 335df226684Sopenharmony_ci 'OPERATION': AppStorage.get('hiOperation') ?? '', 336df226684Sopenharmony_ci 'READ_SCOPE': AppStorage.get('hiReadScope') ?? '', 337df226684Sopenharmony_ci 'WRITE_SCOPE': AppStorage.get('hiWriteScope') ?? '', 338df226684Sopenharmony_ci 'ADVANCED_SETTINGS': AppStorage.get('hiAdvancedSettings') ?? false, 339df226684Sopenharmony_ci 'STORE_PATH': AppStorage.get('hiStorePath') ?? false, 340df226684Sopenharmony_ci 'ACCOUNT_VERIFY_SUCC': AppStorage.get('hiAccountVerifySucc') ?? -1, 341df226684Sopenharmony_ci 'ACCOUNT_VERIFY_FAIL': AppStorage.get('hiAccountVerifyFail') ?? -1, 342df226684Sopenharmony_ci 'VALID_DATE': AppStorage.get('hiValidDate') ?? false, 343df226684Sopenharmony_ci } as Record<string, number> 344df226684Sopenharmony_ci }; 345df226684Sopenharmony_ci 346df226684Sopenharmony_ci try { 347df226684Sopenharmony_ci hiSysEvent.write(event); 348df226684Sopenharmony_ci } catch (err) { 349df226684Sopenharmony_ci HiLog.error(TAG, `sendDlpManagerFileConfiguration failed`); 350df226684Sopenharmony_ci } 351df226684Sopenharmony_ci} 352df226684Sopenharmony_ci 353df226684Sopenharmony_cifunction sendDlpFileCreateProperties(accountType: number) { 354df226684Sopenharmony_ci let event: hiSysEvent.SysEventInfo = { 355df226684Sopenharmony_ci domain: 'DLP_UE', 356df226684Sopenharmony_ci name: 'DLP_FILE_CREATE_EVENT', 357df226684Sopenharmony_ci eventType: hiSysEvent?.EventType?.BEHAVIOR, 358df226684Sopenharmony_ci params: { 359df226684Sopenharmony_ci 'ACCOUNT_TYPE': accountType, 360df226684Sopenharmony_ci 'PNAMEID': AppStorage.get('hiPNameId') ?? '', 361df226684Sopenharmony_ci 'PVERSIONID': AppStorage.get('hiPVersionId') ?? '', 362df226684Sopenharmony_ci 'CODE': AppStorage.get('hiCode') ?? -1, 363df226684Sopenharmony_ci 'FILE_SIZE': AppStorage.get('hiFileSize') ?? -1, 364df226684Sopenharmony_ci 'FILE_TYPE': AppStorage.get('hiFileType') ?? '', 365df226684Sopenharmony_ci 'POLICY_SIZE_ENC': AppStorage.get('hiPolicySizeEnc') ?? -1, 366df226684Sopenharmony_ci 'PKG_NAME': AppStorage.get('hiPkgName') ?? '', 367df226684Sopenharmony_ci } as Record<string, number> 368df226684Sopenharmony_ci }; 369df226684Sopenharmony_ci 370df226684Sopenharmony_ci try { 371df226684Sopenharmony_ci hiSysEvent.write(event); 372df226684Sopenharmony_ci } catch (err) { 373df226684Sopenharmony_ci HiLog.error(TAG, `sendDlpFileCreateProperties failed`); 374df226684Sopenharmony_ci } 375df226684Sopenharmony_ci} 376df226684Sopenharmony_ci 377df226684Sopenharmony_cifunction sendDlpFileOpenProperties() { 378df226684Sopenharmony_ci let event: hiSysEvent.SysEventInfo = { 379df226684Sopenharmony_ci domain: 'DLP_UE', 380df226684Sopenharmony_ci name: 'DLP_FILE_OPEN_EVENT', 381df226684Sopenharmony_ci eventType: hiSysEvent?.EventType?.BEHAVIOR, 382df226684Sopenharmony_ci params: { 383df226684Sopenharmony_ci 'PNAMEID': AppStorage.get('hiPNameId') ?? '', 384df226684Sopenharmony_ci 'PVERSIONID': AppStorage.get('hiPVersionId') ?? '', 385df226684Sopenharmony_ci 'CODE': AppStorage.get('hiCode') ?? -1, 386df226684Sopenharmony_ci 'SANDBOX_PKGNAME': AppStorage.get('hiSandboxPkgName') ?? '', 387df226684Sopenharmony_ci 'SANDBOX_INDEX': AppStorage.get('hiSandboxIndex') ?? -1, 388df226684Sopenharmony_ci 'ACCOUNT_TYPE': AppStorage.get('hiAccountType') ?? '', 389df226684Sopenharmony_ci 'FILE_SIZE': AppStorage.get('hiFileSize') ?? -1, 390df226684Sopenharmony_ci 'POLICY_SIZE_ENC': AppStorage.get('hiPolicySizeEnc') ?? -1, 391df226684Sopenharmony_ci } as Record<string, number> 392df226684Sopenharmony_ci }; 393df226684Sopenharmony_ci 394df226684Sopenharmony_ci try { 395df226684Sopenharmony_ci hiSysEvent.write(event); 396df226684Sopenharmony_ci } catch (err) { 397df226684Sopenharmony_ci HiLog.error(TAG, `sendDlpFileOpenProperties failed`); 398df226684Sopenharmony_ci } 399df226684Sopenharmony_ci} 400df226684Sopenharmony_ci 401df226684Sopenharmony_cifunction isValidPath(path: string): Boolean { 402df226684Sopenharmony_ci if (path.indexOf('/./') !== -1 || path.indexOf('/../') !== -1) { 403df226684Sopenharmony_ci return false; 404df226684Sopenharmony_ci } 405df226684Sopenharmony_ci return true; 406df226684Sopenharmony_ci} 407df226684Sopenharmony_ci 408df226684Sopenharmony_cifunction getAccountType( 409df226684Sopenharmony_ci context: common.ServiceExtensionContext | common.UIExtensionContext, fd: number): Promise<number> { 410df226684Sopenharmony_ci return new Promise(async (resolve, reject) => { 411df226684Sopenharmony_ci let z = new ArrayBuffer(HEAD_LENGTH_IN_BYTE); 412df226684Sopenharmony_ci let option: ChangeOption = { offset: 0, length: HEAD_LENGTH_IN_BYTE }; 413df226684Sopenharmony_ci let num = fs.readSync(fd, z, option); 414df226684Sopenharmony_ci let buf = new Uint32Array(z, 0, HEAD_LENGTH_IN_U32); 415df226684Sopenharmony_ci if (buf && buf[0] === Constants.DLP_ZIP_MAGIC) { 416df226684Sopenharmony_ci let random = String(Math.random()).substring(Constants.RAND_START, Constants.RAND_END); 417df226684Sopenharmony_ci let filePath = context.filesDir + '/saveAs' + random; 418df226684Sopenharmony_ci let dirPath = context.filesDir + '/saveAsUnzip' + random; 419df226684Sopenharmony_ci let fileName = dirPath + '/dlp_cert'; 420df226684Sopenharmony_ci let ff: fs.File | undefined; 421df226684Sopenharmony_ci try { 422df226684Sopenharmony_ci fs.readSync(fd, z, option); 423df226684Sopenharmony_ci ff = await fs.open(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 424df226684Sopenharmony_ci await fs.copyFile(fd, ff.fd); 425df226684Sopenharmony_ci await fs.mkdir(dirPath); 426df226684Sopenharmony_ci await zlib.decompressFile(filePath, dirPath); 427df226684Sopenharmony_ci let dlpInfo = fs.readTextSync(fileName); 428df226684Sopenharmony_ci let infoArray = dlpInfo.split('accountType'); 429df226684Sopenharmony_ci let type = infoArray[1].slice(Constants.TYPE_START, Constants.TYPE_END); 430df226684Sopenharmony_ci GlobalContext.store('accountType', Number(type)); 431df226684Sopenharmony_ci resolve(Number(type)); 432df226684Sopenharmony_ci } catch (err) { 433df226684Sopenharmony_ci HiLog.error(TAG, `decompressFile: ${JSON.stringify(err)}`); 434df226684Sopenharmony_ci reject(); 435df226684Sopenharmony_ci } finally { 436df226684Sopenharmony_ci closeFile(ff); 437df226684Sopenharmony_ci deleteFile(filePath); 438df226684Sopenharmony_ci removeDir(dirPath); 439df226684Sopenharmony_ci } 440df226684Sopenharmony_ci } else { 441df226684Sopenharmony_ci let cert = new ArrayBuffer(buf[CERT_SIZE]); 442df226684Sopenharmony_ci option = { offset: buf[CERT_OFFSET], length: buf[CERT_SIZE] }; 443df226684Sopenharmony_ci num = fs.readSync(fd, cert, option); 444df226684Sopenharmony_ci try { 445df226684Sopenharmony_ci let textDecoder: util.TextDecoder = util.TextDecoder.create('utf-8'); 446df226684Sopenharmony_ci let fdString: string = textDecoder.decodeWithStream(new Uint8Array(cert), { stream: false }); 447df226684Sopenharmony_ci let infoArray = fdString.split('accountType'); 448df226684Sopenharmony_ci let type = infoArray[1].slice(Constants.TYPE_START, Constants.TYPE_END); 449df226684Sopenharmony_ci GlobalContext.store('accountType', Number(type)); 450df226684Sopenharmony_ci resolve(Number(type)); 451df226684Sopenharmony_ci } catch (err) { 452df226684Sopenharmony_ci HiLog.error(TAG, `getStringFromFd error: ${JSON.stringify(err)}`); 453df226684Sopenharmony_ci reject(); 454df226684Sopenharmony_ci } 455df226684Sopenharmony_ci } 456df226684Sopenharmony_ci }) 457df226684Sopenharmony_ci} 458df226684Sopenharmony_ci 459df226684Sopenharmony_cifunction closeFile(file: fs.File | undefined) { 460df226684Sopenharmony_ci try { 461df226684Sopenharmony_ci if (file) { 462df226684Sopenharmony_ci fs.closeSync(file); 463df226684Sopenharmony_ci } 464df226684Sopenharmony_ci } catch (err) { 465df226684Sopenharmony_ci HiLog.error(TAG, `closeSync: ${JSON.stringify(err)}`); 466df226684Sopenharmony_ci } 467df226684Sopenharmony_ci} 468df226684Sopenharmony_ci 469df226684Sopenharmony_cifunction deleteFile(file: string) { 470df226684Sopenharmony_ci try { 471df226684Sopenharmony_ci let res = fs.accessSync(file); 472df226684Sopenharmony_ci if (res) { 473df226684Sopenharmony_ci fs.unlinkSync(file); 474df226684Sopenharmony_ci } 475df226684Sopenharmony_ci } catch (err) { 476df226684Sopenharmony_ci HiLog.error(TAG, `deleteFile: ${JSON.stringify(err)}`); 477df226684Sopenharmony_ci } 478df226684Sopenharmony_ci} 479df226684Sopenharmony_ci 480df226684Sopenharmony_cifunction removeDir(file: string) { 481df226684Sopenharmony_ci try { 482df226684Sopenharmony_ci let res = fs.accessSync(file); 483df226684Sopenharmony_ci if (res) { 484df226684Sopenharmony_ci fs.rmdirSync(file); 485df226684Sopenharmony_ci } 486df226684Sopenharmony_ci } catch (err) { 487df226684Sopenharmony_ci HiLog.error(TAG, `rmdirSync: ${JSON.stringify(err)}`); 488df226684Sopenharmony_ci } 489df226684Sopenharmony_ci} 490df226684Sopenharmony_ci 491df226684Sopenharmony_cifunction checkNetworkStatus(): Promise<void> { 492df226684Sopenharmony_ci return new Promise((resolve, reject) => { 493df226684Sopenharmony_ci let netHandle = connection.getDefaultNetSync(); 494df226684Sopenharmony_ci connection.getNetCapabilities(netHandle, (error: BusinessError, data: connection.NetCapabilities) => { 495df226684Sopenharmony_ci if (error) { 496df226684Sopenharmony_ci HiLog.error(TAG, `checkNetworkStatus failed: ${JSON.stringify(error)}`); 497df226684Sopenharmony_ci reject(); 498df226684Sopenharmony_ci return; 499df226684Sopenharmony_ci }; 500df226684Sopenharmony_ci HiLog.info(TAG, `network Succeeded to get data: ${JSON.stringify(data)}`); 501df226684Sopenharmony_ci const result = [connection.NetCap.NET_CAPABILITY_INTERNET, connection.NetCap.NET_CAPABILITY_VALIDATED] 502df226684Sopenharmony_ci .every(element => data.networkCap?.includes(element)); 503df226684Sopenharmony_ci if (result) { 504df226684Sopenharmony_ci resolve(); 505df226684Sopenharmony_ci return; 506df226684Sopenharmony_ci } 507df226684Sopenharmony_ci reject(); 508df226684Sopenharmony_ci }) 509df226684Sopenharmony_ci }) 510df226684Sopenharmony_ci} 511df226684Sopenharmony_ci 512df226684Sopenharmony_ciexport { 513df226684Sopenharmony_ci AuthAccount, 514df226684Sopenharmony_ci PermissionType, 515df226684Sopenharmony_ci getOsAccountInfo, 516df226684Sopenharmony_ci checkDomainAccountInfo, 517df226684Sopenharmony_ci getUserId, 518df226684Sopenharmony_ci getAuthPerm, 519df226684Sopenharmony_ci terminateSelfWithResult, 520df226684Sopenharmony_ci judgeIsSandBox, 521df226684Sopenharmony_ci getFileFd, 522df226684Sopenharmony_ci getFileUriByPath, 523df226684Sopenharmony_ci removeDuplicate, 524df226684Sopenharmony_ci calculate, 525df226684Sopenharmony_ci toggleShow, 526df226684Sopenharmony_ci directionStatus, 527df226684Sopenharmony_ci getAppId, 528df226684Sopenharmony_ci getTime, 529df226684Sopenharmony_ci getFileSizeByUri, 530df226684Sopenharmony_ci getDLPInfo, 531df226684Sopenharmony_ci sendDlpManagerAccountLogin, 532df226684Sopenharmony_ci sendDlpManagerFileConfiguration, 533df226684Sopenharmony_ci sendDlpFileCreateProperties, 534df226684Sopenharmony_ci sendDlpFileOpenProperties, 535df226684Sopenharmony_ci DLPInfo, 536df226684Sopenharmony_ci isValidPath, 537df226684Sopenharmony_ci defaultDlpFile, 538df226684Sopenharmony_ci getAccountType, 539df226684Sopenharmony_ci checkNetworkStatus 540df226684Sopenharmony_ci}; 541