161847f8eSopenharmony_ci/*
261847f8eSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
361847f8eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
461847f8eSopenharmony_ci * you may not use this file except in compliance with the License.
561847f8eSopenharmony_ci * You may obtain a copy of the License at
661847f8eSopenharmony_ci *
761847f8eSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
861847f8eSopenharmony_ci *
961847f8eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1061847f8eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1161847f8eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1261847f8eSopenharmony_ci * See the License for the specific language governing permissions and
1361847f8eSopenharmony_ci * limitations under the License.
1461847f8eSopenharmony_ci */
1561847f8eSopenharmony_ci
1661847f8eSopenharmony_ciconst fs = require('fs');
1761847f8eSopenharmony_ciconst path = require('path');
1861847f8eSopenharmony_ciconst urlPrefix = 'https://gitee.com/openharmony/utils_system_resources/raw/';
1961847f8eSopenharmony_ciconst urlSuffix = '/systemres/main/config.json';
2061847f8eSopenharmony_ci
2161847f8eSopenharmony_ciexports.checkJSDoc = function (node, sourceFile, fileName) {
2261847f8eSopenharmony_ci  const checkLegality = require('./src/check_legality');
2361847f8eSopenharmony_ci  return checkLegality.checkJsDocOfCurrentNode(node, sourceFile, fileName, false, false);
2461847f8eSopenharmony_ci};
2561847f8eSopenharmony_ci
2661847f8eSopenharmony_ciexports.initEnv = function (version) {
2761847f8eSopenharmony_ci  const { checkOption } = require('./src/utils');
2861847f8eSopenharmony_ci  return new Promise((resolve, reject) => {
2961847f8eSopenharmony_ci    const permissionName = getPermissionName(version);
3061847f8eSopenharmony_ci    const permissionConfig = getLocalPermissionConfig(permissionName);
3161847f8eSopenharmony_ci    if (permissionConfig) {
3261847f8eSopenharmony_ci      checkOption.permissionContent = permissionConfig;
3361847f8eSopenharmony_ci      resolve();
3461847f8eSopenharmony_ci      return;
3561847f8eSopenharmony_ci    }
3661847f8eSopenharmony_ci    const workingBranch = version || 'mas' + 'ter';
3761847f8eSopenharmony_ci    const url = `${urlPrefix}${workingBranch}${urlSuffix}`;
3861847f8eSopenharmony_ci    updatePermissionConfig(url, (content) => {
3961847f8eSopenharmony_ci      if (content) {
4061847f8eSopenharmony_ci        checkOption.permissionContent = content;
4161847f8eSopenharmony_ci        savePermissionConfig(content, permissionName);
4261847f8eSopenharmony_ci      }
4361847f8eSopenharmony_ci      resolve();
4461847f8eSopenharmony_ci    });
4561847f8eSopenharmony_ci  });
4661847f8eSopenharmony_ci};
4761847f8eSopenharmony_ci
4861847f8eSopenharmony_cifunction updatePermissionConfig(url, callback) {
4961847f8eSopenharmony_ci  let requestText;
5061847f8eSopenharmony_ci  const https = require('https');
5161847f8eSopenharmony_ci  const request = https.get(url, { timeout: 2000 }, (res) => {
5261847f8eSopenharmony_ci    res.on('data', (chunk) => {
5361847f8eSopenharmony_ci      if (typeof chunk === 'string') {
5461847f8eSopenharmony_ci        requestText = chunk;
5561847f8eSopenharmony_ci      } else {
5661847f8eSopenharmony_ci        const dataStr = new TextDecoder().decode(chunk);
5761847f8eSopenharmony_ci        requestText = requestText ? (requestText + dataStr) : dataStr;
5861847f8eSopenharmony_ci      }
5961847f8eSopenharmony_ci    });
6061847f8eSopenharmony_ci  }).on('error', () => {
6161847f8eSopenharmony_ci    console.warn('use the default permission list.');
6261847f8eSopenharmony_ci  }).on('close', () => {
6361847f8eSopenharmony_ci    callback(requestText);
6461847f8eSopenharmony_ci  }).on('timeout', () => {
6561847f8eSopenharmony_ci    request.destroy();
6661847f8eSopenharmony_ci  });
6761847f8eSopenharmony_ci}
6861847f8eSopenharmony_ci
6961847f8eSopenharmony_cifunction getLocalPermissionConfig(name) {
7061847f8eSopenharmony_ci  const localPermissionFile = path.resolve(__dirname, name);
7161847f8eSopenharmony_ci  if (fs.existsSync(localPermissionFile)) {
7261847f8eSopenharmony_ci    const content = fs.readFileSync(localPermissionFile);
7361847f8eSopenharmony_ci    try {
7461847f8eSopenharmony_ci      JSON.parse(content);
7561847f8eSopenharmony_ci      return content;
7661847f8eSopenharmony_ci    } catch (err) {
7761847f8eSopenharmony_ci      console.warn(`parse error ${localPermissionFile}`);
7861847f8eSopenharmony_ci    }
7961847f8eSopenharmony_ci  }
8061847f8eSopenharmony_ci  return undefined;
8161847f8eSopenharmony_ci}
8261847f8eSopenharmony_ci
8361847f8eSopenharmony_cifunction savePermissionConfig(content, name) {
8461847f8eSopenharmony_ci  const localPermissionFile = path.resolve(__dirname, name);
8561847f8eSopenharmony_ci  fs.writeFileSync(localPermissionFile, content);
8661847f8eSopenharmony_ci  console.log(`update permission configuration to ${localPermissionFile}`);
8761847f8eSopenharmony_ci}
8861847f8eSopenharmony_ci
8961847f8eSopenharmony_cifunction getPermissionName(version) {
9061847f8eSopenharmony_ci  return `permissions_${version}.config.json`;
9161847f8eSopenharmony_ci}
92