HEX
Server: Apache/2.4.63 (Unix)
System: Linux Synopilou92 4.4.302+ #72806 SMP Mon Jul 21 23:16:00 CST 2025 x86_64
User: pilou92 (1026)
PHP: 8.0.30
Disabled: NONE
Upload Files
File: //var/packages/AIConsole/scripts/pkg_utils
#!/bin/bash

PKG_NAME="AIConsole"
PKG_DIR="/var/packages/${PKG_NAME}"
PKG_ETC_DIR="${PKG_DIR}/etc"
PKG_TARGET_DIR="${PKG_DIR}/target"
PKG_VAR_DIR="${PKG_DIR}/var"
PKG_SHARE_DIR="${PKG_DIR}/share"
PKG_UI_DIR="${PKG_TARGET_DIR}/ui"
PKG_PROMPTS_DIR="${PKG_SHARE_DIR}/prompts"
PKG_SCRIPTS_DIR="${PKG_DIR}/scripts"
DB_MIGRATION_DIR="${PKG_SCRIPTS_DIR}/migrations"
DB_SQL_DIR="${PKG_SCRIPTS_DIR}/sql"
TOOL_DIR="${PKG_TARGET_DIR}/tool"
KEY_DIR="${PKG_SHARE_DIR}/key"
SETTING_DIR="${PKG_SHARE_DIR}/etc"
IMAGE_DIR="${PKG_SHARE_DIR}/image"
LOG_IMAGE_DIR="${IMAGE_DIR}/log"
COMPLETION_IMAGE_DIR="${IMAGE_DIR}/completion"
PRESIDIO_ANALYZER_DIR="${PKG_SHARE_DIR}/presidio-analyzer"
DEID_CONFIG_DIR="${PKG_SHARE_DIR}/deid"

USER_NAME="AIConsole"
GROUP_NAME="AIConsole"
DB_USER="AIConsole"
DB_NAME="aiconsole"
DB_STRING="user=${DB_USER} host=/var/run/postgresql database=${DB_NAME}"

PSQL="/usr/bin/psql"
CHMOD_BIN="/bin/chmod"
RM_BIN="/bin/rm"
MV_BIN="/bin/mv"
MKDIR_BIN="/bin/mkdir"
SU_BIN="/bin/su"
CHOWN_BIN="/bin/chown"

MakeDir()
{
  $MKDIR_BIN -p "$1"
}

ChangeOwnToPackage()
{
  $CHOWN_BIN ${USER_NAME}:${GROUP_NAME} "$1"
}

Control()
{
  if [ "failed" == "$(/bin/systemctl is-failed "${!#}")" ];then
    /bin/systemctl reset-failed "${!#}"
  fi
  /usr/syno/bin/synosystemctl $*
}

Status()
{
  /usr/bin/systemctl status "$1" | grep running > /dev/null
  return $?
}

MigrateTables()
{
  # `ALL_HOSTS` is required by the migration script `20240627005330_init.sql`.
  # We set it to a dummy value for the migration to succeed.
  $SU_BIN "${DB_USER}" -s /bin/sh -c "ALL_HOSTS='00000000-0000-0000-0000-000000000000' ${TOOL_DIR}/goose up -migration_dir ${DB_MIGRATION_DIR} -db_string \"${DB_STRING}\""
}

UpdatePresidioSettingTable()
{
  local langs=("$@")
  local in_clause
  in_clause=$(printf "'%s'," "${langs[@]}")
  in_clause="(${in_clause%,})"

  $SU_BIN "$DB_USER" -s /bin/sh -c "$PSQL $DB_NAME -c \"UPDATE presidio_setting SET status=1 WHERE lang IN ${in_clause};\""
}

MigrateEntitiesFromPresidioJSON()
{
  local src="${PKG_SHARE_DIR}/etc/presidio.json"
  local dst="${DEID_CONFIG_DIR}/deid-config.json"

  if [ -f "$src" ]; then

    entities=$(jq -r '.entities[]?' "$src")
    languages=($(jq -r '.languages[]?' "$src"))

    recognizers=()
    for entity in $entities; do
      case "$entity" in
        CRYPTO)
          recognizers+=("BITCOIN_ADDRESS")
          ;;
        DATE_TIME)
          recognizers+=("DATE")
          ;;
        ES_NIE|ES_NIF)
          recognizers+=("ES_NIF")
          ;;
        PERSON)
          UpdatePresidioSettingTable "${languages[@]}"
          ;;
        *)
          recognizers+=("$entity")
          ;;
      esac
    done

    if [ "${#recognizers[@]}" -ne 0 ]; then
      recognizers_json=$(printf '%s\n' "${recognizers[@]}" | jq -R . | jq -cs '[.[] | {entity: ., custom: false, enabled: true}]')
      echo -n "{\"recognizers\":${recognizers_json}}" > "$dst"
    fi
  fi

  if [ ! -f "$dst" ]; then
    echo '{"recognizers":[]}' > "$dst"
  fi
  ChangeOwnToPackage "$dst"

  rm -f "${PKG_SHARE_DIR}/etc/presidio.json" "${PKG_SHARE_DIR}/etc/presidio.old.json"
}