1df226684Sopenharmony_ci/* 2df226684Sopenharmony_ci * Copyright (c) 2023-2024 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 UIExtensionAbility from '@ohos.app.ability.UIExtensionAbility'; 18df226684Sopenharmony_ciimport dlpPermission from '@ohos.dlpPermission'; 19df226684Sopenharmony_ciimport emitter from '@ohos.events.emitter'; 20df226684Sopenharmony_ciimport Want from '@ohos.app.ability.Want'; 21df226684Sopenharmony_ciimport { BusinessError } from '@ohos.base'; 22df226684Sopenharmony_ciimport osAccount from '@ohos.account.osAccount'; 23df226684Sopenharmony_ciimport { Configuration } from '@ohos.app.ability.Configuration'; 24df226684Sopenharmony_ciimport Constants from '../common/constant'; 25df226684Sopenharmony_ciimport { 26df226684Sopenharmony_ci getAuthPerm, 27df226684Sopenharmony_ci checkDomainAccountInfo, 28df226684Sopenharmony_ci getOsAccountInfo, 29df226684Sopenharmony_ci judgeIsSandBox, 30df226684Sopenharmony_ci getFileFd, 31df226684Sopenharmony_ci getAppId, 32df226684Sopenharmony_ci DLPInfo, 33df226684Sopenharmony_ci getDLPInfo, 34df226684Sopenharmony_ci sendDlpManagerAccountLogin, 35df226684Sopenharmony_ci isValidPath, 36df226684Sopenharmony_ci getAccountType 37df226684Sopenharmony_ci} from '../common/utils'; 38df226684Sopenharmony_ciimport GlobalContext from '../common/GlobalContext'; 39df226684Sopenharmony_ciimport HomeFeature from '../feature/HomeFeature'; 40df226684Sopenharmony_ciimport { AccountTipsConfig } from '../common/AccountTipsConfig'; 41df226684Sopenharmony_ciimport common from '@ohos.app.ability.common'; 42df226684Sopenharmony_ciimport { GetAlertMessage } from '../common/GetAlertMessage'; 43df226684Sopenharmony_ciimport { HiLog } from '../common/HiLog'; 44df226684Sopenharmony_ciimport FileUtils from '../common/FileUtils'; 45df226684Sopenharmony_ciimport AccountManager from '../manager/AccountManager'; 46df226684Sopenharmony_ci 47df226684Sopenharmony_ciconst TAG = 'MainEx'; 48df226684Sopenharmony_ci 49df226684Sopenharmony_cilet direction: number = -1; 50df226684Sopenharmony_ci 51df226684Sopenharmony_ciexport default class MainAbility extends UIExtensionAbility { 52df226684Sopenharmony_ci private authPerm: dlpPermission.DLPFileAccess = dlpPermission.DLPFileAccess.READ_ONLY; 53df226684Sopenharmony_ci private callerToken: number = 0; 54df226684Sopenharmony_ci private homeFeature!: HomeFeature; 55df226684Sopenharmony_ci 56df226684Sopenharmony_ci async onSessionCreate(want: Want, session: UIExtensionContentSession): Promise<void> { 57df226684Sopenharmony_ci HiLog.info(TAG, `onSessionCreate start`); 58df226684Sopenharmony_ci if (GlobalContext.load('session')) { 59df226684Sopenharmony_ci this.gotoAlertPage(session, { code: Constants.ERR_JS_APP_ENCRYPTING, 60df226684Sopenharmony_ci data: GlobalContext.load('abilityWant').parameters?.displayName 61df226684Sopenharmony_ci } as BusinessError); 62df226684Sopenharmony_ci return; 63df226684Sopenharmony_ci } 64df226684Sopenharmony_ci GlobalContext.store('session', session); 65df226684Sopenharmony_ci let dlpInfo:DLPInfo = await getDLPInfo(); 66df226684Sopenharmony_ci AppStorage.setOrCreate('hiPNameId', dlpInfo.name); 67df226684Sopenharmony_ci AppStorage.setOrCreate('hiPVersionId', dlpInfo.versionCode); 68df226684Sopenharmony_ci GlobalContext.store('abilityWant', want); 69df226684Sopenharmony_ci GlobalContext.store('uri', want.uri ?? ''); 70df226684Sopenharmony_ci direction = this.context.config.direction ?? -1; 71df226684Sopenharmony_ci 72df226684Sopenharmony_ci this.homeFeature = new HomeFeature(this.context); 73df226684Sopenharmony_ci GlobalContext.store('homeFeature', this.homeFeature); 74df226684Sopenharmony_ci 75df226684Sopenharmony_ci this.homeFeature.connectServiceExtAbility(()=>{ 76df226684Sopenharmony_ci this.getNewWantPage(want, session); 77df226684Sopenharmony_ci }); 78df226684Sopenharmony_ci 79df226684Sopenharmony_ci AccountManager.connectAbility(this.context); 80df226684Sopenharmony_ci } 81df226684Sopenharmony_ci 82df226684Sopenharmony_ci onConfigurationUpdate(newConfig: Configuration): void { 83df226684Sopenharmony_ci if (direction !== newConfig.direction) { 84df226684Sopenharmony_ci direction = newConfig.direction ?? -1; 85df226684Sopenharmony_ci } 86df226684Sopenharmony_ci let eventData: emitter.EventData = { 87df226684Sopenharmony_ci data: { 88df226684Sopenharmony_ci 'direction': direction, 89df226684Sopenharmony_ci }}; 90df226684Sopenharmony_ci let innerEvent: emitter.InnerEvent = { 91df226684Sopenharmony_ci eventId: Constants.ENCRYPTION_EMIT_DIRECTION_STATUS, 92df226684Sopenharmony_ci priority: emitter.EventPriority.HIGH 93df226684Sopenharmony_ci }; 94df226684Sopenharmony_ci emitter.emit(innerEvent, eventData); 95df226684Sopenharmony_ci } 96df226684Sopenharmony_ci 97df226684Sopenharmony_ci onSessionDestroy(session: UIExtensionContentSession): void { 98df226684Sopenharmony_ci HiLog.info(TAG, `onSessionDestroy`); 99df226684Sopenharmony_ci if (session !== GlobalContext.load('session')) { 100df226684Sopenharmony_ci return; 101df226684Sopenharmony_ci } 102df226684Sopenharmony_ci if (!(GlobalContext.load('requestIsFromSandBox') as boolean)) { 103df226684Sopenharmony_ci this.homeFeature.closeDLPFileHome(GlobalContext.load('uri'), (err: number) => { 104df226684Sopenharmony_ci if (err !== 0) { 105df226684Sopenharmony_ci HiLog.error(TAG, `closeDLPFile failed: ${err}`); 106df226684Sopenharmony_ci } 107df226684Sopenharmony_ci }); 108df226684Sopenharmony_ci } 109df226684Sopenharmony_ci GlobalContext.store('session', ''); 110df226684Sopenharmony_ci } 111df226684Sopenharmony_ci 112df226684Sopenharmony_ci async gotoPage(session: UIExtensionContentSession): Promise<void> { 113df226684Sopenharmony_ci let accountInfo: osAccount.OsAccountInfo = GlobalContext.load('accountInfo'); 114df226684Sopenharmony_ci let accountName: string = accountInfo.domainInfo.accountName; 115df226684Sopenharmony_ci this.authPerm = getAuthPerm(accountName, GlobalContext.load('dlpProperty')); 116df226684Sopenharmony_ci 117df226684Sopenharmony_ci AppStorage.setOrCreate('authPerm', this.authPerm); 118df226684Sopenharmony_ci AppStorage.setOrCreate<string>('contactAccount', GlobalContext.load('dlpProperty').contactAccount); 119df226684Sopenharmony_ci AppStorage.setOrCreate('validity', GlobalContext.load('dlpProperty').expireTime) 120df226684Sopenharmony_ci if (this.authPerm < dlpPermission.DLPFileAccess.READ_ONLY || 121df226684Sopenharmony_ci this.authPerm > dlpPermission.DLPFileAccess.FULL_CONTROL) { 122df226684Sopenharmony_ci this.gotoAlertPage(session, { code: Constants.ERR_JS_APP_INSIDE_ERROR } as BusinessError); 123df226684Sopenharmony_ci return; 124df226684Sopenharmony_ci } 125df226684Sopenharmony_ci if (this.authPerm === dlpPermission.DLPFileAccess.FULL_CONTROL) { 126df226684Sopenharmony_ci try { 127df226684Sopenharmony_ci await this.checkValidEnterpriseAndAccount(session); 128df226684Sopenharmony_ci } catch { 129df226684Sopenharmony_ci return; 130df226684Sopenharmony_ci } 131df226684Sopenharmony_ci 132df226684Sopenharmony_ci let storage: LocalStorage = new LocalStorage({ 133df226684Sopenharmony_ci 'session': session, 134df226684Sopenharmony_ci } as Record<string, UIExtensionContentSession | string>); 135df226684Sopenharmony_ci try { 136df226684Sopenharmony_ci session.loadContent('pages/changeEncryption', storage); 137df226684Sopenharmony_ci session.setWindowBackgroundColor(Constants.TRANSPARENT_BACKGROUND_COLOR); 138df226684Sopenharmony_ci } catch (exception) { 139df226684Sopenharmony_ci HiLog.error(TAG, `Failed to set the background color. Cause: ${JSON.stringify(exception)}`); 140df226684Sopenharmony_ci } 141df226684Sopenharmony_ci } else { 142df226684Sopenharmony_ci let storage: LocalStorage = new LocalStorage({ 143df226684Sopenharmony_ci 'session': session, 144df226684Sopenharmony_ci } as Record<string, UIExtensionContentSession | string>); 145df226684Sopenharmony_ci try { 146df226684Sopenharmony_ci session.loadContent('pages/permissionStatus', storage); 147df226684Sopenharmony_ci session.setWindowBackgroundColor(Constants.TRANSPARENT_BACKGROUND_COLOR); 148df226684Sopenharmony_ci } catch (exception) { 149df226684Sopenharmony_ci HiLog.error(TAG, `Failed to set the background color. Cause: ${JSON.stringify(exception)}`); 150df226684Sopenharmony_ci } 151df226684Sopenharmony_ci } 152df226684Sopenharmony_ci } 153df226684Sopenharmony_ci 154df226684Sopenharmony_ci async checkValidWant(want: Want): Promise<boolean> { 155df226684Sopenharmony_ci let parameters = want.parameters; 156df226684Sopenharmony_ci if (parameters === undefined) { 157df226684Sopenharmony_ci HiLog.error(TAG, `need parameters in want`); 158df226684Sopenharmony_ci return false; 159df226684Sopenharmony_ci } 160df226684Sopenharmony_ci if (parameters.fileName === undefined) { 161df226684Sopenharmony_ci HiLog.error(TAG, `need fileName in want.parameters`); 162df226684Sopenharmony_ci return false; 163df226684Sopenharmony_ci } 164df226684Sopenharmony_ci if ((parameters.fileName as Record<string, string>).name === undefined) { 165df226684Sopenharmony_ci HiLog.error(TAG, `need name in want.parameters.fileName`); 166df226684Sopenharmony_ci return false; 167df226684Sopenharmony_ci } 168df226684Sopenharmony_ci if (want.uri === undefined) { 169df226684Sopenharmony_ci HiLog.error(TAG, `need uri in want`); 170df226684Sopenharmony_ci return false; 171df226684Sopenharmony_ci } 172df226684Sopenharmony_ci this.callerToken = parameters['ohos.aafwk.param.callerToken'] as number; 173df226684Sopenharmony_ci let callerBundleName: string = parameters['ohos.aafwk.param.callerBundleName'] as string; 174df226684Sopenharmony_ci if (this.callerToken === undefined || callerBundleName === undefined) { 175df226684Sopenharmony_ci HiLog.error(TAG, `need caller info in want.parameters`); 176df226684Sopenharmony_ci return false; 177df226684Sopenharmony_ci } 178df226684Sopenharmony_ci AppStorage.setOrCreate('hiPkgName', callerBundleName); 179df226684Sopenharmony_ci let uri = String(want.uri); 180df226684Sopenharmony_ci if (!isValidPath(uri)) { 181df226684Sopenharmony_ci HiLog.error(TAG, `invalid uri in want.uri`); 182df226684Sopenharmony_ci return false; 183df226684Sopenharmony_ci } 184df226684Sopenharmony_ci try { 185df226684Sopenharmony_ci await new Promise<void>((resolve, reject) => { 186df226684Sopenharmony_ci this.homeFeature.linkSetHome(uri, (err: number) => { 187df226684Sopenharmony_ci if (err === 0) { 188df226684Sopenharmony_ci HiLog.error(TAG, `invalid uri for opened link uri`); 189df226684Sopenharmony_ci reject(); 190df226684Sopenharmony_ci } 191df226684Sopenharmony_ci resolve(); 192df226684Sopenharmony_ci }) 193df226684Sopenharmony_ci }) 194df226684Sopenharmony_ci } catch { 195df226684Sopenharmony_ci return false; 196df226684Sopenharmony_ci } 197df226684Sopenharmony_ci 198df226684Sopenharmony_ci if (uri.indexOf(Constants.FUSE_PATH) !== -1) { 199df226684Sopenharmony_ci HiLog.error(TAG, `invalid uri in want.uri`); 200df226684Sopenharmony_ci return false; 201df226684Sopenharmony_ci } 202df226684Sopenharmony_ci return true; 203df226684Sopenharmony_ci } 204df226684Sopenharmony_ci 205df226684Sopenharmony_ci async checkValidEnterpriseAndAccount(session: UIExtensionContentSession): Promise<void> { 206df226684Sopenharmony_ci return new Promise(async (resolve, reject) => { 207df226684Sopenharmony_ci let accountInfo: osAccount.OsAccountInfo = GlobalContext.load('accountInfo'); 208df226684Sopenharmony_ci AccountTipsConfig.getAccountInfo(accountInfo.domainInfo.accountName) 209df226684Sopenharmony_ci .then(() => { 210df226684Sopenharmony_ci resolve(); 211df226684Sopenharmony_ci }) 212df226684Sopenharmony_ci .catch(async (error: BusinessError) => { 213df226684Sopenharmony_ci this.gotoAlertPage(session, error); 214df226684Sopenharmony_ci reject(); 215df226684Sopenharmony_ci return; 216df226684Sopenharmony_ci }) 217df226684Sopenharmony_ci }) 218df226684Sopenharmony_ci } 219df226684Sopenharmony_ci 220df226684Sopenharmony_ci async checkValidWantAndAccount(session: UIExtensionContentSession, want: Want): Promise<void> { 221df226684Sopenharmony_ci return new Promise(async (resolve, reject) => { 222df226684Sopenharmony_ci if (!this.checkValidWant(want)) { 223df226684Sopenharmony_ci this.gotoAlertPage(session, { code: Constants.ERR_JS_APP_PARAM_ERROR } as BusinessError); 224df226684Sopenharmony_ci reject(); 225df226684Sopenharmony_ci return; 226df226684Sopenharmony_ci } 227df226684Sopenharmony_ci let accountInfo: osAccount.OsAccountInfo; 228df226684Sopenharmony_ci try { 229df226684Sopenharmony_ci accountInfo = await getOsAccountInfo(); 230df226684Sopenharmony_ci GlobalContext.store('accountInfo', accountInfo); 231df226684Sopenharmony_ci AppStorage.setOrCreate('accountDomain', accountInfo.domainInfo.domain); 232df226684Sopenharmony_ci resolve(); 233df226684Sopenharmony_ci } catch (err) { 234df226684Sopenharmony_ci HiLog.error(TAG, `getOsAccountInfo failed: ${JSON.stringify(err)}`); 235df226684Sopenharmony_ci this.gotoAlertPage(session, { code: Constants.ERR_JS_GET_ACCOUNT_ERROR } as BusinessError); 236df226684Sopenharmony_ci reject(); 237df226684Sopenharmony_ci return; 238df226684Sopenharmony_ci } 239df226684Sopenharmony_ci }) 240df226684Sopenharmony_ci } 241df226684Sopenharmony_ci 242df226684Sopenharmony_ci async getNewWantPage(want: Want, session: UIExtensionContentSession): Promise<void> { 243df226684Sopenharmony_ci HiLog.info(TAG, `getNewWantPage start`); 244df226684Sopenharmony_ci try { 245df226684Sopenharmony_ci await this.checkValidWantAndAccount(session, want) 246df226684Sopenharmony_ci } catch { 247df226684Sopenharmony_ci return; 248df226684Sopenharmony_ci } 249df226684Sopenharmony_ci let codeMessage = checkDomainAccountInfo(GlobalContext.load('accountInfo')); 250df226684Sopenharmony_ci sendDlpManagerAccountLogin(0); 251df226684Sopenharmony_ci if (codeMessage) { 252df226684Sopenharmony_ci this.gotoAlertPage(session, { code: codeMessage } as BusinessError); 253df226684Sopenharmony_ci return; 254df226684Sopenharmony_ci } 255df226684Sopenharmony_ci let requestIsFromSandBox: boolean = await judgeIsSandBox(want); 256df226684Sopenharmony_ci GlobalContext.store('requestIsFromSandBox', requestIsFromSandBox); 257df226684Sopenharmony_ci HiLog.info(TAG, `request is from sandbox: ${requestIsFromSandBox}`); 258df226684Sopenharmony_ci if (requestIsFromSandBox) { 259df226684Sopenharmony_ci this.requestIsFromSandBox(session, want); 260df226684Sopenharmony_ci } else { 261df226684Sopenharmony_ci this.requestIsNotFromSandBox(session, want); 262df226684Sopenharmony_ci } 263df226684Sopenharmony_ci } 264df226684Sopenharmony_ci 265df226684Sopenharmony_ci requestIsFromSandBox(session: UIExtensionContentSession, want: Want): void { 266df226684Sopenharmony_ci const linkFileName: string = (want.parameters?.linkFileName as Record<string, string>)?.name; 267df226684Sopenharmony_ci this.homeFeature.sandBoxLinkFileHome(linkFileName, this.callerToken, 268df226684Sopenharmony_ci (err: number, data: dlpPermission.DLPProperty, uri: string) => { 269df226684Sopenharmony_ci if (err !== 0) { 270df226684Sopenharmony_ci return; 271df226684Sopenharmony_ci } 272df226684Sopenharmony_ci let dlpFileName: string = (want.parameters?.fileName as Record<string, string>)?.name; 273df226684Sopenharmony_ci GlobalContext.store('dlpFileName', dlpFileName); 274df226684Sopenharmony_ci GlobalContext.store('linkFileName', linkFileName); 275df226684Sopenharmony_ci GlobalContext.store('dlpProperty', data); 276df226684Sopenharmony_ci GlobalContext.store('uri', uri ?? ''); 277df226684Sopenharmony_ci AppStorage.setOrCreate('permanent', data.expireTime === 0); 278df226684Sopenharmony_ci if (data.expireTime !== 0) { 279df226684Sopenharmony_ci AppStorage.setOrCreate('validity', new Date(data.expireTime as number)); 280df226684Sopenharmony_ci } 281df226684Sopenharmony_ci this.gotoPage(session); 282df226684Sopenharmony_ci }); 283df226684Sopenharmony_ci } 284df226684Sopenharmony_ci 285df226684Sopenharmony_ci async requestIsNotFromSandBox(session: UIExtensionContentSession, want: Want): Promise<void> { 286df226684Sopenharmony_ci let fileName: string = (want.parameters?.fileName as Record<string, string>)?.name; 287df226684Sopenharmony_ci let isDlpSuffix: boolean = false; 288df226684Sopenharmony_ci try { 289df226684Sopenharmony_ci isDlpSuffix = await FileUtils.isDLPFile(GlobalContext.load('uri')); 290df226684Sopenharmony_ci } catch { 291df226684Sopenharmony_ci this.gotoAlertPage(session, { code: Constants.ERR_JS_APP_INSIDE_ERROR } as BusinessError); 292df226684Sopenharmony_ci return; 293df226684Sopenharmony_ci } 294df226684Sopenharmony_ci HiLog.info(TAG, `isDlpSuffix: ${isDlpSuffix}`); 295df226684Sopenharmony_ci if (!isDlpSuffix) { 296df226684Sopenharmony_ci HiLog.info(TAG, `${fileName} is not a dlp file`); 297df226684Sopenharmony_ci GlobalContext.store('originFileName', fileName); 298df226684Sopenharmony_ci GlobalContext.store('originFd', getFileFd(GlobalContext.load('uri') as string)); 299df226684Sopenharmony_ci let storage: LocalStorage = new LocalStorage({ 300df226684Sopenharmony_ci 'session': session, 301df226684Sopenharmony_ci } as Record<string, UIExtensionContentSession | string>); 302df226684Sopenharmony_ci try { 303df226684Sopenharmony_ci session.loadContent('pages/encryptionProtection', storage); 304df226684Sopenharmony_ci session.setWindowBackgroundColor(Constants.TRANSPARENT_BACKGROUND_COLOR); 305df226684Sopenharmony_ci } catch (exception) { 306df226684Sopenharmony_ci HiLog.error(TAG, `Failed to set the background color. Cause: ${JSON.stringify(exception)}`); 307df226684Sopenharmony_ci } 308df226684Sopenharmony_ci return; 309df226684Sopenharmony_ci } else { 310df226684Sopenharmony_ci try { 311df226684Sopenharmony_ci let dlpFd = getFileFd(String(want.uri)); 312df226684Sopenharmony_ci let accountType = await getAccountType(this.context, dlpFd); 313df226684Sopenharmony_ci if (accountType === dlpPermission.AccountType.DOMAIN_ACCOUNT) { 314df226684Sopenharmony_ci this.dlpFilesToEncrypt(session, want); 315df226684Sopenharmony_ci } else { 316df226684Sopenharmony_ci await GetAlertMessage.phoneHandle(this.context, { 317df226684Sopenharmony_ci code: Constants.ERR_JS_APP_CANNOT_OPEN } as BusinessError); 318df226684Sopenharmony_ci } 319df226684Sopenharmony_ci } catch { 320df226684Sopenharmony_ci return; 321df226684Sopenharmony_ci } 322df226684Sopenharmony_ci } 323df226684Sopenharmony_ci } 324df226684Sopenharmony_ci 325df226684Sopenharmony_ci async dlpFilesToEncrypt(session: UIExtensionContentSession, want: Want): Promise<void> { 326df226684Sopenharmony_ci let uri: string = GlobalContext.load('uri') as string; 327df226684Sopenharmony_ci try { 328df226684Sopenharmony_ci await this.findFileOpenHistoryHome(uri, session); 329df226684Sopenharmony_ci } catch { 330df226684Sopenharmony_ci return; 331df226684Sopenharmony_ci } 332df226684Sopenharmony_ci let dlpFileName: string = (want.parameters?.fileName as Record<string, string>)?.name; 333df226684Sopenharmony_ci GlobalContext.store('dlpFileName', dlpFileName); 334df226684Sopenharmony_ci let callerAppId: string; 335df226684Sopenharmony_ci try { 336df226684Sopenharmony_ci let callerBundleName = Constants.DLP_MANAGER_BUNDLE_NAME; 337df226684Sopenharmony_ci callerAppId = await getAppId(callerBundleName); 338df226684Sopenharmony_ci HiLog.info(TAG, `get AppId: ${callerAppId}`); 339df226684Sopenharmony_ci } catch { 340df226684Sopenharmony_ci HiLog.info(TAG, `get AppId failed`); 341df226684Sopenharmony_ci return; 342df226684Sopenharmony_ci } 343df226684Sopenharmony_ci this.homeFeature.openDlpFileHome(uri, callerAppId, 344df226684Sopenharmony_ci async (err: number, data: dlpPermission.DLPProperty, msg: string) => { 345df226684Sopenharmony_ci if (err !== 0) { 346df226684Sopenharmony_ci let ansErr: BusinessError<void> = { 347df226684Sopenharmony_ci code: err, 348df226684Sopenharmony_ci name: '', 349df226684Sopenharmony_ci message: msg, 350df226684Sopenharmony_ci } 351df226684Sopenharmony_ci let accountFlag: boolean = true; 352df226684Sopenharmony_ci if (err === Constants.ERR_JS_USER_NO_PERMISSION) { 353df226684Sopenharmony_ci let accountName: string = msg.split(', contact:')?.[1]; 354df226684Sopenharmony_ci accountFlag = await GetAlertMessage.checkAccountInfo(accountName); 355df226684Sopenharmony_ci } 356df226684Sopenharmony_ci if (!accountFlag) { 357df226684Sopenharmony_ci this.gotoAlertPage(session, { code: Constants.ERR_JS_APP_INSIDE_ERROR } as BusinessError); 358df226684Sopenharmony_ci return; 359df226684Sopenharmony_ci } 360df226684Sopenharmony_ci this.gotoAlertPage(session, ansErr as BusinessError); 361df226684Sopenharmony_ci return; 362df226684Sopenharmony_ci } else { 363df226684Sopenharmony_ci this.getOwnerAccountTypeInfo(data, session); 364df226684Sopenharmony_ci } 365df226684Sopenharmony_ci }) 366df226684Sopenharmony_ci } 367df226684Sopenharmony_ci 368df226684Sopenharmony_ci async getOwnerAccountTypeInfo(data: dlpPermission.DLPProperty, session: UIExtensionContentSession) { 369df226684Sopenharmony_ci GlobalContext.store('dlpProperty', data); 370df226684Sopenharmony_ci AppStorage.setOrCreate('permanent', data.expireTime === 0); 371df226684Sopenharmony_ci if (data.expireTime !== 0) { 372df226684Sopenharmony_ci AppStorage.setOrCreate('validity', new Date(data.expireTime as number)); 373df226684Sopenharmony_ci } 374df226684Sopenharmony_ci if (data.ownerAccountType === dlpPermission.AccountType.DOMAIN_ACCOUNT) { 375df226684Sopenharmony_ci this.gotoPage(session); 376df226684Sopenharmony_ci } else { 377df226684Sopenharmony_ci this.gotoAlertPage(session, { code: Constants.ERR_JS_APP_INSIDE_ERROR } as BusinessError); 378df226684Sopenharmony_ci } 379df226684Sopenharmony_ci } 380df226684Sopenharmony_ci 381df226684Sopenharmony_ci findFileOpenHistoryHome(uri: string, session: UIExtensionContentSession): Promise<void> { 382df226684Sopenharmony_ci return new Promise<void>((resolve, reject) => { 383df226684Sopenharmony_ci this.homeFeature.fileOpenHistoryHome(uri, async (err: number) => { 384df226684Sopenharmony_ci if (err === 0) { 385df226684Sopenharmony_ci this.gotoAlertPage(session, { code: Constants.ERR_JS_APP_OPEN_REJECTED } as BusinessError); 386df226684Sopenharmony_ci reject(); 387df226684Sopenharmony_ci } 388df226684Sopenharmony_ci resolve(); 389df226684Sopenharmony_ci }) 390df226684Sopenharmony_ci }) 391df226684Sopenharmony_ci } 392df226684Sopenharmony_ci 393df226684Sopenharmony_ci gotoAlertPage(session: UIExtensionContentSession, error: BusinessError) { 394df226684Sopenharmony_ci let storage: LocalStorage = new LocalStorage({ 395df226684Sopenharmony_ci 'session': session, 396df226684Sopenharmony_ci 'error': error 397df226684Sopenharmony_ci } as Record<string, UIExtensionContentSession | string | object>); 398df226684Sopenharmony_ci try { 399df226684Sopenharmony_ci session.loadContent('pages/alert', storage); 400df226684Sopenharmony_ci session.setWindowBackgroundColor(Constants.TRANSPARENT_BACKGROUND_COLOR); 401df226684Sopenharmony_ci } catch (exception) { 402df226684Sopenharmony_ci HiLog.error(TAG, `Failed to set the background color. Cause: ${JSON.stringify(exception)}`); 403df226684Sopenharmony_ci } 404df226684Sopenharmony_ci } 405df226684Sopenharmony_ci 406df226684Sopenharmony_ci onWindowStageDestroy(): void { 407df226684Sopenharmony_ci HiLog.info(TAG, `onWindowStageDestroy`); 408df226684Sopenharmony_ci } 409df226684Sopenharmony_ci 410df226684Sopenharmony_ci onForeground(): void { 411df226684Sopenharmony_ci HiLog.info(TAG, `onForeground`); 412df226684Sopenharmony_ci } 413df226684Sopenharmony_ci 414df226684Sopenharmony_ci onBackground() { 415df226684Sopenharmony_ci HiLog.info(TAG, `onBackground`); 416df226684Sopenharmony_ci } 417df226684Sopenharmony_ci}; 418