mirror of
https://github.com/ONLYOFFICE/DocSpace.git
synced 2025-04-18 20:24:12 +03:00
Merge branch 'develop' into feature/rtl-interface-direction
# Conflicts: # .gitignore # packages/common/store/SettingsStore.js # packages/components/file-input/styled-file-input.js # packages/components/modal-dialog/styled-modal-dialog.js # yarn.lock
This commit is contained in:
commit
28b8bc346e
137
.github/workflows/build-runtime-images.yml
vendored
Normal file
137
.github/workflows/build-runtime-images.yml
vendored
Normal file
@ -0,0 +1,137 @@
|
||||
name: build docker runtime images
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'hotfix/v**'
|
||||
- 'release/v**'
|
||||
- 'feature/docker-dev'
|
||||
paths:
|
||||
- '/build/install/docker/Dockerfile.runtime'
|
||||
- '.github/workflows/build-runtime-images.yml'
|
||||
- 'config/*'
|
||||
- '/build/install/docker/config/nginx/**'
|
||||
env:
|
||||
REPOSITORY_NAME: "onlyoffice"
|
||||
TAG: "v1.0.0"
|
||||
DOTNET_RUNTIME_IMAGE: "4testing-docspace-dotnet-runtime"
|
||||
NODEJS_RUNTIME_IMAGE: "4testing-docspace-nodejs-runtime"
|
||||
PROXY_RUNTIME_IMAGE: "4testing-docspace-proxy-runtime"
|
||||
DOCKERFILE_BUILD: "build/install/docker/Dockerfile.runtime"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform:
|
||||
- linux/amd64
|
||||
- linux/arm64
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
-
|
||||
name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
-
|
||||
name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Build ${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }}
|
||||
uses: docker/build-push-action@v4
|
||||
id: build-dotnetrun
|
||||
with:
|
||||
context: .
|
||||
file: ${{ env.DOCKERFILE_BUILD }}
|
||||
platforms: ${{ matrix.platform}}
|
||||
target: dotnetrun
|
||||
outputs: type=image,name=${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }},push-by-digest=true,name-canonical=true,push=true
|
||||
-
|
||||
name: Build ${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }}
|
||||
uses: docker/build-push-action@v4
|
||||
id: build-noderun
|
||||
with:
|
||||
context: .
|
||||
file: ${{ env.DOCKERFILE_BUILD }}
|
||||
platforms: ${{ matrix.platform}}
|
||||
target: noderun
|
||||
outputs: type=image,name=${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }},push-by-digest=true,name-canonical=true,push=true
|
||||
-
|
||||
name: Build ${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }}
|
||||
uses: docker/build-push-action@v4
|
||||
id: build-proxy
|
||||
with:
|
||||
context: .
|
||||
file: ${{ env.DOCKERFILE_BUILD }}
|
||||
platforms: ${{ matrix.platform}}
|
||||
target: proxy
|
||||
outputs: type=image,name=${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }},push-by-digest=true,name-canonical=true,push=true
|
||||
-
|
||||
name: Export digest
|
||||
run: |
|
||||
mkdir -p /tmp/digests/${{ env.DOTNET_RUNTIME_IMAGE }}
|
||||
digest="${{ steps.build-dotnetrun.outputs.digest }}"
|
||||
touch "/tmp/digests/${{ env.DOTNET_RUNTIME_IMAGE }}/${digest#sha256:}"
|
||||
|
||||
mkdir -p /tmp/digests/${{ env.NODEJS_RUNTIME_IMAGE }}
|
||||
digest="${{ steps.build-noderun.outputs.digest }}"
|
||||
touch "/tmp/digests/${{ env.NODEJS_RUNTIME_IMAGE }}/${digest#sha256:}"
|
||||
|
||||
mkdir -p /tmp/digests/${{ env.PROXY_RUNTIME_IMAGE }}
|
||||
digest="${{ steps.build-proxy.outputs.digest }}"
|
||||
touch "/tmp/digests/${{ env.PROXY_RUNTIME_IMAGE }}/${digest#sha256:}"
|
||||
-
|
||||
name: Upload digest
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: digests
|
||||
path: /tmp/digests/*
|
||||
if-no-files-found: error
|
||||
retention-days: 1
|
||||
merge:
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- build
|
||||
steps:
|
||||
-
|
||||
name: Download digests
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: digests
|
||||
path: /tmp/digests
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
-
|
||||
name: Login to Docker Hub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Create ${{ env.DOTNET_RUNTIME_IMAGE }} list and push
|
||||
working-directory: /tmp/digests/${{ env.DOTNET_RUNTIME_IMAGE }}
|
||||
run: |
|
||||
docker buildx imagetools create -t ${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }}:${{ env.TAG }} \
|
||||
$(printf '${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }}@sha256:%s ' *)
|
||||
-
|
||||
name: Create ${{ env.NODEJS_RUNTIME_IMAGE }} list and push
|
||||
working-directory: /tmp/digests/${{ env.NODEJS_RUNTIME_IMAGE }}
|
||||
run: |
|
||||
docker buildx imagetools create -t ${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }}:${{ env.TAG }} \
|
||||
$(printf '${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }}@sha256:%s ' *)
|
||||
-
|
||||
name: Create ${{ env.PROXY_RUNTIME_IMAGE }} list and push
|
||||
working-directory: /tmp/digests/${{ env.PROXY_RUNTIME_IMAGE }}
|
||||
run: |
|
||||
docker buildx imagetools create -t ${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }}:${{ env.TAG }} \
|
||||
$(printf '${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }}@sha256:%s ' *)
|
162
.github/workflows/build_packages.yml
vendored
Normal file
162
.github/workflows/build_packages.yml
vendored
Normal file
@ -0,0 +1,162 @@
|
||||
name: Build packages
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- release/*
|
||||
- develop
|
||||
- hotfix/*
|
||||
paths:
|
||||
- build/install/deb**
|
||||
- build/install/rpm**
|
||||
- build/install/common**
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
BRANCH_NAME: $(echo ${GITHUB_REF#refs/heads/})
|
||||
PRODUCT_LOW: $(echo "${{ github.event.repository.name }}" | tr '[:upper:]' '[:lower:]' )
|
||||
PRODUCT: "${{ github.event.repository.name }}"
|
||||
BUILD_NUMBER: "${{ github.run_number }}"
|
||||
|
||||
|
||||
jobs:
|
||||
build_deb:
|
||||
name: DEB packages
|
||||
runs-on: ubuntu-20.04
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Import GPG
|
||||
uses: crazy-max/ghaction-import-gpg@v5
|
||||
id: gpg_step
|
||||
with:
|
||||
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
|
||||
passphrase: ${{ secrets.GPG_PRIVATE_KEY_PASS }}
|
||||
|
||||
- name: Get files from repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
|
||||
- name: Prepare build
|
||||
id: get_vars
|
||||
run: |
|
||||
wget -O - https://dl.yarnpkg.com/debian/pubkey.gpg | \
|
||||
sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/yarnkey.gpg --import
|
||||
sudo chmod 644 /usr/share/keyrings/yarnkey.gpg
|
||||
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" | \
|
||||
sudo tee /etc/apt/sources.list.d/yarn.list
|
||||
wget https://packages.microsoft.com/config/$(lsb_release -is | \
|
||||
tr [:upper:] [:lower:])/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
|
||||
sudo dpkg -i packages-microsoft-prod.deb
|
||||
wget -O - https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
||||
sudo apt install -y dotnet-sdk-7.0 yarn nodejs dh-make rename dpkg-sig lintian
|
||||
sudo npm install -g json
|
||||
echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_OUTPUT
|
||||
echo "VERSION=$(echo "${{ github.ref }}" | grep -oP '\d+\.\d+\.\d+' || echo "1.1.0")" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build
|
||||
shell: bash
|
||||
run: |
|
||||
cd build/install/deb/
|
||||
rename -f -v "s/product([^\/]*)$/${{ env.PRODUCT_LOW }}\$1/g" debian/* ../common/* ../common/logrotate/*
|
||||
find ../ -type f -exec sed -i "s/{{product}}/${{ env.PRODUCT_LOW }}/g" {} ';'
|
||||
sed -i "s/{{package_header_tag_version}}/${{ steps.get_vars.outputs.VERSION }}.$BUILD_NUMBER/g" \
|
||||
debian/changelog debian/control
|
||||
dpkg-buildpackage -uc -k${{ steps.gpg_step.outputs.fingerprint }}
|
||||
|
||||
- name: Upload to Nexus
|
||||
run: |
|
||||
for file in /home/runner/work/${{ env.PRODUCT }}/${{ env.PRODUCT }}/build/install/*.deb; do
|
||||
echo $file
|
||||
curl --verbose --user ${{ secrets.REPO_LOGIN }}:${{ secrets.REPO_PASS }} -H "Content-Type: multipart/form-data" \
|
||||
--data-binary "@$file" ${{ secrets.REPO_URL_4TESTING_DEB }}
|
||||
done
|
||||
|
||||
- name: Lint
|
||||
run: |
|
||||
lintian --suppress-tags=mismatched-override --profile debian /home/runner/work/${{ env.PRODUCT }}/${{ env.PRODUCT }}/build/install/*.deb \
|
||||
| tee -a file
|
||||
if grep -qE '^(W:|E:)' file; then echo \
|
||||
"::warning Noticedeb=lintian::$(cat file | awk '/^W:/ { ws += 1 } /^E:/ { es += 1 } END { print "Warnings:", ws, "Errors:", es }')"; fi
|
||||
|
||||
build_rpm:
|
||||
name: RPM packages
|
||||
runs-on: ubuntu-20.04
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Import GPG
|
||||
uses: crazy-max/ghaction-import-gpg@v5
|
||||
with:
|
||||
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
|
||||
passphrase: ${{ secrets.GPG_PRIVATE_KEY_PASS }}
|
||||
|
||||
- name: Get files from repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
|
||||
- name: Prepare build
|
||||
id: get_vars
|
||||
run: |
|
||||
wget -O - https://dl.yarnpkg.com/debian/pubkey.gpg | sudo gpg --no-default-keyring --keyring \
|
||||
gnupg-ring:/usr/share/keyrings/yarnkey.gpg --import
|
||||
sudo chmod 644 /usr/share/keyrings/yarnkey.gpg
|
||||
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" | \
|
||||
sudo tee /etc/apt/sources.list.d/yarn.list
|
||||
wget https://packages.microsoft.com/config/$(lsb_release -is | \
|
||||
tr [:upper:] [:lower:])/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
|
||||
sudo dpkg -i packages-microsoft-prod.deb
|
||||
wget -O - https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
||||
sudo apt install -y dotnet-sdk-7.0 yarn nodejs dh-make rename python3-pip python3-rpm
|
||||
sudo npm install -g json
|
||||
sudo pip install rpmlint
|
||||
echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_OUTPUT
|
||||
echo "VERSION=$(echo "${ GITHUB_REF##*/ }" | grep -oP '\d+\.\d+\.\d+' || echo "1.1.0")" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cd build/install/rpm/SPECS
|
||||
mv ./SOURCES/product.rpmlintrc ./SOURCES/${{ env.PRODUCT_LOW }}.rpmlintrc
|
||||
wget https://github.com/ONLYOFFICE/${{ env.PRODUCT }}/archive/${{ env.BRANCH_NAME }}.tar.gz \
|
||||
-O ./SOURCES/${{ env.PRODUCT }}-$(echo ${{ env.BRANCH_NAME }} | tr '/' '-').tar.gz
|
||||
wget https://github.com/ONLYOFFICE/document-templates/archive/main/community-server.tar.gz \
|
||||
-O ./SOURCES/document-templates-main-community-server.tar.gz
|
||||
wget https://github.com/ONLYOFFICE/dictionaries/archive/master.tar.gz \
|
||||
-O ./SOURCES/dictionaries-master.tar.gz
|
||||
sed -i -e '/BuildRequires/d' product.spec
|
||||
rpmbuild -D "packager Ascensio System SIA <support@onlyoffice.com>" -D "GIT_BRANCH $(echo ${{ env.BRANCH_NAME }} \
|
||||
| tr '/' '-')" -D "_topdir $(pwd)" -D "version ${{ steps.get_vars.outputs.VERSION }}" \
|
||||
-D "release ${{ env.BUILD_NUMBER }}" -ba product.spec
|
||||
|
||||
- name: Sign
|
||||
run: |
|
||||
cat << EOF >> $HOME/.rpmmacros
|
||||
%_signature gpg
|
||||
%_gpg_name ${{ secrets.GPG_KEY_NAME }}
|
||||
%_gpg_path $HOME/.gnupg
|
||||
%__gpg /usr/bin/gpg
|
||||
EOF
|
||||
gpg --export --armor --output onlyoffice-gpgkey.pub
|
||||
rpm --import onlyoffice-gpgkey.pub
|
||||
rpm --addsign /home/runner/work/${{ env.PRODUCT }}/${{ env.PRODUCT }}/build/install/rpm/SPECS/RPMS/noarch/*.rpm
|
||||
|
||||
- name: Upload
|
||||
run: |
|
||||
for file in /home/runner/work/${{ env.PRODUCT }}/${{ env.PRODUCT }}/build/install/rpm/SPECS/RPMS/noarch/*.rpm; do
|
||||
curl --verbose --user ${{ secrets.REPO_LOGIN }}:${{ secrets.REPO_PASS }} \
|
||||
--upload-file "$file" ${{ secrets.REPO_URL_4TESTING_RPM }}
|
||||
done
|
||||
|
||||
- name: Rpmlint
|
||||
run: |
|
||||
for package in /home/runner/work/${{ env.PRODUCT }}/${{ env.PRODUCT }}/build/install/rpm/SPECS/RPMS/noarch/*.rpm
|
||||
do rpmlint --ignore-unused-rpmlintrc --rpmlintrc \
|
||||
/home/runner/work/${{ env.PRODUCT }}/${{ env.PRODUCT }}/build/install/rpm/SPECS/SOURCES/${{ env.PRODUCT_LOW }}.rpmlintrc $package \
|
||||
| tee -a file2
|
||||
done
|
||||
if grep -qE '^(W:|E:)' file2; then echo \
|
||||
"::warning NoticeRpm=rpmLint::$(cat file2 | awk '/W:/ { ws += 1 } /E:/ { es += 1 } END { print "Warnings:", ws, "Errors:", es }')" ; fi
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -51,5 +51,6 @@ TestsResults/
|
||||
**/.yarn/cache
|
||||
**/.yarn/install-state.gz
|
||||
licenses.csv
|
||||
publish/
|
||||
|
||||
.idea
|
||||
|
@ -3,8 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.2.32616.157
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Migrations.MySql", "migrations\mysql\ASC.Migrations.MySql.csproj", "{78FD997A-8A30-4B8B-B81E-46E6EE05390D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Data.Backup.Core", "common\ASC.Data.Backup.Core\ASC.Data.Backup.Core.csproj", "{93D91A49-A397-40FC-90DE-85D8ED774803}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Data.Storage", "common\ASC.Data.Storage\ASC.Data.Storage.csproj", "{582AF3E8-ACA4-49B8-809D-36A586C4307E}"
|
||||
@ -17,8 +15,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Webhooks.Core", "common
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Feed", "common\ASC.Feed\ASC.Feed.csproj", "{71A964E2-0075-46A3-AE58-9F2A78F6A5BB}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Migrations.PostgreSql", "migrations\postgre\ASC.Migrations.PostgreSql.csproj", "{B06C5E36-BB67-4B4B-9E23-0326245BFCBB}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Core.Common", "common\ASC.Core.Common\ASC.Core.Common.csproj", "{A51D0454-4AFA-46DE-89D4-B03D37E1816C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Migration.Creator", "common\Tools\ASC.Migration.Creator\ASC.Migration.Creator.csproj", "{4BECDA03-E5E7-4273-B2D5-65AD3B1D0AF6}"
|
||||
@ -33,16 +29,20 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Migration.PersonalToDoc
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Common", "common\ASC.Common\ASC.Common.csproj", "{1C5691B2-4AB1-4D3C-931C-AF7AD9CE8241}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Migrations.MySql.SaaS", "migrations\mysql\SaaS\ASC.Migrations.MySql.SaaS.csproj", "{57A7DD9D-373D-4270-9FF0-986F62B594EF}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Migrations.MySql.Standalone", "migrations\mysql\Standalone\ASC.Migrations.MySql.Standalone.csproj", "{2608185A-415E-4D21-B5F8-A7F9C95DA918}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Migrations.PostgreSql.SaaS", "migrations\postgre\SaaS\ASC.Migrations.PostgreSql.SaaS.csproj", "{50A3CFE6-F7A3-49FB-B801-70E793BC8B5A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Migrations.PostgreSql.Standalone", "migrations\postgre\Standalone\ASC.Migrations.PostgreSql.Standalone.csproj", "{46AF60C1-EEA6-4C0F-8C02-1B74A8C9720F}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{78FD997A-8A30-4B8B-B81E-46E6EE05390D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{78FD997A-8A30-4B8B-B81E-46E6EE05390D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{78FD997A-8A30-4B8B-B81E-46E6EE05390D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{78FD997A-8A30-4B8B-B81E-46E6EE05390D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{93D91A49-A397-40FC-90DE-85D8ED774803}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{93D91A49-A397-40FC-90DE-85D8ED774803}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{93D91A49-A397-40FC-90DE-85D8ED774803}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
@ -67,10 +67,6 @@ Global
|
||||
{71A964E2-0075-46A3-AE58-9F2A78F6A5BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{71A964E2-0075-46A3-AE58-9F2A78F6A5BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{71A964E2-0075-46A3-AE58-9F2A78F6A5BB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B06C5E36-BB67-4B4B-9E23-0326245BFCBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B06C5E36-BB67-4B4B-9E23-0326245BFCBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B06C5E36-BB67-4B4B-9E23-0326245BFCBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B06C5E36-BB67-4B4B-9E23-0326245BFCBB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
@ -99,6 +95,22 @@ Global
|
||||
{1C5691B2-4AB1-4D3C-931C-AF7AD9CE8241}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1C5691B2-4AB1-4D3C-931C-AF7AD9CE8241}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1C5691B2-4AB1-4D3C-931C-AF7AD9CE8241}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{57A7DD9D-373D-4270-9FF0-986F62B594EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{57A7DD9D-373D-4270-9FF0-986F62B594EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{57A7DD9D-373D-4270-9FF0-986F62B594EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{57A7DD9D-373D-4270-9FF0-986F62B594EF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2608185A-415E-4D21-B5F8-A7F9C95DA918}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2608185A-415E-4D21-B5F8-A7F9C95DA918}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2608185A-415E-4D21-B5F8-A7F9C95DA918}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2608185A-415E-4D21-B5F8-A7F9C95DA918}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{50A3CFE6-F7A3-49FB-B801-70E793BC8B5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{50A3CFE6-F7A3-49FB-B801-70E793BC8B5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{50A3CFE6-F7A3-49FB-B801-70E793BC8B5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{50A3CFE6-F7A3-49FB-B801-70E793BC8B5A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{46AF60C1-EEA6-4C0F-8C02-1B74A8C9720F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{46AF60C1-EEA6-4C0F-8C02-1B74A8C9720F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{46AF60C1-EEA6-4C0F-8C02-1B74A8C9720F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{46AF60C1-EEA6-4C0F-8C02-1B74A8C9720F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -6,76 +6,58 @@ if ($PSversionMajor -lt 7 -or $PSversionMinor -lt 2) {
|
||||
exit
|
||||
}
|
||||
|
||||
$Branch = git branch --show-current
|
||||
$BranchExistRemote = git ls-remote --heads origin $Branch
|
||||
|
||||
if (-not $BranchExistRemote) {
|
||||
Write-Error "The current branch does not exist in the remote repository. Please push changes."
|
||||
exit
|
||||
}
|
||||
|
||||
$RootDir = Split-Path -Parent $PSScriptRoot
|
||||
$DockerDir = ($RootDir + "\build\install\docker")
|
||||
$BuildDate = Get-Date -Format "yyyy-MM-dd"
|
||||
$DockerDir = "$RootDir\build\install\docker"
|
||||
$LocalIp = (Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration | Where-Object { $_.DHCPEnabled -ne $null -and $_.DefaultIPGateway -ne $null }).IPAddress | Select-Object -First 1
|
||||
|
||||
$Doceditor = ($LocalIp + ":5013")
|
||||
$Login = ($LocalIp + ":5011")
|
||||
$Client = ($LocalIp + ":5001")
|
||||
$PortalUrl = ("http://" + $LocalIp + ":8092")
|
||||
|
||||
$DockerFile = "Dockerfile.dev"
|
||||
$EnvExtension = "dev"
|
||||
$CoreBaseDomain = "localhost"
|
||||
|
||||
# Stop all backend services"
|
||||
& "$PSScriptRoot\start\stop.backend.docker.ps1"
|
||||
|
||||
$Env:COMPOSE_IGNORE_ORPHANS = "True"
|
||||
|
||||
$Containers = docker ps -a -f "name=^onlyoffice" --format="{{.ID}} {{.Names}}" | Select-String -Pattern ("mysql|rabbitmq|redis|elasticsearch|documentserver") -NotMatch | ConvertFrom-String | ForEach-Object P1
|
||||
$Images = docker images onlyoffice/docspace* -q
|
||||
|
||||
if ($Containers) {
|
||||
Write-Host "Remove all backend containers" -ForegroundColor Blue
|
||||
docker rm -f $Containers
|
||||
}
|
||||
|
||||
if ($Images) {
|
||||
Write-Host "Remove all docker images except 'mysql, rabbitmq, redis, elasticsearch, documentserver'" -ForegroundColor Blue
|
||||
docker rmi -f $Images
|
||||
}
|
||||
|
||||
Write-Host "Run MySQL" -ForegroundColor Green
|
||||
docker compose -f ($DockerDir + "\db.yml") up -d
|
||||
docker compose -f "$DockerDir\db.yml" up -d
|
||||
|
||||
Write-Host "Run environments (redis, rabbitmq)" -ForegroundColor Green
|
||||
$Env:DOCKERFILE = $DockerFile
|
||||
docker compose -f ($DockerDir + "\redis.yml") -f ($DockerDir + "\rabbitmq.yml") up -d
|
||||
Write-Host "Build backend services (to `publish/` folder)" -ForegroundColor Green
|
||||
& "$PSScriptRoot\install\common\build-services.ps1"
|
||||
|
||||
if ($args[0] -eq "--no_ds") {
|
||||
Write-Host "SKIP Document server" -ForegroundColor Blue
|
||||
}
|
||||
else {
|
||||
Write-Host "Run Document server" -ForegroundColor Green
|
||||
$Env:DOCUMENT_SERVER_IMAGE_NAME = "onlyoffice/documentserver-de:latest"
|
||||
$Env:ROOT_DIR = $RootDir
|
||||
docker compose -f ($DockerDir + "\ds.dev.yml") up -d
|
||||
$Env:DOCUMENT_SERVER_IMAGE_NAME = "onlyoffice/documentserver-de:latest"
|
||||
$Env:INSTALLATION_TYPE = "ENTERPRISE"
|
||||
|
||||
if ($args[0] -eq "--community" ) {
|
||||
$Env:DOCUMENT_SERVER_IMAGE_NAME = "onlyoffice/documentserver:latest"
|
||||
$Env:INSTALLATION_TYPE = "COMMUNITY"
|
||||
}
|
||||
|
||||
Write-Host "Build all backend services" -ForegroundColor Blue
|
||||
$Env:DOCKERFILE = $DockerFile
|
||||
$Env:RELEASE_DATE = $BuildDate
|
||||
$Env:GIT_BRANCH = $Branch
|
||||
$Env:SERVICE_DOCEDITOR = $Doceditor
|
||||
$Env:SERVICE_LOGIN = $Login
|
||||
$Env:SERVICE_CLIENT = $Client
|
||||
$Env:APP_CORE_BASE_DOMAIN = $CoreBaseDomain
|
||||
$Env:ENV_EXTENSION = $EnvExtension
|
||||
docker compose -f ($DockerDir + "\build.dev.yml") build --build-arg GIT_BRANCH=$Branch --build-arg RELEASE_DATE=$BuildDate
|
||||
Set-Location -Path $DockerDir
|
||||
|
||||
Write-Host "Run DB migration" -ForegroundColor Green
|
||||
$Env:DOCKERFILE = $DockerFile
|
||||
docker compose -f ($DockerDir + "\migration-runner.yml") up -d
|
||||
Write-Host "Run migration and services" -ForegroundColor Green
|
||||
$Env:ENV_EXTENSION="dev"
|
||||
$Env:Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:v1.0.0"
|
||||
$Env:Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:v1.0.0"
|
||||
$Env:Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:v1.0.0"
|
||||
$Env:SERVICE_DOCEDITOR=$Doceditor
|
||||
$Env:SERVICE_LOGIN=$Login
|
||||
$Env:SERVICE_CLIENT=$Client
|
||||
$Env:ROOT_DIR=$RootDir
|
||||
$Env:BUILD_PATH="/var/www"
|
||||
$Env:SRC_PATH="$RootDir\publish\services"
|
||||
$Env:DATA_DIR="$RootDir\Data"
|
||||
$Env:APP_URL_PORTAL=$PortalUrl
|
||||
docker compose -f docspace.profiles.yml -f docspace.overcome.yml --profile migration-runner --profile backend-local up -d
|
||||
|
||||
# Start all backend services"
|
||||
& "$PSScriptRoot\start\start.backend.docker.ps1"
|
||||
Write-Host "== Build params ==" -ForegroundColor Green
|
||||
Write-Host "APP_URL_PORTAL: $PortalUrl" -ForegroundColor Blue
|
||||
Write-Host "LOCAL IP: $LocalIp" -ForegroundColor Blue
|
||||
Write-Host "SERVICE_DOCEDITOR: $Env:SERVICE_DOCEDITOR" -ForegroundColor Blue
|
||||
Write-Host "SERVICE_LOGIN: $Env:SERVICE_LOGIN" -ForegroundColor Blue
|
||||
Write-Host "SERVICE_CLIENT: $Env:SERVICE_CLIENT" -ForegroundColor Blue
|
||||
Write-Host "INSTALLATION_TYPE: $Env:INSTALLATION_TYPE" -ForegroundColor Blue
|
||||
|
||||
Set-Location -Path $PSScriptRoot
|
@ -4,34 +4,10 @@ rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
echo "Run script directory:" $dir
|
||||
|
||||
dir=$(builtin cd $rd/../; pwd)
|
||||
dockerDir="$dir/build/install/docker"
|
||||
|
||||
echo "Root directory:" $dir
|
||||
|
||||
cd $dir
|
||||
|
||||
branch=$(git branch --show-current)
|
||||
|
||||
echo "GIT_BRANCH:" $branch
|
||||
|
||||
branch_exist_remote=$(git ls-remote --heads origin $branch)
|
||||
|
||||
if [ -z "$branch_exist_remote" ]; then
|
||||
echo "The current branch does not exist in the remote repository. Please push changes."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd $dir/build/install/docker/
|
||||
|
||||
docker_dir="$( pwd )"
|
||||
|
||||
echo "Docker directory:" $docker_dir
|
||||
|
||||
docker_file=Dockerfile.dev
|
||||
core_base_domain="localhost"
|
||||
build_date=$(date +%Y-%m-%d)
|
||||
env_extension="dev"
|
||||
|
||||
echo "BUILD DATE: $build_date"
|
||||
echo "Docker files root directory:" $dockerDir
|
||||
|
||||
local_ip=$(ipconfig getifaddr en0)
|
||||
|
||||
@ -40,63 +16,67 @@ echo "LOCAL IP: $local_ip"
|
||||
doceditor=${local_ip}:5013
|
||||
login=${local_ip}:5011
|
||||
client=${local_ip}:5001
|
||||
portal_url="http://$local_ip:8092"
|
||||
|
||||
echo "SERVICE_DOCEDITOR: $doceditor"
|
||||
echo "SERVICE_LOGIN: $login"
|
||||
echo "SERVICE_CLIENT: $client"
|
||||
echo "APP_URL_PORTAL: $portal_url"
|
||||
|
||||
# Stop all backend services"
|
||||
$dir/build/start/stop.backend.docker.sh
|
||||
|
||||
echo "Remove all backend containers"
|
||||
docker rm -f $(docker ps -a | egrep "onlyoffice" | egrep -v "mysql|rabbitmq|redis|elasticsearch|documentserver" | awk 'NR>0 {print $1}')
|
||||
|
||||
echo "Remove all docker images except 'mysql, rabbitmq, redis, elasticsearch, documentserver'"
|
||||
docker rmi -f $(docker images -a | egrep "onlyoffice" | egrep -v "mysql|rabbitmq|redis|elasticsearch|documentserver" | awk 'NR>0 {print $3}')
|
||||
|
||||
echo "Run MySQL"
|
||||
|
||||
arch_name="$(uname -m)"
|
||||
|
||||
if [ "${arch_name}" = "x86_64" ]; then
|
||||
echo "CPU Type: x86_64 -> run db.yml"
|
||||
docker compose -f db.yml up -d
|
||||
docker compose -f $dockerDir/db.yml up -d
|
||||
elif [ "${arch_name}" = "arm64" ]; then
|
||||
echo "CPU Type: arm64 -> run db.yml with arm64v8 image"
|
||||
MYSQL_IMAGE=arm64v8/mysql:8.0.32-oracle \
|
||||
docker compose -f db.yml up -d
|
||||
docker compose -f $dockerDir/db.yml up -d
|
||||
else
|
||||
echo "Error: Unknown CPU Type: ${arch_name}."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Run environments (redis, rabbitmq)"
|
||||
DOCKERFILE=$docker_file \
|
||||
docker compose -f redis.yml -f rabbitmq.yml up -d
|
||||
echo "Clear publish folder"
|
||||
rm -rf $dir/publish
|
||||
|
||||
if [ "$1" = "--no_ds" ]; then
|
||||
echo "SKIP Document server"
|
||||
else
|
||||
echo "Run Document server"
|
||||
DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/documentserver-de:latest \
|
||||
ROOT_DIR=$dir \
|
||||
docker compose -f ds.dev.yml up -d
|
||||
echo "Build backend services (to "publish/" folder)"
|
||||
bash $dir/build/install/common/build-services.sh -pb backend-publish -pc Debug -de "$dockerDir/docker-entrypoint.py"
|
||||
|
||||
DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/documentserver-de:latest
|
||||
INSTALLATION_TYPE=ENTERPRISE
|
||||
|
||||
if [ "$1" = "--community" ]; then
|
||||
DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/documentserver:latest
|
||||
INSTALLATION_TYPE=COMMUNITY
|
||||
fi
|
||||
|
||||
echo "Build all backend services"
|
||||
DOCKERFILE=$docker_file \
|
||||
RELEASE_DATE=$build_date \
|
||||
GIT_BRANCH=$branch \
|
||||
echo "Run migration and services INSTALLATION_TYPE=$INSTALLATION_TYPE"
|
||||
ENV_EXTENSION="dev" \
|
||||
INSTALLATION_TYPE=$INSTALLATION_TYPE \
|
||||
Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:v1.0.0" \
|
||||
Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:v1.0.0" \
|
||||
Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:v1.0.0" \
|
||||
DOCUMENT_SERVER_IMAGE_NAME=$DOCUMENT_SERVER_IMAGE_NAME \
|
||||
SERVICE_DOCEDITOR=$doceditor \
|
||||
SERVICE_LOGIN=$login \
|
||||
SERVICE_CLIENT=$client \
|
||||
APP_CORE_BASE_DOMAIN=$core_base_domain \
|
||||
ENV_EXTENSION=$env_extension \
|
||||
docker compose -f build.dev.yml build --build-arg GIT_BRANCH=$branch --build-arg RELEASE_DATE=$build_date
|
||||
ROOT_DIR=$dir \
|
||||
BUILD_PATH="/var/www" \
|
||||
SRC_PATH="$dir/publish/services" \
|
||||
DATA_DIR="$dir/Data" \
|
||||
APP_URL_PORTAL=$portal_url \
|
||||
docker-compose -f $dockerDir/docspace.profiles.yml -f $dockerDir/docspace.overcome.yml --profile migration-runner --profile backend-local up -d
|
||||
|
||||
echo "Run DB migration"
|
||||
DOCKERFILE=$docker_file \
|
||||
docker compose -f migration-runner.yml up -d
|
||||
|
||||
# Start all backend services"
|
||||
$dir/build/start/start.backend.docker.sh
|
||||
echo ""
|
||||
echo "APP_URL_PORTAL: $portal_url"
|
||||
echo "LOCAL IP: $local_ip"
|
||||
echo "SERVICE_DOCEDITOR: $doceditor"
|
||||
echo "SERVICE_LOGIN: $login"
|
||||
echo "SERVICE_CLIENT: $client"
|
||||
echo "INSTALLATION_TYPE=$INSTALLATION_TYPE"
|
@ -1,21 +1,33 @@
|
||||
$Containers = docker ps -aqf "name=^onlyoffice"
|
||||
$Images = docker images onlyoffice/docspace* -q
|
||||
$RootDir = Split-Path -Parent $PSScriptRoot
|
||||
$DockerDir = ($RootDir + "\build\install\docker")
|
||||
|
||||
Write-Host "Clean up containers, volumes or networks" -ForegroundColor Green
|
||||
|
||||
if ($Containers) {
|
||||
Write-Host "Stop all backend containers" -ForegroundColor Blue
|
||||
docker stop $Containers
|
||||
|
||||
Write-Host "Remove all backend containers" -ForegroundColor Blue
|
||||
docker rm -f $Containers
|
||||
|
||||
$Env:DOCUMENT_SERVER_IMAGE_NAME="onlyoffice/documentserver-de:latest"
|
||||
$Env:Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:v1.0.0"
|
||||
$Env:Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:v1.0.0"
|
||||
$Env:Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:v1.0.0"
|
||||
$Env:SERVICE_CLIENT="localhost:5001"
|
||||
$Env:BUILD_PATH="/var/www"
|
||||
$Env:SRC_PATH="$RootDir\publish\services"
|
||||
$Env:ROOT_DIR=$RootDir
|
||||
$Env:DATA_DIR="$RootDir\Data"
|
||||
|
||||
docker compose -f "$DockerDir\docspace.profiles.yml" -f "$DockerDir\docspace.overcome.yml" --profile "migration-runner" --profile "backend-local" down --volumes
|
||||
|
||||
Write-Host "Remove docker contatiners 'mysql'" -ForegroundColor Blue
|
||||
docker compose -f "$DockerDir\db.yml" down --volumes
|
||||
|
||||
Write-Host "Remove docker volumes" -ForegroundColor Blue
|
||||
docker volume prune -f -a
|
||||
|
||||
Write-Host "Remove docker networks" -ForegroundColor Blue
|
||||
docker network prune -f
|
||||
}
|
||||
|
||||
if ($Images) {
|
||||
Write-Host "Remove all docker images except 'mysql, rabbitmq, redis, elasticsearch, documentserver'" -ForegroundColor Blue
|
||||
docker rmi -f $Images
|
||||
}
|
||||
|
||||
Write-Host "Remove unused volumes." -ForegroundColor Blue
|
||||
docker volume prune -f
|
||||
|
||||
Write-Host "Remove unused networks." -ForegroundColor Blue
|
||||
docker network prune -f
|
||||
else {
|
||||
Write-Host "No containers, images, volumes or networks to clean up" -ForegroundColor Green
|
||||
}
|
@ -1,12 +1,35 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Stop all onlyoffice containers."
|
||||
docker stop $(docker ps -a | egrep "onlyoffice" | awk 'NR>0 {print $1}')
|
||||
echo "Remove all onlyoffice containers."
|
||||
docker rm -f $(docker ps -a | egrep "onlyoffice" | awk 'NR>0 {print $1}')
|
||||
echo "Remove all onlyoffice images."
|
||||
docker rmi -f $(docker images -a | egrep "onlyoffice" | awk 'NR>0 {print $3}')
|
||||
echo "Remove unused volumes."
|
||||
docker volume prune -f
|
||||
echo "Remove unused networks."
|
||||
docker network prune -f
|
||||
Containers=$(docker ps -a | egrep "onlyoffice" | awk 'NR>0 {print $1}')
|
||||
RunDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
RootDir=$(builtin cd $RunDir/../; pwd)
|
||||
DockerDir="${RootDir}/build/install/docker"
|
||||
|
||||
echo "Clean up containers, volumes or networks"
|
||||
|
||||
if [[ $Containers != "" ]]
|
||||
then
|
||||
echo "Remove all backend containers"
|
||||
|
||||
DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/documentserver-de:latest \
|
||||
Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:v1.0.0" \
|
||||
Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:v1.0.0" \
|
||||
Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:v1.0.0" \
|
||||
SERVICE_CLIENT="localhost:5001" \
|
||||
BUILD_PATH="/var/www" \
|
||||
SRC_PATH="${RootDir}/publish/services" \
|
||||
ROOT_DIR=$RootDir \
|
||||
DATA_DIR="${RootDir}/Data" \
|
||||
docker-compose -f "${DockerDir}/docspace.profiles.yml" -f "${DockerDir}/docspace.overcome.yml" --profile migration-runner --profile backend-local down --volumes
|
||||
|
||||
echo "Remove docker contatiners 'mysql'"
|
||||
docker compose -f "${DockerDir}/db.yml" down --volumes
|
||||
|
||||
echo "Remove docker volumes"
|
||||
docker volume prune -f -a
|
||||
|
||||
echo "Remove unused networks."
|
||||
docker network prune -f
|
||||
else
|
||||
echo "No containers, images, volumes or networks to clean up"
|
||||
fi
|
@ -28,6 +28,8 @@ if [ "$UPDATE" = "true" ] && [ "$DOCUMENT_SERVER_INSTALLED" = "true" ]; then
|
||||
apt-get remove -yq ${ds_pkg_installed_name}
|
||||
|
||||
apt-get install -yq ${ds_pkg_name}
|
||||
|
||||
RECONFIGURE_PRODUCT="true"
|
||||
else
|
||||
apt-get install -y --only-upgrade ${ds_pkg_name};
|
||||
fi
|
||||
@ -74,7 +76,13 @@ if [ "$PRODUCT_INSTALLED" = "false" ]; then
|
||||
apt-get install -y ${product} || true #Fix error 'Failed to fetch'
|
||||
apt-get install -y ${product}
|
||||
elif [ "$UPDATE" = "true" ] && [ "$PRODUCT_INSTALLED" = "true" ]; then
|
||||
apt-get install -o DPkg::options::="--force-confnew" -y --only-upgrade ${product} elasticsearch=${ELASTIC_VERSION}
|
||||
CURRENT_VERSION=$(dpkg-query -W -f='${Version}' ${product} 2>/dev/null)
|
||||
AVAILABLE_VERSIONS=$(apt show ${product} 2>/dev/null | grep -E '^Version:' | awk '{print $2}')
|
||||
if [[ "$AVAILABLE_VERSIONS" != *"$CURRENT_VERSION"* ]]; then
|
||||
apt-get install -o DPkg::options::="--force-confnew" -y --only-upgrade ${product} elasticsearch=${ELASTIC_VERSION}
|
||||
elif [ $RECONFIGURE_PRODUCT = "true" ]; then
|
||||
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure ${product}
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
@ -49,9 +49,13 @@ curl -sL https://deb.nodesource.com/setup_16.x | bash -
|
||||
#add dotnet repo
|
||||
if [ "$DIST" = "debian" ] && [ "$DISTRIB_CODENAME" = "stretch" ]; then
|
||||
curl https://packages.microsoft.com/config/$DIST/10/packages-microsoft-prod.deb -O
|
||||
elif [ "$DISTRIB_CODENAME" = "bookworm" ]; then
|
||||
#Temporary fix for missing dotnet repository for debian bookworm
|
||||
curl https://packages.microsoft.com/config/$DIST/11/packages-microsoft-prod.deb -O
|
||||
else
|
||||
curl https://packages.microsoft.com/config/$DIST/$REV/packages-microsoft-prod.deb -O
|
||||
fi
|
||||
echo -e "Package: *\nPin: origin \"packages.microsoft.com\"\nPin-Priority: 1002" | tee /etc/apt/preferences.d/99microsoft-prod.pref
|
||||
dpkg -i packages-microsoft-prod.deb && rm packages-microsoft-prod.deb
|
||||
|
||||
MYSQL_REPO_VERSION="$(curl https://repo.mysql.com | grep -oP 'mysql-apt-config_\K.*' | grep -o '^[^_]*' | sort --version-sort --field-separator=. | tail -n1)"
|
||||
@ -71,6 +75,9 @@ if ! dpkg -l | grep -q "mysql-server"; then
|
||||
DEBIAN_FRONTEND=noninteractive dpkg -i ${MYSQL_PACKAGE_NAME}
|
||||
rm -f ${MYSQL_PACKAGE_NAME}
|
||||
|
||||
#Temporary fix for missing mysql repository for debian bookworm
|
||||
[ "$DISTRIB_CODENAME" = "bookworm" ] && sed -i "s/$DIST/ubuntu/g; s/$DISTRIB_CODENAME/jammy/g" /etc/apt/sources.list.d/mysql.list
|
||||
|
||||
echo mysql-community-server mysql-community-server/root-pass password ${MYSQL_SERVER_PASS} | debconf-set-selections
|
||||
echo mysql-community-server mysql-community-server/re-root-pass password ${MYSQL_SERVER_PASS} | debconf-set-selections
|
||||
echo mysql-community-server mysql-server/default-auth-override select "Use Strong Password Encryption (RECOMMENDED)" | debconf-set-selections
|
||||
@ -100,13 +107,14 @@ fi
|
||||
curl -s http://nginx.org/keys/nginx_signing.key | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/nginx.gpg --import
|
||||
echo "deb [signed-by=/usr/share/keyrings/nginx.gpg] http://nginx.org/packages/$DIST/ $DISTRIB_CODENAME nginx" | tee /etc/apt/sources.list.d/nginx.list
|
||||
chmod 644 /usr/share/keyrings/nginx.gpg
|
||||
#Temporary fix for missing nginx repository for debian bookworm
|
||||
[ "$DISTRIB_CODENAME" = "bookworm" ] && sed -i "s/$DISTRIB_CODENAME/buster/g" /etc/apt/sources.list.d/nginx.list
|
||||
|
||||
# setup msttcorefonts
|
||||
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections
|
||||
|
||||
# install
|
||||
apt-get install -o DPkg::options::="--force-confnew" -yq \
|
||||
python3-pip \
|
||||
expect \
|
||||
nano \
|
||||
nodejs \
|
||||
@ -121,10 +129,6 @@ apt-get install -o DPkg::options::="--force-confnew" -yq \
|
||||
nginx-extras \
|
||||
ffmpeg
|
||||
|
||||
if [ ! -e /usr/bin/json ]; then
|
||||
npm i json -g >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if ! dpkg -l | grep -q "elasticsearch"; then
|
||||
apt-get install -yq elasticsearch=${ELASTIC_VERSION}
|
||||
fi
|
||||
|
@ -41,7 +41,7 @@ INSTALLATION_TYPE="ENTERPRISE"
|
||||
IMAGE_NAME="${PACKAGE_SYSNAME}/${PRODUCT}-api"
|
||||
CONTAINER_NAME="${PACKAGE_SYSNAME}-api"
|
||||
|
||||
NETWORK=${PACKAGE_SYSNAME}
|
||||
NETWORK_NAME=${PACKAGE_SYSNAME}
|
||||
|
||||
DISK_REQUIREMENTS=40960;
|
||||
MEMORY_REQUIREMENTS=5500;
|
||||
@ -220,7 +220,7 @@ while [ "$1" != "" ]; do
|
||||
|
||||
-dsh | --docspacehost )
|
||||
if [ "$2" != "" ]; then
|
||||
APP_CORE_BASE_DOMAIN=$2
|
||||
APP_URL_PORTAL=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
@ -445,7 +445,7 @@ get_os_info () {
|
||||
CONTAINS=$(cat /etc/redhat-release | { grep -sw release || true; });
|
||||
if [[ -n ${CONTAINS} ]]; then
|
||||
DIST=`cat /etc/redhat-release |sed s/\ release.*//`
|
||||
REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
|
||||
REV=`cat /etc/redhat-release | grep -oP '(?<=release )\d+'`
|
||||
else
|
||||
DIST=`cat /etc/os-release | grep -sw 'ID' | awk -F= '{ print $2 }' | sed -e 's/^"//' -e 's/"$//'`
|
||||
REV=`cat /etc/os-release | grep -sw 'VERSION_ID' | awk -F= '{ print $2 }' | sed -e 's/^"//' -e 's/"$//'`
|
||||
@ -548,43 +548,12 @@ install_service () {
|
||||
}
|
||||
|
||||
install_docker_compose () {
|
||||
if ! command_exists python3; then
|
||||
install_service python3
|
||||
fi
|
||||
|
||||
if command_exists apt-get; then
|
||||
apt-get -y update -qq
|
||||
apt-get -y -q install python3-pip
|
||||
elif command_exists yum; then
|
||||
curl -O https://bootstrap.pypa.io/get-pip.py
|
||||
python3 get-pip.py || true
|
||||
rm get-pip.py
|
||||
fi
|
||||
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install docker-compose
|
||||
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
|
||||
|
||||
if ! command_exists docker-compose; then
|
||||
echo "command docker-compose not found"
|
||||
exit 1;
|
||||
fi
|
||||
}
|
||||
|
||||
install_jq () {
|
||||
curl -s -o jq http://stedolan.github.io/jq/download/linux64/jq
|
||||
chmod +x jq
|
||||
cp jq /usr/bin
|
||||
rm jq
|
||||
|
||||
if ! command_exists jq; then
|
||||
echo "command jq not found"
|
||||
exit 1;
|
||||
fi
|
||||
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
|
||||
chmod +x /usr/bin/docker-compose
|
||||
}
|
||||
|
||||
check_ports () {
|
||||
RESERVED_PORTS=(3306 8092);
|
||||
RESERVED_PORTS=(3306);
|
||||
ARRAY_PORTS=();
|
||||
USED_PORTS="";
|
||||
|
||||
@ -729,11 +698,54 @@ docker_login () {
|
||||
fi
|
||||
}
|
||||
|
||||
create_network () {
|
||||
EXIST=$(docker network ls | awk '{print $2;}' | { grep -x ${NETWORK} || true; });
|
||||
read_continue_installation () {
|
||||
read -p "Continue installation [Y/N]? " CHOICE_INSTALLATION
|
||||
case "$CHOICE_INSTALLATION" in
|
||||
y|Y )
|
||||
return 0
|
||||
;;
|
||||
|
||||
if [[ -z ${EXIST} ]]; then
|
||||
docker network create --driver bridge ${NETWORK}
|
||||
n|N )
|
||||
exit 0;
|
||||
;;
|
||||
|
||||
* )
|
||||
echo "Please, enter Y or N";
|
||||
read_continue_installation
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
domain_check () {
|
||||
DOMAINS=$(dig +short -x $(curl -s ifconfig.me) | sed 's/\.$//')
|
||||
|
||||
if [[ -n "$DOMAINS" ]]; then
|
||||
while IFS= read -r DOMAIN; do
|
||||
IP_ADDRESS=$(dig +short "$DOMAIN")
|
||||
if [[ -n "$IP_ADDRESS" || "$IP_ADDRESS" =~ ^127\. ]]; then
|
||||
LOCAL_RESOLVED_DOMAINS+="$DOMAIN"
|
||||
elif [[ -n "$IP_ADDRESS" ]]; then
|
||||
APP_URL_PORTAL=${APP_URL_PORTAL-:"http://${DOMAIN}:${EXTERNAL_PORT}"}
|
||||
fi
|
||||
done <<< "$DOMAINS"
|
||||
fi
|
||||
|
||||
if [[ -n "$LOCAL_RESOLVED_DOMAINS" ]] || [[ $(ip route get 8.8.8.8 | awk '{print $7}') != $(curl -s ifconfig.me) ]]; then
|
||||
DOCKER_DAEMON_FILE="/etc/docker/daemon.json"
|
||||
APP_URL_PORTAL=${APP_URL_PORTAL:-${LOCAL_RESOLVED_DOMAINS[0]}}
|
||||
if ! grep -q '"dns"' "$DOCKER_DAEMON_FILE" 2>/dev/null; then
|
||||
echo "A problem was detected for ${LOCAL_RESOLVED_DOMAINS[@]} domains when using a loopback IP address or when using NAT."
|
||||
echo "Select 'Y' to continue installing with configuring the use of external IP in Docker via Google Public DNS."
|
||||
echo "Select 'N' to cancel ${PACKAGE_SYSNAME^^} ${PRODUCT^^} installation."
|
||||
if read_continue_installation; then
|
||||
if [[ -f "$DOCKER_DAEMON_FILE" ]]; then
|
||||
sed -i '/{/a\ "dns": ["8.8.8.8", "8.8.4.4"],' "$DOCKER_DAEMON_FILE"
|
||||
else
|
||||
echo "{\"dns\": [\"8.8.8.8\", \"8.8.4.4\"]}" | tee "$DOCKER_DAEMON_FILE" >/dev/null
|
||||
fi
|
||||
systemctl restart docker
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
@ -776,10 +788,6 @@ get_available_version () {
|
||||
install_curl;
|
||||
fi
|
||||
|
||||
if ! command_exists jq ; then
|
||||
install_jq
|
||||
fi
|
||||
|
||||
CREDENTIALS="";
|
||||
AUTH_HEADER="";
|
||||
TAGS_RESP="";
|
||||
@ -821,13 +829,13 @@ get_available_version () {
|
||||
TAGS_RESP=$(echo $TAGS_RESP | jq -r '.results[].name')
|
||||
fi
|
||||
|
||||
VERSION_REGEX_1="[0-9]+\.[0-9]+\.[0-9]+"
|
||||
VERSION_REGEX_2="[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
|
||||
VERSION_REGEX="[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?$"
|
||||
|
||||
TAG_LIST=""
|
||||
|
||||
for item in $TAGS_RESP
|
||||
do
|
||||
if [[ $item =~ $VERSION_REGEX_1 ]] || [[ $item =~ $VERSION_REGEX_2 ]]; then
|
||||
if [[ $item =~ $VERSION_REGEX ]]; then
|
||||
TAG_LIST="$item,$TAG_LIST"
|
||||
fi
|
||||
done
|
||||
@ -930,10 +938,12 @@ set_mysql_params () {
|
||||
}
|
||||
|
||||
set_docspace_params() {
|
||||
ENV_EXTENSION=$(get_container_env_parameter "${CONTAINER_NAME}" "ENV_EXTENSION");
|
||||
DOCUMENT_SERVER_HOST=$(get_container_env_parameter "${CONTAINER_NAME}" "DOCUMENT_SERVER_HOST");
|
||||
ELK_HOST=$(get_container_env_parameter "${CONTAINER_NAME}" "ELK_HOST");
|
||||
APP_CORE_BASE_DOMAIN=$(get_container_env_parameter "${CONTAINER_NAME}" "APP_CORE_BASE_DOMAIN");
|
||||
ENV_EXTENSION=${ENV_EXTENSION:-$(get_container_env_parameter "${CONTAINER_NAME}" "ENV_EXTENSION")};
|
||||
DOCUMENT_SERVER_HOST=${DOCUMENT_SERVER_HOST:-$(get_container_env_parameter "${CONTAINER_NAME}" "DOCUMENT_SERVER_HOST")};
|
||||
ELK_HOST=${ELK_HOST:-$(get_container_env_parameter "${CONTAINER_NAME}" "ELK_HOST")};
|
||||
APP_CORE_BASE_DOMAIN=${APP_CORE_BASE_DOMAIN:-$(get_container_env_parameter "${CONTAINER_NAME}" "APP_CORE_BASE_DOMAIN")};
|
||||
APP_URL_PORTAL=${APP_URL_PORTAL:-$(get_container_env_parameter "${CONTAINER_NAME}" "APP_URL_PORTAL")};
|
||||
|
||||
[ -f ${BASE_DIR}/${PRODUCT}.yml ] && EXTERNAL_PORT=$(grep -oP '(?<=- ).*?(?=:8092)' ${BASE_DIR}/${PRODUCT}.yml)
|
||||
}
|
||||
|
||||
@ -950,9 +960,22 @@ download_files () {
|
||||
install_service svn subversion
|
||||
fi
|
||||
|
||||
if ! command_exists jq ; then
|
||||
if command_exists yum; then
|
||||
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-$REV.noarch.rpm
|
||||
fi
|
||||
install_service jq
|
||||
fi
|
||||
|
||||
if ! command_exists docker-compose; then
|
||||
install_docker_compose
|
||||
fi
|
||||
|
||||
svn export --force https://github.com/${PACKAGE_SYSNAME}/${PRODUCT}/branches/${GIT_BRANCH}/build/install/docker/ ${BASE_DIR}
|
||||
|
||||
reconfigure STATUS ${STATUS}
|
||||
reconfigure INSTALLATION_TYPE ${INSTALLATION_TYPE}
|
||||
reconfigure NETWORK_NAME ${NETWORK_NAME}
|
||||
|
||||
reconfigure MYSQL_DATABASE ${MYSQL_DATABASE}
|
||||
reconfigure MYSQL_USER ${MYSQL_USER}
|
||||
@ -961,8 +984,8 @@ download_files () {
|
||||
}
|
||||
|
||||
reconfigure () {
|
||||
local VARIABLE_NAME=$1
|
||||
local VARIABLE_VALUE=$2
|
||||
local VARIABLE_NAME="$1"
|
||||
local VARIABLE_VALUE="$2"
|
||||
|
||||
if [[ -n ${VARIABLE_VALUE} ]]; then
|
||||
sed -i "s~${VARIABLE_NAME}=.*~${VARIABLE_NAME}=${VARIABLE_VALUE}~g" $BASE_DIR/.env
|
||||
@ -970,10 +993,6 @@ reconfigure () {
|
||||
}
|
||||
|
||||
install_mysql_server () {
|
||||
if ! command_exists docker-compose; then
|
||||
install_docker_compose
|
||||
fi
|
||||
|
||||
reconfigure MYSQL_VERSION ${MYSQL_VERSION}
|
||||
reconfigure DATABASE_MIGRATION ${DATABASE_MIGRATION}
|
||||
|
||||
@ -981,10 +1000,6 @@ install_mysql_server () {
|
||||
}
|
||||
|
||||
install_document_server () {
|
||||
if ! command_exists docker-compose; then
|
||||
install_docker_compose
|
||||
fi
|
||||
|
||||
reconfigure DOCUMENT_SERVER_IMAGE_NAME "${DOCUMENT_SERVER_IMAGE_NAME}:${DOCUMENT_SERVER_VERSION:-$(get_available_version "$DOCUMENT_SERVER_IMAGE_NAME")}"
|
||||
reconfigure DOCUMENT_SERVER_JWT_HEADER ${DOCUMENT_SERVER_JWT_HEADER}
|
||||
reconfigure DOCUMENT_SERVER_JWT_SECRET ${DOCUMENT_SERVER_JWT_SECRET}
|
||||
@ -993,26 +1008,14 @@ install_document_server () {
|
||||
}
|
||||
|
||||
install_rabbitmq () {
|
||||
if ! command_exists docker-compose; then
|
||||
install_docker_compose
|
||||
fi
|
||||
|
||||
docker-compose -f $BASE_DIR/rabbitmq.yml up -d
|
||||
}
|
||||
|
||||
install_redis () {
|
||||
if ! command_exists docker-compose; then
|
||||
install_docker_compose
|
||||
fi
|
||||
|
||||
docker-compose -f $BASE_DIR/redis.yml up -d
|
||||
}
|
||||
|
||||
install_product () {
|
||||
if ! command_exists docker-compose; then
|
||||
install_docker_compose
|
||||
fi
|
||||
|
||||
DOCKER_TAG="${DOCKER_TAG:-$(get_available_version ${IMAGE_NAME})}"
|
||||
[ "${UPDATE}" = "true" ] && LOCAL_CONTAINER_TAG="$(docker inspect --format='{{index .Config.Image}}' ${CONTAINER_NAME} | awk -F':' '{print $2}')"
|
||||
|
||||
@ -1029,9 +1032,16 @@ install_product () {
|
||||
reconfigure MYSQL_HOST ${MYSQL_HOST}
|
||||
reconfigure APP_CORE_MACHINEKEY ${APP_CORE_MACHINEKEY}
|
||||
reconfigure APP_CORE_BASE_DOMAIN ${APP_CORE_BASE_DOMAIN}
|
||||
reconfigure APP_URL_PORTAL "${APP_URL_PORTAL:-"http://${PACKAGE_SYSNAME}-proxy:${EXTERNAL_PORT}"}"
|
||||
reconfigure DOCKER_TAG ${DOCKER_TAG}
|
||||
|
||||
[[ -n $EXTERNAL_PORT ]] && sed -i "s/8092:8092/${EXTERNAL_PORT}:8092/g" $BASE_DIR/${PRODUCT}.yml
|
||||
|
||||
if [ $(free -m | grep -oP '\d+' | head -n 1) -gt "12228" ]; then #RAM ~12Gb
|
||||
sed -i 's/Xms[0-9]g/Xms4g/g; s/Xmx[0-9]g/Xmx4g/g' $BASE_DIR/${PRODUCT}.yml
|
||||
else
|
||||
sed -i 's/Xms[0-9]g/Xms1g/g; s/Xmx[0-9]g/Xmx1g/g' $BASE_DIR/${PRODUCT}.yml
|
||||
fi
|
||||
|
||||
docker-compose -f $BASE_DIR/migration-runner.yml up -d
|
||||
docker-compose -f $BASE_DIR/${PRODUCT}.yml up -d
|
||||
@ -1065,15 +1075,17 @@ start_installation () {
|
||||
|
||||
docker_login
|
||||
|
||||
set_docspace_params
|
||||
domain_check
|
||||
|
||||
if [ "$UPDATE" = "true" ]; then
|
||||
set_docspace_params
|
||||
fi
|
||||
|
||||
set_jwt_secret
|
||||
set_jwt_header
|
||||
|
||||
set_core_machinekey
|
||||
|
||||
create_network
|
||||
|
||||
set_mysql_params
|
||||
|
||||
download_files
|
||||
|
@ -34,6 +34,7 @@ if [ "$UPDATE" = "true" ] && [ "$DOCUMENT_SERVER_INSTALLED" = "true" ]; then
|
||||
${package_manager} -y remove ${ds_pkg_installed_name}
|
||||
|
||||
DOCUMENT_SERVER_INSTALLED="false"
|
||||
RECONFIGURE_PRODUCT="true"
|
||||
else
|
||||
${package_manager} -y update ${ds_pkg_name}
|
||||
fi
|
||||
@ -64,8 +65,11 @@ if [ "${MYSQL_FIRST_TIME_INSTALL}" = "true" ]; then
|
||||
MYSQL_ROOT_PASS=$(echo $MYSQL_TEMPORARY_ROOT_PASS | sed -e 's/;/%/g' -e 's/=/%/g');
|
||||
fi
|
||||
|
||||
$MYSQL -e "ALTER USER '${MYSQL_SERVER_USER}'@'localhost' IDENTIFIED WITH mysql_native_password BY '${MYSQL_ROOT_PASS}'" >/dev/null 2>&1 \
|
||||
|| $MYSQL -e "UPDATE user SET plugin='mysql_native_password', authentication_string=PASSWORD('${MYSQL_ROOT_PASS}') WHERE user='${MYSQL_SERVER_USER}' and host='localhost';"
|
||||
MYSQL_AUTHENTICATION_PLUGIN=$($MYSQL -e "SHOW VARIABLES LIKE 'default_authentication_plugin';" -s | awk '{print $2}')
|
||||
MYSQL_AUTHENTICATION_PLUGIN=${MYSQL_AUTHENTICATION_PLUGIN:-caching_sha2_password}
|
||||
|
||||
$MYSQL -e "ALTER USER '${MYSQL_SERVER_USER}'@'localhost' IDENTIFIED WITH ${MYSQL_AUTHENTICATION_PLUGIN} BY '${MYSQL_ROOT_PASS}'" >/dev/null 2>&1 \
|
||||
|| $MYSQL -e "UPDATE user SET plugin='${MYSQL_AUTHENTICATION_PLUGIN}', authentication_string=PASSWORD('${MYSQL_ROOT_PASS}') WHERE user='${MYSQL_SERVER_USER}' and host='localhost';"
|
||||
|
||||
systemctl restart mysqld
|
||||
fi
|
||||
@ -151,7 +155,7 @@ if [ "$PRODUCT_INSTALLED" = "false" ]; then
|
||||
-mysqld ${MYSQL_SERVER_DB_NAME} \
|
||||
-mysqlu ${MYSQL_SERVER_USER} \
|
||||
-mysqlp ${MYSQL_ROOT_PASS}
|
||||
elif [[ $PRODUCT_CHECK_UPDATE -eq $UPDATE_AVAILABLE_CODE ]]; then
|
||||
elif [[ $PRODUCT_CHECK_UPDATE -eq $UPDATE_AVAILABLE_CODE || $RECONFIGURE_PRODUCT = "true" ]]; then
|
||||
ENVIRONMENT=$(grep -oP 'ENVIRONMENT=\K.*' /lib/systemd/system/${product}-api.service)
|
||||
CONNECTION_STRING=$(json -f /etc/${package_sysname}/${product}/appsettings.$ENVIRONMENT.json ConnectionStrings.default.connectionString)
|
||||
${package_manager} -y update ${product}
|
||||
|
@ -47,17 +47,16 @@ rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-$REV.noarch.r
|
||||
rpm -ivh https://rpms.remirepo.net/enterprise/remi-release-$REV.rpm || true
|
||||
yum localinstall -y --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$REV.noarch.rpm
|
||||
|
||||
MONOREV=$REV
|
||||
if [ "$REV" = "9" ]; then
|
||||
MONOREV="8"
|
||||
TESTING_REPO="--enablerepo=crb"
|
||||
[ $DIST != "redhat" ] && TESTING_REPO="--enablerepo=crb" || /usr/bin/crb enable
|
||||
update-crypto-policies --set DEFAULT:SHA1
|
||||
elif [ "$REV" = "8" ]; then
|
||||
POWERTOOLS_REPO="--enablerepo=powertools"
|
||||
[ $DIST != "redhat" ] && POWERTOOLS_REPO="--enablerepo=powertools" || /usr/bin/crb enable
|
||||
fi
|
||||
|
||||
#add rabbitmq & erlang repo
|
||||
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | os=centos dist=$MONOREV bash
|
||||
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | os=centos dist=$MONOREV bash
|
||||
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | os=centos dist=$REV bash
|
||||
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | os=centos dist=$REV bash
|
||||
|
||||
#add nodejs repo
|
||||
curl -sL https://rpm.nodesource.com/setup_16.x | sed 's/centos|/'$DIST'|/g' | sudo bash - || true
|
||||
@ -66,8 +65,6 @@ rpm --import http://rpm.nodesource.com/pub/el/NODESOURCE-GPG-SIGNING-KEY-EL
|
||||
#add dotnet repo
|
||||
if [ $REV = "7" ] || [[ $DIST != "redhat" && $REV = "8" ]]; then
|
||||
rpm -Uvh https://packages.microsoft.com/config/centos/$REV/packages-microsoft-prod.rpm || true
|
||||
elif rpm -q packages-microsoft-prod; then
|
||||
yum remove -y packages-microsoft-prod dotnet*
|
||||
fi
|
||||
|
||||
#add mysql repo
|
||||
@ -119,15 +116,6 @@ ${package_manager} -y install epel-release \
|
||||
SDL2 $POWERTOOLS_REPO \
|
||||
expect \
|
||||
ffmpeg $TESTING_REPO
|
||||
|
||||
py3_version=$(python3 -c 'import sys; print(sys.version_info.minor)')
|
||||
if [[ $py3_version -lt 6 ]]; then
|
||||
curl -O https://bootstrap.pypa.io/pip/3.$py3_version/get-pip.py
|
||||
else
|
||||
curl -O https://bootstrap.pypa.io/get-pip.py
|
||||
fi
|
||||
python3 get-pip.py || true
|
||||
rm get-pip.py
|
||||
|
||||
if [[ $PSQLExitCode -eq $UPDATE_AVAILABLE_CODE ]]; then
|
||||
yum -y install postgresql-upgrade
|
||||
@ -137,9 +125,4 @@ postgresql-setup initdb || true
|
||||
|
||||
semanage permissive -a httpd_t
|
||||
|
||||
if [ ! -e /usr/bin/json ]; then
|
||||
npm i json -g >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
systemctl daemon-reload
|
||||
package_services="rabbitmq-server postgresql redis nginx mysqld"
|
||||
|
57
build/install/common/build-services.ps1
Normal file
57
build/install/common/build-services.ps1
Normal file
@ -0,0 +1,57 @@
|
||||
$SRC_PATH=(get-item $PSScriptRoot ).parent.parent.parent.FullName
|
||||
$BUILD_PATH="$SRC_PATH\publish"
|
||||
|
||||
$BACKEND_NODEJS_SERVICES="ASC.Socket.IO","ASC.SsoAuth"
|
||||
$BACKEND_DOTNETCORE_SERVICES="ASC.Files", "ASC.People", "ASC.Data.Backup", "ASC.Files.Service", "ASC.Notify", "ASC.Studio.Notify", "ASC.Web.Api", "ASC.Web.Studio", "ASC.Data.Backup.BackgroundTasks", "ASC.ClearEvents", "ASC.ApiSystem", "ASC.Web.HealthChecks.UI"
|
||||
$SELF_CONTAINED="false"
|
||||
$PUBLISH_CNF="Debug"
|
||||
|
||||
$FRONTEND_BUILD_ARGS="build"
|
||||
$FRONTEND_DEPLOY_ARGS="deploy"
|
||||
$DEBUG_INFO_CHECK=""
|
||||
$MIGRATION_CHECK="true"
|
||||
$DOCKER_ENTRYPOINT="$SRC_PATH\build\install\docker\docker-entrypoint.py"
|
||||
|
||||
if(Test-Path -Path "$BUILD_PATH\services" ){
|
||||
Write-Host "== Clean up services ==" -ForegroundColor Green
|
||||
Remove-Item "$BUILD_PATH\services" -Recurse
|
||||
}
|
||||
|
||||
Write-Host "== Build ASC.Web.slnf ==" -ForegroundColor Green
|
||||
dotnet build "$SRC_PATH\ASC.Web.slnf"
|
||||
|
||||
Write-Host "== Build ASC.Migrations.sln ==" -ForegroundColor Green
|
||||
dotnet build "$SRC_PATH\ASC.Migrations.sln" -o "$BUILD_PATH\services\ASC.Migration.Runner\service\"
|
||||
|
||||
Write-Host "== Add docker-migration-entrypoint.sh to ASC.Migration.Runner ==" -ForegroundColor Green
|
||||
$FilePath = "$BUILD_PATH\services\ASC.Migration.Runner\service\docker-migration-entrypoint.sh"
|
||||
Get-Content "$SRC_PATH\build\install\docker\docker-migration-entrypoint.sh" -raw | % {$_ -replace "`r", ""} | Set-Content -NoNewline $FilePath
|
||||
|
||||
foreach ($SERVICE in $BACKEND_NODEJS_SERVICES)
|
||||
{
|
||||
Write-Host "== Build $SERVICE project ==" -ForegroundColor Green
|
||||
yarn install --cwd "$SRC_PATH\common\$SERVICE" --frozen-lockfile
|
||||
|
||||
$DST = "$BUILD_PATH\services\$SERVICE\service\"
|
||||
|
||||
if(!(Test-Path -Path $DST )){
|
||||
New-Item -ItemType "directory" -Path $DST
|
||||
}
|
||||
|
||||
Write-Host "== Copy service data to `publish\services\${SERVICE}\service` ==" -ForegroundColor Green
|
||||
Copy-Item -Path "$SRC_PATH\common\$SERVICE\*" -Destination $DST -Recurse
|
||||
Write-Host "== Add docker-entrypoint.py to $SERVICE ==" -ForegroundColor Green
|
||||
Copy-Item $DOCKER_ENTRYPOINT -Destination $DST
|
||||
}
|
||||
|
||||
Write-Host "== Publish ASC.Web.slnf ==" -ForegroundColor Green
|
||||
dotnet publish "$SRC_PATH\ASC.Web.slnf" -p "PublishProfile=FolderProfile"
|
||||
|
||||
Set-Location -Path $PSScriptRoot
|
||||
|
||||
foreach ($SERVICE in $BACKEND_DOTNETCORE_SERVICES)
|
||||
{
|
||||
Write-Host "== Add docker-entrypoint.py to $SERVICE ==" -ForegroundColor Green
|
||||
$DST = "$BUILD_PATH\services\$SERVICE\service\"
|
||||
Copy-Item $DOCKER_ENTRYPOINT -Destination $DST
|
||||
}
|
253
build/install/common/build-services.sh
Normal file
253
build/install/common/build-services.sh
Normal file
@ -0,0 +1,253 @@
|
||||
#!/bin/bash
|
||||
set -xe
|
||||
|
||||
PROJECT_REPOSITORY_NAME=${PROJECT_REPOSITORY_NAME:-"DocSpace"}
|
||||
SRC_PATH=${SRC_PATH:-$(pwd | sed "s/${PROJECT_REPOSITORY_NAME}.*/${PROJECT_REPOSITORY_NAME}/g")}
|
||||
BUILD_PATH=${BUILD_PATH:-${SRC_PATH}/publish}
|
||||
BUILD_DOTNET_CORE_ARGS=${BUILD_DOTNET_CORE_ARGS:-"false"}
|
||||
PROPERTY_BUILD=${PROPERTY_BUILD:-"all"}
|
||||
|
||||
BACKEND_NODEJS_SERVICES=${BACKEND_NODEJS_SERVICES:-"ASC.Socket.IO, ASC.SsoAuth"}
|
||||
BACKEND_DOTNETCORE_SERVICES=${BACKEND_DOTNETCORE_SERVICES:-"ASC.Files, ASC.People, ASC.Data.Backup, ASC.Files.Service, ASC.Notify, \
|
||||
ASC.Studio.Notify, ASC.Web.Api, ASC.Web.Studio, ASC.Data.Backup.BackgroundTasks, ASC.ClearEvents, ASC.ApiSystem, ASC.Web.HealthChecks.UI"}
|
||||
SELF_CONTAINED=${SELF_CONTAINED:-"false"}
|
||||
PUBLISH_BACKEND_ARGS=${PUBLISH_BACKEND_ARGS:-"false"}
|
||||
PUBLISH_CNF=${PUBLISH_CNF:-"Release"}
|
||||
|
||||
FRONTEND_BUILD_ARGS=${FRONTEND_BUILD_ARGS:-"build"}
|
||||
FRONTEND_DEPLOY_ARGS=${FRONTEND_DEPLOY_ARGS:-"deploy"}
|
||||
DEBUG_INFO_CHECK=${DEBUG_INFO_CHECK:-""}
|
||||
MIGRATION_CHECK=${MIGRATION_CHECK:-"true"}
|
||||
DOCKER_ENTRYPOINT=${DOCKER_ENTRYPOINT:-"false"}
|
||||
|
||||
ARRAY_NAME_SERVICES=()
|
||||
|
||||
while [ "$1" != "" ]; do
|
||||
case $1 in
|
||||
-sp | --srcpath )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
SRC_PATH=$2
|
||||
BUILD_PATH=${SRC_PATH}/publish
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-bp | --buildpath )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
BUILD_PATH=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-pb | --property-build )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
PROPERTY_BUILD=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-sc | --self-contained )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
SELF_CONTAINED=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-pc | --publish-configuration )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
PUBLISH_CNF=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-yb | --frontend-build-args )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
FRONTEND_BUILD_ARGS=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-yd | --frontend-deploy-args )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
FRONTEND_DEPLOY_ARGS=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-dc | --debug-check )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
DEBUG_INFO_CHECK=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-mc | --migration-check )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
MIGRATION_CHECK=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-de | --docker-entrypoint )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
DOCKER_ENTRYPOINT=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-? | -h | --help )
|
||||
echo " Usage: bash build-services.sh [PARAMETER] [[PARAMETER], ...]"
|
||||
echo " Parameters:"
|
||||
echo -e " -sp, --srcpath \t path to project root directory"
|
||||
echo -e " -bp, --buildpath \t path where generated output is placed (by default={SRC_PATH}/publish)"
|
||||
echo -e " -st, --status \t build status Ex. all/frontend-build/backend-publish/backend-dotnet-publish/backend-nodejs-publish/backend-build"
|
||||
echo -e " -sc, --self-contained \t publish the .NET runtime with your application (by default=false)"
|
||||
echo -e " -pc, --publish-configuration \t dotnet publish configuration Ex. Release/Debug"
|
||||
echo -e " -yb, --frontend-build-args \t arguments for yarn building"
|
||||
echo -e " -yd, --frontend-deploy-args \t arguments for yarn deploy"
|
||||
echo -e " -dc, --debug-check \t arguments for yarn debug info configure"
|
||||
echo -e " -mc, --migration-check \t check migration build (by default=true)"
|
||||
echo " -?, -h, --help this help"
|
||||
echo " Examples"
|
||||
echo " bash build-services.sh -sp /app/DocSpace"
|
||||
exit 0
|
||||
;;
|
||||
* )
|
||||
echo "Unknown parameter $1" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
cd ${SRC_PATH}
|
||||
function get_services_name {
|
||||
if [[ $# -gt 0 ]]
|
||||
then
|
||||
ARRAY_NAME_SERVICES=($(echo $1 | tr "," " "))
|
||||
fi
|
||||
}
|
||||
|
||||
# Builds a project dotnetcore dependencies
|
||||
function build_dotnetcore_backend {
|
||||
if [[ ${BUILD_DOTNET_CORE_ARGS} == "false" ]]
|
||||
then
|
||||
echo "== Build ASC.Web.slnf =="
|
||||
dotnet build ASC.Web.slnf
|
||||
else
|
||||
echo "== Build ASC.Web.slnf ${BUILD_DOTNET_CORE_ARGS} =="
|
||||
dotnet build ASC.Web.slnf ${BUILD_DOTNET_CORE_ARGS}
|
||||
fi
|
||||
|
||||
if [[ $# -gt 0 ]]
|
||||
then
|
||||
local migration_check=$(echo $1 | tr '[:upper:]' '[:lower:]' | tr -d ' ')
|
||||
if [[ ${migration_check} == "true" ]]
|
||||
then
|
||||
echo "== Build ASC.Migrations.sln =="
|
||||
dotnet build ASC.Migrations.sln -o ${BUILD_PATH}/services/ASC.Migration.Runner/service/
|
||||
fi
|
||||
if [[ ${DOCKER_ENTRYPOINT} != "false" ]]
|
||||
then
|
||||
echo "== ADD ${SRC_PATH}/build/install/docker/docker-migration-entrypoint.sh to ASC.Migration.Runner =="
|
||||
cp ${SRC_PATH}/build/install/docker/docker-migration-entrypoint.sh ${BUILD_PATH}/services/ASC.Migration.Runner/service/
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Publish BACKEND dotnetcore services
|
||||
function backend-dotnet-publish {
|
||||
# List of names for nodejs backend projects
|
||||
get_services_name "${BACKEND_DOTNETCORE_SERVICES}"
|
||||
|
||||
echo "== Publish ASC.Web.slnf =="
|
||||
|
||||
if [[ ${PUBLISH_BACKEND_ARGS} == "false" ]]
|
||||
then
|
||||
dotnet publish $SRC_PATH/ASC.Web.slnf -p "PublishProfile=FolderProfile"
|
||||
else
|
||||
dotnet publish $SRC_PATH/ASC.Web.slnf ${PUBLISH_BACKEND_ARGS} -p "PublishProfile=FolderProfile"
|
||||
fi
|
||||
|
||||
if [[ ${DOCKER_ENTRYPOINT} != "false" ]]
|
||||
then
|
||||
for i in ${!ARRAY_NAME_SERVICES[@]}; do
|
||||
echo "== ADD ${DOCKER_ENTRYPOINT} to ${ARRAY_NAME_SERVICES[$i]} =="
|
||||
cp ${DOCKER_ENTRYPOINT} ${BUILD_PATH}/services/${ARRAY_NAME_SERVICES[$i]}/service/
|
||||
done
|
||||
fi
|
||||
|
||||
ARRAY_NAME_SERVICES=()
|
||||
}
|
||||
|
||||
# Install BACKEND dependencies for nodjs's projects
|
||||
function backend-nodejs-publish {
|
||||
# List of names for nodejs backend projects
|
||||
get_services_name "${BACKEND_NODEJS_SERVICES}"
|
||||
for i in ${!ARRAY_NAME_SERVICES[@]}; do
|
||||
echo "== Build ${ARRAY_NAME_SERVICES[$i]} project =="
|
||||
yarn install --cwd ${SRC_PATH}/common/${ARRAY_NAME_SERVICES[$i]} --frozen-lockfile && \
|
||||
mkdir -p ${BUILD_PATH}/services/${ARRAY_NAME_SERVICES[$i]}/service/ && \
|
||||
cp -rfv ${SRC_PATH}/common/${ARRAY_NAME_SERVICES[$i]}/* ${BUILD_PATH}/services/${ARRAY_NAME_SERVICES[$i]}/service/
|
||||
if [[ ${DOCKER_ENTRYPOINT} != "false" ]]
|
||||
then
|
||||
echo "== ADD ${DOCKER_ENTRYPOINT} to ${ARRAY_NAME_SERVICES[$i]} =="
|
||||
cp ${DOCKER_ENTRYPOINT} ${BUILD_PATH}/services/${ARRAY_NAME_SERVICES[$i]}/service/
|
||||
fi
|
||||
done
|
||||
ARRAY_NAME_SERVICES=()
|
||||
}
|
||||
|
||||
# Install FRONTEND dependencies for nodjs's projects
|
||||
function build_nodejs_frontend {
|
||||
echo "== yarn install =="
|
||||
yarn install
|
||||
# Install debug config mode
|
||||
if [[ $# -gt 0 ]]
|
||||
then
|
||||
local debug_info_check=$(echo $1 | tr '[:upper:]' '[:lower:]' | tr -d ' ')
|
||||
if [[ ${debug_info_check} == "true" ]]
|
||||
then
|
||||
echo "== yarn debug-info =="
|
||||
yarn debug-info
|
||||
fi
|
||||
fi
|
||||
echo "== yarn ${FRONTEND_BUILD_ARGS} =="
|
||||
yarn ${FRONTEND_BUILD_ARGS}
|
||||
|
||||
echo "== yarn ${FRONTEND_DEPLOY_ARGS} =="
|
||||
yarn ${FRONTEND_DEPLOY_ARGS}
|
||||
if [[ ${DOCKER_ENTRYPOINT} != "false" ]]
|
||||
then
|
||||
echo "== ADD ${DOCKER_ENTRYPOINT} to ASC.Login =="
|
||||
cp ${DOCKER_ENTRYPOINT} ${SRC_PATH}/build/deploy/login/
|
||||
echo "== ADD ${DOCKER_ENTRYPOINT} toASC.Editors =="
|
||||
cp ${DOCKER_ENTRYPOINT} ${SRC_PATH}/build/deploy/editor/
|
||||
fi
|
||||
}
|
||||
|
||||
function run {
|
||||
case $1 in
|
||||
all )
|
||||
build_dotnetcore_backend "${MIGRATION_CHECK}"
|
||||
backend-nodejs-publish
|
||||
build_nodejs_frontend "${DEBUG_INFO_CHECK}"
|
||||
backend-dotnet-publish
|
||||
;;
|
||||
frontend-build )
|
||||
build_nodejs_frontend "${DEBUG_INFO_CHECK}"
|
||||
;;
|
||||
backend-publish )
|
||||
build_dotnetcore_backend "${MIGRATION_CHECK}"
|
||||
backend-nodejs-publish
|
||||
backend-dotnet-publish
|
||||
;;
|
||||
|
||||
backend-dotnet-publish )
|
||||
build_dotnetcore_backend "${MIGRATION_CHECK}"
|
||||
backend-dotnet-publish
|
||||
;;
|
||||
backend-nodejs-publish )
|
||||
backend-nodejs-publish
|
||||
;;
|
||||
backend-build )
|
||||
build_dotnetcore_backend "${MIGRATION_CHECK}"
|
||||
;;
|
||||
* )
|
||||
echo "Unknown - \"$1\", Ex. all/frontend-build/backend-publish/backend-dotnet-publish/backend-nodejs-publish/backend-build" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
run "${PROPERTY_BUILD}"
|
@ -219,27 +219,25 @@ set_core_machinekey () {
|
||||
if [ "$DIST" = "RedHat" ]; then
|
||||
echo $CORE_MACHINEKEY > $APP_DIR/.private/machinekey
|
||||
chmod o-rwx $APP_DIR/.private/machinekey
|
||||
elif [ "$DIST" = "Debian" ]; then
|
||||
db_set ${PRODUCT}/machinekey $CORE_MACHINEKEY || true
|
||||
echo ${PRODUCT} ${PRODUCT}/machinekey select $CORE_MACHINEKEY | debconf-set-selections || true
|
||||
fi
|
||||
fi
|
||||
|
||||
$JSON_USERCONF "this.core={'base-domain': \"$APP_HOST\", 'machinekey': \"$CORE_MACHINEKEY\" }" >/dev/null 2>&1
|
||||
$JSON $APP_DIR/apisystem.$ENVIRONMENT.json -e "this.core={'base-domain': \"$APP_HOST\", 'machinekey': \"$CORE_MACHINEKEY\" }" >/dev/null 2>&1
|
||||
$JSON_USERCONF "this.core={'base-domain': \"$APP_HOST\", 'machinekey': \"$CORE_MACHINEKEY\", 'notify': { 'postman': \"services\" }}" >/dev/null 2>&1
|
||||
$JSON $APP_DIR/apisystem.$ENVIRONMENT.json -e "this.core={'base-domain': \"$APP_HOST\", 'machinekey': \"$CORE_MACHINEKEY\", 'notify': { 'postman': \"services\" }}" >/dev/null 2>&1
|
||||
sed "s^\(machine_key\)\s*=.*^\1 = ${CORE_MACHINEKEY}^g" -i $APP_DIR/radicale.config
|
||||
}
|
||||
|
||||
install_json() {
|
||||
if [ ! -e /usr/bin/json ]; then
|
||||
if ! command -v json; then
|
||||
echo -n "Install json package... "
|
||||
npm i json -g >/dev/null 2>&1
|
||||
curl -L https://github.com/trentm/json/raw/master/lib/json.js > /usr/bin/json
|
||||
chmod 755 /usr/bin/json
|
||||
echo "OK"
|
||||
fi
|
||||
}
|
||||
|
||||
restart_services() {
|
||||
chown -R ${PACKAGE_SYSNAME}:${PACKAGE_SYSNAME} $APP_DIR $PRODUCT_DIR $LOG_DIR
|
||||
chown -R ${PACKAGE_SYSNAME}:${PACKAGE_SYSNAME} $APP_DIR $PRODUCT_DIR $LOG_DIR /var/www/$PACKAGE_SYSNAME/Data
|
||||
|
||||
sed "s_\(ENVIRONMENT=\).*_\1${ENVIRONMENT}_i" -i /lib/systemd/system/${PRODUCT}*.service >/dev/null 2>&1
|
||||
systemctl daemon-reload
|
||||
@ -313,7 +311,7 @@ Character Set=utf8; AutoEnlist=false; SSL Mode=none;AllowPublicKeyRetrieval=true
|
||||
$JSON_USERCONF "this.ConnectionStrings={'default': {'connectionString': \"$CONNECTION_STRING\"}}" >/dev/null 2>&1
|
||||
$JSON $APP_DIR/apisystem.$ENVIRONMENT.json -e "this.ConnectionStrings={'default': {'connectionString': \"$CONNECTION_STRING\"}}" >/dev/null 2>&1
|
||||
|
||||
sed "s_\(\"ConnectionString\":\).*_\1 \"${CONNECTION_STRING//&/\\&}\"_" -i $PRODUCT_DIR/services/ASC.Migration.Runner/appsettings.runner.json
|
||||
sed "s_\(\"ConnectionString\":\).*_\1 \"${CONNECTION_STRING//_/\\_}\"_" -i $PRODUCT_DIR/services/ASC.Migration.Runner/appsettings.runner.json
|
||||
change_mysql_config
|
||||
|
||||
#Enable database migration
|
||||
@ -400,10 +398,13 @@ change_mysql_config(){
|
||||
sed "s/collation_server.*/collation_server = utf8_general_ci/" -i ${CNF_PATH} || true # ignore errors
|
||||
fi
|
||||
|
||||
MYSQL_AUTHENTICATION_PLUGIN=$($MYSQL -e "SHOW VARIABLES LIKE 'default_authentication_plugin';" -s | awk '{print $2}')
|
||||
MYSQL_AUTHENTICATION_PLUGIN=${MYSQL_AUTHENTICATION_PLUGIN:-caching_sha2_password}
|
||||
|
||||
if ! grep -q "^default-authentication-plugin" ${CNF_PATH}; then
|
||||
sed '/\[mysqld\]/a default-authentication-plugin = mysql_native_password' -i ${CNF_PATH}
|
||||
sed "/\[mysqld\]/a default-authentication-plugin = ${MYSQL_AUTHENTICATION_PLUGIN}" -i ${CNF_PATH}
|
||||
else
|
||||
sed "s/default-authentication-plugin.*/default-authentication-plugin = mysql_native_password/" -i ${CNF_PATH} || true # ignore errors
|
||||
sed "s/default-authentication-plugin.*/default-authentication-plugin = ${MYSQL_AUTHENTICATION_PLUGIN}/" -i ${CNF_PATH} || true # ignore errors
|
||||
fi
|
||||
|
||||
if [ -e ${CNF_SERVICE_PATH} ]; then
|
||||
@ -431,7 +432,7 @@ setup_nginx(){
|
||||
echo -n "Configuring nginx... "
|
||||
|
||||
# Remove default nginx website
|
||||
rm -f $NGINX_CONF/default.conf >/dev/null 2>&1 || rm -f $NGINX_DIR/sites-enabled/default >/dev/null 2>&1
|
||||
rm -f $NGINX_CONF/default.conf $NGINX_DIR/sites-enabled/default
|
||||
sed -i "s_\(listen\).*;_\1 $APP_PORT;_" $NGINX_CONF/${PACKAGE_SYSNAME}.conf
|
||||
|
||||
sed "s!\(^worker_processes\).*;!\1 ${NGINX_WORKER_PROCESSES:-$(grep processor /proc/cpuinfo | wc -l)};!" -i ${NGINX_DIR}/nginx.conf
|
||||
@ -522,11 +523,16 @@ setup_docs() {
|
||||
#Save Docs address and JWT in .json
|
||||
$JSON_USERCONF "this.files={'docservice': {\
|
||||
'secret': {'value': \"$DOCUMENT_SERVER_JWT_SECRET\",'header': \"$DOCUMENT_SERVER_JWT_HEADER\"}, \
|
||||
'url': {'public': \"http://${DOCUMENT_SERVER_HOST}:${DOCUMENT_SERVER_PORT}\", 'internal': \"\",'portal': \"http://$APP_HOST:$APP_PORT\"}}}" >/dev/null 2>&1
|
||||
'url': {'public': \"/ds-vpath/\", 'internal': \"http://${DOCUMENT_SERVER_HOST}:${DOCUMENT_SERVER_PORT}\",'portal': \"http://$APP_HOST:$APP_PORT\"}}}" >/dev/null 2>&1
|
||||
|
||||
echo "OK"
|
||||
}
|
||||
|
||||
setup_enterprise() {
|
||||
[ ! -d /var/www/$PACKAGE_SYSNAME/Data/ ] && mkdir -p /var/www/$PACKAGE_SYSNAME/Data/
|
||||
$JSON $APP_DIR/appsettings.json -e "this.license.file={'path': \"/var/www/$PACKAGE_SYSNAME/Data/license.lic\"}" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
change_elasticsearch_config(){
|
||||
|
||||
systemctl stop elasticsearch
|
||||
@ -652,7 +658,7 @@ if command -v yum >/dev/null 2>&1; then
|
||||
REDIS_PACKAGE="redis"
|
||||
elif command -v apt >/dev/null 2>&1; then
|
||||
DIST="Debian"
|
||||
PACKAGE_MANAGER="dpkg -l"
|
||||
PACKAGE_MANAGER="dpkg -s"
|
||||
MYSQL_PACKAGE="mysql"
|
||||
REDIS_PACKAGE="redis-server"
|
||||
fi
|
||||
@ -667,9 +673,12 @@ fi
|
||||
|
||||
if $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver >/dev/null 2>&1 || $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver-de >/dev/null 2>&1 || $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver-ee >/dev/null 2>&1; then
|
||||
setup_docs
|
||||
if $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver-ee >/dev/null 2>&1; then
|
||||
setup_enterprise
|
||||
fi
|
||||
fi
|
||||
|
||||
if $PACKAGE_MANAGER nginx >/dev/null 2>&1; then
|
||||
if $PACKAGE_MANAGER nginx >/dev/null 2>&1 || $PACKAGE_MANAGER nginx-extras >/dev/null 2>&1; then
|
||||
setup_nginx
|
||||
fi
|
||||
|
||||
|
@ -161,7 +161,7 @@ reassign_values (){
|
||||
elif [[ "${SERVICE_NAME}" = "migration-runner" ]]; then
|
||||
SERVICE_TYPE="simple"
|
||||
RESTART="no"
|
||||
EXEC_START="${DOTNET_RUN} ${WORK_DIR}${EXEC_FILE}"
|
||||
EXEC_START="${DOTNET_RUN} ${WORK_DIR}${EXEC_FILE} standalone=true"
|
||||
else
|
||||
SERVICE_TYPE="notify"
|
||||
RESTART="always"
|
||||
|
@ -5,10 +5,12 @@ Maintainer: Ascensio System SIA <support@onlyoffice.com>
|
||||
Build-Depends: debhelper (>= 10), po-debconf, nodejs (>=18), dotnet-sdk-7.0, yarn
|
||||
Standards-Version: {{package_header_tag_version}}
|
||||
Homepage: https://www.onlyoffice.com/
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
|
||||
Package: {{product}}
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: debconf,
|
||||
${misc:Depends}, ${shlibs:Depends},
|
||||
{{product}}-api (= {{package_header_tag_version}}),
|
||||
@ -36,127 +38,174 @@ Description: {{product}}
|
||||
predefined permissions. Dependency package.
|
||||
|
||||
Package: {{product}}-common
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: adduser, logrotate, ${misc:Depends}, ${shlibs:Depends}
|
||||
Recommends: default-mysql-client
|
||||
Description: {{product}}-common
|
||||
{{product}}-common
|
||||
A package containing configs and scripts
|
||||
|
||||
Package: {{product}}-backup
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-backup
|
||||
{{product}}-backup
|
||||
The service which handles API requests related to backup
|
||||
|
||||
Package: {{product}}-files
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Recommends: elasticsearch (= 7.10.0)
|
||||
Description: {{product}}-files
|
||||
{{product}}-files
|
||||
The service which handles API requests related to
|
||||
documents and launches the OFormService service
|
||||
|
||||
Package: {{product}}-files-services
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Recommends: ffmpeg, elasticsearch (= 7.10.0)
|
||||
Description: {{product}}-files-services
|
||||
{{product}}-files-services
|
||||
The service which launches additional services related to file management:
|
||||
- ElasticSearchIndexService - indexes documents using elasticsearch;
|
||||
- FeedAggregatorService - aggregates notifications;
|
||||
- FeedCleanerService - removes notifications;
|
||||
- FileConverterService - converts documents;
|
||||
- ThumbnailBuilderService - generates thumbnails for documents;
|
||||
- Launcher - removes outdated files from Trash;
|
||||
|
||||
Package: {{product}}-notify
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Recommends: ffmpeg, elasticsearch (= 7.10.0)
|
||||
Description: {{product}}-notify
|
||||
{{product}}-notify
|
||||
The service which launches additional services
|
||||
related to notifications about DocSpace events:
|
||||
NotifySenderService which sends messages from the base,
|
||||
and NotifyCleanerService which removes messages
|
||||
|
||||
Package: {{product}}-people-server
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-people-server
|
||||
{{product}}-people-server
|
||||
The service which handles API requests related to the People module
|
||||
|
||||
Package: {{product}}-socket
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), nodejs (>= 16), ${misc:Depends}, ${shlibs:Depends}
|
||||
Recommends: redis-server
|
||||
Description: {{product}}-socket
|
||||
{{product}}-socket
|
||||
The service which provides two-way communication between a client and a server
|
||||
|
||||
Package: {{product}}-studio-notify
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-studio-notify
|
||||
{{product}}-studio-notify
|
||||
The service responsible for creating notifications and
|
||||
sending them to other services, for example, TelegramService and NotifyService
|
||||
|
||||
Package: {{product}}-api
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Recommends: rabbitmq-server, apache-activemq, redis-server
|
||||
Description: {{product}}-api
|
||||
{{product}}-api
|
||||
The service which is used for working with a certain portal. This service
|
||||
handles API requests not related to backup, documents, and the People
|
||||
module, for example, requests related to settings, audit, authentication, etc.
|
||||
|
||||
Package: {{product}}-api-system
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-api-system
|
||||
{{product}}-api-system
|
||||
The service which is used for working with portals (creating, removing, etc.)
|
||||
|
||||
Package: {{product}}-studio
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-studio
|
||||
{{product}}-studio
|
||||
The service which processes storage handlers and authorization pages
|
||||
|
||||
Package: {{product}}-proxy
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), nginx-extras (>= 1.9.5), ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-proxy
|
||||
{{product}}-proxy
|
||||
The service which is used as a web server and reverse proxy,
|
||||
it receives and handles requests, transmits them to other services,
|
||||
receives a response from them and returns it to the client
|
||||
|
||||
Package: {{product}}-ssoauth
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), nodejs (>= 16), ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-ssoauth
|
||||
{{product}}-ssoauth
|
||||
The service responsible for enabling and configuring
|
||||
SAML-based single sign-on (SSO) authentication to provide a more quick,
|
||||
easy and secure way to access DocSpace for users
|
||||
|
||||
Package: {{product}}-backup-background
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-backup-background
|
||||
{{product}}-backup-background
|
||||
The service which launches additional services related to backup creation:
|
||||
- BackupWorkerService - launches WorkerService which runs backup/restore, etc;
|
||||
- BackupListenerService - waits for a signal to delete backups;
|
||||
- BackupCleanerTempFileService - removes temporary backup files;
|
||||
- BackupCleanerService - removes outdated backup files;
|
||||
- BackupSchedulerService - runs backup according to a schedule;
|
||||
|
||||
Package: {{product}}-clear-events
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-clear-events
|
||||
{{product}}-clear-events
|
||||
The service responsible for clearing the login_events and audit_events tables
|
||||
by LoginHistoryLifeTime and AuditTrailLifeTime to log out users after a timeout
|
||||
|
||||
Package: {{product}}-migration-runner
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-migration-runner
|
||||
{{product}}-migration-runner
|
||||
The service responsible for the database creation.
|
||||
A database connection is transferred to the service and
|
||||
the service creates tables and populates them with values
|
||||
|
||||
Package: {{product}}-radicale
|
||||
Architecture: any
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), python3-pip, ${misc:Depends}, ${shlibs:Depends}
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), python3-pip, python3-requests, python3-setuptools, ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-radicale
|
||||
{{product}}-radicale
|
||||
Radicale is a server designed to support the CalDav and CardDav protocols.
|
||||
It operates either as a standalone package using its own internal http server
|
||||
or can be integrated with an existing webserver
|
||||
|
||||
Package: {{product}}-doceditor
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), nodejs (>= 16), ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-doceditor
|
||||
{{product}}-doceditor
|
||||
The service which allows interaction with documentserver
|
||||
|
||||
Package: {{product}}-login
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), nodejs (>= 16), ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-login
|
||||
{{product}}-login
|
||||
The service which is used for logging users and displaying the wizard
|
||||
|
||||
Package: {{product}}-healthchecks
|
||||
Architecture: any
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: {{product}}-healthchecks
|
||||
{{product}}-healthchecks
|
||||
The service which displays launched services
|
||||
|
@ -16,7 +16,9 @@ case "$1" in
|
||||
CORE_MACHINEKEY="$RET"
|
||||
|
||||
args+=(-e "$ENVIRONMENT" -ash "$APP_HOST" -asp "$APP_PORT" );
|
||||
[ -n "$CORE_MACHINEKEY" ] && args+=(-mk "$CORE_MACHINEKEY" );
|
||||
|
||||
[ -z "$CORE_MACHINEKEY" ] && CORE_MACHINEKEY=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 12) && db_set {{product}}/machinekey $CORE_MACHINEKEY
|
||||
args+=(-mk "$CORE_MACHINEKEY" )
|
||||
|
||||
db_get {{product}}/db-host || true
|
||||
DB_HOST="$RET"
|
||||
@ -30,6 +32,19 @@ case "$1" in
|
||||
args+=(-mysqlh "$DB_HOST" -mysqld "$DB_NAME" -mysqlu "$DB_USER" );
|
||||
[ -n "$DB_PWD" ] && args+=(-mysqlp "$DB_PWD" );
|
||||
|
||||
command -v mysql >/dev/null 2>&1 || { echo "MySQL client not found"; exit 1; }
|
||||
MYSQL="mysql -h$DB_HOST -u$DB_USER"
|
||||
if [ -n "$DB_PWD" ]; then
|
||||
MYSQL="$MYSQL -p$DB_PWD"
|
||||
fi
|
||||
|
||||
$MYSQL -e ";" >/dev/null 2>&1
|
||||
ERRCODE=$?
|
||||
if [ $ERRCODE -ne 0 ]; then
|
||||
systemctl mysql start >/dev/null 2>&1
|
||||
$MYSQL -e ";" >/dev/null 2>&1 || { echo "Trying to establish MySQL connection... FAILURE"; exit 1; }
|
||||
fi
|
||||
|
||||
db_get {{product}}/redis-host || true
|
||||
REDIS_HOST="$RET"
|
||||
db_get {{product}}/redis-port || true
|
||||
@ -57,9 +72,9 @@ case "$1" in
|
||||
|
||||
args+=(-ess "$ELK_SHEME" -esh "$ELK_HOST" -esp "$ELK_PORT" );
|
||||
|
||||
db_get onlyoffice/db-host || true
|
||||
db_get {{product}}/ds-host || true
|
||||
DOCUMENT_SERVER_HOST="$RET"
|
||||
db_get onlyoffice/ds-port || true
|
||||
db_get {{product}}/ds-port || true
|
||||
DOCUMENT_SERVER_PORT="$RET"
|
||||
|
||||
args+=(-dsh "$DOCUMENT_SERVER_HOST" -dsp "$DOCUMENT_SERVER_PORT" );
|
||||
|
@ -1,2 +1,3 @@
|
||||
/var/log/onlyoffice/{{product}}
|
||||
/etc/onlyoffice/{{product}}/.private
|
||||
/var/www/onlyoffice/Data
|
||||
|
@ -9,10 +9,7 @@ DIR="/var/www/{{product}}"
|
||||
[ -f /usr/lib/python3.$(python3 -c 'import sys; print(sys.version_info.minor)')/EXTERNALLY-MANAGED ] && \
|
||||
rm /usr/lib/python3.$(python3 -c 'import sys; print(sys.version_info.minor)')/EXTERNALLY-MANAGED
|
||||
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install --upgrade requests
|
||||
python3 -m pip install --upgrade setuptools
|
||||
python3 -m pip install --upgrade radicale==3.0.5
|
||||
python3 -m pip install --upgrade radicale
|
||||
python3 -m pip install --upgrade ${DIR}/Tools/radicale/plugins/app_auth_plugin/.
|
||||
python3 -m pip install --upgrade ${DIR}/Tools/radicale/plugins/app_store_plugin/.
|
||||
python3 -m pip install --upgrade ${DIR}/Tools/radicale/plugins/app_rights_plugin/.
|
||||
|
@ -32,6 +32,16 @@ Type: string
|
||||
Default: onlyoffice
|
||||
Description: Database name:
|
||||
|
||||
Template: {{product}}/ds-host
|
||||
Type: string
|
||||
Default: localhost
|
||||
Description: ONLYOFFICE Docs host:
|
||||
|
||||
Template: {{product}}/ds-port
|
||||
Type: string
|
||||
Default: 8083
|
||||
Description: ONLYOFFICE Docs port:
|
||||
|
||||
Template: {{product}}/elasticsearch-sheme
|
||||
Type: select
|
||||
Choices: http, https
|
||||
|
@ -32,19 +32,20 @@ override_dh_auto_build:
|
||||
cd ${SRC_PATH}/${SCRIPT_PATH}; \
|
||||
bash build-frontend.sh -sp ${SRC_PATH}; \
|
||||
bash build-backend.sh -sp ${SRC_PATH}; \
|
||||
bash publish-backend.sh -sp ${SRC_PATH} -ar "-r linux-x64"
|
||||
bash publish-backend.sh -sp ${SRC_PATH}
|
||||
|
||||
find ${SRC_PATH}/publish/ \
|
||||
-depth -type f -regex '.*\(eslintrc.*\|npmignore\|gitignore\|gitattributes\|gitmodules\|un~\|DS_Store\)' -exec rm -f {} \;
|
||||
|
||||
rm -rf ${SRC_PATH}/ASC.Migration.Runner/service/runtimes/linux-arm*
|
||||
rm -f ${SRC_PATH}/config/nginx/onlyoffice-login.conf
|
||||
sed -i "s@var/www@var/www/${PRODUCT}@g" ${SRC_PATH}/config/nginx/*.conf
|
||||
sed -i "s@var/www@var/www/${PRODUCT}@g" ${SRC_PATH}/config/nginx/includes/*.conf
|
||||
|
||||
if ! grep -q 'var/www/${PRODUCT}' ${SRC_PATH}/config/nginx/*.conf; then find ${SRC_PATH}/config/nginx/ -name "*.conf" -exec sed -i "s@\(var/www/\)@\1${PRODUCT}/@" {} +; fi
|
||||
|
||||
json -I -f ${SRC_PATH}/config/appsettings.services.json -e "this.logPath=\"/var/log/onlyoffice/${PRODUCT}\"" -e "this.socket={ 'path': '../ASC.Socket.IO/' }" \
|
||||
-e "this.ssoauth={ 'path': '../ASC.SsoAuth/' }" -e "this.core={ 'products': { 'folder': '/var/www/${PRODUCT}/products', 'subfolder': 'server'} }"
|
||||
|
||||
find ${SRC_PATH}/config/ -type f -regex '.*\.\(test\|dev\).*' -delete
|
||||
|
||||
for i in ${PRODUCT} $$(ls ${CURRENT_PATH}/debian/*.install | grep -oP 'debian/\K.*' | grep -o '^[^.]*'); do \
|
||||
cp ${CURRENT_PATH}/debian/source/lintian-overrides ${CURRENT_PATH}/debian/$$i.lintian-overrides; \
|
||||
done
|
||||
@ -60,7 +61,10 @@ override_dh_strip:
|
||||
dh_strip -Xarm --no-automatic-dbgsym
|
||||
|
||||
override_dh_shlibdeps:
|
||||
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info -Xarm -Xkafka
|
||||
dh_shlibdeps -Xarm -Xkafka -- -xlibgcc-s1 --ignore-missing-info -xlibgcc1
|
||||
|
||||
override_dh_builddeb:
|
||||
dh_builddeb -- -Zxz
|
||||
|
||||
override_dh_installinit:
|
||||
# don't do anything, silences lintian warnings "init.d-script-not-included-in-package"
|
||||
|
@ -7,7 +7,7 @@ privacy-breach-generic var/www/{{product}}/services/*/node_modules/*
|
||||
# Ignoring node_modules errors due to lack of ability to influence them
|
||||
script-not-executable var/www/{{product}}/services/*/node_modules/*
|
||||
# Ignoring node_modules errors due to lack of ability to influence them
|
||||
unusual-interpreter var/www/{{product}}/services/*/node_modules/*
|
||||
unusual-interpreter */node_modules/*
|
||||
|
||||
# The use of the /var/www directory is caused by its past history as the default document root
|
||||
dir-or-file-in-var-www
|
||||
@ -44,3 +44,12 @@ untranslatable-debconf-templates
|
||||
|
||||
# We use this to protect sensitive information (ie passwords) in the config file
|
||||
non-standard-file-perm
|
||||
|
||||
# There are instances where temporary or future code sections need to be retained for documentation or future development purposes
|
||||
no-code-sections
|
||||
|
||||
# Ignoring errors due to lack of ability to influence them
|
||||
library-not-linked-against-libc
|
||||
|
||||
# Some file triggers a privacy concern, specifically references an image files .png
|
||||
privacy-breach-generic
|
||||
|
@ -1,6 +1,7 @@
|
||||
# docker-compose tags #
|
||||
PRODUCT=onlyoffice
|
||||
REPO=${PRODUCT}
|
||||
INSTALLATION_TYPE=ENTERPRISE
|
||||
STATUS=""
|
||||
DOCKER_IMAGE_PREFIX=${STATUS}docspace
|
||||
DOCKER_TAG=latest
|
||||
@ -34,6 +35,8 @@
|
||||
# app service environment #
|
||||
ENV_EXTENSION=none
|
||||
APP_CORE_BASE_DOMAIN=localhost
|
||||
APP_URL_PORTAL="http://localhost:8092"
|
||||
|
||||
APP_KNOWN_PROXIES=""
|
||||
APP_KNOWN_NETWORKS=""
|
||||
APP_CORE_MACHINEKEY=your_core_machinekey
|
||||
|
@ -1,212 +1,372 @@
|
||||
FROM ubuntu:18.04
|
||||
ARG SRC_PATH="/app/onlyoffice/src"
|
||||
ARG BUILD_PATH="/var/www"
|
||||
ARG DOTNET_SDK="mcr.microsoft.com/dotnet/sdk:7.0"
|
||||
ARG DOTNET_RUN="mcr.microsoft.com/dotnet/aspnet:7.0"
|
||||
|
||||
ARG RELEASE_DATE="2016-06-21"
|
||||
ARG RELEASE_DATE_SIGN=""
|
||||
ARG VERSION="8.9.0.190"
|
||||
ARG SOURCE_REPO_URL="deb http://static.teamlab.com.s3.amazonaws.com/repo/debian squeeze main"
|
||||
FROM $DOTNET_SDK AS base
|
||||
ARG SRC_PATH
|
||||
ARG BUILD_PATH
|
||||
ARG BUILD_DOTNET_CORE_ARGS
|
||||
ENV BUILD_DOTNET_CORE_ARGS=${BUILD_DOTNET_CORE_ARGS}
|
||||
ARG PROPERTY_BUILD="all"
|
||||
ARG BACKEND_NODEJS_SERVICES
|
||||
ENV BACKEND_NODEJS_SERVICES=${BACKEND_NODEJS_SERVICES}
|
||||
ARG BACKEND_DOTNETCORE_SERVICES
|
||||
ENV BACKEND_DOTNETCORE_SERVICES=${BACKEND_DOTNETCORE_SERVICES}
|
||||
ARG SELF_CONTAINED=""
|
||||
ARG PUBLISH_BACKEND_ARGS
|
||||
ENV PUBLISH_BACKEND_ARGS=${PUBLISH_BACKEND_ARGS}
|
||||
ARG PUBLISH_CNF="Release"
|
||||
ARG FRONTEND_BUILD_ARGS="build"
|
||||
ARG FRONTEND_DEPLOY_ARGS="deploy"
|
||||
ARG DEBUG_INFO_CHECK="true"
|
||||
ARG MIGRATION_CHECK="true"
|
||||
ARG GIT_BRANCH="master"
|
||||
ARG RELEASE_DATE="2016-06-22"
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ARG GIT_BRANCH="develop"
|
||||
ARG PRODUCT_VERSION=0.0.0
|
||||
ARG BUILD_NUMBER=0
|
||||
|
||||
LABEL onlyoffice.community.release-date="${RELEASE_DATE}" \
|
||||
onlyoffice.community.version="${VERSION}" \
|
||||
LABEL onlyoffice.appserver.release-date="${RELEASE_DATE}" \
|
||||
maintainer="Ascensio System SIA <support@onlyoffice.com>"
|
||||
|
||||
ENV LANG=en_US.UTF-8 \
|
||||
LANGUAGE=en_US:en \
|
||||
LC_ALL=en_US.UTF-8
|
||||
|
||||
WORKDIR ${SRC_PATH}
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN apt-get -y update && \
|
||||
apt-get -y upgrade && \
|
||||
apt-get -y dist-upgrade && \
|
||||
apt-get -yq install gnupg2 ca-certificates && \
|
||||
apt-get install -yq sudo locales && \
|
||||
apt-get install -yq \
|
||||
sudo \
|
||||
locales \
|
||||
git \
|
||||
npm && \
|
||||
locale-gen en_US.UTF-8 && \
|
||||
npm install --global yarn && \
|
||||
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - && \
|
||||
apt-get install -y nodejs && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
RUN git clone -b main/community-server https://github.com/ONLYOFFICE/document-templates ${SRC_PATH}/ASC.Files/Server/DocStore
|
||||
|
||||
RUN mkdir -p /app/onlyoffice/ && \
|
||||
find config/ -maxdepth 1 -name "*.json" | grep -v test | grep -v dev | xargs tar -cvf config.tar && \
|
||||
tar -C "/app/onlyoffice/" -xvf config.tar && \
|
||||
cp config/*.config /app/onlyoffice/config/ && \
|
||||
mkdir -p ${SRC_PATH}/build/deploy/client && \
|
||||
mkdir -p ${SRC_PATH}/build/deploy/public && \
|
||||
mkdir -p /etc/nginx/conf.d && cp -f config/nginx/onlyoffice*.conf /etc/nginx/conf.d/ && \
|
||||
mkdir -p /etc/nginx/includes/ && cp -f config/nginx/includes/onlyoffice*.conf /etc/nginx/includes/ && \
|
||||
sed -i "s/\"number\".*,/\"number\": \"${PRODUCT_VERSION}.${BUILD_NUMBER}\",/g" /app/onlyoffice/config/appsettings.json && \
|
||||
sed -e 's/#//' -i /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
cd ${SRC_PATH}/build/install/common/ && \
|
||||
bash build-services.sh \
|
||||
-sp "${SRC_PATH}" \
|
||||
-bp "${BUILD_PATH}" \
|
||||
-pb "${PROPERTY_BUILD}" \
|
||||
-sc "${SELF_CONTAINED}" \
|
||||
-pc "${PUBLISH_CNF}" \
|
||||
-yb "${FRONTEND_BUILD_ARGS}" \
|
||||
-yd "${FRONTEND_DEPLOY_ARGS}" \
|
||||
-dc "${DEBUG_INFO_CHECK}" \
|
||||
-mc "${MIGRATION_CHECK}" &&\
|
||||
rm -rf ${SRC_PATH}/common/* && \
|
||||
rm -rf ${SRC_PATH}/web/ASC.Web.Core/* && \
|
||||
rm -rf ${SRC_PATH}/web/ASC.Web.Studio/* && \
|
||||
rm -rf ${SRC_PATH}/products/ASC.Files/Service/* && \
|
||||
rm -rf ${SRC_PATH}/products/ASC.Files/Server/* && \
|
||||
rm -rf ${SRC_PATH}/products/ASC.People/Server/*
|
||||
|
||||
FROM $DOTNET_RUN as dotnetrun
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
# add defualt user and group for no-root run
|
||||
RUN mkdir -p /var/log/onlyoffice && \
|
||||
mkdir -p /app/onlyoffice/data && \
|
||||
addgroup --system --gid 107 onlyoffice && \
|
||||
adduser -uid 104 --quiet --home /var/www/onlyoffice --system --gid 107 onlyoffice && \
|
||||
addgroup --system --gid 104 elasticsearch && \
|
||||
adduser -uid 103 --quiet --home /nonexistent --system --gid 104 elasticsearch && \
|
||||
locale-gen en_US.UTF-8 && \
|
||||
chown onlyoffice:onlyoffice /app/onlyoffice -R && \
|
||||
chown onlyoffice:onlyoffice /var/log -R && \
|
||||
chown onlyoffice:onlyoffice /var/www -R && \
|
||||
apt-get -y update && \
|
||||
apt-get install -yq software-properties-common wget curl cron rsyslog && \
|
||||
curl -OL http://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb && \
|
||||
echo "mysql-apt-config mysql-apt-config/repo-codename select bionic" | sudo debconf-set-selections && \
|
||||
echo "mysql-apt-config mysql-apt-config/repo-distro select ubuntu" | sudo debconf-set-selections && \
|
||||
echo "mysql-apt-config mysql-apt-config/select-server select mysql-8.0" | sudo debconf-set-selections && \
|
||||
DEBIAN_FRONTEND=noninteractive dpkg -i mysql-apt-config_0.8.15-1_all.deb && \
|
||||
rm -f mysql-apt-config_0.8.15-1_all.deb && \
|
||||
wget http://nginx.org/keys/nginx_signing.key && \
|
||||
apt-key add nginx_signing.key && \
|
||||
echo "deb http://nginx.org/packages/mainline/ubuntu/ bionic nginx" >> /etc/apt/sources.list.d/nginx.list && \
|
||||
echo "deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx" >> /etc/apt/sources.list.d/nginx.list && \
|
||||
apt-get install -yq openjdk-8-jre-headless && \
|
||||
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add - && \
|
||||
apt-get install -yq apt-transport-https && \
|
||||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF && \
|
||||
echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | tee /etc/apt/sources.list.d/mono-official.list && \
|
||||
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-7.x.list && \
|
||||
apt-get install -yq \
|
||||
python3-pip \
|
||||
nano \
|
||||
curl \
|
||||
vim \
|
||||
libgdiplus && \
|
||||
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
|
||||
|
||||
#USER onlyoffice
|
||||
EXPOSE 5050
|
||||
ENTRYPOINT ["python3", "docker-entrypoint.py"]
|
||||
|
||||
FROM node:18.12.1-slim as noderun
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
RUN mkdir -p /var/log/onlyoffice && \
|
||||
mkdir -p /app/onlyoffice/data && \
|
||||
addgroup --system --gid 107 onlyoffice && \
|
||||
adduser -uid 104 --quiet --home /var/www/onlyoffice --system --gid 107 onlyoffice && \
|
||||
chown onlyoffice:onlyoffice /app/onlyoffice -R && \
|
||||
chown onlyoffice:onlyoffice /var/log -R && \
|
||||
chown onlyoffice:onlyoffice /var/www -R && \
|
||||
apt-get -y update && \
|
||||
apt-get install -yq elasticsearch=7.4.0 && \
|
||||
add-apt-repository -y ppa:certbot/certbot && \
|
||||
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - && \
|
||||
apt-get install -y nodejs && \
|
||||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \
|
||||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && \
|
||||
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb && \
|
||||
dpkg -i packages-microsoft-prod.deb && \
|
||||
apt-get -y update && \
|
||||
apt-get install -yq nginx && \
|
||||
cd ~ && \
|
||||
wget https://downloads.apache.org/kafka/2.5.0/kafka_2.12-2.5.0.tgz && \
|
||||
tar xzf kafka_2.12-2.5.0.tgz && \
|
||||
rm kafka_2.12-2.5.0.tgz && \
|
||||
echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
|
||||
apt-get install -yq libgdiplus \
|
||||
python-certbot-nginx \
|
||||
htop \
|
||||
nano \
|
||||
dnsutils \
|
||||
python3-pip \
|
||||
multiarch-support \
|
||||
iproute2 \
|
||||
ffmpeg \
|
||||
jq \
|
||||
git \
|
||||
yarn \
|
||||
dotnet-sdk-3.1 \
|
||||
supervisor \
|
||||
mysql-client \
|
||||
mysql-server
|
||||
apt-get install -yq \
|
||||
nano \
|
||||
curl \
|
||||
vim \
|
||||
python3-pip && \
|
||||
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN git clone https://github.com/ONLYOFFICE/AppServer.git /app/onlyoffice/src/ && \
|
||||
cd /app/onlyoffice/src/ && \
|
||||
git checkout ${GIT_BRANCH} && \
|
||||
git pull
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
yarn install --cwd web/ASC.Web.Components --frozen-lockfile > build/ASC.Web.Components.log && \
|
||||
yarn pack --cwd web/ASC.Web.Components
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
component=$(ls web/ASC.Web.Components/asc-web-components-v1.*.tgz) && \
|
||||
yarn remove asc-web-components --cwd web/ASC.Web.Common --peer && \
|
||||
yarn add file:../../$component --cwd web/ASC.Web.Common --cache-folder ../../yarn --peer && \
|
||||
yarn install --cwd web/ASC.Web.Common --frozen-lockfile > build/ASC.Web.Common.log && \
|
||||
yarn pack --cwd web/ASC.Web.Common
|
||||
EXPOSE 5050
|
||||
ENTRYPOINT ["python3", "docker-entrypoint.py"]
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
npm run build:storybook --prefix web/ASC.Web.Components && \
|
||||
mkdir -p /var/www/story/ && \
|
||||
cp -Rf web/ASC.Web.Components/storybook-static/* /var/www/story/
|
||||
## Nginx image ##
|
||||
FROM nginx AS proxy
|
||||
ARG SRC_PATH
|
||||
ARG BUILD_PATH
|
||||
ARG COUNT_WORKER_CONNECTIONS=1024
|
||||
ENV DNS_NAMESERVER=127.0.0.11 \
|
||||
COUNT_WORKER_CONNECTIONS=$COUNT_WORKER_CONNECTIONS \
|
||||
MAP_HASH_BUCKET_SIZE=""
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
component=$(ls web/ASC.Web.Components/asc-web-components-v1.*.tgz) && \
|
||||
common=$(ls web/ASC.Web.Common/asc-web-common-v1.*.tgz) && \
|
||||
yarn remove asc-web-components asc-web-common --cwd web/ASC.Web.Client && \
|
||||
yarn add ../../$component --cwd web/ASC.Web.Client --cache-folder ../../yarn && \
|
||||
yarn add ../../$common --cwd web/ASC.Web.Client --cache-folder ../../yarn && \
|
||||
yarn install --cwd web/ASC.Web.Client --frozen-lockfile || (cd web/ASC.Web.Client && npm i && cd ../../) && \
|
||||
npm run build --prefix web/ASC.Web.Client && \
|
||||
rm -rf /var/www/studio/client/* && \
|
||||
mkdir -p /var/www/studio/client && \
|
||||
cp -rf web/ASC.Web.Client/build/* /var/www/studio/client
|
||||
RUN apt-get -y update && \
|
||||
apt-get install -yq vim && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
rm -rf /usr/share/nginx/html/*
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
component=$(ls web/ASC.Web.Components/asc-web-components-v1.*.tgz) && \
|
||||
common=$(ls web/ASC.Web.Common/asc-web-common-v1.*.tgz) && \
|
||||
yarn remove asc-web-components asc-web-common --cwd products/ASC.Files/Client && \
|
||||
yarn add ../../../$component --cwd products/ASC.Files/Client --cache-folder ../../../yarn && \
|
||||
yarn add ../../../$common --cwd products/ASC.Files/Client --cache-folder ../../../yarn && \
|
||||
yarn install --cwd products/ASC.Files/Client --frozen-lockfile || (cd products/ASC.Files/Client && npm i && cd ../../../) && \
|
||||
npm run build --prefix products/ASC.Files/Client && \
|
||||
mkdir -p /var/www/products/ASC.Files/client && \
|
||||
cp -Rf products/ASC.Files/Client/build/* /var/www/products/ASC.Files/client && \
|
||||
mkdir -p /var/www/products/ASC.Files/client/products/files
|
||||
# copy static services files and config values
|
||||
COPY --from=base /etc/nginx/conf.d /etc/nginx/conf.d
|
||||
COPY --from=base /etc/nginx/includes /etc/nginx/includes
|
||||
COPY --from=base ${SRC_PATH}/build/deploy/client ${BUILD_PATH}/client
|
||||
COPY --from=base ${SRC_PATH}/build/deploy/public ${BUILD_PATH}/public
|
||||
COPY --from=base ${SRC_PATH}/build/install/docker/config/nginx/templates/upstream.conf.template /etc/nginx/templates/upstream.conf.template
|
||||
COPY --from=base ${SRC_PATH}/build/install/docker/config/nginx/templates/nginx.conf.template /etc/nginx/nginx.conf.template
|
||||
COPY --from=base ${SRC_PATH}/build/install/docker/prepare-nginx-proxy.sh /docker-entrypoint.d/prepare-nginx-proxy.sh
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
component=$(ls web/ASC.Web.Components/asc-web-components-v1.*.tgz) && \
|
||||
common=$(ls web/ASC.Web.Common/asc-web-common-v1.*.tgz) && \
|
||||
yarn remove asc-web-components asc-web-common --cwd products/ASC.People/Client && \
|
||||
yarn add ../../../$component --cwd products/ASC.People/Client --cache-folder ../../../yarn && \
|
||||
yarn add ../../../$common --cwd products/ASC.People/Client --cache-folder ../../../yarn && \
|
||||
yarn install --cwd products/ASC.People/Client --frozen-lockfile || (cd products/ASC.People/Client && npm i && cd ../../../) && \
|
||||
npm run build --prefix products/ASC.People/Client && \
|
||||
mkdir -p /var/www/products/ASC.People/client && \
|
||||
cp -Rf products/ASC.People/Client/build/* /var/www/products/ASC.People/client && \
|
||||
mkdir -p /var/www/products/ASC.People/client/products/people
|
||||
# add defualt user and group for no-root run
|
||||
RUN chown nginx:nginx /etc/nginx/* -R && \
|
||||
chown nginx:nginx /docker-entrypoint.d/* && \
|
||||
# changes for upstream configure
|
||||
sed -i 's/127.0.0.1:5010/$service_api_system/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5012/$service_backup/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5007/$service_files/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5004/$service_people_server/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5000/$service_api/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5003/$service_studio/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:9899/$service_socket/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:9834/$service_sso/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5013/$service_doceditor/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5011/$service_login/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
if [[ -z "${SERVICE_CLIENT}" ]] ; then sed -i 's/127.0.0.1:5001/$service_client/' /etc/nginx/conf.d/onlyoffice.conf; fi && \
|
||||
sed -i 's/127.0.0.1:5033/$service_healthchecks/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/$public_root/\/var\/www\/public\//' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/172.*/$document_server;/' /etc/nginx/conf.d/onlyoffice.conf
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
rm -f /etc/nginx/conf.d/* && \
|
||||
mkdir -p /var/www/public/ && cp -f public/* /var/www/public/ && \
|
||||
mkdir -p /app/onlyoffice/config/ && cp -rf config/* /app/onlyoffice/config/ && \
|
||||
cp -f config/nginx/onlyoffice*.conf /etc/nginx/conf.d/ && \
|
||||
mkdir -p /etc/nginx/includes/ && cp -f config/nginx/includes/onlyoffice*.conf /etc/nginx/includes/ && \
|
||||
sed -e 's/#//' -i /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
dotnet restore ASC.Web.slnf && \
|
||||
dotnet build -r linux-x64 ASC.Web.slnf && \
|
||||
cd products/ASC.People/Server && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/products/ASC.People/server && \
|
||||
cd ../../../ && \
|
||||
cd products/ASC.Files/Server && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/products/ASC.Files/server && \
|
||||
cp -avrf DocStore /var/www/products/ASC.Files/server/ && \
|
||||
cd ../../../ && \
|
||||
cd products/ASC.Files/Service && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/products/ASC.Files/service && \
|
||||
cd ../../../ && \
|
||||
cd web/ASC.Web.Api && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/studio/api && \
|
||||
cd ../../ && \
|
||||
cd web/ASC.Web.Studio && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/studio/server && \
|
||||
cd ../../ && \
|
||||
cd common/services/ASC.Data.Backup && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/services/backup && \
|
||||
cd ../../../ && \
|
||||
cd common/services/ASC.Notify && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/services/notify && \
|
||||
cd ../../../ && \
|
||||
cd common/services/ASC.ApiSystem && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/services/apisystem && \
|
||||
cd ../../../ && \
|
||||
cd common/services/ASC.Thumbnails.Svc && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /services/thumb/service && \
|
||||
cd ../../../ && \
|
||||
yarn install --cwd common/ASC.Thumbnails --frozen-lockfile && \
|
||||
mkdir -p /var/www/services/thumb/client && cp -Rf common/ASC.Thumbnails/* /var/www/services/thumb/client && \
|
||||
cd common/services/ASC.UrlShortener.Svc && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /services/urlshortener/service && \
|
||||
cd ../../../ && \
|
||||
yarn install --cwd common/ASC.UrlShortener --frozen-lockfile && \
|
||||
mkdir -p /var/www/services/urlshortener/client && cp -Rf common/ASC.UrlShortener/* /var/www/services/urlshortener/client && \
|
||||
cd common/services/ASC.Studio.Notify && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/services/studio.notify
|
||||
## Doceditor ##
|
||||
FROM noderun as doceditor
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Editors/editor
|
||||
|
||||
COPY config/mysql/conf.d/mysql.cnf /etc/mysql/conf.d/mysql.cnf
|
||||
COPY config/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/deploy/editor/ .
|
||||
|
||||
COPY config/createdb.sql /app/onlyoffice/createdb.sql
|
||||
COPY config/onlyoffice.sql /app/onlyoffice/onlyoffice.sql
|
||||
COPY config/onlyoffice.data.sql /app/onlyoffice/onlyoffice.data.sql
|
||||
COPY config/onlyoffice.resources.sql /app/onlyoffice/onlyoffice.resources.sql
|
||||
CMD ["server.js", "ASC.Editors"]
|
||||
|
||||
RUN sed -i 's/Server=.*;Port=/Server=127.0.0.1;Port=/' /app/onlyoffice/config/appsettings.test.json
|
||||
## Login ##
|
||||
FROM noderun as login
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Login/login
|
||||
|
||||
RUN mkdir -p /var/mysqld/ && \
|
||||
chown -R mysql:mysql /var/lib/mysql /var/run/mysqld /var/mysqld/ && \
|
||||
sudo -u mysql bash -c "/usr/bin/pidproxy /var/mysqld/mysqld.pid /usr/bin/mysqld_safe --pid-file=/var/mysqld/mysqld.pid &" && \
|
||||
sleep 5s && \
|
||||
mysql -e "CREATE DATABASE IF NOT EXISTS onlyoffice CHARACTER SET utf8 COLLATE 'utf8_general_ci'" && \
|
||||
mysql -D "onlyoffice" < /app/onlyoffice/createdb.sql && \
|
||||
mysql -D "onlyoffice" < /app/onlyoffice/onlyoffice.sql && \
|
||||
mysql -D "onlyoffice" < /app/onlyoffice/onlyoffice.data.sql && \
|
||||
mysql -D "onlyoffice" < /app/onlyoffice/onlyoffice.resources.sql && \
|
||||
mysql -D "onlyoffice" -e 'CREATE USER IF NOT EXISTS "onlyoffice_user"@"localhost" IDENTIFIED WITH mysql_native_password BY "onlyoffice_pass";' && \
|
||||
mysql -D "onlyoffice" -e 'GRANT ALL PRIVILEGES ON *.* TO 'onlyoffice_user'@'localhost';' && \
|
||||
killall -u mysql -n mysql
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/deploy/login/ .
|
||||
|
||||
RUN rm -rf /var/lib/apt/lists/*
|
||||
CMD ["server.js", "ASC.Login"]
|
||||
|
||||
VOLUME /var/lib/mysql
|
||||
## ASC.Data.Backup.BackgroundTasks ##
|
||||
FROM dotnetrun AS backup_background
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/service/
|
||||
|
||||
EXPOSE 80 443 8092 8081
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/service/ .
|
||||
|
||||
ENTRYPOINT ["/usr/bin/supervisord", "--"]
|
||||
CMD ["ASC.Data.Backup.BackgroundTasks.dll", "ASC.Data.Backup.BackgroundTasks", "core:eventBus:subscriptionClientName=asc_event_bus_backup_queue"]
|
||||
|
||||
# ASC.ApiSystem ##
|
||||
FROM dotnetrun AS api_system
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.ApiSystem/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.ApiSystem/service/ .
|
||||
|
||||
CMD ["ASC.ApiSystem.dll", "ASC.ApiSystem"]
|
||||
|
||||
## ASC.ClearEvents ##
|
||||
FROM dotnetrun AS clear-events
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.ClearEvents/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.ClearEvents/service/ .
|
||||
|
||||
CMD ["ASC.ClearEvents.dll", "ASC.ClearEvents"]
|
||||
|
||||
## ASC.Data.Backup ##
|
||||
FROM dotnetrun AS backup
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Data.Backup/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Data.Backup/service/ .
|
||||
|
||||
CMD ["ASC.Data.Backup.dll", "ASC.Data.Backup"]
|
||||
|
||||
## ASC.Files ##
|
||||
FROM dotnetrun AS files
|
||||
WORKDIR ${BUILD_PATH}/products/ASC.Files/server/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Files/service/ .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/ASC.Files/Server/DocStore .
|
||||
|
||||
CMD ["ASC.Files.dll", "ASC.Files"]
|
||||
|
||||
## ASC.Files.Service ##
|
||||
FROM dotnetrun AS files_services
|
||||
ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
|
||||
WORKDIR ${BUILD_PATH}/products/ASC.Files/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Files.Service/service/ .
|
||||
COPY --from=linuxserver/ffmpeg:latest --chown=onlyoffice:onlyoffice /usr/local/bin/ /usr/local/bin/
|
||||
|
||||
CMD ["ASC.Files.Service.dll", "ASC.Files.Service", "core:eventBus:subscriptionClientName=asc_event_bus_files_service_queue"]
|
||||
|
||||
## ASC.Notify ##
|
||||
FROM dotnetrun AS notify
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Notify/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Notify/service/ .
|
||||
|
||||
CMD ["ASC.Notify.dll", "ASC.Notify", "core:eventBus:subscriptionClientName=asc_event_bus_notify_queue"]
|
||||
|
||||
## ASC.People ##
|
||||
FROM dotnetrun AS people_server
|
||||
WORKDIR ${BUILD_PATH}/products/ASC.People/server/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.People/service/ .
|
||||
|
||||
CMD ["ASC.People.dll", "ASC.People"]
|
||||
|
||||
## ASC.Socket.IO ##
|
||||
FROM noderun AS socket
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Socket.IO/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Socket.IO/service/ .
|
||||
|
||||
CMD ["server.js", "ASC.Socket.IO"]
|
||||
|
||||
## ASC.SsoAuth ##
|
||||
FROM noderun AS ssoauth
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.SsoAuth/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.SsoAuth/service/ .
|
||||
|
||||
CMD ["app.js", "ASC.SsoAuth"]
|
||||
|
||||
## ASC.Studio.Notify ##
|
||||
FROM dotnetrun AS studio_notify
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Studio.Notify/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Studio.Notify/service/ .
|
||||
|
||||
CMD ["ASC.Studio.Notify.dll", "ASC.Studio.Notify"]
|
||||
|
||||
## ASC.Web.Api ##
|
||||
FROM dotnetrun AS api
|
||||
WORKDIR ${BUILD_PATH}/studio/ASC.Web.Api/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Web.Api/service/ .
|
||||
|
||||
CMD ["ASC.Web.Api.dll", "ASC.Web.Api"]
|
||||
|
||||
## ASC.Web.Studio ##
|
||||
FROM dotnetrun AS studio
|
||||
WORKDIR ${BUILD_PATH}/studio/ASC.Web.Studio/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Web.Studio/service/ .
|
||||
|
||||
CMD ["ASC.Web.Studio.dll", "ASC.Web.Studio"]
|
||||
|
||||
## ASC.Web.HealthChecks.UI ##
|
||||
FROM dotnetrun AS healthchecks
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Web.HealthChecks.UI/service
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-healthchecks-entrypoint.sh .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Web.HealthChecks.UI/service/ .
|
||||
|
||||
ENTRYPOINT ["./docker-healthchecks-entrypoint.sh"]
|
||||
CMD ["ASC.Web.HealthChecks.UI.dll", "ASC.Web.HealthChecks.UI"]
|
||||
|
||||
## ASC.Migration.Runner ##
|
||||
FROM $DOTNET_RUN AS onlyoffice-migration-runner
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Migration.Runner/
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-migration-entrypoint.sh .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Migration.Runner/service/ .
|
||||
|
||||
ENTRYPOINT ["./docker-migration-entrypoint.sh"]
|
||||
|
||||
## image for k8s bin-share ##
|
||||
FROM busybox:latest AS bin_share
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
RUN mkdir -p /app/appserver/ASC.Files/server && \
|
||||
mkdir -p /app/appserver/ASC.People/server/ && \
|
||||
mkdir -p /app/appserver/ASC.CRM/server/ && \
|
||||
mkdir -p /app/appserver/ASC.Projects/server/ && \
|
||||
mkdir -p /app/appserver/ASC.Calendar/server/ && \
|
||||
mkdir -p /app/appserver/ASC.Mail/server/ && \
|
||||
addgroup --system --gid 107 onlyoffice && \
|
||||
adduser -u 104 onlyoffice --home /var/www/onlyoffice --system -G onlyoffice
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/bin-share-docker-entrypoint.sh /app/docker-entrypoint.sh
|
||||
COPY --from=base /var/www/services/ASC.Files/service/ /app/appserver/ASC.Files/server/
|
||||
COPY --from=base /var/www/services/ASC.People/service/ /app/appserver/ASC.People/server/
|
||||
ENTRYPOINT ["./app/docker-entrypoint.sh"]
|
||||
|
||||
## image for k8s wait-bin-share ##
|
||||
FROM busybox:latest AS wait_bin_share
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
RUN mkdir /app
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/wait-bin-share-docker-entrypoint.sh /app/docker-entrypoint.sh
|
||||
ENTRYPOINT ["./app/docker-entrypoint.sh"]
|
||||
|
@ -1,336 +0,0 @@
|
||||
ARG SRC_PATH="/app/onlyoffice/src"
|
||||
ARG BUILD_PATH="/var/www"
|
||||
ARG DOTNET_SDK="mcr.microsoft.com/dotnet/sdk:7.0"
|
||||
ARG DOTNET_RUN="mcr.microsoft.com/dotnet/aspnet:7.0"
|
||||
|
||||
FROM $DOTNET_SDK AS base
|
||||
ARG RELEASE_DATE="2022-10-09"
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ARG PRODUCT_VERSION=0.0.0
|
||||
ARG BUILD_NUMBER=0
|
||||
ARG GIT_BRANCH="develop"
|
||||
ARG SRC_PATH
|
||||
ARG BUILD_PATH
|
||||
ARG BUILD_ARGS="build"
|
||||
ARG DEPLOY_ARGS="deploy"
|
||||
ARG DEBUG_INFO="true"
|
||||
ARG PUBLISH_CNF="Debug"
|
||||
|
||||
LABEL onlyoffice.docspace.release-date="${RELEASE_DATE}" \
|
||||
maintainer="Ascensio System SIA <support@onlyoffice.com>"
|
||||
|
||||
ENV LANG=en_US.UTF-8 \
|
||||
LANGUAGE=en_US:en \
|
||||
LC_ALL=en_US.UTF-8
|
||||
|
||||
RUN apt-get -y update && \
|
||||
apt-get install -yq \
|
||||
sudo \
|
||||
locales \
|
||||
git \
|
||||
npm && \
|
||||
locale-gen en_US.UTF-8 && \
|
||||
npm install --global yarn && \
|
||||
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - && \
|
||||
apt-get install -y nodejs && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ADD https://api.github.com/repos/ONLYOFFICE/DocSpace/git/refs/heads/${GIT_BRANCH} version.json
|
||||
RUN echo ${GIT_BRANCH} && \
|
||||
git clone --recurse-submodules -b ${GIT_BRANCH} https://github.com/ONLYOFFICE/DocSpace.git ${SRC_PATH}
|
||||
|
||||
RUN cd ${SRC_PATH} && \
|
||||
mkdir -p /app/onlyoffice/ && \
|
||||
find config/ -maxdepth 1 -name "*.json" | grep -v test | xargs tar -cvf config.tar && \
|
||||
tar -C "/app/onlyoffice/" -xvf config.tar && \
|
||||
cp config/*.config /app/onlyoffice/config/ && \
|
||||
mkdir -p /etc/nginx/conf.d && cp -f config/nginx/onlyoffice.conf /etc/nginx/conf.d/ && \
|
||||
mkdir -p /etc/nginx/includes/ && cp -f config/nginx/includes/onlyoffice*.conf /etc/nginx/includes/ && \
|
||||
sed -i "s/\"number\".*,/\"number\": \"${PRODUCT_VERSION}.${BUILD_NUMBER}\",/g" /app/onlyoffice/config/appsettings.json && \
|
||||
sed -e 's/#//' -i /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
cd ${SRC_PATH}/build/install/common/ && \
|
||||
bash build-backend.sh -sp "${SRC_PATH}" && \
|
||||
bash publish-backend.sh -pc "${PUBLISH_CNF}" -sp "${SRC_PATH}" -bp "${BUILD_PATH}" && \
|
||||
cp -rf ${SRC_PATH}/products/ASC.Files/Server/DocStore ${BUILD_PATH}/products/ASC.Files/server/ && \
|
||||
rm -rf ${SRC_PATH}/common/* && \
|
||||
rm -rf ${SRC_PATH}/web/ASC.Web.Core/* && \
|
||||
rm -rf ${SRC_PATH}/web/ASC.Web.Studio/* && \
|
||||
rm -rf ${SRC_PATH}/products/ASC.Files/Server/* && \
|
||||
rm -rf ${SRC_PATH}/products/ASC.Files/Service/* && \
|
||||
rm -rf ${SRC_PATH}/products/ASC.People/Server/*
|
||||
|
||||
COPY config/mysql/conf.d/mysql.cnf /etc/mysql/conf.d/mysql.cnf
|
||||
|
||||
FROM $DOTNET_RUN as dotnetrun
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
# add defualt user and group for no-root run
|
||||
RUN mkdir -p /var/log/onlyoffice && \
|
||||
mkdir -p /app/onlyoffice/data && \
|
||||
addgroup --system --gid 107 onlyoffice && \
|
||||
adduser -uid 104 --quiet --home /var/www/onlyoffice --system --gid 107 onlyoffice && \
|
||||
chown onlyoffice:onlyoffice /app/onlyoffice -R && \
|
||||
chown onlyoffice:onlyoffice /var/log -R && \
|
||||
chown onlyoffice:onlyoffice /var/www -R && \
|
||||
apt-get -y update && \
|
||||
apt-get install -yq \
|
||||
sudo \
|
||||
nano \
|
||||
curl \
|
||||
vim \
|
||||
python3-pip \
|
||||
libgdiplus && \
|
||||
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
|
||||
|
||||
#USER onlyoffice
|
||||
EXPOSE 5050
|
||||
ENTRYPOINT ["python3", "docker-entrypoint.py"]
|
||||
|
||||
FROM node:18.12.1-slim as noderun
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
RUN mkdir -p /var/log/onlyoffice && \
|
||||
mkdir -p /app/onlyoffice/data && \
|
||||
addgroup --system --gid 107 onlyoffice && \
|
||||
adduser -uid 104 --quiet --home /var/www/onlyoffice --system --gid 107 onlyoffice && \
|
||||
chown onlyoffice:onlyoffice /app/onlyoffice -R && \
|
||||
chown onlyoffice:onlyoffice /var/log -R && \
|
||||
chown onlyoffice:onlyoffice /var/www -R && \
|
||||
apt-get -y update && \
|
||||
apt-get install -yq \
|
||||
sudo \
|
||||
nano \
|
||||
curl \
|
||||
vim \
|
||||
python3-pip && \
|
||||
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
|
||||
|
||||
EXPOSE 5050
|
||||
ENTRYPOINT ["python3", "docker-entrypoint.py"]
|
||||
|
||||
## Nginx image ##
|
||||
FROM nginx AS proxy
|
||||
ARG SRC_PATH
|
||||
ARG BUILD_PATH
|
||||
ARG COUNT_WORKER_CONNECTIONS=1024
|
||||
ENV DNS_NAMESERVER=127.0.0.11 \
|
||||
COUNT_WORKER_CONNECTIONS=$COUNT_WORKER_CONNECTIONS \
|
||||
MAP_HASH_BUCKET_SIZE=""
|
||||
|
||||
RUN apt-get -y update && \
|
||||
apt-get install -yq vim \
|
||||
dos2unix && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
rm -rf /usr/share/nginx/html/*
|
||||
|
||||
# copy static services files and config values
|
||||
COPY --from=base /etc/nginx/conf.d /etc/nginx/conf.d
|
||||
COPY --from=base /etc/nginx/includes /etc/nginx/includes
|
||||
COPY /config/nginx/templates/upstream.conf.template /etc/nginx/templates/upstream.conf.template
|
||||
COPY /config/nginx/templates/nginx.conf.template /etc/nginx/nginx.conf.template
|
||||
|
||||
COPY prepare-nginx-proxy.sh /docker-entrypoint.d/prepare-nginx-proxy.sh
|
||||
|
||||
RUN dos2unix /docker-entrypoint.d/prepare-nginx-proxy.sh && \
|
||||
apt-get --purge remove -y dos2unix && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# add defualt user and group for no-root run
|
||||
RUN chown nginx:nginx /etc/nginx/* -R && \
|
||||
chown nginx:nginx /docker-entrypoint.d/* && \
|
||||
# changes for upstream configure
|
||||
# sed -i 's/127.0.0.1:5010/$service_api_system/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5012/$service_backup/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5007/$service_files/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5004/$service_people_server/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5000/$service_api/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5003/$service_studio/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:9899/$service_socket/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:9834/$service_sso/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
# sed -i 's/127.0.0.1:9999/$service_urlshortener/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
# sed -i 's/127.0.0.1:5034/$service_migration/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5013/$service_doceditor/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5011/$service_login/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5001/$service_client/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5033/$service_healthchecks/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/$public_root/\/var\/www\/public\//' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/172.*/$document_server;/' /etc/nginx/conf.d/onlyoffice.conf
|
||||
|
||||
## ASC.Data.Backup.BackgroundTasks ##
|
||||
FROM dotnetrun AS backup_background
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/service/ .
|
||||
|
||||
CMD ["ASC.Data.Backup.BackgroundTasks.dll", "ASC.Data.Backup.BackgroundTasks"]
|
||||
|
||||
# ASC.ApiSystem ##
|
||||
# FROM dotnetrun AS api_system
|
||||
# WORKDIR ${BUILD_PATH}/services/ASC.ApiSystem/
|
||||
|
||||
# COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
# COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.ApiSystem/service/ .
|
||||
|
||||
# CMD ["ASC.ApiSystem.dll", "ASC.ApiSystem"]
|
||||
|
||||
## ASC.ClearEvents ##
|
||||
# FROM dotnetrun AS clear-events
|
||||
# WORKDIR ${BUILD_PATH}/services/ASC.ClearEvents/
|
||||
|
||||
# COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
# COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.ClearEvents/service/ .
|
||||
|
||||
# CMD ["ASC.ClearEvents.dll", "ASC.ClearEvents"]
|
||||
|
||||
## ASC.Migration ##
|
||||
# FROM dotnetrun AS migration
|
||||
# WORKDIR ${BUILD_PATH}/services/ASC.Migration/
|
||||
|
||||
# COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
# COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Migration/service/ .
|
||||
|
||||
# CMD ["ASC.Migration.dll", "ASC.Migration"]
|
||||
|
||||
## ASC.Data.Backup ##
|
||||
FROM dotnetrun AS backup
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Data.Backup/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Data.Backup/service/ .
|
||||
|
||||
CMD ["ASC.Data.Backup.dll", "ASC.Data.Backup"]
|
||||
|
||||
## ASC.Files ##
|
||||
FROM dotnetrun AS files
|
||||
WORKDIR ${BUILD_PATH}/products/ASC.Files/server/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/products/ASC.Files/server/ .
|
||||
|
||||
CMD ["ASC.Files.dll", "ASC.Files"]
|
||||
|
||||
## ASC.Files.Service ##
|
||||
FROM dotnetrun AS files_services
|
||||
RUN apt-get -y update && \
|
||||
apt-get install -yq ffmpeg
|
||||
WORKDIR ${BUILD_PATH}/products/ASC.Files/service/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Files.Service/service/ .
|
||||
|
||||
CMD ["ASC.Files.Service.dll", "ASC.Files.Service"]
|
||||
|
||||
## ASC.Notify ##
|
||||
# FROM dotnetrun AS notify
|
||||
# WORKDIR ${BUILD_PATH}/services/ASC.Notify/service
|
||||
|
||||
# COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
# COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Notify/service/ .
|
||||
|
||||
# CMD ["ASC.Notify.dll", "ASC.Notify"]
|
||||
|
||||
## ASC.People ##
|
||||
FROM dotnetrun AS people_server
|
||||
WORKDIR ${BUILD_PATH}/products/ASC.People/server/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/products/ASC.People/server/ .
|
||||
|
||||
CMD ["ASC.People.dll", "ASC.People"]
|
||||
|
||||
## ASC.Socket.IO ##
|
||||
FROM noderun AS socket
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Socket.IO/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Socket.IO/service/ .
|
||||
|
||||
CMD ["server.js", "ASC.Socket.IO"]
|
||||
|
||||
## ASC.SsoAuth ##
|
||||
FROM noderun AS ssoauth
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.SsoAuth/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.SsoAuth/service/ .
|
||||
|
||||
CMD ["app.js", "ASC.SsoAuth"]
|
||||
|
||||
## ASC.Studio.Notify ##
|
||||
FROM dotnetrun AS studio_notify
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Studio.Notify/service/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Studio.Notify/service/ .
|
||||
|
||||
CMD ["ASC.Studio.Notify.dll", "ASC.Studio.Notify"]
|
||||
|
||||
## ASC.TelegramService ##
|
||||
# FROM dotnetrun AS telegram_service
|
||||
# WORKDIR ${BUILD_PATH}/services/ASC.TelegramService/
|
||||
|
||||
# COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
# COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.TelegramService/service/ .
|
||||
|
||||
# CMD ["ASC.TelegramService.dll", "ASC.TelegramService"]
|
||||
|
||||
## ASC.UrlShortener ##
|
||||
# FROM noderun AS urlshortener
|
||||
# WORKDIR ${BUILD_PATH}/services/ASC.UrlShortener/service/
|
||||
|
||||
# COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
# COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.UrlShortener/service/ .
|
||||
|
||||
# CMD ["index.js", "ASC.UrlShortener"]
|
||||
|
||||
## ASC.Web.Api ##
|
||||
FROM dotnetrun AS api
|
||||
WORKDIR ${BUILD_PATH}/studio/ASC.Web.Api/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Web.Api/service/ .
|
||||
|
||||
CMD ["ASC.Web.Api.dll", "ASC.Web.Api"]
|
||||
|
||||
## ASC.Web.Studio ##
|
||||
FROM dotnetrun AS studio
|
||||
WORKDIR ${BUILD_PATH}/studio/ASC.Web.Studio/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Web.Studio/service/ .
|
||||
|
||||
CMD ["ASC.Web.Studio.dll", "ASC.Web.Studio"]
|
||||
|
||||
## ASC.Migration.Runner ##
|
||||
FROM $DOTNET_RUN AS onlyoffice-migration-runner
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Migration.Runner/
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -yq dos2unix
|
||||
|
||||
COPY docker-migration-entrypoint.sh docker-migration-entrypoint.sh
|
||||
|
||||
RUN dos2unix docker-migration-entrypoint.sh && \
|
||||
apt-get --purge remove -y dos2unix && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=base ${SRC_PATH}/ASC.Migration.Runner/service/ .
|
||||
|
||||
ENTRYPOINT ["./docker-migration-entrypoint.sh"]
|
115
build/install/docker/Dockerfile.runtime
Normal file
115
build/install/docker/Dockerfile.runtime
Normal file
@ -0,0 +1,115 @@
|
||||
ARG SRC_PATH="/app/onlyoffice/src"
|
||||
ARG BUILD_PATH="/var/www"
|
||||
ARG DOTNET_SDK="mcr.microsoft.com/dotnet/sdk:7.0"
|
||||
ARG DOTNET_RUN="mcr.microsoft.com/dotnet/aspnet:7.0"
|
||||
|
||||
FROM alpine:latest AS base
|
||||
ARG SRC_PATH
|
||||
ARG BUILD_PATH
|
||||
|
||||
WORKDIR ${SRC_PATH}
|
||||
|
||||
COPY /config ./config
|
||||
|
||||
RUN find config/ -maxdepth 1 -name "*.json" | grep -v test | grep -v dev | xargs tar -cvf config.tar && \
|
||||
tar -C "/app/onlyoffice/" -xvf config.tar && \
|
||||
cp config/*.config /app/onlyoffice/config/ && \
|
||||
mkdir -p /etc/nginx/conf.d && cp -f config/nginx/onlyoffice*.conf /etc/nginx/conf.d/ && \
|
||||
mkdir -p /etc/nginx/includes/ && cp -f config/nginx/includes/onlyoffice*.conf /etc/nginx/includes/ && \
|
||||
sed -i "s/\"number\".*,/\"number\": \"${PRODUCT_VERSION}.${BUILD_NUMBER}\",/g" /app/onlyoffice/config/appsettings.json && \
|
||||
sed -e 's/#//' -i /etc/nginx/conf.d/onlyoffice.conf
|
||||
|
||||
FROM $DOTNET_RUN as dotnetrun
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
# add defualt user and group for no-root run
|
||||
RUN mkdir -p /var/log/onlyoffice && \
|
||||
mkdir -p /app/onlyoffice/data && \
|
||||
addgroup --system --gid 107 onlyoffice && \
|
||||
adduser -uid 104 --quiet --home /var/www/onlyoffice --system --gid 107 onlyoffice && \
|
||||
chown onlyoffice:onlyoffice /app/onlyoffice -R && \
|
||||
chown onlyoffice:onlyoffice /var/log -R && \
|
||||
chown onlyoffice:onlyoffice /var/www -R && \
|
||||
apt-get -y update && \
|
||||
apt-get install -yq \
|
||||
python3-pip \
|
||||
nano \
|
||||
curl \
|
||||
vim \
|
||||
libgdiplus && \
|
||||
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
|
||||
|
||||
EXPOSE 5050
|
||||
ENTRYPOINT ["python3", "docker-entrypoint.py"]
|
||||
|
||||
FROM node:18.12.1-slim as noderun
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
RUN mkdir -p /var/log/onlyoffice && \
|
||||
mkdir -p /app/onlyoffice/data && \
|
||||
addgroup --system --gid 107 onlyoffice && \
|
||||
adduser -uid 104 --quiet --home /var/www/onlyoffice --system --gid 107 onlyoffice && \
|
||||
chown onlyoffice:onlyoffice /app/onlyoffice -R && \
|
||||
chown onlyoffice:onlyoffice /var/log -R && \
|
||||
chown onlyoffice:onlyoffice /var/www -R && \
|
||||
apt-get -y update && \
|
||||
apt-get install -yq \
|
||||
nano \
|
||||
curl \
|
||||
vim \
|
||||
python3-pip && \
|
||||
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
|
||||
|
||||
EXPOSE 5050
|
||||
ENTRYPOINT ["python3", "docker-entrypoint.py"]
|
||||
|
||||
FROM nginx AS proxy
|
||||
ARG SRC_PATH
|
||||
ARG BUILD_PATH
|
||||
ARG COUNT_WORKER_CONNECTIONS=1024
|
||||
ENV DNS_NAMESERVER=127.0.0.11 \
|
||||
COUNT_WORKER_CONNECTIONS=$COUNT_WORKER_CONNECTIONS \
|
||||
MAP_HASH_BUCKET_SIZE=""
|
||||
|
||||
RUN apt-get -y update && \
|
||||
apt-get install -yq vim && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
rm -rf /usr/share/nginx/html/*
|
||||
|
||||
# copy static services files and config values
|
||||
COPY --from=base /etc/nginx/conf.d /etc/nginx/conf.d
|
||||
COPY /build/install/docker/config/nginx/templates/upstream.conf.template /etc/nginx/templates/upstream.conf.template
|
||||
COPY /build/install/docker/config/nginx/templates/nginx.conf.template /etc/nginx/nginx.conf.template
|
||||
COPY /build/install/docker/prepare-nginx-proxy.sh /docker-entrypoint.d/prepare-nginx-proxy.sh
|
||||
|
||||
# todo modify for client
|
||||
# add defualt user and group for no-root run
|
||||
RUN chown nginx:nginx /etc/nginx/* -R && \
|
||||
chown nginx:nginx /docker-entrypoint.d/* && \
|
||||
# changes for upstream configure
|
||||
sed -i 's/127.0.0.1:5010/$service_api_system/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5012/$service_backup/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5007/$service_files/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5004/$service_people_server/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5000/$service_api/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5003/$service_studio/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:9899/$service_socket/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:9834/$service_sso/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5013/$service_doceditor/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5011/$service_login/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5001/$service_client/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5033/$service_healthchecks/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/$public_root/\/var\/www\/public\//' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/172.*/$document_server;/' /etc/nginx/conf.d/onlyoffice.conf
|
@ -1,128 +0,0 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
onlyoffice-backup-background-tasks:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: backup_background
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-backup-background:${DOCKER_TAG}"
|
||||
|
||||
# onlyoffice-clear-events:
|
||||
# build:
|
||||
# context: ./
|
||||
# dockerfile: "${DOCKERFILE}"
|
||||
# target: clear-events
|
||||
# image: "${REPO}/${DOCKER_IMAGE_PREFIX}-clear-events:${DOCKER_TAG}"
|
||||
|
||||
# onlyoffice-migration:
|
||||
# build:
|
||||
# context: ./
|
||||
# dockerfile: "${DOCKERFILE}"
|
||||
# target: migration
|
||||
# image: "${REPO}/${DOCKER_IMAGE_PREFIX}-migration:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-backup:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: backup
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-backup:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-files:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: files
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-files:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-files-services:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: files_services
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-files-services:${DOCKER_TAG}"
|
||||
|
||||
# onlyoffice-notify:
|
||||
# build:
|
||||
# context: ./
|
||||
# dockerfile: "${DOCKERFILE}"
|
||||
# target: notify
|
||||
# image: "${REPO}/${DOCKER_IMAGE_PREFIX}-notify:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-people-server:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: people_server
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-people-server:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-socket:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: socket
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-socket:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-studio-notify:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: studio_notify
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio-notify:${DOCKER_TAG}"
|
||||
|
||||
# onlyoffice-telegram-service:
|
||||
# build:
|
||||
# context: ./
|
||||
# dockerfile: "${DOCKERFILE}"
|
||||
# target: telegram_service
|
||||
# image: "${REPO}/${DOCKER_IMAGE_PREFIX}-telegram-service:${DOCKER_TAG}"
|
||||
|
||||
# onlyoffice-urlshortener:
|
||||
# build:
|
||||
# context: ./
|
||||
# dockerfile: "${DOCKERFILE}"
|
||||
# target: urlshortener
|
||||
# image: "${REPO}/${DOCKER_IMAGE_PREFIX}-urlshortener:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-api:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: api
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-api:${DOCKER_TAG}"
|
||||
|
||||
# onlyoffice-api-system:
|
||||
# build:
|
||||
# context: ./
|
||||
# dockerfile: "${DOCKERFILE}"
|
||||
# target: api_system
|
||||
# image: "${REPO}/${DOCKER_IMAGE_PREFIX}-api-system:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-studio:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: studio
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-ssoauth:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: ssoauth
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-ssoauth:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-proxy:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: proxy
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-proxy:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-migration-runner:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: onlyoffice-migration-runner
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-migration-runner:${DOCKER_TAG}"
|
@ -3,7 +3,7 @@ version: "3.8"
|
||||
services:
|
||||
onlyoffice-mysql-server:
|
||||
image: ${MYSQL_IMAGE}
|
||||
command: --default-authentication-plugin=mysql_native_password
|
||||
command: --default-authentication-plugin=caching_sha2_password
|
||||
cap_add:
|
||||
- SYS_NICE
|
||||
container_name: ${MYSQL_HOST}
|
||||
|
@ -17,6 +17,7 @@ URLS = os.environ["URLS"] if environ.get("URLS") else "http://0.0.0.0:"
|
||||
PATH_TO_CONF = os.environ["PATH_TO_CONF"] if environ.get("PATH_TO_CONF") else "/app/" + PRODUCT + "/config"
|
||||
LOG_DIR = os.environ["LOG_DIR"] if environ.get("LOG_DIR") else "/var/log/" + PRODUCT
|
||||
ROUTER_HOST = os.environ["ROUTER_HOST"] if environ.get("ROUTER_HOST") else "localhost"
|
||||
SOCKET_HOST = os.environ["SOCKET_HOST"] if environ.get("SOCKET_HOST") else "onlyoffice-socket"
|
||||
|
||||
MYSQL_HOST = os.environ["MYSQL_HOST"] if environ.get("MYSQL_HOST") else "localhost"
|
||||
MYSQL_DATABASE = os.environ["MYSQL_DATABASE"] if environ.get("MYSQL_DATABASE") else "onlyoffice"
|
||||
@ -25,6 +26,7 @@ MYSQL_PASSWORD = os.environ["MYSQL_PASSWORD"] if environ.get("MYSQL_PASSWORD") e
|
||||
|
||||
APP_CORE_BASE_DOMAIN = os.environ["APP_CORE_BASE_DOMAIN"] if environ.get("APP_CORE_BASE_DOMAIN") is not None else "localhost"
|
||||
APP_CORE_MACHINEKEY = os.environ["APP_CORE_MACHINEKEY"] if environ.get("APP_CORE_MACHINEKEY") else "your_core_machinekey"
|
||||
INSTALLATION_TYPE = os.environ["INSTALLATION_TYPE"].upper() if environ.get("INSTALLATION_TYPE") else "ENTERPRISE"
|
||||
APP_URL_PORTAL = os.environ["APP_URL_PORTAL"] if environ.get("APP_URL_PORTAL") else "http://" + ROUTER_HOST + ":8092"
|
||||
APP_STORAGE_ROOT = os.environ["APP_STORAGE_ROOT"] if environ.get("APP_STORAGE_ROOT") else BASE_DIR + "/data/"
|
||||
APP_KNOWN_PROXIES = os.environ["APP_KNOWN_PROXIES"]
|
||||
@ -137,16 +139,19 @@ saveFilePath = filePath
|
||||
filePath = "/app/onlyoffice/config/appsettings.json"
|
||||
jsonData = openJsonFile(filePath)
|
||||
#jsonUpdateValue = parseJsonValue(jsonValue)
|
||||
updateJsonData(jsonData,"$.ConnectionStrings.default.connectionString", "Server="+ MYSQL_HOST +";Port=3306;Database="+ MYSQL_DATABASE +";User ID="+ MYSQL_USER +";Password="+ MYSQL_PASSWORD +";Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;ConnectionReset=false",)
|
||||
updateJsonData(jsonData,"$.ConnectionStrings.default.connectionString", "Server="+ MYSQL_HOST +";Port=3306;Database="+ MYSQL_DATABASE +";User ID="+ MYSQL_USER +";Password="+ MYSQL_PASSWORD +";Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;ConnectionReset=false;AllowPublicKeyRetrieval=true",)
|
||||
updateJsonData(jsonData,"$.core.base-domain", APP_CORE_BASE_DOMAIN)
|
||||
updateJsonData(jsonData,"$.core.machinekey", APP_CORE_MACHINEKEY)
|
||||
updateJsonData(jsonData,"$.core.products.subfolder", "server")
|
||||
updateJsonData(jsonData,"$.web.hub.internal", "http://onlyoffice-socket:" + SERVICE_PORT + "/")
|
||||
updateJsonData(jsonData,"$.core.notify.postman", "services")
|
||||
updateJsonData(jsonData,"$.web.hub.internal", "http://" + SOCKET_HOST + ":" + SERVICE_PORT + "/")
|
||||
updateJsonData(jsonData,"$.files.docservice.url.portal", APP_URL_PORTAL)
|
||||
updateJsonData(jsonData,"$.files.docservice.url.public", DOCUMENT_SERVER_URL_PUBLIC)
|
||||
updateJsonData(jsonData,"$.files.docservice.url.internal", DOCUMENT_SERVER_URL_INTERNAL)
|
||||
updateJsonData(jsonData,"$.files.docservice.secret.value", DOCUMENT_SERVER_JWT_SECRET)
|
||||
updateJsonData(jsonData,"$.files.docservice.secret.header", DOCUMENT_SERVER_JWT_HEADER)
|
||||
if INSTALLATION_TYPE == "ENTERPRISE":
|
||||
updateJsonData(jsonData, "$.license.file.path", "/app/onlyoffice/data/license.lic")
|
||||
|
||||
ip_address = netifaces.ifaddresses('eth0').get(netifaces.AF_INET)[0].get('addr')
|
||||
netmask = netifaces.ifaddresses('eth0').get(netifaces.AF_INET)[0].get('netmask')
|
||||
@ -168,7 +173,7 @@ writeJsonFile(filePath, jsonData)
|
||||
|
||||
filePath = "/app/onlyoffice/config/apisystem.json"
|
||||
jsonData = openJsonFile(filePath)
|
||||
updateJsonData(jsonData, "$.ConnectionStrings.default.connectionString", "Server="+ MYSQL_HOST +";Port=3306;Database="+ MYSQL_DATABASE +";User ID="+ MYSQL_USER +";Password="+ MYSQL_PASSWORD +";Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;ConnectionReset=false",)
|
||||
updateJsonData(jsonData, "$.ConnectionStrings.default.connectionString", "Server="+ MYSQL_HOST +";Port=3306;Database="+ MYSQL_DATABASE +";User ID="+ MYSQL_USER +";Password="+ MYSQL_PASSWORD +";Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;ConnectionReset=false;AllowPublicKeyRetrieval=true",)
|
||||
updateJsonData(jsonData,"$.core.base-domain", APP_CORE_BASE_DOMAIN)
|
||||
updateJsonData(jsonData,"$.core.machinekey", APP_CORE_MACHINEKEY)
|
||||
writeJsonFile(filePath, jsonData)
|
||||
|
@ -4,7 +4,14 @@ MYSQL_HOST=${MYSQL_HOST:-"localhost"}
|
||||
MYSQL_DATABASE=${MYSQL_DATABASE:-"onlyoffice"}
|
||||
MYSQL_USER=${MYSQL_USER:-"onlyoffice_user"}
|
||||
MYSQL_PASSWORD=${MYSQL_PASSWORD:-"onlyoffice_pass"}
|
||||
MIGRATION_TYPE=${MIGRATION_TYPE:-"STANDALONE"}
|
||||
PARAMETERS="standalone=true"
|
||||
|
||||
sed -i "s!\"ConnectionString\".*!\"ConnectionString\": \"Server=${MYSQL_HOST};Database=${MYSQL_DATABASE};User ID=${MYSQL_USER};Password=${MYSQL_PASSWORD}\",!g" ./appsettings.runner.json
|
||||
|
||||
dotnet ASC.Migration.Runner.dll
|
||||
if [[ ${MIGRATION_TYPE} == "SAAS" ]]
|
||||
then
|
||||
PARAMETERS=""
|
||||
fi
|
||||
|
||||
dotnet ASC.Migration.Runner.dll ${PARAMETERS}
|
||||
|
@ -1,206 +0,0 @@
|
||||
version: "3.8"
|
||||
x-service: &x-service-base
|
||||
container_name: base
|
||||
restart: always
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
environment:
|
||||
MYSQL_HOST: ${MYSQL_HOST}
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
DATABASE_MIGRATION: ${DATABASE_MIGRATION}
|
||||
APP_DOTNET_ENV: ${APP_DOTNET_ENV}
|
||||
APP_KNOWN_NETWORKS: ${APP_KNOWN_NETWORKS}
|
||||
APP_KNOWN_PROXIES: ${APP_KNOWN_PROXIES}
|
||||
APP_CORE_BASE_DOMAIN: ${APP_CORE_BASE_DOMAIN}
|
||||
APP_CORE_MACHINEKEY: ${APP_CORE_MACHINEKEY}
|
||||
APP_URL_PORTAL: ${APP_URL_PORTAL}
|
||||
DOCUMENT_SERVER_JWT_SECRET: ${DOCUMENT_SERVER_JWT_SECRET}
|
||||
DOCUMENT_SERVER_JWT_HEADER: ${DOCUMENT_SERVER_JWT_HEADER}
|
||||
DOCUMENT_SERVER_URL_PUBLIC: ${DOCUMENT_SERVER_URL_PUBLIC}
|
||||
DOCUMENT_SERVER_URL_INTERNAL: ${DOCUMENT_SERVER_URL_INTERNAL}
|
||||
KAFKA_HOST: ${KAFKA_HOST}
|
||||
ELK_HOST: ${ELK_HOST}
|
||||
PROXY_HOST: ${PROXY_HOST}
|
||||
ENV_EXTENSION: ${ENV_EXTENSION}
|
||||
volumes:
|
||||
#- /app/onlyoffice/CommunityServer/data:/app/onlyoffice/data
|
||||
- app_data:/app/onlyoffice/data
|
||||
- files_data:/var/www/products/ASC.Files/server/
|
||||
- people_data:/var/www/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
|
||||
services:
|
||||
# onlyoffice-elasticsearch:
|
||||
# image: onlyoffice/elasticsearch:${ELK_VERSION}
|
||||
# container_name: ${ELK_HOST}
|
||||
# restart: always
|
||||
# environment:
|
||||
# - discovery.type=single-node
|
||||
# - bootstrap.memory_lock=true
|
||||
# - "ES_JAVA_OPTS=-Xms4g -Xmx4g -Dlog4j2.formatMsgNoLookups=true"
|
||||
# - "indices.fielddata.cache.size=30%"
|
||||
# - "indices.memory.index_buffer_size=30%"
|
||||
# ulimits:
|
||||
# memlock:
|
||||
# soft: -1
|
||||
# hard: -1
|
||||
# nofile:
|
||||
# soft: 65535
|
||||
# hard: 65535
|
||||
# volumes:
|
||||
# - es_data:/usr/share/elasticsearch/data
|
||||
# expose:
|
||||
# - "9200"
|
||||
# - "9300"
|
||||
onlyoffice-backup-background-tasks:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-backup-background:${DOCKER_TAG}"
|
||||
container_name: ${BACKUP_BACKGRUOND_TASKS_HOST}
|
||||
|
||||
onlyoffice-backup:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-backup:${DOCKER_TAG}"
|
||||
container_name: ${BACKUP_HOST}
|
||||
|
||||
# onlyoffice-clear-events:
|
||||
# <<: *x-service-base
|
||||
# image: "${REPO}/${DOCKER_IMAGE_PREFIX}-clear-events:${DOCKER_TAG}"
|
||||
# container_name: ${CLEAR_EVENTS_HOST}
|
||||
|
||||
# onlyoffice-migration:
|
||||
# <<: *x-service-base
|
||||
# image: "${REPO}/${DOCKER_IMAGE_PREFIX}-migration:${DOCKER_TAG}"
|
||||
# container_name: ${MIGRATION_HOST}
|
||||
|
||||
onlyoffice-files:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-files:${DOCKER_TAG}"
|
||||
container_name: ${FILES_HOST}
|
||||
|
||||
onlyoffice-files-services:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-files-services:${DOCKER_TAG}"
|
||||
container_name: ${FILES_SERVICES_HOST}
|
||||
|
||||
onlyoffice-people-server:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-people-server:${DOCKER_TAG}"
|
||||
container_name: ${PEOPLE_SERVER_HOST}
|
||||
|
||||
onlyoffice-socket:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-socket:${DOCKER_TAG}"
|
||||
container_name: ${SOCKET_HOST}
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
|
||||
onlyoffice-studio-notify:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio-notify:${DOCKER_TAG}"
|
||||
container_name: ${STUDIO_NOTIFY_HOST}
|
||||
|
||||
# onlyoffice-telegram-service:
|
||||
# <<: *x-service-base
|
||||
# image: "${REPO}/${DOCKER_IMAGE_PREFIX}-telegram-service:${DOCKER_TAG}"
|
||||
# container_name: ${TELEGRAM_SERVICE_HOST}
|
||||
|
||||
# onlyoffice-urlshortener:
|
||||
# <<: *x-service-base
|
||||
# image: "${REPO}/${DOCKER_IMAGE_PREFIX}-urlshortener:${DOCKER_TAG}"
|
||||
# container_name: ${URLSHORTENER_HOST}
|
||||
# expose:
|
||||
# - ${SERVICE_PORT}
|
||||
# - "9999"
|
||||
|
||||
onlyoffice-api:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-api:${DOCKER_TAG}"
|
||||
container_name: ${API_HOST}
|
||||
|
||||
# onlyoffice-api-system:
|
||||
# <<: *x-service-base
|
||||
# image: "${REPO}/${DOCKER_IMAGE_PREFIX}-api-system:${DOCKER_TAG}"
|
||||
# container_name: ${API_SYSTEM_HOST}
|
||||
|
||||
onlyoffice-studio:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio:${DOCKER_TAG}"
|
||||
container_name: ${STUDIO_HOST}
|
||||
|
||||
onlyoffice-ssoauth:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-ssoauth:${DOCKER_TAG}"
|
||||
container_name: ${SSOAUTH_HOST}
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
- "9834"
|
||||
|
||||
onlyoffice-proxy:
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-proxy:${DOCKER_TAG}"
|
||||
container_name: ${PROXY_HOST}
|
||||
restart: always
|
||||
expose:
|
||||
- "8081"
|
||||
- "8099"
|
||||
- "8092"
|
||||
ports:
|
||||
- 8092:8092
|
||||
depends_on:
|
||||
- onlyoffice-backup-background-tasks
|
||||
- onlyoffice-backup
|
||||
# - onlyoffice-clear-events
|
||||
# - onlyoffice-migration
|
||||
- onlyoffice-files
|
||||
- onlyoffice-files-services
|
||||
- onlyoffice-people-server
|
||||
- onlyoffice-socket
|
||||
- onlyoffice-studio-notify
|
||||
# - onlyoffice-telegram-service
|
||||
# - onlyoffice-urlshortener
|
||||
- onlyoffice-api
|
||||
# - onlyoffice-api-system
|
||||
- onlyoffice-studio
|
||||
- onlyoffice-ssoauth
|
||||
environment:
|
||||
- SERVICE_BACKUP=${SERVICE_BACKUP}
|
||||
- SERVICE_FILES=${SERVICE_FILES}
|
||||
- SERVICE_FILES_SERVICES=${SERVICE_FILES_SERVICES}
|
||||
# - SERVICE_CLEAR_EVENTS=${SERVICE_CLEAR_EVENTS}
|
||||
# - SERVICE_MIGRATION=${SERVICE_MIGRATION}
|
||||
- SERVICE_NOTIFY=${SERVICE_NOTIFY}
|
||||
- SERVICE_PEOPLE_SERVER=${SERVICE_PEOPLE_SERVER}
|
||||
- SERVICE_SOCKET=${SERVICE_SOCKET}
|
||||
- SERVICE_STUDIO_NOTIFY=${SERVICE_STUDIO_NOTIFY}
|
||||
# - SERVICE_TELEGRAM_SERVICE=${SERVICE_TELEGRAM_SERVICE}
|
||||
# - SERVICE_URLSHORTENER=${SERVICE_URLSHORTENER}
|
||||
- SERVICE_API=${SERVICE_API}
|
||||
- SERVICE_API_SYSTEM=${SERVICE_API_SYSTEM}
|
||||
- SERVICE_STUDIO=${SERVICE_STUDIO}
|
||||
- SERVICE_SSOAUTH=${SERVICE_SSOAUTH}
|
||||
- SERVICE_DOCEDITOR=${SERVICE_DOCEDITOR}
|
||||
- SERVICE_LOGIN=${SERVICE_LOGIN}
|
||||
- SERVICE_CLIENT=${SERVICE_CLIENT}
|
||||
- SERVICE_HELTHCHECKS=${SERVICE_HELTHCHECKS}
|
||||
- DOCUMENT_SERVER=${DOCUMENT_SERVER_HOST}
|
||||
- SERVICE_PORT=${SERVICE_PORT}
|
||||
- GIT_BRANCH=${GIT_BRANCH}
|
||||
- ROOT_DIR=${ROOT_DIR}
|
||||
volumes:
|
||||
- proxy_log:/var/log/nginx
|
||||
- ${ROOT_DIR}/public:/var/www/public
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
es_data:
|
||||
proxy_log:
|
||||
app_data:
|
||||
files_data:
|
||||
people_data:
|
185
build/install/docker/docspace.overcome.yml
Normal file
185
build/install/docker/docspace.overcome.yml
Normal file
@ -0,0 +1,185 @@
|
||||
version: "3.8"
|
||||
x-profiles-local: &x-profiles-local
|
||||
profiles: ["backend-local"]
|
||||
environment:
|
||||
BUILD_PATH: "/var/www"
|
||||
SRC_PATH: "/app/services"
|
||||
ROOT_DIR: ""
|
||||
ENV_EXTENSION: "dev"
|
||||
|
||||
services:
|
||||
onlyoffice-backup-background-tasks:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/
|
||||
command:
|
||||
[
|
||||
"ASC.Data.Backup.BackgroundTasks.dll",
|
||||
"ASC.Data.Backup.BackgroundTasks",
|
||||
"core:eventBus:subscriptionClientName=asc_event_bus_backup_queue",
|
||||
]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Data.Backup.BackgroundTasks/service:${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
depends_on:
|
||||
onlyoffice-migration-runner:
|
||||
condition: service_completed_successfully
|
||||
|
||||
onlyoffice-backup:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/services/ASC.Data.Backup/service/
|
||||
command: ["ASC.Data.Backup.dll", "ASC.Data.Backup"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Data.Backup/service:${BUILD_PATH}/services/ASC.Data.Backup/service/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
depends_on:
|
||||
onlyoffice-migration-runner:
|
||||
condition: service_completed_successfully
|
||||
|
||||
onlyoffice-files:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/products/ASC.Files/server/
|
||||
command: ["ASC.Files.dll", "ASC.Files"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Files/service:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
depends_on:
|
||||
onlyoffice-migration-runner:
|
||||
condition: service_completed_successfully
|
||||
|
||||
onlyoffice-files-services:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/products/ASC.Files/service/
|
||||
command:
|
||||
[
|
||||
"ASC.Files.Service.dll",
|
||||
"ASC.Files.Service",
|
||||
"core:eventBus:subscriptionClientName=asc_event_bus_files_service_queue",
|
||||
]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Files.Service/service:${BUILD_PATH}/products/ASC.Files/service/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
depends_on:
|
||||
onlyoffice-migration-runner:
|
||||
condition: service_completed_successfully
|
||||
|
||||
onlyoffice-people-server:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/products/ASC.People/server/
|
||||
command: ["ASC.People.dll", "ASC.People"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.People/service:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
depends_on:
|
||||
onlyoffice-migration-runner:
|
||||
condition: service_completed_successfully
|
||||
|
||||
onlyoffice-socket:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Nodejs_Run}
|
||||
working_dir: ${BUILD_PATH}/services/ASC.Socket.IO/
|
||||
command: ["server.js", "ASC.Socket.IO"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Socket.IO/service:${BUILD_PATH}/services/ASC.Socket.IO/
|
||||
depends_on:
|
||||
onlyoffice-migration-runner:
|
||||
condition: service_completed_successfully
|
||||
|
||||
onlyoffice-studio-notify:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/services/ASC.Studio.Notify/service/
|
||||
command: ["ASC.Studio.Notify.dll", "ASC.Studio.Notify"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Studio.Notify/service:${BUILD_PATH}/services/ASC.Studio.Notify/service/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
depends_on:
|
||||
onlyoffice-migration-runner:
|
||||
condition: service_completed_successfully
|
||||
|
||||
onlyoffice-api:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/studio/ASC.Web.Api/
|
||||
command: ["ASC.Web.Api.dll", "ASC.Web.Api"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Web.Api/service:${BUILD_PATH}/studio/ASC.Web.Api/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
depends_on:
|
||||
onlyoffice-migration-runner:
|
||||
condition: service_completed_successfully
|
||||
|
||||
onlyoffice-studio:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/studio/ASC.Web.Studio/
|
||||
command: ["ASC.Web.Studio.dll", "ASC.Web.Studio"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Web.Studio/service:${BUILD_PATH}/studio/ASC.Web.Studio/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
depends_on:
|
||||
onlyoffice-migration-runner:
|
||||
condition: service_completed_successfully
|
||||
|
||||
onlyoffice-ssoauth:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Nodejs_Run}
|
||||
working_dir: ${BUILD_PATH}/services/ASC.SsoAuth/
|
||||
command: ["app.js", "ASC.SsoAuth"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.SsoAuth/service:${BUILD_PATH}/services/ASC.SsoAuth/
|
||||
depends_on:
|
||||
onlyoffice-migration-runner:
|
||||
condition: service_completed_successfully
|
||||
|
||||
onlyoffice-migration-runner:
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
entrypoint: ${BUILD_PATH}/services/ASC.Migration.Runner/docker-migration-entrypoint.sh
|
||||
working_dir: ${BUILD_PATH}/services/ASC.Migration.Runner/
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Migration.Runner/service:${BUILD_PATH}/services/ASC.Migration.Runner/
|
||||
|
||||
onlyoffice-proxy:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Proxy_Run}
|
||||
environment:
|
||||
- SERVICE_CLIENT=${SERVICE_CLIENT}
|
||||
volumes:
|
||||
- ${ROOT_DIR}/public:/var/www/public/
|
||||
|
||||
onlyoffice-rabbitmq:
|
||||
<<: *x-profiles-local
|
||||
|
||||
onlyoffice-redis:
|
||||
<<: *x-profiles-local
|
||||
|
||||
onlyoffice-document-server:
|
||||
<<: *x-profiles-local
|
||||
volumes:
|
||||
- ${DATA_DIR}:/var/www/onlyoffice/Data
|
282
build/install/docker/docspace.profiles.yml
Normal file
282
build/install/docker/docspace.profiles.yml
Normal file
@ -0,0 +1,282 @@
|
||||
version: "3.8"
|
||||
x-healthcheck: &x-healthcheck
|
||||
test: curl --fail http://127.0.0.1 || exit 1
|
||||
interval: 60s
|
||||
retries: 5
|
||||
start_period: 20s
|
||||
timeout: 10s
|
||||
|
||||
x-profiles-backend: &x-profiles-backend
|
||||
profiles: ["prod", "backend"]
|
||||
|
||||
x-profiles-frontend: &x-profiles-frontend
|
||||
profiles: ["prod", "frontend"]
|
||||
|
||||
x-profiles-extra-services: &x-profiles-extra-services
|
||||
profiles: ["prod", "extra-services"]
|
||||
|
||||
x-service: &x-service-base
|
||||
container_name: base
|
||||
restart: always
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
environment:
|
||||
MYSQL_HOST: ${MYSQL_HOST}
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
DATABASE_MIGRATION: ${DATABASE_MIGRATION}
|
||||
APP_DOTNET_ENV: ${APP_DOTNET_ENV}
|
||||
APP_KNOWN_NETWORKS: ${APP_KNOWN_NETWORKS}
|
||||
APP_KNOWN_PROXIES: ${APP_KNOWN_PROXIES}
|
||||
APP_CORE_BASE_DOMAIN: ${APP_CORE_BASE_DOMAIN}
|
||||
APP_CORE_MACHINEKEY: ${APP_CORE_MACHINEKEY}
|
||||
APP_URL_PORTAL: ${APP_URL_PORTAL}
|
||||
INSTALLATION_TYPE: ${INSTALLATION_TYPE}
|
||||
DOCUMENT_SERVER_JWT_SECRET: ${DOCUMENT_SERVER_JWT_SECRET}
|
||||
DOCUMENT_SERVER_JWT_HEADER: ${DOCUMENT_SERVER_JWT_HEADER}
|
||||
DOCUMENT_SERVER_URL_PUBLIC: ${DOCUMENT_SERVER_URL_PUBLIC}
|
||||
DOCUMENT_SERVER_URL_INTERNAL: ${DOCUMENT_SERVER_URL_INTERNAL}
|
||||
KAFKA_HOST: ${KAFKA_HOST}
|
||||
ELK_HOST: ${ELK_HOST}
|
||||
PROXY_HOST: ${PROXY_HOST}
|
||||
volumes:
|
||||
- ${ROOT_DIR}/Data:/app/onlyoffice/data
|
||||
- files_data:/var/www/products/ASC.Files/server/
|
||||
- people_data:/var/www/products/ASC.People/server/
|
||||
|
||||
services:
|
||||
onlyoffice-elasticsearch:
|
||||
<<: [*x-profiles-extra-services]
|
||||
image: onlyoffice/elasticsearch:${ELK_VERSION}
|
||||
container_name: ${ELK_HOST}
|
||||
restart: always
|
||||
environment:
|
||||
- discovery.type=single-node
|
||||
- bootstrap.memory_lock=true
|
||||
- "ES_JAVA_OPTS=-Xms4g -Xmx4g -Dlog4j2.formatMsgNoLookups=true"
|
||||
- "indices.fielddata.cache.size=30%"
|
||||
- "indices.memory.index_buffer_size=30%"
|
||||
ulimits:
|
||||
memlock:
|
||||
soft: -1
|
||||
hard: -1
|
||||
nofile:
|
||||
soft: 65535
|
||||
hard: 65535
|
||||
volumes:
|
||||
- es_data:/usr/share/elasticsearch/data
|
||||
expose:
|
||||
- "9200"
|
||||
- "9300"
|
||||
|
||||
onlyoffice-rabbitmq:
|
||||
<<: [*x-profiles-extra-services]
|
||||
image: rabbitmq:3
|
||||
container_name: onlyoffice-rabbitmq
|
||||
restart: always
|
||||
expose:
|
||||
- "5672"
|
||||
- "80"
|
||||
|
||||
onlyoffice-redis:
|
||||
<<: [*x-profiles-extra-services]
|
||||
image: redis:7
|
||||
container_name: onlyoffice-redis
|
||||
restart: always
|
||||
expose:
|
||||
- "6379"
|
||||
|
||||
onlyoffice-document-server:
|
||||
<<: [*x-profiles-extra-services]
|
||||
image: "${DOCUMENT_SERVER_IMAGE_NAME}"
|
||||
container_name: ${DOCUMENT_SERVER_HOST}
|
||||
# Strings below enable the JSON Web Token validation.
|
||||
environment:
|
||||
- JWT_ENABLED=true
|
||||
- JWT_SECRET=${DOCUMENT_SERVER_JWT_SECRET}
|
||||
- JWT_HEADER=${DOCUMENT_SERVER_JWT_HEADER}
|
||||
- JWT_IN_BODY=true
|
||||
expose:
|
||||
- "80"
|
||||
stdin_open: true
|
||||
restart: always
|
||||
stop_grace_period: 60s
|
||||
|
||||
onlyoffice-notify:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-notify:${DOCKER_TAG}"
|
||||
container_name: ${NOTIFY_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_NOTIFY}/health/ || exit 1
|
||||
|
||||
onlyoffice-backup-background-tasks:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-backup-background:${DOCKER_TAG}"
|
||||
container_name: ${BACKUP_BACKGRUOND_TASKS_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_BACKUP_BACKGRUOND_TASKS}/health/ || exit 1
|
||||
|
||||
onlyoffice-backup:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-backup:${DOCKER_TAG}"
|
||||
container_name: ${BACKUP_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_BACKUP}/health/ || exit 1
|
||||
|
||||
onlyoffice-clear-events:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-clear-events:${DOCKER_TAG}"
|
||||
container_name: ${CLEAR_EVENTS_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_CLEAR_EVENTS}/health/ || exit 1
|
||||
|
||||
onlyoffice-files:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-files:${DOCKER_TAG}"
|
||||
container_name: ${FILES_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_FILES}/health/ || exit 1
|
||||
|
||||
onlyoffice-files-services:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-files-services:${DOCKER_TAG}"
|
||||
container_name: ${FILES_SERVICES_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_FILES_SERVICES}/health/ || exit 1
|
||||
|
||||
onlyoffice-people-server:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-people-server:${DOCKER_TAG}"
|
||||
container_name: ${PEOPLE_SERVER_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_PEOPLE_SERVER}/health/ || exit 1
|
||||
|
||||
onlyoffice-socket:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-socket:${DOCKER_TAG}"
|
||||
container_name: ${SOCKET_HOST}
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
|
||||
onlyoffice-studio-notify:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio-notify:${DOCKER_TAG}"
|
||||
container_name: ${STUDIO_NOTIFY_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_STUDIO_NOTIFY}/health/ || exit 1
|
||||
|
||||
onlyoffice-api:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-api:${DOCKER_TAG}"
|
||||
container_name: ${API_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_API}/health/ || exit 1
|
||||
|
||||
onlyoffice-api-system:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-api-system:${DOCKER_TAG}"
|
||||
container_name: ${API_SYSTEM_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_API_SYSTEM}/health/ || exit 1
|
||||
|
||||
onlyoffice-studio:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio:${DOCKER_TAG}"
|
||||
container_name: ${STUDIO_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_STUDIO}/health/ || exit 1
|
||||
|
||||
onlyoffice-ssoauth:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-ssoauth:${DOCKER_TAG}"
|
||||
container_name: ${SSOAUTH_HOST}
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
- "9834"
|
||||
|
||||
onlyoffice-doceditor:
|
||||
<<: [*x-service-base, *x-profiles-frontend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-doceditor:${DOCKER_TAG}"
|
||||
container_name: ${DOCEDITOR_HOST}
|
||||
restart: always
|
||||
expose:
|
||||
- "5013"
|
||||
|
||||
onlyoffice-login:
|
||||
<<: [*x-service-base, *x-profiles-frontend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-login:${DOCKER_TAG}"
|
||||
container_name: ${LOGIN_HOST}
|
||||
restart: always
|
||||
expose:
|
||||
- "5011"
|
||||
|
||||
onlyoffice-proxy:
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-proxy:${DOCKER_TAG}"
|
||||
profiles: ["prod", "backend", frontend]
|
||||
container_name: ${PROXY_HOST}
|
||||
restart: always
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: nginx -t || exit 1
|
||||
expose:
|
||||
- "8081"
|
||||
- "8099"
|
||||
- "8092"
|
||||
ports:
|
||||
- 8092:8092
|
||||
environment:
|
||||
- SERVICE_BACKUP=${SERVICE_BACKUP}
|
||||
- SERVICE_FILES=${SERVICE_FILES}
|
||||
- SERVICE_FILES_SERVICES=${SERVICE_FILES_SERVICES}
|
||||
- SERVICE_CLEAR_EVENTS=${SERVICE_CLEAR_EVENTS}
|
||||
- SERVICE_NOTIFY=${SERVICE_NOTIFY}
|
||||
- SERVICE_PEOPLE_SERVER=${SERVICE_PEOPLE_SERVER}
|
||||
- SERVICE_SOCKET=${SERVICE_SOCKET}
|
||||
- SERVICE_STUDIO_NOTIFY=${SERVICE_STUDIO_NOTIFY}
|
||||
- SERVICE_API=${SERVICE_API}
|
||||
- SERVICE_API_SYSTEM=${SERVICE_API_SYSTEM}
|
||||
- SERVICE_STUDIO=${SERVICE_STUDIO}
|
||||
- SERVICE_SSOAUTH=${SERVICE_SSOAUTH}
|
||||
- SERVICE_DOCEDITOR=${SERVICE_DOCEDITOR}
|
||||
- SERVICE_LOGIN=${SERVICE_LOGIN}
|
||||
- SERVICE_HELTHCHECKS=${SERVICE_HELTHCHECKS}
|
||||
- DOCUMENT_SERVER=${DOCUMENT_SERVER_HOST}
|
||||
- SERVICE_PORT=${SERVICE_PORT}
|
||||
volumes:
|
||||
- proxy_log:/var/log/nginx
|
||||
|
||||
onlyoffice-migration-runner:
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-migration-runner:${DOCKER_TAG}"
|
||||
profiles: ["migration-runner", "backend-local"]
|
||||
container_name: ${MIGRATION_RUNNER_HOST}
|
||||
restart: "no"
|
||||
environment:
|
||||
MYSQL_HOST: ${MYSQL_HOST}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
es_data:
|
||||
proxy_log:
|
||||
app_data:
|
||||
files_data:
|
||||
people_data:
|
@ -24,6 +24,8 @@ x-service: &x-service-base
|
||||
APP_KNOWN_PROXIES: ${APP_KNOWN_PROXIES}
|
||||
APP_CORE_BASE_DOMAIN: ${APP_CORE_BASE_DOMAIN}
|
||||
APP_CORE_MACHINEKEY: ${APP_CORE_MACHINEKEY}
|
||||
APP_URL_PORTAL: ${APP_URL_PORTAL}
|
||||
INSTALLATION_TYPE: ${INSTALLATION_TYPE}
|
||||
DOCUMENT_SERVER_JWT_SECRET: ${DOCUMENT_SERVER_JWT_SECRET}
|
||||
DOCUMENT_SERVER_JWT_HEADER: ${DOCUMENT_SERVER_JWT_HEADER}
|
||||
DOCUMENT_SERVER_URL_PUBLIC: ${DOCUMENT_SERVER_URL_PUBLIC}
|
||||
|
@ -1,23 +0,0 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
onlyoffice-document-server:
|
||||
image: "${DOCUMENT_SERVER_IMAGE_NAME}"
|
||||
container_name: ${DOCUMENT_SERVER_HOST}
|
||||
# Strings below enable the JSON Web Token validation.
|
||||
environment:
|
||||
- JWT_ENABLED=true
|
||||
- JWT_SECRET=${DOCUMENT_SERVER_JWT_SECRET}
|
||||
- JWT_HEADER=${DOCUMENT_SERVER_JWT_HEADER}
|
||||
- JWT_IN_BODY=true
|
||||
expose:
|
||||
- "80"
|
||||
volumes:
|
||||
- ${ROOT_DIR}/Data:/var/www/onlyoffice/Data
|
||||
stdin_open: true
|
||||
restart: always
|
||||
stop_grace_period: 60s
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
@ -9,6 +9,8 @@ services:
|
||||
- JWT_SECRET=${DOCUMENT_SERVER_JWT_SECRET}
|
||||
- JWT_HEADER=${DOCUMENT_SERVER_JWT_HEADER}
|
||||
- JWT_IN_BODY=true
|
||||
volumes:
|
||||
- app_data:/var/www/onlyoffice/Data
|
||||
expose:
|
||||
- '80'
|
||||
stdin_open: true
|
||||
@ -17,5 +19,8 @@ services:
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${NETWORK_NAME}
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
app_data:
|
||||
|
@ -19,8 +19,8 @@ services:
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${NETWORK_NAME}
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
app_data:
|
||||
|
@ -49,8 +49,8 @@ services:
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${NETWORK_NAME}
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
app_data:
|
||||
|
@ -7,9 +7,6 @@ addFilter(r' W: non-standard-(uid|gid)')
|
||||
# This is necessary to ensure that all child packages are updated correctly
|
||||
addFilter(r'W: requires-on-release')
|
||||
|
||||
# The signature of packages occurs in further stages
|
||||
addFilter(r'E: no-signature')
|
||||
|
||||
# The basic documentation comes with the common package
|
||||
addFilter(r'W: no-documentation')
|
||||
|
||||
@ -45,3 +42,18 @@ addFilter(r'non-standard-executable-perm')
|
||||
|
||||
# We use this to protect sensitive information (ie passwords) in the config file
|
||||
addFilter(r'non-readable')
|
||||
|
||||
# No one license from allowed pull AGPLv3, AGPLv3+ worked
|
||||
addFilter(r'W: invalid-license AGPLv3')
|
||||
|
||||
# Сertain services require write access to the log directory. These services are launched under a user account that is different from the root user.
|
||||
addFilter(r'logrotate-user-writable-log-dir')
|
||||
|
||||
# The use of the /var/www directory is caused by its past history as the default document root
|
||||
addFilter(r'W: non-standard-dir-in-var www')
|
||||
|
||||
# Shared libraries centos7-librdkafka.so, libgrpc_csharp_ext.x64.so location of which is hardcoded
|
||||
addFilter(r'W: binary-or-shlib-calls-gethostbyname')
|
||||
|
||||
# There are the same files, however on a different languages
|
||||
addFilter(r'files-duplicate')
|
||||
|
@ -4,17 +4,19 @@ bash build/install/common/systemd/build.sh
|
||||
|
||||
bash build/install/common/build-frontend.sh --srcpath %{_builddir}/%{sourcename}
|
||||
bash build/install/common/build-backend.sh --srcpath %{_builddir}/%{sourcename}
|
||||
bash build/install/common/publish-backend.sh --srcpath %{_builddir}/%{sourcename} -ar "-r linux-x64"
|
||||
bash build/install/common/publish-backend.sh --srcpath %{_builddir}/%{sourcename}
|
||||
rename -f -v "s/product([^\/]*)$/%{product}\$1/g" build/install/common/*
|
||||
sed -i "s/{{product}}/%{product}/g" %{_builddir}/%{sourcename}/build/install/common/logrotate/product-common
|
||||
|
||||
rm -rf %{_builddir}/%{sourcename}/ASC.Migration.Runner/service/runtimes/linux-arm*
|
||||
rm -f %{_builddir}/%{sourcename}/config/nginx/onlyoffice-login.conf
|
||||
sed -i "s@var/www@var/www/%{product}@g" config/nginx/*.conf && sed -i "s@var/www@var/www/%{product}@g" config/nginx/includes/*.conf
|
||||
|
||||
if ! grep -q 'var/www/%{product}' config/nginx/*.conf; then find config/nginx/ -name "*.conf" -exec sed -i "s@\(var/www/\)@\1%{product}/@" {} +; fi
|
||||
|
||||
json -I -f %{_builddir}/%{sourcename}/config/appsettings.services.json -e "this.logPath=\"/var/log/onlyoffice/%{product}\"" -e "this.socket={ 'path': '../ASC.Socket.IO/' }" \
|
||||
-e "this.ssoauth={ 'path': '../ASC.SsoAuth/' }" -e "this.core={ 'products': { 'folder': '%{buildpath}/products', 'subfolder': 'server'} }"
|
||||
|
||||
find %{_builddir}/%{sourcename}/config/ -type f -regex '.*\.\(test\|dev\).*' -delete
|
||||
|
||||
find %{_builddir}/%{sourcename}/publish/ \
|
||||
%{_builddir}/%{sourcename}/ASC.Migration.Runner \
|
||||
-depth -type f -regex '.*\(dll\|dylib\|so\)$' -exec chmod 755 {} \;
|
||||
|
@ -38,6 +38,7 @@
|
||||
%dir %{_sysconfdir}/onlyoffice/
|
||||
%dir %{_sysconfdir}/onlyoffice/%{product}/
|
||||
%dir %{_sysconfdir}/onlyoffice/%{product}/.private/
|
||||
%dir %{_var}/www/onlyoffice/Data
|
||||
%dir %{_var}/log/onlyoffice/
|
||||
|
||||
%files files-services
|
||||
|
@ -30,6 +30,7 @@ mkdir -p "%{buildroot}%{buildpath}/public/"
|
||||
mkdir -p "%{buildroot}%{buildpath}/client/"
|
||||
mkdir -p "%{buildroot}%{buildpath}/products/ASC.Login/login/"
|
||||
mkdir -p "%{buildroot}/usr/lib/systemd/system/"
|
||||
mkdir -p "%{buildroot}/%{_var}/www/onlyoffice/Data"
|
||||
cp -rf %{_builddir}/%{sourcename}/LICENSE "%{buildroot}%{_docdir}/%{name}-%{version}-%{release}/"
|
||||
cp -rf %{_builddir}/%{sourcename}/README.md "%{buildroot}%{_docdir}/%{name}-%{version}-%{release}/"
|
||||
cp -rf %{_builddir}/%{sourcename}/ASC.Migration.Runner/service/* "%{buildroot}%{buildpath}/services/ASC.Migration.Runner/"
|
||||
|
@ -1,179 +1,249 @@
|
||||
%package backup
|
||||
Packager: %{packager}
|
||||
Summary: Backup
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description backup
|
||||
Backup
|
||||
The service which handles API requests related to backup
|
||||
|
||||
%package common
|
||||
Packager: %{packager}
|
||||
Summary: Common
|
||||
Group: Applications/Internet
|
||||
Requires: logrotate
|
||||
BuildArch: noarch
|
||||
%description common
|
||||
Common
|
||||
A package containing configure and scripts
|
||||
|
||||
%package files-services
|
||||
Packager: %{packager}
|
||||
Summary: Files-services
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
Requires: ffmpeg
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description files-services
|
||||
Files-services
|
||||
The service which launches additional services related to file management:
|
||||
- ElasticSearchIndexService - indexes documents using Elasticsearch;
|
||||
- FeedAggregatorService - aggregates notifications;
|
||||
- FeedCleanerService - removes notifications;
|
||||
- FileConverterService - converts documents;
|
||||
- ThumbnailBuilderService - generates thumbnails for documents;
|
||||
- Launcher - removes outdated files from Trash;
|
||||
|
||||
%package notify
|
||||
Packager: %{packager}
|
||||
Summary: Notify
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description notify
|
||||
Notify
|
||||
The service which launches additional services
|
||||
related to notifications about DocSpace events:
|
||||
NotifySenderService which sends messages from the base,
|
||||
and NotifyCleanerService which removes messages
|
||||
|
||||
%package files
|
||||
Packager: %{packager}
|
||||
Summary: Files
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description files
|
||||
Files
|
||||
The service which handles API requests related to
|
||||
documents and launches the OFormService service
|
||||
|
||||
%package proxy
|
||||
Packager: %{packager}
|
||||
Summary: Proxy
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: nginx >= 1.9.5
|
||||
Requires: mysql-community-client >= 5.7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description proxy
|
||||
Proxy
|
||||
The service which is used as a web server and reverse proxy,
|
||||
it receives and handles requests, transmits them to other services,
|
||||
receives a response from them and returns it to the client
|
||||
|
||||
%package studio-notify
|
||||
Packager: %{packager}
|
||||
Summary: Studio-notify
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description studio-notify
|
||||
Studio-notify
|
||||
The service responsible for creating notifications and
|
||||
sending them to other services, for example, TelegramService and NotifyService
|
||||
|
||||
%package people-server
|
||||
Packager: %{packager}
|
||||
Summary: People-server
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description people-server
|
||||
People-server
|
||||
The service which handles API requests related to the People module
|
||||
|
||||
%package socket
|
||||
Packager: %{packager}
|
||||
Summary: Socket
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: nodejs >= 16.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description socket
|
||||
Socket
|
||||
The service which provides two-way communication between a client and a server
|
||||
|
||||
%package studio
|
||||
Packager: %{packager}
|
||||
Summary: Studio
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description studio
|
||||
Studio
|
||||
The service which processes storage handlers and authorization pages
|
||||
|
||||
%package api
|
||||
Packager: %{packager}
|
||||
Summary: Api
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description api
|
||||
Api
|
||||
The service which is used for working with a certain portal. This service
|
||||
handles API requests not related to backup, documents, and the People
|
||||
module, for example, requests related to settings, audit, authentication, etc.
|
||||
|
||||
%package api-system
|
||||
Packager: %{packager}
|
||||
Summary: Api-system
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description api-system
|
||||
Api-system
|
||||
The service which is used for working with portals (creating, removing, etc.)
|
||||
|
||||
%package ssoauth
|
||||
Packager: %{packager}
|
||||
Summary: Ssoauth
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: nodejs >= 16.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description ssoauth
|
||||
Ssoauth
|
||||
The service responsible for enabling and configuring
|
||||
SAML-based single sign-on (SSO) authentication to provide a more quick,
|
||||
easy and secure way to access DocSpace for users
|
||||
|
||||
%package clear-events
|
||||
Packager: %{packager}
|
||||
Summary: Clear-events
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description clear-events
|
||||
Clear-events
|
||||
The service responsible for clearing the login_events and audit_events tables
|
||||
by LoginHistoryLifeTime and AuditTrailLifeTime to log out users after a timeout
|
||||
|
||||
%package backup-background
|
||||
Packager: %{packager}
|
||||
Summary: Backup-background
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description backup-background
|
||||
Backup-background
|
||||
The service which launches additional services related to backup creation:
|
||||
- BackupWorkerService - launches WorkerService which runs backup/restore, etc;
|
||||
- BackupListenerService - waits for a signal to delete backups;
|
||||
- BackupCleanerTempFileService - removes temporary backup files;
|
||||
- BackupCleanerService - removes outdated backup files;
|
||||
- BackupSchedulerService - runs backup according to a schedule;
|
||||
|
||||
%package radicale
|
||||
Packager: %{packager}
|
||||
Summary: Radicale
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: python3 >= 3.6
|
||||
Requires: python3-pip
|
||||
Requires: python3-requests
|
||||
Requires: python3-setuptools
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description radicale
|
||||
Radicale
|
||||
Radicale is a server designed to support the CalDav and CardDav protocols.
|
||||
It operates either as a standalone package using its own internal HTTP server
|
||||
or can be integrated with an existing web server
|
||||
|
||||
%package doceditor
|
||||
Packager: %{packager}
|
||||
Summary: Doceditor
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: nodejs >= 16.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description doceditor
|
||||
Doceditor
|
||||
The service which allows interaction with document-server
|
||||
|
||||
%package migration-runner
|
||||
Packager: %{packager}
|
||||
Summary: Migration-runner
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description migration-runner
|
||||
Migration-runner
|
||||
The service responsible for the database creation.
|
||||
A database connection is transferred to the service and
|
||||
the service creates tables and populates them with values
|
||||
|
||||
%package login
|
||||
Packager: %{packager}
|
||||
Summary: Login
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: nodejs >= 16.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description login
|
||||
Login
|
||||
The service which is used for logging users and displaying the wizard
|
||||
|
||||
%package healthchecks
|
||||
Packager: %{packager}
|
||||
Summary: Healthchecks
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-7.0
|
||||
AutoReqProv: no
|
||||
BuildArch: noarch
|
||||
%description healthchecks
|
||||
Healthchecks
|
||||
The service which displays launched services
|
||||
|
@ -1,3 +1,4 @@
|
||||
%define _binaries_in_noarch_packages_terminate_build 0
|
||||
%define _build_id_links none
|
||||
|
||||
%global product docspace
|
||||
@ -12,8 +13,10 @@ Release: %{release}
|
||||
|
||||
AutoReqProv: no
|
||||
|
||||
BuildArch: noarch
|
||||
URL: http://onlyoffice.com
|
||||
Vendor: Ascensio System SIA
|
||||
Packager: %{packager}
|
||||
License: AGPLv3
|
||||
|
||||
Source0: https://github.com/ONLYOFFICE/%{product}/archive/%GIT_BRANCH.tar.gz#/%{sourcename}.tar.gz
|
||||
@ -96,10 +99,7 @@ if ! which python3; then
|
||||
fi
|
||||
fi
|
||||
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install --upgrade requests
|
||||
python3 -m pip install --upgrade setuptools
|
||||
python3 -m pip install --upgrade radicale==3.0.5
|
||||
python3 -m pip install --upgrade radicale
|
||||
python3 -m pip install --upgrade %{buildpath}/Tools/radicale/plugins/app_auth_plugin/.
|
||||
python3 -m pip install --upgrade %{buildpath}/Tools/radicale/plugins/app_store_plugin/.
|
||||
python3 -m pip install --upgrade %{buildpath}/Tools/radicale/plugins/app_rights_plugin/.
|
||||
|
871
build/install/win/DocSpace.Enterprise.aip
Normal file
871
build/install/win/DocSpace.Enterprise.aip
Normal file
@ -0,0 +1,871 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<DOCUMENT Type="Advanced Installer" CreateVersion="20.0" version="20.0" Modules="enterprise" RootPath="." Language="en" Id="{5159D3C5-2644-4DB0-AAF9-7FB7ED1201EC}">
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.ProjectOptionsComponent">
|
||||
<ROW Name="HiddenItems" Value="AppXProductDetailsComponent;AppXDependenciesComponent;AppXAppDetailsComponent;AppXVisualAssetsComponent;AppXCapabilitiesComponent;AppXAppDeclarationsComponent;AppXUriRulesComponent;SccmComponent;ActSyncAppComponent;CPLAppletComponent;AutorunComponent;GameUxComponent;SilverlightSlnComponent;SharePointSlnComponent;FixupComponent;MsiXDiffComponent;MsixManifestEditorComponent"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiPropsComponent">
|
||||
<ROW Property="AI_BITMAP_DISPLAY_MODE" Value="0"/>
|
||||
<ROW Property="AI_EMBD_MSI_EXTR_PATH" Value="[TempFolder]" ValueLocId="-"/>
|
||||
<ROW Property="AI_FINDEXE_TITLE" Value="Select the installation package for [|ProductName]" ValueLocId="AI.Property.FindExeTitle"/>
|
||||
<ROW Property="AI_PREREQ_REPAIR_ENABLED" MultiBuildValue="DefaultBuild:1"/>
|
||||
<ROW Property="ALLUSERS" Value="1"/>
|
||||
<ROW Property="AMQP_HOST" Value="localhost"/>
|
||||
<ROW Property="AMQP_PORT" Value="5672"/>
|
||||
<ROW Property="AMQP_PWD" Value="guest"/>
|
||||
<ROW Property="AMQP_USER" Value="guest"/>
|
||||
<ROW Property="AMQP_VHOST" Value="/"/>
|
||||
<ROW Property="ARPCOMMENTS" Value="[|PRODUCT_NAME] is a platform based on .NET Core and React engines which comprises document management features and makes it possible to implement advanced folder management." ValueLocId="*"/>
|
||||
<ROW Property="ARPCONTACT" Value="20A-6, Ernesta Birznieka-Upisha str., Riga, LV-1050"/>
|
||||
<ROW Property="ARPHELPLINK" Value="http://dev.onlyoffice.org/"/>
|
||||
<ROW Property="ARPHELPTELEPHONE" Value="+371 66016425"/>
|
||||
<ROW Property="ARPNOREPAIR" MultiBuildValue="DefaultBuild:1"/>
|
||||
<ROW Property="ARPURLINFOABOUT" Value="http://www.onlyoffice.com"/>
|
||||
<ROW Property="ARPURLUPDATEINFO" Value="http://www.onlyoffice.com/download.aspx"/>
|
||||
<ROW Property="DATABASE_MIGRATION" Value="true"/>
|
||||
<ROW Property="DB_HOST" Value="localhost"/>
|
||||
<ROW Property="DB_NAME" Value="onlyoffice"/>
|
||||
<ROW Property="DB_PORT" Value="3306"/>
|
||||
<ROW Property="DB_PWD" Value="root"/>
|
||||
<ROW Property="DB_USER" Value="root"/>
|
||||
<ROW Property="DOCUMENT_SERVER_HOST" Value="localhost"/>
|
||||
<ROW Property="DOCUMENT_SERVER_PORT" Value="8083"/>
|
||||
<ROW Property="ELASTICSEARCH_HOST" Value="localhost"/>
|
||||
<ROW Property="ELASTICSEARCH_MSG" Value="Unable to connect to remote Elasticsearch server at "/>
|
||||
<ROW Property="ELASTICSEARCH_PORT" Value="9200"/>
|
||||
<ROW Property="ELASTICSEARCH_SCHEME" Value="http"/>
|
||||
<ROW Property="INSTALL_ROOT_FOLDER_NAME" Value="[|Manufacturer]"/>
|
||||
<ROW Property="JWT_ENABLED" Value="true"/>
|
||||
<ROW Property="JWT_HEADER" Value="Authorization"/>
|
||||
<ROW Property="LICENSE_PATH" Value=" "/>
|
||||
<ROW Property="MSIFASTINSTALL" MultiBuildValue="DefaultBuild:3"/>
|
||||
<ROW Property="MYSQLODBCDRIVER" Value="MySQL ODBC 8.0 Unicode Driver"/>
|
||||
<ROW Property="Manufacturer" Value="Ascensio System SIA"/>
|
||||
<ROW Property="MsiLogging" MultiBuildValue="DefaultBuild:vp"/>
|
||||
<ROW Property="MySQLConnector" Value="MySQL Connector/ODBC 8.0.21 x86"/>
|
||||
<ROW Property="NEED_REINDEX_ELASTICSEARCH" Value="FALSE"/>
|
||||
<ROW Property="PACKAGE_NAME" Value="ONLYOFFICE_DocSpace_Enterprise_Win-install.v[|ProductVersion]"/>
|
||||
<ROW Property="PRODUCT_NAME" Value="ONLYOFFICE DocSpace"/>
|
||||
<ROW Property="PS_DB_HOST" Value="localhost"/>
|
||||
<ROW Property="PS_DB_NAME" Value="onlyoffice"/>
|
||||
<ROW Property="PS_DB_PORT" Value="5432"/>
|
||||
<ROW Property="PS_DB_PWD" Value="onlyoffice"/>
|
||||
<ROW Property="PS_DB_USER" Value="onlyoffice"/>
|
||||
<ROW Property="Prereq_IAgree" Value="No"/>
|
||||
<ROW Property="ProductCode" Value="1033:{9EB28D7F-9705-4DBB-97E1-FFCA1F5DBF12} " Type="16"/>
|
||||
<ROW Property="ProductLanguage" Value="1033"/>
|
||||
<ROW Property="ProductName" Value="[|PRODUCT_NAME]"/>
|
||||
<ROW Property="ProductVersion" Value="1.0.0" Options="32"/>
|
||||
<ROW Property="REDIS_HOST" Value="localhost"/>
|
||||
<ROW Property="REDIS_PORT" Value="6379"/>
|
||||
<ROW Property="REDIS_PWD" Value=" " Options="1"/>
|
||||
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
|
||||
<ROW Property="UpgradeCode" Value="{4BCD210E-EB09-4CC7-B23A-ECA6D6AFA76D}"/>
|
||||
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||
<ROW Property="WindowsType9XDisplay" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT" MultiBuildValue="DefaultBuild:Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT40" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT40Display" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT50" MultiBuildValue="DefaultBuild:Windows 2000" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT50Display" MultiBuildValue="DefaultBuild:Windows 2000" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT5X" MultiBuildValue="DefaultBuild:Windows XP/2003" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT5XDisplay" MultiBuildValue="DefaultBuild:Windows XP/2003" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT64" MultiBuildValue="DefaultBuild:Windows Vista x64, Windows Server 2008 x64, Windows 7 x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows 8.1 x64, Windows 10 x64, Windows 11 x64" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT64Display" MultiBuildValue="DefaultBuild:Windows Vista x64, Windows Server 2008 x64, Windows 7 x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows 8.1 x64, Windows 10 x64, Windows 11 x64" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNTDisplay" MultiBuildValue="DefaultBuild:32-bit Windows versions" ValueLocId="-"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
|
||||
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1"/>
|
||||
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
|
||||
<ROW Directory="TempFolder" Directory_Parent="TARGETDIR" DefaultDir="TEMPFO~1|TempFolder" IsPseudoRoot="1"/>
|
||||
<ROW Directory="config_Dir" Directory_Parent="APPDIR" DefaultDir="config"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
|
||||
<ROW Component="APPDIR" ComponentId="{900ECB1B-D0C1-47FE-8322-54CBE0B1FFE4}" Directory_="APPDIR" Attributes="0" Options="2"/>
|
||||
<ROW Component="ONLYOFFICEDocumentS" ComponentId="{BF807396-6118-4767-83CD-B3108EB7F9A3}" Directory_="APPDIR" Attributes="4" KeyPath="ONLYOFFICEDocumentS" Options="2"/>
|
||||
<ROW Component="config" ComponentId="{E7F92803-D873-450B-8CD6-9AA04C888056}" Directory_="config_Dir" Attributes="0"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
|
||||
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||
<ROW Feature="ONLYOFFICEDocumentS" Title="ONLYOFFICE DocumentServer" Description="ONLYOFFICE DocumentServer" Display="3" Level="1" Attributes="0"/>
|
||||
<ATTRIBUTE name="CurrentFeature" value="MainFeature"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
|
||||
<ROW BootstrOptKey="GlobalOptions" DownloadFolder="[AppDataFolder][|Manufacturer]\[|ProductName]\prerequisites" Options="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
|
||||
<ROW BuildKey="DefaultBuild" BuildName="EXE_ENTERPRISE" BuildOrder="1" BuildType="0" PackageFolder="publish" PackageFileName="[|PACKAGE_NAME]" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExeIconPath="Resources\icon.ico" ExtractionFolder="[AppDataFolder][|INSTALL_ROOT_FOLDER_NAME]\DocSpace\install" ExtUI="true" UseLargeSchema="true" Unicode="true" ExeName="[|PACKAGE_NAME]" UACExecutionLevel="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.ChainedPackageComponent">
|
||||
<ROW ChainedPackage="ONLYOFFICE_DocSpace" Order="1" Options="108" LogPath="[TempFolder]CHAINERS_LOG\ONLYOFFICE_DocSpace_Enterprise_Win-install.v[ProductVersion].log" InstallCondition="NOT Installed AND NOT DOCSPACE_INSTALLED" MaintenanceCondition="UILevel = 5" RemoveCondition="REMOVE="ALL""/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.ChainedPackageFileComponent">
|
||||
<ROW FileId="ONLYOFFICE_DocSpace_Wininstall.v8" ChainedPackage="ONLYOFFICE_DocSpace" Options="1" TargetPath="ONLYOFFICE_DocSpace_Win-install.msi" Content="publish\ONLYOFFICE_DocSpace_Win-install.msi"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
|
||||
<ROW Path="<AI_DICTS>ui.ail"/>
|
||||
<ROW Path="<AI_DICTS>ui_en.ail"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.DigCertStoreComponent">
|
||||
<ROW TimeStampUrl="http://timestamp.comodoca.com" SignerDescription="[|ProductName]" SignOptions="0" SignTool="0" UseSha256="1"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.FragmentComponent">
|
||||
<ROW Fragment="CommonUI.aip" Path="<AI_FRAGS>CommonUI.aip"/>
|
||||
<ROW Fragment="FolderDlg.aip" Path="<AI_THEMES>classic\fragments\FolderDlg.aip"/>
|
||||
<ROW Fragment="MaintenanceTypeDlg.aip" Path="<AI_THEMES>classic\fragments\MaintenanceTypeDlg.aip"/>
|
||||
<ROW Fragment="MaintenanceWelcomeDlg.aip" Path="<AI_THEMES>classic\fragments\MaintenanceWelcomeDlg.aip"/>
|
||||
<ROW Fragment="PreparePrereqDlg.aip" Path="<AI_THEMES>classic\fragments\PreparePrereqDlg.aip"/>
|
||||
<ROW Fragment="PrerequisitesDlg.aip" Path="<AI_THEMES>classic\fragments\PrerequisitesDlg.aip"/>
|
||||
<ROW Fragment="ProgressPrereqDlg.aip" Path="<AI_THEMES>classic\fragments\ProgressPrereqDlg.aip"/>
|
||||
<ROW Fragment="SQLConnectionDlg.aip" Path="<AI_THEMES>classic\fragments\SQLConnectionDlg.aip"/>
|
||||
<ROW Fragment="SequenceDialogs.aip" Path="<AI_THEMES>classic\fragments\SequenceDialogs.aip"/>
|
||||
<ROW Fragment="Sequences.aip" Path="<AI_FRAGS>Sequences.aip"/>
|
||||
<ROW Fragment="StaticUIStrings.aip" Path="<AI_FRAGS>StaticUIStrings.aip"/>
|
||||
<ROW Fragment="Themes.aip" Path="<AI_FRAGS>Themes.aip"/>
|
||||
<ROW Fragment="UI.aip" Path="<AI_THEMES>classic\fragments\UI.aip"/>
|
||||
<ROW Fragment="Validation.aip" Path="<AI_FRAGS>Validation.aip"/>
|
||||
<ROW Fragment="VerifyRemoveDlg.aip" Path="<AI_THEMES>classic\fragments\VerifyRemoveDlg.aip"/>
|
||||
<ROW Fragment="VerifyRepairDlg.aip" Path="<AI_THEMES>classic\fragments\VerifyRepairDlg.aip"/>
|
||||
<ROW Fragment="WelcomeDlg.aip" Path="<AI_THEMES>classic\fragments\WelcomeDlg.aip"/>
|
||||
<ROW Fragment="WelcomePrereqDlg.aip" Path="<AI_THEMES>classic\fragments\WelcomePrereqDlg.aip"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.JsonFileComponent">
|
||||
<ROW JsonFile="appsettings.json" FileName="APPSET~1.JSO|appsettings.production.json" DirProperty="config_Dir" Component="config" RootProperty="Root" Flags="6" IndentUnits="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.JsonPropertyComponent">
|
||||
<ROW JsonProperty="Root" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="file" Parent="license" Name="file" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="license" Parent="Root" Name="license" Condition="1" Order="2" Flags="60"/>
|
||||
<ROW JsonProperty="path" Parent="file" Name="path" Condition="1" Order="0" Flags="57" Value="[LICENSE_PATH]"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiActionTextComponent">
|
||||
<ROW Action="AI_ConfigureChainer" Description="Configuring prerequisites launcher" DescriptionLocId="ActionText.Description.AI_ConfigureChainer" Template="Configure Launcher" TemplateLocId="ActionText.Template.AI_ConfigureChainer"/>
|
||||
<ROW Action="AI_DeleteLzma" Description="Deleting files extracted from archive" DescriptionLocId="ActionText.Description.AI_DeleteLzma" TemplateLocId="-"/>
|
||||
<ROW Action="AI_DeleteRLzma" Description="Deleting files extracted from archive" DescriptionLocId="ActionText.Description.AI_DeleteLzma" TemplateLocId="-"/>
|
||||
<ROW Action="AI_DownloadPrereq" Description="Downloading prerequisite software" DescriptionLocId="ActionText.Description.AI_DownloadPrereq" Template="[1]" TemplateLocId="ActionText.Template.AI_DownloadPrereq"/>
|
||||
<ROW Action="AI_ExtractFiles" Description="Extracting files from archive" DescriptionLocId="ActionText.Description.AI_ExtractLzma" TemplateLocId="-"/>
|
||||
<ROW Action="AI_ExtractLzma" Description="Extracting files from archive" DescriptionLocId="ActionText.Description.AI_ExtractLzma" TemplateLocId="-"/>
|
||||
<ROW Action="AI_ExtractPrereq" Description="Extracting prerequisite software" DescriptionLocId="ActionText.Description.AI_ExtractPrereq" Template="[1]" TemplateLocId="ActionText.Template.AI_ExtractPrereq"/>
|
||||
<ROW Action="AI_InstallPostPrerequisite" Description="Installing prerequisite software" DescriptionLocId="ActionText.Description.AI_InstallPrerequisite" Template="[1]" TemplateLocId="ActionText.Template.AI_InstallPrerequisite"/>
|
||||
<ROW Action="AI_InstallPrerequisite" Description="Installing prerequisite software" DescriptionLocId="ActionText.Description.AI_InstallPrerequisite" Template="[1]" TemplateLocId="ActionText.Template.AI_InstallPrerequisite"/>
|
||||
<ROW Action="AI_JsonCommit" Description="Committing JSON file configurations." DescriptionLocId="ActionText.Description.AI_JsonCommit" Template="Committing JSON file configurations." TemplateLocId="ActionText.Template.AI_JsonCommit"/>
|
||||
<ROW Action="AI_JsonConfig" Description="Executing JSON file configurations" DescriptionLocId="ActionText.Description.AI_JsonConfig" Template="Configuring JSON file: "[1]"" TemplateLocId="ActionText.Template.AI_JsonConfig"/>
|
||||
<ROW Action="AI_JsonInstall" Description="Generating actions to configure JSON files" DescriptionLocId="ActionText.Description.AI_JsonInstall"/>
|
||||
<ROW Action="AI_JsonRemove" Description="Executing JSON file configurations" DescriptionLocId="ActionText.Description.AI_JsonRemove" Template="Configuring JSON file: "[1]"" TemplateLocId="ActionText.Template.AI_JsonRemove"/>
|
||||
<ROW Action="AI_JsonRollback" Description="Rolling back JSON file configurations." DescriptionLocId="ActionText.Description.AI_JsonRollback" Template="Rolling back JSON file configurations." TemplateLocId="ActionText.Template.AI_JsonRollback"/>
|
||||
<ROW Action="AI_JsonUninstall" Description="Generating actions to configure JSON files" DescriptionLocId="ActionText.Description.AI_JsonUninstall"/>
|
||||
<ROW Action="AI_VerifyPrereq" Description="Verifying prerequisites" DescriptionLocId="ActionText.Description.AI_VerifyPrereq" Template="[1] was not installed correctly." TemplateLocId="ActionText.Template.AI_VerifyPrereq"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiAppSearchComponent">
|
||||
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_LM" Builds="DefaultBuild"/>
|
||||
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_CU" Builds="DefaultBuild"/>
|
||||
<ROW Property="REDIS_PWD" Signature_="AppSearchSign"/>
|
||||
<ROW Property="REDIS_PORT" Signature_="AppSearchSign_1"/>
|
||||
<ROW Property="REDIS_HOST" Signature_="AppSearchSign_2"/>
|
||||
<ROW Property="PS_DB_USER" Signature_="AppSearchSign_3"/>
|
||||
<ROW Property="PS_DB_PWD" Signature_="AppSearchSign_4"/>
|
||||
<ROW Property="PS_DB_PORT" Signature_="AppSearchSign_5"/>
|
||||
<ROW Property="PS_DB_NAME" Signature_="AppSearchSign_6"/>
|
||||
<ROW Property="PS_DB_HOST" Signature_="AppSearchSign_7"/>
|
||||
<ROW Property="ELASTICSEARCH_SCHEME" Signature_="AppSearchSign_8"/>
|
||||
<ROW Property="ELASTICSEARCH_PORT" Signature_="AppSearchSign_9"/>
|
||||
<ROW Property="ELASTICSEARCH_MSG" Signature_="AppSearchSign_10"/>
|
||||
<ROW Property="ELASTICSEARCH_HOST" Signature_="AppSearchSign_11"/>
|
||||
<ROW Property="DB_USER" Signature_="AppSearchSign_12"/>
|
||||
<ROW Property="DB_PWD" Signature_="AppSearchSign_13"/>
|
||||
<ROW Property="DB_PORT" Signature_="AppSearchSign_14"/>
|
||||
<ROW Property="DB_NAME" Signature_="AppSearchSign_15"/>
|
||||
<ROW Property="DB_HOST" Signature_="AppSearchSign_16"/>
|
||||
<ROW Property="AMQP_VHOST" Signature_="AppSearchSign_17"/>
|
||||
<ROW Property="AMQP_USER" Signature_="AppSearchSign_18"/>
|
||||
<ROW Property="AMQP_PWD" Signature_="AppSearchSign_19"/>
|
||||
<ROW Property="AMQP_PORT" Signature_="AppSearchSign_20"/>
|
||||
<ROW Property="AMQP_HOST" Signature_="AppSearchSign_21"/>
|
||||
<ROW Property="DOCUMENT_SERVER_JWT_ENABLED" Signature_="AppSearchSign_22"/>
|
||||
<ROW Property="DOCUMENT_SERVER_JWT_HEADER" Signature_="AppSearchSign_23"/>
|
||||
<ROW Property="DOCUMENT_SERVER_JWT_SECRET" Signature_="AppSearchSign_24"/>
|
||||
<ROW Property="DOCUMENT_SERVER_PORT" Signature_="AppSearchSign_25"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiBinaryComponent">
|
||||
<ROW Name="Prereq.dll" SourcePath="<AI_CUSTACTS>Prereq.dll"/>
|
||||
<ROW Name="Utils.CA.dll" SourcePath="Utils.CA.dll"/>
|
||||
<ROW Name="aicustact.dll" SourcePath="<AI_CUSTACTS>aicustact.dll"/>
|
||||
<ROW Name="aipackagechainer.exe" SourcePath="<AI_CUSTACTS>aipackagechainer.exe" DigSign="true"/>
|
||||
<ROW Name="banner.bmp" SourcePath="Resources\banner.bmp"/>
|
||||
<ROW Name="chainersupport.dll" SourcePath="<AI_CUSTACTS>chainersupport.dll"/>
|
||||
<ROW Name="dialog.bmp" SourcePath="Resources\dialog.bmp"/>
|
||||
<ROW Name="file_deleter.ps1" SourcePath="<AI_SCRIPTS>file_deleter.ps1"/>
|
||||
<ROW Name="jsonCfg.dll" SourcePath="<AI_CUSTACTS>jsonCfg.dll"/>
|
||||
<ROW Name="lzmaextractor.dll" SourcePath="<AI_CUSTACTS>lzmaextractor.dll"/>
|
||||
<ROW Name="msichainer.exe" SourcePath="<AI_CUSTACTS>msichainer.exe"/>
|
||||
<ROW Name="utils.vbs" SourcePath="utils.vbs"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlComponent">
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_OK]" Order="300" TextLocId="-" MsiKey="AdminBrowseDlg#OK"/>
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="400" TextLocId="-" MsiKey="AdminBrowseDlg#Cancel"/>
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="ComboLabel" Type="Text" X="25" Y="58" Width="60" Height="10" Attributes="3" Text="&Look in:" Order="500" TextLocId="Control.Text.AdminBrowseDlg#ComboLabel" MsiKey="AdminBrowseDlg#ComboLabel"/>
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="DirectoryCombo" Type="DirectoryCombo" X="86" Y="55" Width="204" Height="80" Attributes="458755" Property="TARGETDIR" Order="600" MsiKey="AdminBrowseDlg#DirectoryCombo"/>
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" Attributes="3670019" Text="[UpDirIcon]" Help="Up One Level|" Order="700" HelpLocId="Control.Help.AdminBrowseDlg#Up" MsiKey="AdminBrowseDlg#Up"/>
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" Attributes="3670019" Text="[NewDirIcon]" Help="Create A New Folder|" Order="800" HelpLocId="Control.Help.AdminBrowseDlg#NewFolder" MsiKey="AdminBrowseDlg#NewFolder"/>
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="110" Attributes="7" Property="TARGETDIR" Order="900" MsiKey="AdminBrowseDlg#DirectoryList"/>
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="PathLabel" Type="Text" X="25" Y="205" Width="75" Height="10" Attributes="3" Text="&Folder name:" Order="1000" TextLocId="Control.Text.AdminBrowseDlg#PathLabel" MsiKey="AdminBrowseDlg#PathLabel"/>
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="1100" MsiKey="AdminBrowseDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="65539" Text="Change current destination folder" TextStyle="[DlgTitleFont]" Order="1200" TextLocId="Control.Text.AdminBrowseDlg#Title" MsiKey="AdminBrowseDlg#Title"/>
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Browse to the destination folder" Order="1300" TextLocId="Control.Text.AdminBrowseDlg#Description" MsiKey="AdminBrowseDlg#Description"/>
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="1400" MsiKey="AdminBrowseDlg#BannerLine"/>
|
||||
<ROW Dialog_="AdminInstallPointDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="500" TextLocId="-" MsiKey="AdminInstallPointDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="AdminInstallPointDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="600" TextLocId="-" MsiKey="AdminInstallPointDlg#Next" Options="1"/>
|
||||
<ROW Dialog_="AdminInstallPointDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="700" TextLocId="-" MsiKey="AdminInstallPointDlg#Cancel" Options="1"/>
|
||||
<ROW Dialog_="AdminInstallPointDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="800" MsiKey="AdminInstallPointDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="AdminInstallPointDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Network Location" TextStyle="[DlgTitleFont]" Order="900" TextLocId="Control.Text.AdminInstallPointDlg#Title" MsiKey="AdminInstallPointDlg#Title"/>
|
||||
<ROW Dialog_="AdminInstallPointDlg" Control="Description" Type="Text" X="25" Y="20" Width="280" Height="20" Attributes="196611" Text="Please specify a network location for the server image of [ProductName] product" Order="1000" TextLocId="Control.Text.AdminInstallPointDlg#Description" MsiKey="AdminInstallPointDlg#Description"/>
|
||||
<ROW Dialog_="AdminInstallPointDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="1100" MsiKey="AdminInstallPointDlg#BannerLine"/>
|
||||
<ROW Dialog_="AdminWelcomeDlg" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="300" MsiKey="AdminWelcomeDlg#Bitmap"/>
|
||||
<ROW Dialog_="AdminWelcomeDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="AdminWelcomeDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_OK]" Order="300" TextLocId="-" MsiKey="BrowseDlg#OK"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="400" TextLocId="-" MsiKey="BrowseDlg#Cancel"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="ComboLabel" Type="Text" X="25" Y="58" Width="60" Height="10" Attributes="3" Text="&Look in:" Order="500" TextLocId="Control.Text.BrowseDlg#ComboLabel" MsiKey="BrowseDlg#ComboLabel"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="DirectoryCombo" Type="DirectoryCombo" X="86" Y="55" Width="204" Height="80" Attributes="393227" Property="_BrowseProperty" Order="600" MsiKey="BrowseDlg#DirectoryCombo"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" Attributes="3670019" Text="[UpDirIcon]" Help="Up One Level|" Order="700" HelpLocId="Control.Help.BrowseDlg#Up" MsiKey="BrowseDlg#Up"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" Attributes="3670019" Text="[NewDirIcon]" Help="Create A New Folder|" Order="800" HelpLocId="Control.Help.BrowseDlg#NewFolder" MsiKey="BrowseDlg#NewFolder"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="110" Attributes="15" Property="_BrowseProperty" Order="900" MsiKey="BrowseDlg#DirectoryList"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="PathLabel" Type="Text" X="25" Y="205" Width="75" Height="10" Attributes="3" Text="&Folder name:" Order="1000" TextLocId="Control.Text.BrowseDlg#PathLabel" MsiKey="BrowseDlg#PathLabel"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="1100" MsiKey="BrowseDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Change current destination folder" TextStyle="[DlgTitleFont]" Order="1200" TextLocId="Control.Text.BrowseDlg#Title" MsiKey="BrowseDlg#Title"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Browse to the destination folder" Order="1300" TextLocId="Control.Text.BrowseDlg#Description" MsiKey="BrowseDlg#Description"/>
|
||||
<ROW Dialog_="BrowseDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="1400" MsiKey="BrowseDlg#BannerLine"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="600" TextLocId="-" MsiKey="CustomizeDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="700" TextLocId="-" MsiKey="CustomizeDlg#Next" Options="1"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="800" TextLocId="-" MsiKey="CustomizeDlg#Cancel" Options="1"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="900" MsiKey="CustomizeDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="LocationLabel" Type="Text" X="25" Y="200" Width="50" Height="10" Attributes="3" Text="Location:" Order="1000" TextLocId="Control.Text.CustomizeDlg#LocationLabel" MsiKey="CustomizeDlg#LocationLabel"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="Location" Type="Text" X="75" Y="200" Width="215" Height="20" Attributes="3" Property="APPDIR" Text="<The selection's path>" Order="1100" TextLocId="Control.Text.CustomizeDlg#Location" MsiKey="CustomizeDlg#Location"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Select the way you want features to be installed." Order="1200" TextLocId="Control.Text.CustomizeDlg#Description" MsiKey="CustomizeDlg#Description"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="Box" Type="GroupBox" X="210" Y="81" Width="140" Height="98" Attributes="1" Order="1300" MsiKey="CustomizeDlg#Box"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="ItemSize" Type="Text" X="215" Y="128" Width="131" Height="50" Attributes="3" Text="The size of the currently selected item." Order="1400" TextLocId="Control.Text.CustomizeDlg#ItemSize" MsiKey="CustomizeDlg#ItemSize"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="ItemDescription" Type="Text" X="215" Y="90" Width="131" Height="30" Attributes="3" Text="Multiline description of the currently selected item." Order="1500" TextLocId="Control.Text.CustomizeDlg#ItemDescription" MsiKey="CustomizeDlg#ItemDescription"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="1600" MsiKey="CustomizeDlg#BannerLine"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Custom Setup" TextStyle="[DlgTitleFont]" Order="1700" TextLocId="Control.Text.CustomizeDlg#Title" MsiKey="CustomizeDlg#Title"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control="Text" Type="Text" X="25" Y="55" Width="320" Height="20" Attributes="3" Text="Click on the icons in the tree below to change the way features will be installed." Order="1800" TextLocId="Control.Text.CustomizeDlg#Text" MsiKey="CustomizeDlg#Text"/>
|
||||
<ROW Dialog_="DiskCostDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="200" MsiKey="DiskCostDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="DiskCostDlg" Control="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Attributes="393223" Text="{120}{70}{70}{70}{70}" Order="400" TextLocId="Control.Text.DiskCostDlg#VolumeList" MsiKey="DiskCostDlg#VolumeList"/>
|
||||
<ROW Dialog_="DiskCostDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Disk Space Requirements" TextStyle="[DlgTitleFont]" Order="500" TextLocId="Control.Text.DiskCostDlg#Title" MsiKey="DiskCostDlg#Title"/>
|
||||
<ROW Dialog_="DiskCostDlg" Control="Text" Type="Text" X="20" Y="53" Width="330" Height="40" Attributes="3" Text="The highlighted volumes (if any) do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s)." Order="600" TextLocId="Control.Text.DiskCostDlg#Text" MsiKey="DiskCostDlg#Text"/>
|
||||
<ROW Dialog_="DiskCostDlg" Control="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Attributes="196611" Text="The disk space required for the installation of the selected features." Order="700" TextLocId="Control.Text.DiskCostDlg#Description" MsiKey="DiskCostDlg#Description"/>
|
||||
<ROW Dialog_="DiskCostDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="800" MsiKey="DiskCostDlg#BannerLine"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="100" Options="1"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="200" Options="1"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="300" Options="1"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="500"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="BottomLine" Type="Line" X="5" Y="234" Width="368" Height="0" Attributes="1" Order="600"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Настройка подключения Elasticsearch..." Order="700"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Elasticsearch настройки подключения" TextStyle="[DlgTitleFont]" Order="800"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="ProtocolLabel" Type="Text" X="25" Y="65" Width="67" Height="11" Attributes="65539" Text="Protocol" Order="900"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="ServerLabel" Type="Text" X="25" Y="92" Width="67" Height="11" Attributes="65539" Text="Server:" Order="1000"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="PortLabel" Type="Text" X="25" Y="119" Width="67" Height="11" Attributes="65539" Text="Port:" Order="1100"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="ProtocolEdit" Type="Edit" X="98" Y="61" Width="253" Height="18" Attributes="3" Property="ELASTICSEARCH_SCHEME" Text="{5}" Order="1200"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="ServerEdit" Type="Edit" X="98" Y="89" Width="253" Height="18" Attributes="3" Property="ELASTICSEARCH_HOST" Text="[ComputerName]" Order="1300"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control="PortEdit" Type="Edit" X="98" Y="116" Width="253" Height="18" Attributes="19" Property="ELASTICSEARCH_PORT" Text="{7}" Order="1400"/>
|
||||
<ROW Dialog_="ExitDialog" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="300" MsiKey="ExitDialog#Bitmap"/>
|
||||
<ROW Dialog_="ExitDialog" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="ExitDialog#Back" Options="1"/>
|
||||
<ROW Dialog_="FatalError" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="300" MsiKey="FatalError#Bitmap"/>
|
||||
<ROW Dialog_="FatalError" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="FatalError#Back" Options="1"/>
|
||||
<ROW Dialog_="FilesInUse" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400" MsiKey="FilesInUse#BannerBitmap"/>
|
||||
<ROW Dialog_="FilesInUse" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Files in Use" TextStyle="[DlgTitleFont]" Order="600" TextLocId="Control.Text.FilesInUse#Title" MsiKey="FilesInUse#Title"/>
|
||||
<ROW Dialog_="FilesInUse" Control="Text" Type="Text" X="20" Y="55" Width="330" Height="30" Attributes="3" Text="The following applications are using files that need to be updated by this setup. You can either close the applications and then click "Retry", or click "Ignore" so that the installer continues the installation and replaces these files when your system restarts." Order="700" TextLocId="Control.Text.FilesInUse#Text" MsiKey="FilesInUse#Text"/>
|
||||
<ROW Dialog_="FilesInUse" Control="List" Type="ListBox" X="20" Y="87" Width="330" Height="130" Attributes="7" Property="FileInUseProcess" Order="800" MsiKey="FilesInUse#List"/>
|
||||
<ROW Dialog_="FilesInUse" Control="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Attributes="196611" Text="Some files that need to be updated are currently in use." Order="900" TextLocId="Control.Text.FilesInUse#Description" MsiKey="FilesInUse#Description"/>
|
||||
<ROW Dialog_="FilesInUse" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="1000" MsiKey="FilesInUse#BannerLine"/>
|
||||
<ROW Dialog_="FolderDlg" Control="FolderEdit" Type="PathEdit" X="18" Y="126" Width="252" Height="18" Attributes="7" Property="APPDIR" Help="|" Order="300" HelpLocId="Control.Help.FolderDlg#FolderEdit" MsiKey="FolderDlg#FolderEdit"/>
|
||||
<ROW Dialog_="FolderDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="600" TextLocId="-" MsiKey="FolderDlg#Cancel" Options="1"/>
|
||||
<ROW Dialog_="FolderDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="700" TextLocId="-" MsiKey="FolderDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="FolderDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Help="|" Order="800" HelpLocId="Control.Help.FolderDlg#BannerBitmap" MsiKey="FolderDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="FolderDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Select Installation Folder" TextStyle="[DlgTitleFont]" Order="900" TextLocId="Control.Text.FolderDlg#Title" MsiKey="FolderDlg#Title"/>
|
||||
<ROW Dialog_="FolderDlg" Control="Text" Type="Text" X="25" Y="70" Width="320" Height="40" Attributes="3" Text="To install in this folder, click "[Text_Next]". To install to a different folder, enter it below or click "Browse"." Order="1000" TextLocId="Control.Text.FolderDlg#Text" MsiKey="FolderDlg#Text"/>
|
||||
<ROW Dialog_="FolderDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="This is the folder where [ProductName] will be installed." Order="1100" TextLocId="Control.Text.FolderDlg#Description" MsiKey="FolderDlg#Description"/>
|
||||
<ROW Dialog_="FolderDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="1200" MsiKey="FolderDlg#BannerLine"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="700" TextLocId="-" MsiKey="MaintenanceTypeDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="1000" MsiKey="MaintenanceTypeDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Select the operation you wish to perform." Order="1200" TextLocId="Control.Text.MaintenanceTypeDlg#Description" MsiKey="MaintenanceTypeDlg#Description"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control="ChangeText" Type="Text" X="105" Y="78" Width="230" Height="20" Attributes="3" Text="Allows users to change the way features are installed." Order="1300" TextLocId="Control.Text.MaintenanceTypeDlg#ChangeText" MsiKey="MaintenanceTypeDlg#ChangeText"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="1400" MsiKey="MaintenanceTypeDlg#BannerLine"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control="Title" Type="Text" X="15" Y="6" Width="240" Height="15" Attributes="196611" Text="Modify, Repair or Remove installation" TextStyle="[DlgTitleFont]" Order="1500" TextLocId="Control.Text.MaintenanceTypeDlg#Title" MsiKey="MaintenanceTypeDlg#Title"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control="RepairText" Type="Text" X="105" Y="127" Width="230" Height="30" Attributes="3" Text="Repairs errors in the most recent installation state - fixes missing or corrupt files, shortcuts and registry entries." Order="1600" TextLocId="Control.Text.MaintenanceTypeDlg#RepairText" MsiKey="MaintenanceTypeDlg#RepairText"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control="RemoveText" Type="Text" X="105" Y="176" Width="230" Height="20" Attributes="3" Text="Removes [ProductName] from your computer." Order="1700" TextLocId="Control.Text.MaintenanceTypeDlg#RemoveText" MsiKey="MaintenanceTypeDlg#RemoveText"/>
|
||||
<ROW Dialog_="MaintenanceWelcomeDlg" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="300" MsiKey="MaintenanceWelcomeDlg#Bitmap"/>
|
||||
<ROW Dialog_="MaintenanceWelcomeDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="MaintenanceWelcomeDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="MsiRMFilesInUse" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="300" MsiKey="MsiRMFilesInUse#BannerBitmap"/>
|
||||
<ROW Dialog_="OutOfDiskDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="200" MsiKey="OutOfDiskDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="OutOfDiskDlg" Control="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Attributes="393223" Text="{120}{70}{70}{70}{70}" Order="400" TextLocId="Control.Text.OutOfDiskDlg#VolumeList" MsiKey="OutOfDiskDlg#VolumeList"/>
|
||||
<ROW Dialog_="OutOfDiskDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Out of Disk Space" TextStyle="[DlgTitleFont]" Order="500" TextLocId="Control.Text.OutOfDiskDlg#Title" MsiKey="OutOfDiskDlg#Title"/>
|
||||
<ROW Dialog_="OutOfDiskDlg" Control="Text" Type="Text" X="20" Y="53" Width="330" Height="40" Attributes="3" Text="The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s)." Order="600" TextLocId="Control.Text.OutOfDiskDlg#Text" MsiKey="OutOfDiskDlg#Text"/>
|
||||
<ROW Dialog_="OutOfDiskDlg" Control="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Attributes="196611" Text="Disk space required for the installation exceeds available disk space." Order="700" TextLocId="Control.Text.OutOfDiskDlg#Description" MsiKey="OutOfDiskDlg#Description"/>
|
||||
<ROW Dialog_="OutOfDiskDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="800" MsiKey="OutOfDiskDlg#BannerLine"/>
|
||||
<ROW Dialog_="OutOfRbDiskDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="300" MsiKey="OutOfRbDiskDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="OutOfRbDiskDlg" Control="Text2" Type="Text" X="20" Y="94" Width="330" Height="40" Attributes="3" Text="Alternatively, you may choose to disable the installer's rollback functionality. This allows the installer to restore your computer's original state should the installation be interrupted in any way. Click "Yes" if you wish to take the risk to disable rollback." Order="500" TextLocId="Control.Text.OutOfRbDiskDlg#Text2" MsiKey="OutOfRbDiskDlg#Text2"/>
|
||||
<ROW Dialog_="OutOfRbDiskDlg" Control="Text" Type="Text" X="20" Y="53" Width="330" Height="40" Attributes="3" Text="The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s)." Order="600" TextLocId="Control.Text.OutOfRbDiskDlg#Text" MsiKey="OutOfRbDiskDlg#Text"/>
|
||||
<ROW Dialog_="OutOfRbDiskDlg" Control="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Attributes="196611" Text="Disk space required for the installation exceeds available disk space." Order="700" TextLocId="Control.Text.OutOfRbDiskDlg#Description" MsiKey="OutOfRbDiskDlg#Description"/>
|
||||
<ROW Dialog_="OutOfRbDiskDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="800" MsiKey="OutOfRbDiskDlg#BannerLine"/>
|
||||
<ROW Dialog_="OutOfRbDiskDlg" Control="VolumeList" Type="VolumeCostList" X="20" Y="140" Width="330" Height="80" Attributes="4587527" Text="{120}{70}{70}{70}{70}" Order="900" TextLocId="Control.Text.OutOfRbDiskDlg#VolumeList" MsiKey="OutOfRbDiskDlg#VolumeList"/>
|
||||
<ROW Dialog_="OutOfRbDiskDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Out of Disk Space" TextStyle="[DlgTitleFont]" Order="1000" TextLocId="Control.Text.OutOfRbDiskDlg#Title" MsiKey="OutOfRbDiskDlg#Title"/>
|
||||
<ROW Dialog_="PatchWelcomeDlg" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="300" MsiKey="PatchWelcomeDlg#Bitmap"/>
|
||||
<ROW Dialog_="PatchWelcomeDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="PatchWelcomeDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="100" Options="1"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="200" Options="1"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="300" Options="1"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="[BannerBitmap]" Order="400"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="500"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="BottomLine" Type="Line" X="5" Y="234" Width="368" Height="0" Attributes="1" Order="600"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Attributes="196611" Text="Configure PostgreSQL Connection..." Order="700"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="PostgreSQL Database" TextStyle="[DlgTitleFont]" Order="800"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="ServerEdit" Type="Edit" X="98" Y="61" Width="253" Height="18" Attributes="3" Property="PS_DB_HOST" Text="{255}" Order="900" TextLocId="Control.Text.SQLConnectionDlg#ServerEdit"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="PortEdit" Type="Edit" X="98" Y="89" Width="253" Height="18" Attributes="19" Property="PS_DB_PORT" Text="{5}" Order="1000" TextLocId="Control.Text.SQLConnectionDlg#PortEdit"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="DatabaseEdit" Type="Edit" X="98" Y="116" Width="253" Height="18" Attributes="3" Property="PS_DB_NAME" Text="{255}" Order="1100" TextLocId="Control.Text.SQLConnectionDlg#DatabaseEdit"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="UsernameEdit" Type="Edit" X="98" Y="143" Width="253" Height="18" Attributes="3" Property="PS_DB_USER" Text="{255}" Order="1200" TextLocId="Control.Text.SQLConnectionDlg#UsernameEdit"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="PasswordEdit" Type="Edit" X="98" Y="172" Width="253" Height="18" Attributes="2097155" Property="PS_DB_PWD" Text="{255}" Order="1300" TextLocId="Control.Text.SQLConnectionDlg#PasswordEdit"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="ServerLabel" Type="Text" X="25" Y="65" Width="67" Height="11" Attributes="196611" Text="Server:" Order="1400"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="PortLabel" Type="Text" X="25" Y="92" Width="67" Height="11" Attributes="196611" Text="Port:" Order="1500"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="DatabaseLabel" Type="Text" X="25" Y="119" Width="67" Height="11" Attributes="196611" Text="Database:" Order="1600"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="UsernameLabel" Type="Text" X="25" Y="148" Width="67" Height="11" Attributes="196611" Text="Username:" Order="1700"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control="PasswordLabel" Type="Text" X="25" Y="176" Width="67" Height="11" Attributes="196611" Text="Password:" Order="1800"/>
|
||||
<ROW Dialog_="PrepareDlg" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="200" MsiKey="PrepareDlg#Bitmap"/>
|
||||
<ROW Dialog_="PrepareDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1048577" Text="[ButtonText_Back]" Order="700" TextLocId="-" MsiKey="PrepareDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="PreparePrereqDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="300" TextLocId="-" MsiKey="PreparePrereqDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="PreparePrereqDlg" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="400" MsiKey="PreparePrereqDlg#Bitmap"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="100" TextLocId="-" Options="1"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="200" TextLocId="-" Options="1"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="300" TextLocId="-" Options="1"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="500"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="BottomLine" Type="Line" X="0" Y="234" Width="368" Height="0" Attributes="1" Order="600"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Attributes="196611" Text="Please read the following license agreement carefully" Order="700"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Title" Type="Text" X="15" Y="6" Width="289" Height="15" Attributes="196611" Text="End-User License Agreement" TextStyle="[DlgTitleFont]" Order="800"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="AgreementText" Type="ScrollableText" X="20" Y="60" Width="330" Height="120" Attributes="7" Text="Resources\License_Enterprise_Redist.rtf" Order="900" TextLocId="-"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Buttons" Type="RadioButtonGroup" X="20" Y="187" Width="330" Height="40" Attributes="3" Property="Prereq_IAgree" Order="1000"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="300" TextLocId="-" MsiKey="PrerequisitesDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400" MsiKey="PrerequisitesDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Select which prerequisites will be installed" Order="700" TextLocId="Control.Text.PrerequisitesDlg#Description" MsiKey="PrerequisitesDlg#Description"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Prerequisites" TextStyle="[DlgTitleFont]" Order="800" TextLocId="Control.Text.PrerequisitesDlg#Title" MsiKey="PrerequisitesDlg#Title"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control="PrerequisiteSelector" Type="PrerequisiteSelector" X="15" Y="57" Width="344" Height="162" Attributes="3" Property="PREREQUISITESDLGPREREQUISITESELECTOR_0_PROP" Text="{110}{80}{70}{70}Name,Required,Found,Action" Order="900" TextLocId="Control.Text.PrerequisitesDlg#PrerequisiteSelector" MsiKey="PrerequisitesDlg#PrerequisiteSelector" ExtType="PrerequisiteSelector"/>
|
||||
<ROW Dialog_="ProgressDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="200" MsiKey="ProgressDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="ProgressDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="ProgressDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="ProgressDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Next]" Order="500" TextLocId="-" MsiKey="ProgressDlg#Next" Options="1"/>
|
||||
<ROW Dialog_="ProgressDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="600" MsiKey="ProgressDlg#BannerLine"/>
|
||||
<ROW Dialog_="ProgressDlg" Control="ActionText" Type="Text" X="80" Y="100" Width="255" Height="10" Attributes="3" Order="700" MsiKey="ProgressDlg#ActionText"/>
|
||||
<ROW Dialog_="ProgressDlg" Control="Title" Type="Text" X="20" Y="15" Width="250" Height="15" Attributes="196611" Text="[Progress1] [ProductName]" TextStyle="[DlgTitleFont]" Order="800" TextLocId="Control.Text.ProgressDlg#Title" MsiKey="ProgressDlg#Title"/>
|
||||
<ROW Dialog_="ProgressDlg" Control="Text" Type="Text" X="35" Y="65" Width="300" Height="30" Attributes="196611" Text="Please wait while the [Wizard] [Progress2] [ProductName]. This may take several minutes." Order="900" TextLocId="Control.Text.ProgressDlg#Text" MsiKey="ProgressDlg#Text"/>
|
||||
<ROW Dialog_="ProgressDlg" Control="StatusLabel" Type="Text" X="35" Y="100" Width="45" Height="10" Attributes="3" Text="Status:" Order="1000" TextLocId="Control.Text.ProgressDlg#StatusLabel" MsiKey="ProgressDlg#StatusLabel"/>
|
||||
<ROW Dialog_="ProgressDlg" Control="ProgressBar" Type="ProgressBar" X="35" Y="115" Width="300" Height="10" Attributes="65537" Text="Progress done" Order="1100" TextLocId="Control.Text.ProgressDlg#ProgressBar" MsiKey="ProgressDlg#ProgressBar"/>
|
||||
<ROW Dialog_="ProgressPrereqDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="300" TextLocId="-" MsiKey="ProgressPrereqDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="ProgressPrereqDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400" MsiKey="ProgressPrereqDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="ProgressPrereqDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" Attributes="1" Order="600" MsiKey="ProgressPrereqDlg#BannerLine"/>
|
||||
<ROW Dialog_="ProgressPrereqDlg" Control="ActionText" Type="Text" X="80" Y="100" Width="255" Height="10" Attributes="3" Order="700" MsiKey="ProgressPrereqDlg#ActionText"/>
|
||||
<ROW Dialog_="ProgressPrereqDlg" Control="Title" Type="Text" X="20" Y="15" Width="250" Height="15" Attributes="196611" Text="[Progress1] prerequisites for [ProductName]" TextStyle="[DlgTitleFont]" Order="800" TextLocId="Control.Text.ProgressPrereqDlg#Title" MsiKey="ProgressPrereqDlg#Title"/>
|
||||
<ROW Dialog_="ProgressPrereqDlg" Control="Text" Type="Text" X="35" Y="65" Width="300" Height="30" Attributes="196611" Text="Please wait while the [Wizard] [Progress2] prerequisites for [ProductName]. This may take several minutes." Order="900" TextLocId="Control.Text.ProgressPrereqDlg#Text" MsiKey="ProgressPrereqDlg#Text"/>
|
||||
<ROW Dialog_="ProgressPrereqDlg" Control="StatusLabel" Type="Text" X="35" Y="100" Width="45" Height="10" Attributes="3" Text="Status:" Order="1000" TextLocId="Control.Text.ProgressPrereqDlg#StatusLabel" MsiKey="ProgressPrereqDlg#StatusLabel"/>
|
||||
<ROW Dialog_="ProgressPrereqDlg" Control="ProgressBar" Type="ProgressBar" X="35" Y="115" Width="300" Height="10" Attributes="65537" Text="Progress done" Order="1100" TextLocId="Control.Text.ProgressPrereqDlg#ProgressBar" MsiKey="ProgressPrereqDlg#ProgressBar"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="100" Options="1"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="200" Options="1"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="300" Options="1"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="500"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="BottomLine" Type="Line" X="5" Y="234" Width="368" Height="0" Attributes="1" Order="600"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Configure RabbitMQ Connection..." Order="700"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="Text_1" Type="Text" X="15" Y="6" Width="289" Height="15" Attributes="196611" Text="RabbitMQ connection settings" TextStyle="[DlgTitleFont]" Order="800"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="ServerLabel" Type="Text" X="25" Y="65" Width="65" Height="11" Attributes="65539" Text="Server:" Order="900" TextLocId="Control.Text.SQLConnectionDlg#ServerLabel"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="PortLabel" Type="Text" X="25" Y="92" Width="65" Height="11" Attributes="65539" Text="Port:" Order="1000" TextLocId="Control.Text.SQLConnectionDlg#PortLabel"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="DatabaseLabel" Type="Text" X="25" Y="119" Width="65" Height="11" Attributes="65539" Text="Virtual Host:" Order="1100"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="UsernameLabel" Type="Text" X="25" Y="148" Width="65" Height="11" Attributes="65539" Text="Username:" Order="1200" TextLocId="Control.Text.SQLConnectionDlg#UsernameLabel"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="PasswordLabel" Type="Text" X="25" Y="176" Width="73" Height="11" Attributes="65539" Text="Password:" Order="1300" TextLocId="Control.Text.SQLConnectionDlg#PasswordLabel"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="Edit_1" Type="Edit" X="98" Y="63" Width="253" Height="18" Attributes="3" Property="AMQP_HOST" Text="{260}" Order="1400"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="PortEdit" Type="Edit" X="98" Y="89" Width="253" Height="18" Attributes="19" Property="AMQP_PORT" Text="{5}" Order="1500"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="DatabaseEdit" Type="Edit" X="98" Y="116" Width="253" Height="18" Attributes="3" Property="AMQP_VHOST" Text="{255}" Order="1600"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="UsernameEdit" Type="Edit" X="98" Y="143" Width="253" Height="18" Attributes="3" Property="AMQP_USER" Text="[LogonUser]" Order="1700"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control="PasswordEdit" Type="Edit" X="98" Y="171" Width="253" Height="18" Attributes="2097155" Property="AMQP_PWD" Text="{255}" Order="1800"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="100" Options="1"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="200" Options="1"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="300" Options="1"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="500"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="BottomLine" Type="Line" X="5" Y="234" Width="368" Height="0" Attributes="1" Order="600"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Redis Server connection settings" Order="700"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Redis Server connection settings" TextStyle="[DlgTitleFont]" Order="800"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="ServerLabel" Type="Text" X="25" Y="65" Width="65" Height="11" Attributes="65539" Text="Host:" Order="900"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="PortLabel" Type="Text" X="25" Y="92" Width="65" Height="11" Attributes="65539" Text="Port:" Order="1000" TextLocId="Control.Text.SQLConnectionDlg#PortLabel"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="Text_1" Type="Text" X="25" Y="120" Width="66" Height="11" Attributes="65539" Text="Auth (Optional):" Order="1100"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="ServerEdit" Type="Edit" X="98" Y="61" Width="253" Height="18" Attributes="3" Property="REDIS_HOST" Text="[ComputerName]" Help="|" Order="1200" ExtDataLocId="-"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="PortEdit" Type="Edit" X="98" Y="89" Width="253" Height="18" Attributes="19" Property="REDIS_PORT" Text="{5}" Help="|" Order="1300"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control="Edit_1" Type="Edit" X="98" Y="117" Width="253" Height="18" Attributes="2097155" Property="REDIS_PWD" Text="{5}" Help="|" Order="1400"/>
|
||||
<ROW Dialog_="ResumeDlg" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="300" MsiKey="ResumeDlg#Bitmap"/>
|
||||
<ROW Dialog_="ResumeDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="ResumeDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="SQLConnectionDlgDialogInitializer" Type="DialogInitializer" X="0" Y="0" Width="0" Height="0" Attributes="0" Order="-1" TextLocId="-" HelpLocId="-" ExtDataLocId="-"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="100" MsiKey="SQLConnectionDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="MySQL Database" TextStyle="[DlgTitleFont]" Order="200" MsiKey="SQLConnectionDlg#Title"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Configure MySQL Connection..." Order="300" MsiKey="SQLConnectionDlg#Description"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="ServerEdit" Type="Edit" X="98" Y="61" Width="253" Height="18" Attributes="3" Property="DB_HOST" Text="{255}" Order="500" TextLocId="Control.Text.SQLConnectionDlg#ServerEdit" MsiKey="SQLConnectionDlg#ServerEdit"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="PortEdit" Type="Edit" X="98" Y="89" Width="253" Height="18" Attributes="19" Property="DB_PORT" Text="{5}" Order="600" TextLocId="Control.Text.SQLConnectionDlg#PortEdit" MsiKey="SQLConnectionDlg#PortEdit"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="DatabaseEdit" Type="Edit" X="98" Y="116" Width="253" Height="18" Attributes="3" Property="DB_NAME" Text="{255}" Order="700" TextLocId="Control.Text.SQLConnectionDlg#DatabaseEdit" MsiKey="SQLConnectionDlg#DatabaseEdit"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="UsernameEdit" Type="Edit" X="98" Y="143" Width="253" Height="18" Attributes="3" Property="DB_USER" Text="{255}" Order="800" TextLocId="Control.Text.SQLConnectionDlg#UsernameEdit" MsiKey="SQLConnectionDlg#UsernameEdit"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="PasswordEdit" Type="Edit" X="98" Y="172" Width="253" Height="18" Attributes="2097155" Property="DB_PWD" Text="{255}" Order="900" TextLocId="Control.Text.SQLConnectionDlg#PasswordEdit" MsiKey="SQLConnectionDlg#PasswordEdit"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="1000" TextLocId="-" MsiKey="SQLConnectionDlg#Next" Options="1"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="1100" TextLocId="-" MsiKey="SQLConnectionDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="1200" TextLocId="-" MsiKey="SQLConnectionDlg#Cancel" Options="1"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="ServerLabel" Type="Text" X="25" Y="65" Width="67" Height="11" Attributes="196611" Text="Server:" Order="1300" MsiKey="SQLConnectionDlg#ServerLabel"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="PortLabel" Type="Text" X="25" Y="92" Width="67" Height="11" Attributes="196611" Text="Port:" Order="1400" MsiKey="SQLConnectionDlg#PortLabel"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="DatabaseLabel" Type="Text" X="25" Y="119" Width="67" Height="11" Attributes="196611" Text="Database:" Order="1500" MsiKey="SQLConnectionDlg#DatabaseLabel"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="UsernameLabel" Type="Text" X="25" Y="148" Width="67" Height="11" Attributes="196611" Text="Username:" Order="1600" MsiKey="SQLConnectionDlg#UsernameLabel"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="PasswordLabel" Type="Text" X="25" Y="176" Width="67" Height="11" Attributes="196611" Text="Password:" Order="1700" MsiKey="SQLConnectionDlg#PasswordLabel"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control="BottomLine" Type="Line" X="5" Y="234" Width="368" Height="0" Attributes="1" Order="1800" MsiKey="SQLConnectionDlg#BottomLine"/>
|
||||
<ROW Dialog_="UserExit" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="300" MsiKey="UserExit#Bitmap"/>
|
||||
<ROW Dialog_="UserExit" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="UserExit#Back" Options="1"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="300" MsiKey="VerifyReadyDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="500" TextLocId="-" MsiKey="VerifyReadyDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control="Text" Type="Text" X="25" Y="70" Width="320" Height="40" Attributes="196611" Text="Click "Install" to begin the installation. If you want to review or change any of your installation settings, click "Back". Click "Cancel" to exit the wizard." Order="600" TextLocId="Control.Text.VerifyReadyDlg#Text" MsiKey="VerifyReadyDlg#Text"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control="Description" Type="Text" X="25" Y="23" Width="304" Height="20" Attributes="196611" Text="The [Wizard] is ready to begin the [ProductName] installation" Order="700" TextLocId="Control.Text.VerifyReadyDlg#Description" MsiKey="VerifyReadyDlg#Description"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="800" MsiKey="VerifyReadyDlg#BannerLine"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control="Title" Type="Text" X="15" Y="6" Width="304" Height="15" Attributes="196611" Text="Ready to Install" TextStyle="[DlgTitleFont]" Order="900" TextLocId="Control.Text.VerifyReadyDlg#Title" MsiKey="VerifyReadyDlg#Title"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="100" TextLocId="-" MsiKey="VerifyRemoveDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400" MsiKey="VerifyRemoveDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Remove [ProductName]" TextStyle="DlgFontBold8" Order="600" TextLocId="Control.Text.VerifyRemoveDlg#Title" MsiKey="VerifyRemoveDlg#Title"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control="Text" Type="Text" X="25" Y="70" Width="320" Height="60" Attributes="3" Text="Click "Remove" to remove [ProductName] from your computer. If you want to review or change any of your installation settings, click "Back". Click "Cancel" to exit the wizard." Order="700" TextLocId="Control.Text.VerifyRemoveDlg#Text" MsiKey="VerifyRemoveDlg#Text"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="You have chosen to remove the program from your computer." Order="800" TextLocId="Control.Text.VerifyRemoveDlg#Description" MsiKey="VerifyRemoveDlg#Description"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="900" MsiKey="VerifyRemoveDlg#BannerLine"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="300" MsiKey="VerifyRepairDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="500" TextLocId="-" MsiKey="VerifyRepairDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Repair [ProductName]" TextStyle="DlgFontBold8" Order="600" TextLocId="Control.Text.VerifyRepairDlg#Title" MsiKey="VerifyRepairDlg#Title"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control="Text" Type="Text" X="25" Y="70" Width="320" Height="60" Attributes="3" Text="Click "Repair" to repair the installation of [ProductName]. If you want to review or change any of your installation settings, click "Back". Click "Cancel" to exit the wizard." Order="700" TextLocId="Control.Text.VerifyRepairDlg#Text" MsiKey="VerifyRepairDlg#Text"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="The [Wizard] is ready to begin the repair of [ProductName]." Order="800" TextLocId="Control.Text.VerifyRepairDlg#Description" MsiKey="VerifyRepairDlg#Description"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="900" MsiKey="VerifyRepairDlg#BannerLine"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="300" MsiKey="WelcomeDlg#Bitmap"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="WelcomeDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="WelcomePrereqDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="300" TextLocId="-" MsiKey="WelcomePrereqDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="WelcomePrereqDlg" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="500" MsiKey="WelcomePrereqDlg#Bitmap"/>
|
||||
<ATTRIBUTE name="DeletedRows" value="AdminBrowseDlg#Logo@AdminInstallPointDlg#Logo@BrowseDlg#Logo@CustomizeDlg#Logo@DiskCostDlg#Logo@FilesInUse#Logo@FolderDlg#Logo@MaintenanceTypeDlg#Logo@MsiRMFilesInUse#Logo@OutOfDiskDlg#Logo@OutOfRbDiskDlg#Logo@PrerequisitesDlg#Logo@ProgressDlg#Logo@ProgressPrereqDlg#Logo@SQLConnectionDlg#Logo@SQLConnectionDlg#OdbcResourceEdit@SQLConnectionDlg#OdbcResourceLabel@SQLConnectionDlg.aip@VerifyReadyDlg#Logo@VerifyRemoveDlg#Logo@VerifyRepairDlg#Logo"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlConditionComponent">
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control_="Next" Action="Disable" Condition="Prereq_IAgree <> "Yes""/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control_="Next" Action="Enable" Condition="Prereq_IAgree = "Yes""/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlEventComponent">
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = "" )" Ordering="19"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="SQLConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError <> "" )" Ordering="216"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL" Ordering="1"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_INSTALL" Ordering="197"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( RedisServerConnectionError <> "" )" Ordering="203"/>
|
||||
<ROW Dialog_="MaintenanceWelcomeDlg" Control_="Next" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="99"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_MAINT" Ordering="101"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="1"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_MAINT" Ordering="198"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="204"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="ChangeButton" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="501"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceWelcomeDlg" Condition="AI_MAINT" Ordering="1"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="RemoveButton" Event="NewDialog" Argument="VerifyRemoveDlg" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="601"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="1"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="RepairButton" Event="NewDialog" Argument="VerifyRepairDlg" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="601"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="1"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control_="Repair" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="399" Options="1"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control_="Remove" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="299" Options="1"/>
|
||||
<ROW Dialog_="PatchWelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_PATCH" Ordering="201"/>
|
||||
<ROW Dialog_="ResumeDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_RESUME" Ordering="299"/>
|
||||
<ROW Dialog_="WelcomePrereqDlg" Control_="Next" Event="NewDialog" Argument="PrereqLicenseAgreementDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control_="Next" Event="EndDialog" Argument="Return" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control_="Back" Event="NewDialog" Argument="PrereqLicenseAgreementDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control_="Cancel" Event="SpawnDialog" Argument="CancelDlg" Condition="1" Ordering="100"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control_="Next" Event="NewDialog" Argument="PrerequisitesDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control_="Back" Event="NewDialog" Argument="WelcomePrereqDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_PATCH" Ordering="199"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="PatchWelcomeDlg" Condition="AI_PATCH" Ordering="205"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_5" Condition="AI_INSTALL AND ( SqlConnectionError <> "" )" Ordering="4"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="DoAction" Argument="TestSQLConnectionMsgBox" Condition="AI_INSTALL AND ( SqlConnectionError <> "" )" Ordering="5"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="SQLConnectionDlgDialogInitializer" Event="[DB_PWD]" Argument="{}" Condition="AI_INSTALL AND ( OLDPRODUCTS="" AND SQLConnectionDlg_Cond )" Ordering="4"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="SQLConnectionDlgDialogInitializer" Event="[AI_ButtonText_Next_Orig]" Argument="[ButtonText_Next]" Condition="AI_INSTALL AND ( OLDPRODUCTS="" AND SQLConnectionDlg_Cond )" Ordering="3"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="SQLConnectionDlgDialogInitializer" Event="[ButtonText_Next]" Argument="[[AI_CommitButton]]" Condition="AI_INSTALL AND ( OLDPRODUCTS="" AND SQLConnectionDlg_Cond )" Ordering="2"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="SQLConnectionDlgDialogInitializer" Event="[AI_Text_Next_Orig]" Argument="[Text_Next]" Condition="AI_INSTALL AND ( OLDPRODUCTS="" AND SQLConnectionDlg_Cond )" Ordering="1"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="SQLConnectionDlgDialogInitializer" Event="[Text_Next]" Argument="[Text_Install]" Condition="AI_INSTALL AND ( OLDPRODUCTS="" AND SQLConnectionDlg_Cond )" Ordering="0"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError <> "" )" Ordering="6"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = "" )" Ordering="2"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="TestSqlConnection" Condition="AI_INSTALL" Ordering="1"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="SQLConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError <> "" AND OLDPRODUCTS <> "" )" Ordering="20"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError = "" AND OLDPRODUCTS <> "" )" Ordering="25"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestSqlConnection" Condition="AI_INSTALL" Ordering="201"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError = "" )" Ordering="222"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="DoAction" Argument="TestSqlConnection" Condition="AI_INSTALL" Ordering="3"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = "" )" Ordering="201"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS <> "" )" Ordering="202"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Cancel" Event="SpawnDialog" Argument="CancelDlg" Condition="1" Ordering="100"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError <> "" )" Ordering="5"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = "" )" Ordering="3"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Back" Event="NewDialog" Argument="SQLConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError <> "" )" Ordering="5"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="DoAction" Argument="TestElasticsearchConnection" Condition="AI_INSTALL" Ordering="2"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_1" Condition="AI_INSTALL" Ordering="1"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="DoAction" Argument="TestElasticsearchConnectionMsgBox" Condition="AI_INSTALL AND ( ELK_CONNECTION = "False" )" Ordering="4"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER" Condition="AI_INSTALL AND ( ELK_CONNECTION = "False" )" Ordering="3"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS <> "" )" Ordering="3"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS <> "" )" Ordering="4"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="TestElasticsearchConnection" Condition="AI_INSTALL" Ordering="16"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_1" Condition="AI_INSTALL" Ordering="15"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "False" AND OLDPRODUCTS <> "" )" Ordering="22"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestElasticsearchConnection" Condition="AI_INSTALL AND ( SqlConnectionError="" AND PostgreSqlConnectionError = "" )" Ordering="212"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_1" Condition="AI_INSTALL AND ( SqlConnectionError="" AND PostgreSqlConnectionError = "" )" Ordering="211"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "False" )" Ordering="218"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Cancel" Event="SpawnDialog" Argument="CancelDlg" Condition="1" Ordering="100"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError <> "" )" Ordering="11"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Back" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND ( ELK_CONNECTION = "False" )" Ordering="3"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control_="Cancel" Event="SpawnDialog" Argument="CancelDlg" Condition="1" Ordering="100"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError = "" )" Ordering="5"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control_="Back" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( RabbitMQServerConnectionError = "" )" Ordering="3"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = "" )" Ordering="2"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = "" )" Ordering="2"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS <> "" )" Ordering="1"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS <> "" )" Ordering="1"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="TestRabbitMQServerConnection" Condition="AI_INSTALL" Ordering="17"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="TestRedisServerConnection" Condition="AI_INSTALL" Ordering="18"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "False" AND RabbitMQServerConnectionError <> "" AND OLDPRODUCTS <> "" )" Ordering="23"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "False" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError <> "" AND OLDPRODUCTS <> "" )" Ordering="24"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError <> "" )" Ordering="219"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError <> "" )" Ordering="221"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestRabbitMQServerConnection" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError <> "" )" Ordering="213"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestRedisServerConnection" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError <> "" )" Ordering="214"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError <> "" )" Ordering="10"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError <> "" )" Ordering="11"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError = "" )" Ordering="12"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError <> "" )" Ordering="6"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError = "" )" Ordering="10"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Next" Event="DoAction" Argument="TestRabbitMQConnectionMsgBox" Condition="AI_INSTALL AND ( RabbitMQServerConnectionError <> "" )" Ordering="10"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_18" Condition="AI_INSTALL AND ( RabbitMQServerConnectionError <> "" )" Ordering="9"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError = "" )" Ordering="12"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control_="Next" Event="DoAction" Argument="TestRedisServerConnection" Condition="AI_INSTALL" Ordering="2"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control_="Next" Event="DoAction" Argument="TestRedisServerConnectionMsgBox" Condition="AI_INSTALL AND ( RedisServerConnectionError <> "" )" Ordering="4"/>
|
||||
<ROW Dialog_="RedisServerConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_17" Condition="AI_INSTALL AND ( RedisServerConnectionError <> "" )" Ordering="3"/>
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Next" Event="DoAction" Argument="TestRabbitMQServerConnection" Condition="AI_INSTALL" Ordering="8"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Cancel" Event="SpawnDialog" Argument="CancelDlg" Condition="1" Ordering="100"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="DoAction" Argument="TestPostgreSqlConnection" Condition="AI_INSTALL" Ordering="1"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="DoAction" Argument="TestPostgreSqlConnectionMsgBox" Condition="AI_INSTALL AND ( PostgreSqlConnectionError <> "" )" Ordering="3"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_20" Condition="AI_INSTALL AND ( PostgreSqlConnectionError <> "" )" Ordering="2"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "False" )" Ordering="9"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = "" )" Ordering="1"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS <> "" )" Ordering="2"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestPostgreSqlConnection" Condition="AI_INSTALL AND ( SqlConnectionError = "" )" Ordering="210"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="PostgreSQLConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError <> "" )" Ordering="217"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="PostgreSQLConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = "" AND PostgreSqlConnectionError <> "" AND OLDPRODUCTS <> "" )" Ordering="21"/>
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="TestPostgreSqlConnection" Condition="AI_INSTALL" Ordering="14"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="[PostgreSQLConnectionDlg_Cond]" Argument="1" Condition="((&DocumentServer = 3) AND NOT (!DocumentServer = 3))" Ordering="2"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="[PostgreSQLConnectionDlg_Cond]" Argument="{}" Condition="1" Ordering="1"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="PostgreSQLConnectionDlg" Condition="AI_INSTALL AND PostgreSQLConnectionDlg_Cond AND ( SqlConnectionError = "" AND PostgreSqlConnectionError <> "" )" Ordering="8"/>
|
||||
<ROW Dialog_="ELKConnectionDlg" Control_="Back" Event="NewDialog" Argument="PostgreSQLConnectionDlg" Condition="AI_INSTALL AND PostgreSQLConnectionDlg_Cond AND ( PostgreSqlConnectionError <> "" )" Ordering="6"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND PostgreSQLConnectionDlg_Cond AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "False" )" Ordering="5"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Back" Event="NewDialog" Argument="SQLConnectionDlg" Condition="PostgreSQLConnectionDlg_Cond AND AI_INSTALL AND ( SqlConnectionError <> "" )" Ordering="3"/>
|
||||
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND PostgreSQLConnectionDlg_Cond AND ( SqlConnectionError = "" AND PostgreSqlConnectionError = "" AND ELK_CONNECTION = "True" AND RabbitMQServerConnectionError = "" AND RedisServerConnectionError = "" )" Ordering="6"/>
|
||||
<ROW Dialog_="ExitDialog" Control_="Finish" Event="DoAction" Argument="AI_ChainerScheduleReboot" Condition="Not AIEXTERNALUI" Ordering="302"/>
|
||||
<ROW Dialog_="ExitDialog" Control_="Finish" Event="DoAction" Argument="AI_CleanPrereq" Condition="1" Ordering="303"/>
|
||||
<ROW Dialog_="FatalError" Control_="Finish" Event="DoAction" Argument="AI_CleanPrereq" Condition="1" Ordering="102"/>
|
||||
<ROW Dialog_="UserExit" Control_="Finish" Event="DoAction" Argument="AI_CleanPrereq" Condition="1" Ordering="101"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
|
||||
<ROW Directory_="APPDIR" Component_="APPDIR" ManualDelete="true"/>
|
||||
<ROW Directory_="config_Dir" Component_="config" ManualDelete="false"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
|
||||
<ROW Action="AI_AppSearchEx" Type="1" Source="Prereq.dll" Target="DoAppSearchEx"/>
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
|
||||
<ROW Action="AI_ChainerScheduleReboot" Type="1" Source="chainersupport.dll" Target="ScheduleReboot" WithoutSeq="true"/>
|
||||
<ROW Action="AI_CleanPrereq" Type="65" Source="Prereq.dll" Target="CleanPrereq" WithoutSeq="true"/>
|
||||
<ROW Action="AI_CommitChainers" Type="11841" Source="chainersupport.dll" Target="CommitChainedPackages" WithoutSeq="true"/>
|
||||
<ROW Action="AI_ConfigureChainer" Type="1" Source="Prereq.dll" Target="ConfigurePrereqLauncher"/>
|
||||
<ROW Action="AI_DATA_SETTER" Type="51" Source="CustomActionData" Target="[AI_SETUPEXEPATH]"/>
|
||||
<ROW Action="AI_DATA_SETTER_1" Type="51" Source="CustomActionData" Target="HOST=[ELASTICSEARCH_HOST];PORT=[ELASTICSEARCH_PORT];OUTPUT=ELK_CONNECTION"/>
|
||||
<ROW Action="AI_DATA_SETTER_10" Type="51" Source="StartWebApi" Target="ASC.WebApi"/>
|
||||
<ROW Action="AI_DATA_SETTER_2" Type="51" Source="CustomActionData" Target="[ELASTICSEARCH_MSG] \n[ELASTICSEARCH_SCHEME]://[ELASTICSEARCH_HOST]:[ELASTICSEARCH_PORT] |[ProductName] Setup |MB_OK,MB_ICONWARNING,MB_DEFBUTTON1||[CLIENTPROCESSID]"/>
|
||||
<ROW Action="AI_DATA_SETTER_3" Type="51" Source="CustomActionData" Target="[PostgreSqlConnectionError] |[ProductName] Setup |MB_OK,MB_ICONWARNING,MB_DEFBUTTON1||[CLIENTPROCESSID]"/>
|
||||
<ROW Action="AI_DATA_SETTER_4" Type="51" Source="CustomActionData" Target="[RabbitMQServerConnectionError] |[ProductName] Setup |MB_OK,MB_ICONWARNING,MB_DEFBUTTON1||[CLIENTPROCESSID]"/>
|
||||
<ROW Action="AI_DATA_SETTER_5" Type="51" Source="CustomActionData" Target="[RedisServerConnectionError] |[ProductName] Setup |MB_OK,MB_ICONWARNING,MB_DEFBUTTON1||[CLIENTPROCESSID]"/>
|
||||
<ROW Action="AI_DATA_SETTER_6" Type="51" Source="CustomActionData" Target="[SqlConnectionError] |[ProductName] Setup |MB_OK,MB_ICONWARNING,MB_DEFBUTTON1||[CLIENTPROCESSID]"/>
|
||||
<ROW Action="AI_DATA_SETTER_7" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||
<ROW Action="AI_DATA_SETTER_8" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||
<ROW Action="AI_DATA_SETTER_9" Type="51" Source="StopWebApi" Target="ASC.WebApi"/>
|
||||
<ROW Action="AI_DOWNGRADE" Type="19" Target="4010"/>
|
||||
<ROW Action="AI_DeleteCadLzma" Type="51" Source="AI_DeleteLzma" Target="[AI_SETUPEXEPATH]"/>
|
||||
<ROW Action="AI_DeleteLzma" Type="1025" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
|
||||
<ROW Action="AI_DeleteRCadLzma" Type="51" Source="AI_DeleteRLzma" Target="[AI_SETUPEXEPATH]"/>
|
||||
<ROW Action="AI_DeleteRLzma" Type="1281" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
|
||||
<ROW Action="AI_DownloadPrereq" Type="1" Source="Prereq.dll" Target="DownloadPrereq"/>
|
||||
<ROW Action="AI_DpiContentScale" Type="1" Source="aicustact.dll" Target="DpiContentScale"/>
|
||||
<ROW Action="AI_EnableDebugLog" Type="321" Source="aicustact.dll" Target="EnableDebugLog"/>
|
||||
<ROW Action="AI_ExtractCadLzma" Type="51" Source="AI_ExtractLzma" Target="[AI_SETUPEXEPATH]"/>
|
||||
<ROW Action="AI_ExtractFiles" Type="1" Source="Prereq.dll" Target="ExtractSourceFiles" AdditionalSeq="AI_DATA_SETTER"/>
|
||||
<ROW Action="AI_ExtractLzma" Type="1025" Source="lzmaextractor.dll" Target="ExtractLZMAFiles"/>
|
||||
<ROW Action="AI_ExtractPrereq" Type="65" Source="Prereq.dll" Target="ExtractPrereq"/>
|
||||
<ROW Action="AI_FindExeLzma" Type="1" Source="lzmaextractor.dll" Target="FindEXE"/>
|
||||
<ROW Action="AI_InstallModeCheck" Type="1" Source="aicustact.dll" Target="UpdateInstallMode" WithoutSeq="true"/>
|
||||
<ROW Action="AI_InstallPostPrerequisite" Type="1" Source="Prereq.dll" Target="InstallPostPrereq"/>
|
||||
<ROW Action="AI_InstallPrerequisite" Type="1" Source="Prereq.dll" Target="InstallPrereq"/>
|
||||
<ROW Action="AI_JsonCommit" Type="11777" Source="jsonCfg.dll" Target="OnJsonCommit" WithoutSeq="true"/>
|
||||
<ROW Action="AI_JsonConfig" Type="11265" Source="jsonCfg.dll" Target="OnJsonConfig" WithoutSeq="true"/>
|
||||
<ROW Action="AI_JsonInstall" Type="1" Source="jsonCfg.dll" Target="OnJsonInstall" AdditionalSeq="AI_DATA_SETTER_7"/>
|
||||
<ROW Action="AI_JsonRemove" Type="11265" Source="jsonCfg.dll" Target="OnJsonRemove" WithoutSeq="true"/>
|
||||
<ROW Action="AI_JsonRollback" Type="11521" Source="jsonCfg.dll" Target="OnJsonRollback" WithoutSeq="true"/>
|
||||
<ROW Action="AI_JsonUninstall" Type="1" Source="jsonCfg.dll" Target="OnJsonUninstall" AdditionalSeq="AI_DATA_SETTER_8"/>
|
||||
<ROW Action="AI_LaunchChainer" Type="3314" Source="AI_PREREQ_CHAINER"/>
|
||||
<ROW Action="AI_PREPARE_UPGRADE" Type="65" Source="aicustact.dll" Target="PrepareUpgrade"/>
|
||||
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Type="65" Source="aicustact.dll" Target="PreserveInstallType"/>
|
||||
<ROW Action="AI_PrepareChainers" Type="1" Source="chainersupport.dll" Target="PrepareChainedPackages"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH" Target="[AI_SETUPEXEPATH_ORIGINAL]"/>
|
||||
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
|
||||
<ROW Action="AI_RollbackChainers" Type="11585" Source="chainersupport.dll" Target="RollbackChainedPackages" WithoutSeq="true"/>
|
||||
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
|
||||
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
|
||||
<ROW Action="AI_VerifyPrereq" Type="1" Source="Prereq.dll" Target="VerifyPrereq"/>
|
||||
<ROW Action="ElasticSearchInstallPlugin" Type="1030" Source="utils.vbs" Target="ElasticSearchInstallPlugin"/>
|
||||
<ROW Action="ElasticSearchSetup" Type="6" Source="utils.vbs" Target="ElasticSearchSetup"/>
|
||||
<ROW Action="MySQLConfigure" Type="6" Source="utils.vbs" Target="MySQLConfigure"/>
|
||||
<ROW Action="PostgreSqlConfigure" Type="4102" Source="utils.vbs" Target="PostgreSqlConfigure"/>
|
||||
<ROW Action="RedisSearchSetup" Type="6" Source="utils.vbs" Target="RedisSetup"/>
|
||||
<ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]" MultiBuildTarget="DefaultBuild:[ProgramFilesFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace"/>
|
||||
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]" MultiBuildTarget="DefaultBuild:[ProgramMenuFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace"/>
|
||||
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
|
||||
<ROW Action="SetDocumentServerJWTSecretProp" Type="6" Source="utils.vbs" Target="SetDocumentServerJWTSecretProp"/>
|
||||
<ROW Action="Set_DS_JWT_ENABLED" Type="51" Source="DOCUMENT_SERVER_JWT_ENABLED" Target="[JWT_ENABLED]"/>
|
||||
<ROW Action="Set_DS_JWT_HEADER" Type="51" Source="DOCUMENT_SERVER_JWT_HEADER" Target="[JWT_HEADER]"/>
|
||||
<ROW Action="Set_DS_JWT_SECRET" Type="51" Source="DOCUMENT_SERVER_JWT_SECRET" Target="[JWT_SECRET]"/>
|
||||
<ROW Action="Set_LICENSE_PATH" Type="51" Source="LICENSE_PATH" Target="[APPDIR]\Data\license.lic"/>
|
||||
<ROW Action="StartWebApi" Type="3585" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_10"/>
|
||||
<ROW Action="StopWebApi" Type="3585" Source="aicustact.dll" Target="StopWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_9"/>
|
||||
<ROW Action="TestElasticsearchConnection" Type="1" Source="Utils.CA.dll" Target="CheckTCPAvailability" WithoutSeq="true" AdditionalSeq="AI_DATA_SETTER_1"/>
|
||||
<ROW Action="TestElasticsearchConnectionMsgBox" Type="1" Source="aicustact.dll" Target="MsgBox" WithoutSeq="true" Options="1" AdditionalSeq="AI_DATA_SETTER_2"/>
|
||||
<ROW Action="TestPostgreSqlConnection" Type="4102" Source="utils.vbs" Target="TestPostgreSqlConnection" WithoutSeq="true"/>
|
||||
<ROW Action="TestPostgreSqlConnectionMsgBox" Type="1" Source="aicustact.dll" Target="MsgBox" WithoutSeq="true" Options="1" AdditionalSeq="AI_DATA_SETTER_3"/>
|
||||
<ROW Action="TestRabbitMQConnectionMsgBox" Type="1" Source="aicustact.dll" Target="MsgBox" WithoutSeq="true" Options="1" AdditionalSeq="AI_DATA_SETTER_4"/>
|
||||
<ROW Action="TestRabbitMQServerConnection" Type="1" Source="Utils.CA.dll" Target="TestRabbitMQConnection" WithoutSeq="true"/>
|
||||
<ROW Action="TestRedisServerConnection" Type="1" Source="Utils.CA.dll" Target="TestRedisServerConnection" WithoutSeq="true"/>
|
||||
<ROW Action="TestRedisServerConnectionMsgBox" Type="1" Source="aicustact.dll" Target="MsgBox" WithoutSeq="true" Options="1" AdditionalSeq="AI_DATA_SETTER_5"/>
|
||||
<ROW Action="TestSQLConnectionMsgBox" Type="1" Source="aicustact.dll" Target="MsgBox" WithoutSeq="true" Options="1" AdditionalSeq="AI_DATA_SETTER_6"/>
|
||||
<ROW Action="TestSqlConnection" Type="6" Source="utils.vbs" Target="TestSqlConnection" WithoutSeq="true"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiDialogComponent">
|
||||
<ROW Dialog="ELKConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
|
||||
<ROW Dialog="PostgreSQLConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
|
||||
<ROW Dialog="PrereqLicenseAgreementDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel" TitleLocId="-"/>
|
||||
<ROW Dialog="RabbitMQConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
|
||||
<ROW Dialog="RedisServerConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiEmbeddedChainerComponent">
|
||||
<ROW MsiEmbeddedChainer="msichainer.exe" Condition="VersionMsi >= "4.05"" CommandLine="[AI_CHAINER_CMD_LINE]" Source="msichainer.exe" Type="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiEventMappingComponent">
|
||||
<ROW Dialog_="RabbitMQConnectionDlg" Control_="PasswordLabel" Event="ActionData" Attribute="Visible"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatCompsComponent">
|
||||
<ROW Feature_="MainFeature" Component_="APPDIR"/>
|
||||
<ROW Feature_="ONLYOFFICEDocumentS" Component_="ONLYOFFICEDocumentS"/>
|
||||
<ROW Feature_="MainFeature" Component_="config"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent">
|
||||
<ROW Action="AI_DOWNGRADE" Condition="AI_NEWERPRODUCTFOUND AND (UILevel <> 5)" Sequence="210"/>
|
||||
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=""" Sequence="749"/>
|
||||
<ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1505"/>
|
||||
<ROW Action="AI_PREPARE_UPGRADE" Condition="AI_UPGRADE="No" AND (Not Installed)" Sequence="1397"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="52"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="51"/>
|
||||
<ROW Action="AI_AppSearchEx" Sequence="102"/>
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_DeleteCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="199" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_DeleteRCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="198" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_ExtractCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="197" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_FindExeLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="196" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_ExtractLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="1549" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_DeleteRLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="1548" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_DeleteLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="6597" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_ExtractFiles" Sequence="1399" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_DATA_SETTER" Sequence="1398"/>
|
||||
<ROW Action="ElasticSearchInstallPlugin" Condition="( NOT Installed )" Sequence="6405"/>
|
||||
<ROW Action="ElasticSearchSetup" Condition="( NOT Installed )" Sequence="6404"/>
|
||||
<ROW Action="MySQLConfigure" Condition="( NOT Installed )" Sequence="6403"/>
|
||||
<ROW Action="PostgreSqlConfigure" Condition="( NOT Installed )" Sequence="6402"/>
|
||||
<ROW Action="RedisSearchSetup" Condition="( NOT Installed )" Sequence="6401"/>
|
||||
<ROW Action="AI_PrepareChainers" Condition="VersionMsi >= "4.05"" Sequence="5851"/>
|
||||
<ROW Action="AI_ConfigureChainer" Condition="((UILevel = 2) OR (UILevel = 3)) AND (NOT UPGRADINGPRODUCTCODE)" Sequence="6598"/>
|
||||
<ROW Action="AI_LaunchChainer" Condition="AI_PREREQ_CHAINER AND (NOT UPGRADINGPRODUCTCODE)" Sequence="6599"/>
|
||||
<ROW Action="AI_VerifyPrereq" Sequence="1101"/>
|
||||
<ROW Action="AI_JsonInstall" Condition="(REMOVE <> "ALL")" Sequence="5102"/>
|
||||
<ROW Action="AI_DATA_SETTER_7" Condition="(REMOVE <> "ALL")" Sequence="5101"/>
|
||||
<ROW Action="AI_JsonUninstall" Condition="(REMOVE)" Sequence="3102"/>
|
||||
<ROW Action="AI_DATA_SETTER_8" Condition="(REMOVE)" Sequence="3101"/>
|
||||
<ROW Action="StopWebApi" Condition="( NOT Installed )" Sequence="1502"/>
|
||||
<ROW Action="AI_DATA_SETTER_9" Condition="( NOT Installed )" Sequence="1501"/>
|
||||
<ROW Action="StartWebApi" Condition="( NOT Installed )" Sequence="1504"/>
|
||||
<ROW Action="AI_DATA_SETTER_10" Condition="( NOT Installed )" Sequence="1503"/>
|
||||
<ROW Action="Set_LICENSE_PATH" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) OR ( Installed AND ( REMOVE = "ALL" OR AI_INSTALL_MODE = "Remove" ) AND UPGRADINGPRODUCTCODE ) )" Sequence="201"/>
|
||||
<ATTRIBUTE name="RegisterProduct" value="false"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstallUISequenceComponent">
|
||||
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Sequence="199"/>
|
||||
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=""" Sequence="749"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="53"/>
|
||||
<ROW Action="AI_DpiContentScale" Sequence="52"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="51"/>
|
||||
<ROW Action="AI_AppSearchEx" Sequence="102"/>
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101"/>
|
||||
<ROW Action="MySQLConfigure" Sequence="1101"/>
|
||||
<ROW Action="PostgreSqlConfigure" Condition="( NOT Installed )" Sequence="1102"/>
|
||||
<ROW Action="AI_DownloadPrereq" Sequence="1297"/>
|
||||
<ROW Action="AI_ExtractPrereq" Sequence="1298"/>
|
||||
<ROW Action="AI_InstallPrerequisite" Sequence="1299"/>
|
||||
<ROW Action="AI_InstallPostPrerequisite" Sequence="1301"/>
|
||||
<ROW Action="AI_CleanPrereq" Sequence="1302"/>
|
||||
<ROW Action="Set_DS_JWT_ENABLED" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) ) AND ( JWT_ENABLED = "true" )" Sequence="1104"/>
|
||||
<ROW Action="Set_DS_JWT_HEADER" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) ) AND ( JWT_ENABLED = "true" )" Sequence="1105"/>
|
||||
<ROW Action="Set_DS_JWT_SECRET" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) ) AND ( JWT_ENABLED = "true" AND NOT DOCSPACE_INSTALLED )" Sequence="1106"/>
|
||||
<ROW Action="SetDocumentServerJWTSecretProp" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) ) AND ( JWT_ENABLED = "true" AND NOT DOCSPACE_INSTALLED )" Sequence="1103"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
|
||||
<ROW Condition="( Version9X OR ( NOT VersionNT64 ) OR ( VersionNT64 AND ((VersionNT64 <> 600) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 600) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 602) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 603) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 1000) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 1100) OR (MsiNTProductType <> 1)) ) )" Description="[ProductName] cannot be installed on the following Windows versions: [WindowsTypeNT64Display]." DescriptionLocId="AI.LaunchCondition.NoSpecificNT64" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="( Version9X OR VersionNT64 )" Description="[ProductName] cannot be installed on [WindowsTypeNTDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="((VersionNT <> 501) AND (VersionNT <> 502))" Description="[ProductName] cannot be installed on [WindowsTypeNT5XDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT5X" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="(VersionNT <> 400)" Description="[ProductName] cannot be installed on [WindowsTypeNT40Display]." DescriptionLocId="AI.LaunchCondition.NoNT40" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="(VersionNT <> 500)" Description="[ProductName] cannot be installed on [WindowsTypeNT50Display]." DescriptionLocId="AI.LaunchCondition.NoNT50" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="SETUPEXEDIR OR (REMOVE="ALL")" Description="This package can only be run from a bootstrapper." DescriptionLocId="AI.LaunchCondition.RequireBootstrapper" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiRadioButtonComponent">
|
||||
<ROW Property="Prereq_IAgree" Order="1" Value="Yes" X="5" Y="0" Width="250" Height="15" Text="I &accept the terms in the License Agreement" TextStyle="DlgFont8" TextLocId="RadioButton.Text.IAgree#1"/>
|
||||
<ROW Property="Prereq_IAgree" Order="2" Value="No" X="5" Y="20" Width="250" Height="15" Text="I &do not accept the terms in the License Agreement" TextStyle="DlgFont8" TextLocId="RadioButton.Text.IAgree#2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegLocatorComponent">
|
||||
<ROW Signature_="AI_EXE_PATH_CU" Root="1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
|
||||
<ROW Signature_="AI_EXE_PATH_LM" Root="2" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="REDIS_PWD" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_1" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="REDIS_PORT" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_10" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="ELASTICSEARCH_MSG" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_11" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="ELASTICSEARCH_HOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_12" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DB_USER" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_13" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DB_PWD" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_14" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DB_PORT" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_15" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DB_NAME" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_16" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DB_HOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_17" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_VHOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_18" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_USER" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_19" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_PWD" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_2" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="REDIS_HOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_20" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_PORT" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_21" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_HOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_22" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_JWT_ENABLED" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_23" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_JWT_HEADER" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_24" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_JWT_SECRET" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_25" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_PORT" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_3" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_USER" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_4" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_PWD" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_5" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_PORT" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_6" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_NAME" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_7" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_HOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_8" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="ELASTICSEARCH_SCHEME" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_9" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="ELASTICSEARCH_PORT" Type="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegsComponent">
|
||||
<ROW Registry="AI_ExePath" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Value="[AI_SETUPEXEPATH]" Component_="APPDIR"/>
|
||||
<ROW Registry="AMQP_HOST" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_HOST" Value="[AMQP_HOST]" Component_="APPDIR"/>
|
||||
<ROW Registry="AMQP_PORT" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_PORT" Value="[AMQP_PORT]" Component_="APPDIR"/>
|
||||
<ROW Registry="AMQP_PWD" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_PWD" Value="[AMQP_PWD]" Component_="APPDIR"/>
|
||||
<ROW Registry="AMQP_USER" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_USER" Value="[AMQP_USER]" Component_="APPDIR"/>
|
||||
<ROW Registry="AMQP_VHOST" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_VHOST" Value="[AMQP_VHOST]" Component_="APPDIR"/>
|
||||
<ROW Registry="AdvancedInstaller" Root="-1" Key="Software\Caphyon\Advanced Installer" Name="\" Component_="APPDIR"/>
|
||||
<ROW Registry="Caphyon" Root="-1" Key="Software\Caphyon" Name="\" Component_="APPDIR"/>
|
||||
<ROW Registry="DB_HOST" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="DB_HOST" Value="[DB_HOST]" Component_="APPDIR"/>
|
||||
<ROW Registry="DB_NAME" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="DB_NAME" Value="[DB_NAME]" Component_="APPDIR"/>
|
||||
<ROW Registry="DB_PORT" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="DB_PORT" Value="[DB_PORT]" Component_="APPDIR"/>
|
||||
<ROW Registry="DB_PWD" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="DB_PWD" Value="[DB_PWD]" Component_="APPDIR"/>
|
||||
<ROW Registry="DB_USER" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="DB_USER" Value="[DB_USER]" Component_="APPDIR"/>
|
||||
<ROW Registry="DOCUMENT_SERVER_JWT_ENABLED" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_JWT_ENABLED" Value="[DOCUMENT_SERVER_JWT_ENABLED]" Component_="APPDIR"/>
|
||||
<ROW Registry="DOCUMENT_SERVER_JWT_HEADER" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_JWT_HEADER" Value="[DOCUMENT_SERVER_JWT_HEADER]" Component_="APPDIR"/>
|
||||
<ROW Registry="DOCUMENT_SERVER_JWT_SECRET" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_JWT_SECRET" Value="[DOCUMENT_SERVER_JWT_SECRET]" Component_="APPDIR"/>
|
||||
<ROW Registry="DOCUMENT_SERVER_PORT" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_PORT" Value="[DOCUMENT_SERVER_PORT]" Component_="APPDIR"/>
|
||||
<ROW Registry="ELASTICSEARCH_HOST" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="ELASTICSEARCH_HOST" Value="[ELASTICSEARCH_HOST]" Component_="APPDIR"/>
|
||||
<ROW Registry="ELASTICSEARCH_PORT" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="ELASTICSEARCH_PORT" Value="[ELASTICSEARCH_PORT]" Component_="APPDIR"/>
|
||||
<ROW Registry="ELASTICSEARCH_SCHEME" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="ELASTICSEARCH_SCHEME" Value="[ELASTICSEARCH_SCHEME]" Component_="APPDIR"/>
|
||||
<ROW Registry="LZMA" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA" Name="\" Component_="APPDIR"/>
|
||||
<ROW Registry="Manufacturer" Root="-1" Key="Software\[Manufacturer]" Name="\" Component_="APPDIR"/>
|
||||
<ROW Registry="ONLYOFFICEDocumentS" Root="-1" Key="Software\Caphyon\Advanced Installer\Prereqs\[ProductCode]\[ProductVersion]" Name="ONLYOFFICEDocumentS" Value="1" Component_="ONLYOFFICEDocumentS"/>
|
||||
<ROW Registry="PS_DB_HOST" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_HOST" Value="[PS_DB_HOST]" Component_="APPDIR"/>
|
||||
<ROW Registry="PS_DB_NAME" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_NAME" Value="[PS_DB_NAME]" Component_="APPDIR"/>
|
||||
<ROW Registry="PS_DB_PORT" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_PORT" Value="[PS_DB_PORT]" Component_="APPDIR"/>
|
||||
<ROW Registry="PS_DB_PWD" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_PWD" Value="[PS_DB_PWD]" Component_="APPDIR"/>
|
||||
<ROW Registry="PS_DB_USER" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_USER" Value="[PS_DB_USER]" Component_="APPDIR"/>
|
||||
<ROW Registry="Path" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Path" Value="[APPDIR]" Component_="APPDIR"/>
|
||||
<ROW Registry="Prereqs" Root="-1" Key="Software\Caphyon\Advanced Installer\Prereqs" Name="\"/>
|
||||
<ROW Registry="ProductCode" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]" Name="\" Component_="APPDIR"/>
|
||||
<ROW Registry="ProductCode_1" Root="-1" Key="Software\Caphyon\Advanced Installer\Prereqs\[ProductCode]" Name="\"/>
|
||||
<ROW Registry="ProductName" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="\" Component_="APPDIR"/>
|
||||
<ROW Registry="ProductVersion" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="\" Component_="APPDIR"/>
|
||||
<ROW Registry="ProductVersion_1" Root="-1" Key="Software\Caphyon\Advanced Installer\Prereqs\[ProductCode]\[ProductVersion]" Name="\"/>
|
||||
<ROW Registry="REDIS_HOST" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="REDIS_HOST" Value="[REDIS_HOST]" Component_="APPDIR"/>
|
||||
<ROW Registry="REDIS_PORT" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="REDIS_PORT" Value="[REDIS_PORT]" Component_="APPDIR"/>
|
||||
<ROW Registry="REDIS_PWD" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="REDIS_PWD" Value="[REDIS_PWD]" Component_="APPDIR"/>
|
||||
<ROW Registry="Software" Root="-1" Key="Software" Name="\"/>
|
||||
<ROW Registry="Version" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Version" Value="[ProductVersion]" Component_="APPDIR"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiThemeComponent">
|
||||
<ATTRIBUTE name="UsedTheme" value="classic"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiUpgradeComponent">
|
||||
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="0.0.1" VersionMax="[|ProductVersion]" Attributes="257" ActionProperty="OLDPRODUCTS"/>
|
||||
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="[|ProductVersion]" Attributes="2" ActionProperty="AI_NEWERPRODUCTFOUND"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.NotesComponent">
|
||||
<ROW Type="2" DisplayString="Custom Actions" Note="{\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fnil\fcharset204 MS Shell Dlg 2;}} \viewkind4\uc1\pard\f0\fs17\par } " ViewId="Custom Actions"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.PreReqComponent">
|
||||
<ROW PrereqKey="C5949268848C59079D60551E525B7" DisplayName=".NET Runtime 7.0.4 x86" VersionMin="7.0" SetupFileUrl="redist\dotnet-runtime-7.0.4-win-x86.exe" Location="0" ExactSize="0" WinNTVersions="Windows Vista x86, Windows Server 2008 x86, Windows 7 RTM x86, Windows 8 x86, Windows 10 version 1507 x86, Windows 10 version 1511 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" TargetName=".NET 7.0\dotnet-runtime-7.0.4-win-x86.exe"/>
|
||||
<ROW PrereqKey="CA62D813A4E74FA2AAE86A7D7B7B1493" DisplayName="Visual C++ Redistributable for Visual Studio 2013 Update 5 x64" VersionMin="12.0" SetupFileUrl="redist\vcredist_2013u5_x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="xym" TargetName="Visual C++ Redistributable for Visual Studio 2013\vcredist_2013u5_x64.exe"/>
|
||||
<ROW PrereqKey="D564007E3BBE4F85950A09B470A7CA65" DisplayName="Visual C++ Redistributable for Visual Studio 2013 Update 5 x86" VersionMin="12.0" SetupFileUrl="redist\vcredist_2013u5_x86.exe" Location="0" ExactSize="0" Operator="0" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" TargetName="Visual C++ Redistributable for Visual Studio 2013\vcredist_2013u5_x86.exe"/>
|
||||
<ROW PrereqKey="EA5B60A5CAD4115A8386D017CC889B9" DisplayName="ASP.NET Core Runtime 7.0.4 x64" VersionMin="7.0" SetupFileUrl="redist\aspnetcore-runtime-7.0.4-win-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="xym" TargetName="ASP.NET Core 7.0\aspnetcore-runtime-7.0.4-win-x64.exe"/>
|
||||
<ROW PrereqKey="Elasticsearch7.16.3" DisplayName="Elasticsearch v7.16.3 x64" VersionMin="7.16.3" SetupFileUrl="redist\elasticsearch-7.16.3.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="Elasticsearch 7.16.3 x64\elasticsearch-7.16.3.msi"/>
|
||||
<ROW PrereqKey="F3520F64DA5998338D97129FAD2" DisplayName=".NET Runtime 7.0.4 x64" VersionMin="7.0" SetupFileUrl="redist\dotnet-runtime-7.0.4-win-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" TargetName=".NET 7.0\dotnet-runtime-7.0.4-win-x64.exe"/>
|
||||
<ROW PrereqKey="FC441DA8855740179A0DFCF9560D3DEE" DisplayName="ASP.NET Core Runtime 7.0.4 x86" VersionMin="7.0" SetupFileUrl="redist\aspnetcore-runtime-7.0.4-win-x86.exe" Location="0" ExactSize="0" WinNTVersions="Windows Vista x86, Windows Server 2008 x86, Windows 7 RTM x86, Windows 8 x86, Windows 10 version 1507 x86, Windows 10 version 1511 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" TargetName="ASP.NET Core 7.0\aspnetcore-runtime-7.0.4-win-x86.exe"/>
|
||||
<ROW PrereqKey="FFmpegEssentials" DisplayName="FFmpeg x64" VersionMin="6.0.0" SetupFileUrl="redist\FFmpeg_Essentials.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="yx" TargetName="FFmpeg x64\FFmpeg_Essentials.msi"/>
|
||||
<ROW PrereqKey="Microsoft.NETFrame" DisplayName=".NET Framework 4.8" VersionMin="4.8" SetupFileUrl="redist\.net_framework_4.8.exe" Location="0" ExactSize="0" WinNTVersions="Windows Vista x86, Windows Server 2008 x86, Windows 7 RTM x86, Windows 8 x86, Windows 10 version 1507 x86, Windows 10 version 1511 x86, Windows 10 version 1903 x86, Windows 10 version 1909 x86, Windows 10 version 2004 x86, Windows 10 version 20H2 x86, Windows 10 version 21H1 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 RTM x64, Windows 8 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64, Windows 10 version 1903 x64, Windows 10 version 1909 x64, Windows 10 version 2004 x64, Windows 10 version 20H2 x64, Windows 10 version 21H1 x64" Operator="1" ComLine="/q /promptrestart" BasicUiComLine="/q /promptrestart" NoUiComLine="/q /promptrestart" Options="yxm" TargetName="Microsoft .NET Framework 4.8\.net_framework_4.8.exe"/>
|
||||
<ROW PrereqKey="MicrosoftVisualC_2" DisplayName="Visual C++ Redistributable for Visual Studio 2015-2019 x86" VersionMin="14.26" SetupFileUrl="redist\VC_redist.x86.exe" Location="0" ExactSize="0" WinNTVersions="Windows Vista RTM x86, Windows Vista SP1 x86, Windows Server 2008 RTM x86, Windows 7 RTM x86" WinNT64Versions="Windows Vista RTM x64, Windows Vista SP1 x64, Windows Server 2008 RTM x64, Windows 7 RTM x64, Windows Server 2008 R2 RTM x64" Operator="0" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" TargetName="Visual C++ Redistributable for Visual Studio 2015-2019\VC_redist.x86.exe"/>
|
||||
<ROW PrereqKey="MicrosoftVisualC_3" DisplayName="Visual C++ Redistributable for Visual Studio 2015-2019 x64" VersionMin="14.26" SetupFileUrl="redist\VC_redist.x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista RTM x64, Windows Vista SP1 x64, Windows Server 2008 RTM x64, Windows 7 RTM x64, Windows Server 2008 R2 RTM x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="myx" TargetName="Visual C++ Redistributable for Visual Studio 2015-2019\VC_redist.x64.exe"/>
|
||||
<ROW PrereqKey="MySQLConnectorODBC" DisplayName="MySQL Connector/ODBC 8.0.32 x86" VersionMin="8.0.32" SetupFileUrl="redist\mysql-connector-odbc-8.0.32-win32.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="MySQL Connector ODBC 8.0.32 x86\mysql-connector-odbc-8.0.32-win32.msi"/>
|
||||
<ROW PrereqKey="MySQLInstallerCo" DisplayName="MySQL Installer Community 8.0.32 x86" VersionMin="1.6.5.0" SetupFileUrl="redist\mysql-installer-community-8.0.32.0.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="MySQL Installer Community 8.0.32 x86\mysql-installer-community-8.0.32.0.msi"/>
|
||||
<ROW PrereqKey="MySQLInstallerRunn" DisplayName="MySQL Installer Community 8.0.32 x86 Runner" SetupFileUrl="MySQL Installer Runner.exe" Location="0" ExactSize="0" Operator="1" ComLine="/VERYSILENT /DB_PWD="root" /MYSQL_VERSION="8.0.32"" BasicUiComLine="/VERYSILENT /DB_PWD="root" /MYSQL_VERSION="8.0.32"" NoUiComLine="/VERYSILENT /DB_PWD="root" /MYSQL_VERSION="8.0.32"" Options="y" TargetName="MySQL Installer Runner \MySQL Installer Runner.exe" ParentPrereq="MySQLInstallerCo"/>
|
||||
<ROW PrereqKey="Node.js" DisplayName="Node.js 18.16.1" VersionMin="18.16.0" SetupFileUrl="redist\node-v18.16.1-x64.msi" Location="0" ExactSize="0" Operator="0" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="Node.js v18.16.1 x64\node-v18.16.1-x64.msi"/>
|
||||
<ROW PrereqKey="ONLYOFFICEDocumentS" DisplayName="ONLYOFFICE DocumentServer" SetupFileUrl="onlyoffice-documentserver-ee.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LICENSE_PATH="[APPDIR]Data\license.lic" /LOG" BasicUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LICENSE_PATH="[APPDIR]Data\license.lic"/LOG" NoUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LICENSE_PATH="[APPDIR]Data\license.lic" /LOG" Options="fi=" TargetName=" \onlyoffice-documentserver-ee.exe" Feature="ONLYOFFICEDocumentS" RepairComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LICENSE_PATH="[APPDIR]Data\license.lic" /LOG"/>
|
||||
<ROW PrereqKey="PostgreSQL" DisplayName="PostgresSQL v12.9 x64" VersionMin="12.9" SetupFileUrl="redist\postgresql-12.9-1-windows-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount "postgres" --superpassword "postgres"" BasicUiComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount "postgres" --superpassword "postgres"" NoUiComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount "postgres" --superpassword "postgres"" Options="yx" TargetName="postgresql-12.9-1-windows-x64.exe"/>
|
||||
<ROW PrereqKey="RabbitMQServer" DisplayName="RabbitMQ v3.7.4 x64" VersionMin="3.7.4" SetupFileUrl="redist\rabbitmq-server-3.7.4.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="RabbitMQ v3.7.4 x64\rabbitmq-server-3.7.4.exe"/>
|
||||
<ROW PrereqKey="RedisonWindows" DisplayName="Redis 5.0.10 x64" VersionMin="5.0" SetupFileUrl="redist\Redis-x64-5.0.10.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" BasicUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" NoUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" Options="yx" TargetName="Redis 5.0.10 x64\Redis-x64-5.0.10.msi"/>
|
||||
<ROW PrereqKey="RequiredApplication" DisplayName="Erlang v20.3 x64" VersionMin="20.3" SetupFileUrl="redist\otp_win64_20.3.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="Erlang v20.3 x64\otp_win64_20.3.exe"/>
|
||||
<ROW PrereqKey="psqlODBC_x64" DisplayName="PostgreSQL ODBC Driver x64" SetupFileUrl="redist\psqlodbc_x64.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="myx" TargetName="psqlodbc_x64.msi"/>
|
||||
<ATTRIBUTE name="PrereqsOrder" value="Microsoft.NETFrame C5949268848C59079D60551E525B7 F3520F64DA5998338D97129FAD2 FC441DA8855740179A0DFCF9560D3DEE EA5B60A5CAD4115A8386D017CC889B9 D564007E3BBE4F85950A09B470A7CA65 CA62D813A4E74FA2AAE86A7D7B7B1493 MicrosoftVisualC_2 MicrosoftVisualC_3 MySQLConnectorODBC MySQLInstallerCo MySQLInstallerRunn Node.js Elasticsearch7.16.3 RequiredApplication RabbitMQServer RedisonWindows FFmpegEssentials psqlODBC_x64 PostgreSQL ONLYOFFICEDocumentS"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.PreReqSearchComponent">
|
||||
<ROW SearchKey="C5949268848C59079D60551E525B7System" Prereq="C5949268848C59079D60551E525B7" SearchType="12" SearchString="HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\sharedfx\Microsoft.NETCore.App" VerMin="7.0" Order="1" Property="PreReqSearch_3_C5949268848C59079D60"/>
|
||||
<ROW SearchKey="CA62D813A4E74FA2AAE86A7D7B7B1493Ver" Prereq="CA62D813A4E74FA2AAE86A7D7B7B1493" SearchType="2" SearchString="HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\12.0\RuntimeMinimum\Version" VerMin="12.0.40649" Order="1" Property="PreReqSearch_CA62D813A4E74FA2AAE86A"/>
|
||||
<ROW SearchKey="D564007E3BBE4F85950A09B470A7CA65S_1" Prereq="D564007E3BBE4F85950A09B470A7CA65" SearchType="0" SearchString="[SystemFolder]msvcr120.dll" VerMin="12.0.40649.5" Order="3" Property="PreReqSearch_2_D564007E3BBE4F85950A"/>
|
||||
<ROW SearchKey="D564007E3BBE4F85950A09B470A7CA65Sys" Prereq="D564007E3BBE4F85950A09B470A7CA65" SearchType="0" SearchString="[SystemFolder]msvcp120.dll" VerMin="12.0.40649.5" Order="2" Property="PreReqSearch_1_D564007E3BBE4F85950A"/>
|
||||
<ROW SearchKey="D564007E3BBE4F85950A09B470A7CA65Ver" Prereq="D564007E3BBE4F85950A09B470A7CA65" SearchType="2" SearchString="HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\12.0\RuntimeMinimum\Version" VerMin="12.0.40649" Order="1" Property="PreReqSearch_D564007E3BBE4F85950A09"/>
|
||||
<ROW SearchKey="DOCSPACE_INSTALLED" SearchType="4" SearchString="{FFA9CD16-E087-45F3-8D34-3BBA1EF8A897}" Order="4" Property="DOCSPACE_INSTALLED"/>
|
||||
<ROW SearchKey="EA5B60A5CAD4115A8386D017CC889B9Syst" Prereq="EA5B60A5CAD4115A8386D017CC889B9" SearchType="1" SearchString="HKLM\SOFTWARE\Microsoft\ASP.NET Core\Shared Framework\v7.0" VerMin="7.0" Order="1" Property="PreReqSearch_5_EA5B60A5CAD4115A8386"/>
|
||||
<ROW SearchKey="F3520F64DA5998338D97129FAD2SystemFo" Prereq="F3520F64DA5998338D97129FAD2" SearchType="12" SearchString="HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedfx\Microsoft.NETCore.App" VerMin="7.0" Order="1" Property="PreReqSearch_2_F3520F64DA5998338D97"/>
|
||||
<ROW SearchKey="FC441DA8855740179A0DFCF9560D3DEESys" Prereq="FC441DA8855740179A0DFCF9560D3DEE" SearchType="1" SearchString="HKLM\SOFTWARE\Microsoft\ASP.NET Core\Shared Framework\v7.0" VerMin="7.0" Order="1" Property="PreReqSearch_6_FC441DA8855740179A0D"/>
|
||||
<ROW SearchKey="SystemFolderfile.dll" Prereq="Microsoft.NETFrame" SearchType="9" SearchString="HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Release" RefContent="G528048" Order="1" Property="PreReqSearch"/>
|
||||
<ROW SearchKey="SystemFolderfile.dll_1" Prereq="ONLYOFFICEDocumentS" SearchType="0" SearchString="[SystemFolder]file.dll" VerMin="1.0" Order="1" Property="PreReqSearch_1"/>
|
||||
<ROW SearchKey="SystemFolderfile.dll_10" Prereq="RequiredApplication" SearchType="5" SearchString="HKLM\SOFTWARE\Wow6432Node\Ericsson\Erlang\9.3" Order="1" Property="PreReqSearch_19"/>
|
||||
<ROW SearchKey="SystemFolderfile.dll_11" Prereq="RabbitMQServer" SearchType="5" SearchString="HKLM\SOFTWARE\Ericsson\Erlang\ErlSrv\1.1\RabbitMQ" Order="1" Property="PreReqSearch_20"/>
|
||||
<ROW SearchKey="SystemFolderfile.dll_12" Prereq="PostgreSQL" SearchType="5" SearchString="HKLM\SOFTWARE\PostgreSQL\Installations\postgresql-x64-12" Order="1" Property="PreReqSearch_24"/>
|
||||
<ROW SearchKey="SystemFolderfile.dll_7" Prereq="MicrosoftVisualC_2" SearchType="2" SearchString="HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\14.0\RuntimeMinimum\Version" VerMin="14.26" Order="1" Property="PreReqSearch_9"/>
|
||||
<ROW SearchKey="SystemFolderfile.dll_8" Prereq="MicrosoftVisualC_3" SearchType="2" SearchString="HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\14.0\RuntimeMinimum\Version" VerMin="14.26" Order="1" Property="PreReqSearch_11"/>
|
||||
<ROW SearchKey="SystemFolderfile.dll_9" Prereq="MySQLInstallerRunn" SearchType="2" SearchString="HKLM\SOFTWARE\MySQL AB\MySQL Server 5.5\Version" VerMin="5.5" Order="1" Property="PreReqSearch_14"/>
|
||||
<ROW SearchKey="SystemFoldervcruntime140.dll" Prereq="MicrosoftVisualC_2" SearchType="0" SearchString="[SystemFolder]vcruntime140.dll" VerMin="14.26" Order="2" Property="PreReqSearch_10"/>
|
||||
<ROW SearchKey="UpgradeCode" Prereq="MySQLConnectorODBC" SearchType="4" SearchString="{FF073FBB-32E2-4052-B6B2-830C5ED4A809}" VerMin="8.0.32" Order="1" Property="PreReqSearch_12"/>
|
||||
<ROW SearchKey="UpgradeCode_1" Prereq="MySQLInstallerCo" SearchType="4" SearchString="{18B94B70-06F1-4AC0-B308-37280DB868C2}" VerMin="1.6.5.0" Order="1" Property="PreReqSearch_13"/>
|
||||
<ROW SearchKey="UpgradeCode_2" Prereq="Node.js" SearchType="4" SearchString="{47C07A3A-42EF-4213-A85D-8F5A59077C28}" VerMin="18.16.0" Order="1" Property="PreReqSearch_17"/>
|
||||
<ROW SearchKey="UpgradeCode_3" Prereq="Elasticsearch7.16.3" SearchType="4" SearchString="{DAAA2CBA-A1ED-4F29-AFBF-5478617B00F6}" VerMin="7.16.3" Order="1" Property="PreReqSearch_18"/>
|
||||
<ROW SearchKey="UpgradeCode_4" Prereq="RedisonWindows" SearchType="4" SearchString="{05410198-7212-4FC4-B7C8-AFEFC3DA0FBC}" VerMin="5.0.10" Order="1" Property="PreReqSearch_21"/>
|
||||
<ROW SearchKey="UpgradeCode_5" Prereq="FFmpegEssentials" SearchType="4" SearchString="{384A74EC-865A-4907-8561-9DE765EE6E14}" VerMin="6.0.0.20230306" Order="1" Property="PreReqSearch_22"/>
|
||||
<ROW SearchKey="UpgradeCode_6" Prereq="psqlODBC_x64" SearchType="4" SearchString="{BBD29DF5-89F6-4B8B-BDC9-C3EA3A4AFDBB}" VerMin="09.05.0400" Order="1" Property="PreReqSearch_23"/>
|
||||
<ROW SearchKey="Version" Prereq="MySQLInstallerRunn" SearchType="2" SearchString="HKLM\SOFTWARE\MySQL AB\MySQL Server 5.7\Version" Order="2" Property="PreReqSearch_15"/>
|
||||
<ROW SearchKey="Version_1" Prereq="MySQLInstallerRunn" SearchType="2" SearchString="HKLM\SOFTWARE\MySQL AB\MySQL Server 8.0\Version" Order="3" Property="PreReqSearch_16"/>
|
||||
</COMPONENT>
|
||||
</DOCUMENT>
|
@ -31,6 +31,7 @@
|
||||
<ROW Property="ARPSYSTEMCOMPONENT" Value="1"/>
|
||||
<ROW Property="ARPURLINFOABOUT" Value="http://www.onlyoffice.com"/>
|
||||
<ROW Property="ARPURLUPDATEINFO" Value="http://www.onlyoffice.com/download.aspx"/>
|
||||
<ROW Property="BASE_DOMAIN" Value="localhost"/>
|
||||
<ROW Property="COMMON_SHORTCUT_NAME" Value="ONLYOFFICE"/>
|
||||
<ROW Property="DATABASE_MIGRATION" Value="true"/>
|
||||
<ROW Property="DB_HOST" Value="localhost"/>
|
||||
@ -56,13 +57,14 @@
|
||||
<ROW Property="MsiLogging" MultiBuildValue="DefaultBuild:vp#ExeBuild:vp"/>
|
||||
<ROW Property="MySQLConnector" Value="MySQL Connector/ODBC 8.0.21 x86"/>
|
||||
<ROW Property="NEED_REINDEX_ELASTICSEARCH" Value="FALSE" ValueLocId="-"/>
|
||||
<ROW Property="PACKAGE_NAME" Value="ONLYOFFICE_DocSpace_Community_Win-install.v[|ProductVersion]" MultiBuildValue="ExeBuild:ONLYOFFICE_DocSpace_Enterprise_Win-install.v[|ProductVersion]"/>
|
||||
<ROW Property="PACKAGE_NAME" Value="ONLYOFFICE_DocSpace_Community_Win-install.v[|ProductVersion]" MultiBuildValue="ExeBuild:ONLYOFFICE_DocSpace_Win-install"/>
|
||||
<ROW Property="PRODUCT_NAME" Value="ONLYOFFICE DocSpace"/>
|
||||
<ROW Property="PS_DB_HOST" Value="localhost"/>
|
||||
<ROW Property="PS_DB_NAME" Value="onlyoffice"/>
|
||||
<ROW Property="PS_DB_PORT" Value="5432"/>
|
||||
<ROW Property="PS_DB_PWD" Value="onlyoffice"/>
|
||||
<ROW Property="PS_DB_USER" Value="onlyoffice"/>
|
||||
<ROW Property="Prereq_IAgree" Value="No"/>
|
||||
<ROW Property="ProductCode" Value="1033:{3FABEB4A-D27F-4BA6-A40E-16BE47540727} " Type="16"/>
|
||||
<ROW Property="ProductLanguage" Value="1033"/>
|
||||
<ROW Property="ProductName" Value="[|PRODUCT_NAME]"/>
|
||||
@ -207,7 +209,6 @@
|
||||
<ROW Component="Data" ComponentId="{C46222BF-779D-4F78-9A6B-EA249CCB9761}" Directory_="Data_Dir" Attributes="0"/>
|
||||
<ROW Component="DocEditor.exe" ComponentId="{FBE9155F-9ACD-4A1A-9198-891ED73BA90C}" Directory_="tools_Dir" Attributes="0" KeyPath="DocEditor.exe"/>
|
||||
<ROW Component="DocumentServer" ComponentId="{9F6BB24B-F2F9-4FE5-8431-A46F38A301AD}" Directory_="APPDIR" Attributes="260" KeyPath="DocumentServer" Options="2"/>
|
||||
<ROW Component="DocumentServer.EE" ComponentId="{DFF09176-439E-4FC8-BDEB-39DDBD835A0F}" Directory_="APPDIR" Attributes="260" KeyPath="DocumentServer.EE" Options="2"/>
|
||||
<ROW Component="Login.exe" ComponentId="{FBE9155F-9ACD-4A1A-9198-891ED73BA202}" Directory_="tools_Dir" Attributes="0" KeyPath="Login.exe"/>
|
||||
<ROW Component="Logs" ComponentId="{6C28AF1C-0190-4DE3-A753-430496711F3C}" Directory_="Logs_Dir" Attributes="0"/>
|
||||
<ROW Component="ProdInfo" ComponentId="{5FB28D19-6A7D-4078-901F-58C2DF0DE176}" Directory_="APPDIR" Attributes="260" KeyPath="Version"/>
|
||||
@ -262,7 +263,6 @@
|
||||
<ROW Feature="DataBackup" Feature_Parent="DotnetServices" Title=".NET DataBackup Service" Description="Feature contains .NET DataBackup service" Display="27" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||
<ROW Feature="DocEditor" Feature_Parent="NodeJSServices" Title="Node.js DocEditor Service" Description="Feature contains Node.js DocEditor service" Display="3" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||
<ROW Feature="DocumentServer" Title="DocumentServer" Description="DocumentServer" Display="5" Level="1" Attributes="0" Builds="DefaultBuild"/>
|
||||
<ROW Feature="DocumentServer.EE" Title="DocumentServer-EE" Description="DocumentServer-EE" Display="35" Level="1" Attributes="0" Builds="ExeBuild"/>
|
||||
<ROW Feature="DotnetServices" Feature_Parent="MainFeature" Title=".NET services" Description="Feature contains all .NET services" Display="3" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||
<ROW Feature="File" Feature_Parent="DotnetServices" Title=".NET File Service" Description="Feature contains .NET File service" Display="23" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||
<ROW Feature="Files" Feature_Parent="DotnetServices" Title=".NET Files Service" Description="Feature contains .NET Files service" Display="21" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||
@ -309,8 +309,8 @@
|
||||
<ROW Action="AI_DetectSoftware" Sequence="151"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
|
||||
<ROW BuildKey="DefaultBuild" BuildName="EXE_COMMUNITY" BuildOrder="1" BuildType="0" PackageFolder="publish" PackageFileName="[|PACKAGE_NAME]" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExeIconPath="Resources\icon.ico" ExtractionFolder="[AppDataFolder][|INSTALL_ROOT_FOLDER_NAME]\DocSpace\install" ExtUI="true" UseLargeSchema="true" Unicode="true" ExeName="[|PACKAGE_NAME]" UACExecutionLevel="2"/>
|
||||
<ROW BuildKey="ExeBuild" BuildName="EXE_ENTERPRISE" BuildOrder="2" BuildType="0" PackageFolder="publish" PackageFileName="[|PACKAGE_NAME]" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExeIconPath="Resources\icon.ico" ExtractionFolder="[AppDataFolder][|INSTALL_ROOT_FOLDER_NAME]\DocSpace\install" UseLargeSchema="true" Unicode="true" ExeName="[|PACKAGE_NAME]" UACExecutionLevel="2"/>
|
||||
<ROW BuildKey="DefaultBuild" BuildName="DOCSPACE_EXE" BuildOrder="1" BuildType="0" PackageFolder="publish" PackageFileName="[|PACKAGE_NAME]" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExeIconPath="Resources\icon.ico" ExtractionFolder="[AppDataFolder][|INSTALL_ROOT_FOLDER_NAME]\DocSpace\install" ExtUI="true" UseLargeSchema="true" Unicode="true" ExeName="[|PACKAGE_NAME]" UACExecutionLevel="2"/>
|
||||
<ROW BuildKey="ExeBuild" BuildName="DOCSPACE_MSI" BuildOrder="2" BuildType="0" PackageFolder="publish" PackageFileName="[|PACKAGE_NAME]" Languages="en" InstallationType="4" UseLargeSchema="true" Unicode="true" UACExecutionLevel="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
|
||||
<ROW Path="<AI_DICTS>ui.ail"/>
|
||||
@ -344,10 +344,9 @@
|
||||
<ROW Fragment="WelcomePrereqDlg.aip" Path="<AI_THEMES>classic\fragments\WelcomePrereqDlg.aip"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.JsonFileComponent">
|
||||
<ROW JsonFile="apisystem.json" FileName="APISYS~1.JSO|apisystem.json" DirProperty="config_Dir" Component="config" RootProperty="Root_12" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="apisystem.json" FileName="APISYS~1.JSO|apisystem.PRODUCT.ENVIRONMENT.SUB.json" DirProperty="config_Dir" Component="config" RootProperty="Root_12" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="appsettings.env.json" FileName="APPSET~1.JSO|appsettings.PRODUCT.ENVIRONMENT.SUB.json" DirProperty="config_Dir" Component="config" RootProperty="Root_1" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="appsettings.json_ASC.Migration.Runner" FileName="APPSET~2.JSO|appsettings.runner.json" DirProperty="service_6_Dir" Component="ASC.Migration.Runner.exe" RootProperty="Root_11" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="appsettings.json_config" FileName="APPSET~3.JSO|appsettings.json" DirProperty="config_Dir" Component="config" RootProperty="Root_5" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="appsettings.services.json" FileName="APPSET~2.JSO|appsettings.services.json" DirProperty="config_Dir" Component="config" RootProperty="Root_4" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="config.json_config_editor" FileName="CONFIG~1.JSO|config.json" DirProperty="editor_Dir" Component="editor" RootProperty="Root_10" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="config.json_config_login" FileName="CONFIG~1.JSO|config.json" DirProperty="login_Dir" Component="login" RootProperty="Root_9" Flags="6" IndentUnits="2"/>
|
||||
@ -382,7 +381,6 @@
|
||||
<ROW JsonProperty="Root_2" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_3" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_4" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_5" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_6" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_7" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_9" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
@ -399,11 +397,12 @@
|
||||
<ROW JsonProperty="appsettings_1" Parent="app_1" Name="appsettings" Condition="1" Order="1" Flags="57" Value="[APPDIR_FORWARD_SLASH]config"/>
|
||||
<ROW JsonProperty="appsettings_3" Parent="app_3" Name="appsettings" Condition="1" Order="0" Flags="57" Value="[APPDIR_FORWARD_SLASH]config"/>
|
||||
<ROW JsonProperty="appsettings_4" Parent="app_4" Name="appsettings" Condition="1" Order="0" Flags="57" Value="[APPDIR_FORWARD_SLASH]config"/>
|
||||
<ROW JsonProperty="connectionString" Parent="default" Name="connectionString" Condition="1" Order="0" Flags="57" Value="Server=[DB_HOST];Port=[DB_PORT];Database=[DB_NAME];User ID=[DB_USER];Password=[DB_PWD];Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none"/>
|
||||
<ROW JsonProperty="connectionString_1" Parent="default_1" Name="connectionString" Condition="1" Order="0" Flags="57" Value="Server=[DB_HOST];Port=[DB_PORT];Database=[DB_NAME];User ID=[DB_USER];Password=[DB_PWD];Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none"/>
|
||||
<ROW JsonProperty="basedomain" Parent="core_3" Name="base-domain" Condition="1" Order="0" Flags="57" Value="[BASE_DOMAIN]"/>
|
||||
<ROW JsonProperty="basedomain_1" Parent="core_1" Name="base-domain" Condition="1" Order="0" Flags="57" Value="[BASE_DOMAIN]"/>
|
||||
<ROW JsonProperty="connectionString" Parent="default" Name="connectionString" Condition="1" Order="0" Flags="57" Value="Server=[DB_HOST];Port=[DB_PORT];Database=[DB_NAME];User ID=[DB_USER];Password=[DB_PWD];Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;AllowPublicKeyRetrieval=true;Connection Timeout=30;Maximum Pool Size=300"/>
|
||||
<ROW JsonProperty="connectionString_1" Parent="default_1" Name="connectionString" Condition="1" Order="0" Flags="57" Value="Server=[DB_HOST];Port=[DB_PORT];Database=[DB_NAME];User ID=[DB_USER];Password=[DB_PWD];Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;AllowPublicKeyRetrieval=true;Connection Timeout=30;Maximum Pool Size=300"/>
|
||||
<ROW JsonProperty="core" Parent="Root_4" Name="core" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="core_1" Parent="Root_5" Name="core" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="core_2" Parent="Root_1" Name="core" Condition="1" Order="2" Flags="60"/>
|
||||
<ROW JsonProperty="core_1" Parent="Root_1" Name="core" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="core_3" Parent="Root_12" Name="core" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="default" Parent="ConnectionStrings" Name="default" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="default_1" Parent="ConnectionStrings_1" Name="default" Condition="1" Order="0" Flags="60"/>
|
||||
@ -412,23 +411,26 @@
|
||||
<ROW JsonProperty="enabled" Parent="migration" Name="enabled" Condition="1" Order="0" Flags="57" Value="[DATABASE_MIGRATION]"/>
|
||||
<ROW JsonProperty="environment" Parent="app" Name="environment" Condition="1" Order="2" Flags="57" Value="[ENVIRONMENT]"/>
|
||||
<ROW JsonProperty="environment_1" Parent="app_1" Name="environment" Condition="1" Order="2" Flags="57" Value="[ENVIRONMENT]"/>
|
||||
<ROW JsonProperty="environment_2" Parent="app_3" Name="environment" Condition="1" Order="1" Flags="57" Value="[ENVIRONMENT]"/>
|
||||
<ROW JsonProperty="environment_3" Parent="app_4" Name="environment" Condition="1" Order="1" Flags="57" Value="[ENVIRONMENT]"/>
|
||||
<ROW JsonProperty="files" Parent="Root_1" Name="files" Condition="1" Order="3" Flags="60"/>
|
||||
<ROW JsonProperty="folder" Parent="products" Name="folder" Condition="1" Order="0" Flags="57" Value="[APPDIR_FORWARD_SLASH]products"/>
|
||||
<ROW JsonProperty="folder_1" Parent="products_1" Name="folder" Condition="1" Order="0" Flags="57" Value="[APPDIR_FORWARD_SLASH]products"/>
|
||||
<ROW JsonProperty="header" Parent="secret" Name="header" Condition="1" Order="1" Flags="57" Value="[DOCUMENT_SERVER_JWT_HEADER]"/>
|
||||
<ROW JsonProperty="internal" Parent="url" Name="internal" Condition="1" Order="1" Flags="57" Value="http://[DOCUMENT_SERVER_HOST]:[DOCUMENT_SERVER_PORT]"/>
|
||||
<ROW JsonProperty="logPath" Parent="Root_4" Name="logPath" Condition="1" Order="1" Flags="57" Value="[APPDIR_FORWARD_SLASH]Logs"/>
|
||||
<ROW JsonProperty="machinekey" Parent="core_2" Name="machinekey" Condition="1" Order="0" Flags="57" Value="[MACHINE_KEY]"/>
|
||||
<ROW JsonProperty="machinekey" Parent="core_1" Name="machinekey" Condition="1" Order="1" Flags="57" Value="[MACHINE_KEY]"/>
|
||||
<ROW JsonProperty="machinekey_1" Parent="app_1" Name="machinekey" Condition="1" Order="3" Flags="57" Value="[MACHINE_KEY]"/>
|
||||
<ROW JsonProperty="machinekey_2" Parent="core_1" Name="machinekey" Condition="1" Order="0" Flags="57" Value="[MACHINE_KEY]"/>
|
||||
<ROW JsonProperty="machinekey_3" Parent="core_3" Name="machinekey" Condition="1" Order="0" Flags="57" Value="[MACHINE_KEY]"/>
|
||||
<ROW JsonProperty="machinekey_3" Parent="core_3" Name="machinekey" Condition="1" Order="1" Flags="57" Value="[MACHINE_KEY]"/>
|
||||
<ROW JsonProperty="migration" Parent="Root_1" Name="migration" Condition="1" Order="1" Flags="60"/>
|
||||
<ROW JsonProperty="notify" Parent="Root_1" Name="notify" Condition="1" Order="1" Flags="60"/>
|
||||
<ROW JsonProperty="options" Parent="Root_11" Name="options" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="port" Parent="app" Name="port" Condition="1" Order="0" Flags="57" Value="[Socket.IO_Port]"/>
|
||||
<ROW JsonProperty="port_1" Parent="app_1" Name="port" Condition="1" Order="0" Flags="57" Value="[SsoAuth_Port]"/>
|
||||
<ROW JsonProperty="portal" Parent="url" Name="portal" Condition="1" Order="2" Flags="57" Value="http://localhost:80"/>
|
||||
<ROW JsonProperty="postman" Parent="notify" Name="postman" Condition="1" Order="0" Flags="57" Value="services"/>
|
||||
<ROW JsonProperty="products" Parent="core" Name="products" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="products_1" Parent="core_2" Name="products" Condition="1" Order="1" Flags="60"/>
|
||||
<ROW JsonProperty="products_1" Parent="core_1" Name="products" Condition="1" Order="2" Flags="60"/>
|
||||
<ROW JsonProperty="public" Parent="url" Name="public" Condition="1" Order="0" Flags="57" Value="http://[DOCUMENT_SERVER_HOST]:[DOCUMENT_SERVER_PORT]"/>
|
||||
<ROW JsonProperty="secret" Parent="docservice" Name="secret" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="url" Parent="docservice" Name="url" Condition="1" Order="1" Flags="60"/>
|
||||
@ -470,8 +472,33 @@
|
||||
<ROW Action="AI_XmlUninstall" Description="Generating actions to configure XML files" DescriptionLocId="ActionText.Description.AI_XmlUninstall"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiAppSearchComponent">
|
||||
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_LM" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_CU" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_LM" Builds="DefaultBuild"/>
|
||||
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_CU" Builds="DefaultBuild"/>
|
||||
<ROW Property="REDIS_PWD" Signature_="AppSearchSign"/>
|
||||
<ROW Property="REDIS_PORT" Signature_="AppSearchSign_1"/>
|
||||
<ROW Property="REDIS_HOST" Signature_="AppSearchSign_2"/>
|
||||
<ROW Property="PS_DB_USER" Signature_="AppSearchSign_3"/>
|
||||
<ROW Property="PS_DB_PWD" Signature_="AppSearchSign_4"/>
|
||||
<ROW Property="PS_DB_PORT" Signature_="AppSearchSign_5"/>
|
||||
<ROW Property="PS_DB_NAME" Signature_="AppSearchSign_6"/>
|
||||
<ROW Property="PS_DB_HOST" Signature_="AppSearchSign_7"/>
|
||||
<ROW Property="ELASTICSEARCH_SCHEME" Signature_="AppSearchSign_8"/>
|
||||
<ROW Property="ELASTICSEARCH_PORT" Signature_="AppSearchSign_9"/>
|
||||
<ROW Property="ELASTICSEARCH_HOST" Signature_="AppSearchSign_10"/>
|
||||
<ROW Property="DB_USER" Signature_="AppSearchSign_11"/>
|
||||
<ROW Property="DB_PWD" Signature_="AppSearchSign_12"/>
|
||||
<ROW Property="DB_PORT" Signature_="AppSearchSign_13"/>
|
||||
<ROW Property="DB_NAME" Signature_="AppSearchSign_14"/>
|
||||
<ROW Property="DB_HOST" Signature_="AppSearchSign_15"/>
|
||||
<ROW Property="AMQP_VHOST" Signature_="AppSearchSign_16"/>
|
||||
<ROW Property="AMQP_USER" Signature_="AppSearchSign_17"/>
|
||||
<ROW Property="AMQP_PWD" Signature_="AppSearchSign_18"/>
|
||||
<ROW Property="AMQP_PORT" Signature_="AppSearchSign_19"/>
|
||||
<ROW Property="AMQP_HOST" Signature_="AppSearchSign_20"/>
|
||||
<ROW Property="DOCUMENT_SERVER_JWT_ENABLED" Signature_="AppSearchSign_21"/>
|
||||
<ROW Property="DOCUMENT_SERVER_JWT_HEADER" Signature_="AppSearchSign_22"/>
|
||||
<ROW Property="DOCUMENT_SERVER_JWT_SECRET" Signature_="AppSearchSign_23"/>
|
||||
<ROW Property="DOCUMENT_SERVER_PORT" Signature_="AppSearchSign_24"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiBinaryComponent">
|
||||
<ROW Name="NetFirewall.dll" SourcePath="<AI_CUSTACTS>NetFirewall.dll"/>
|
||||
@ -509,7 +536,6 @@
|
||||
<ROW Feature_="WebStudio" Level="4" Condition="WEB_STUDIO_SERVICE = 0"/>
|
||||
<ROW Feature_="Proxy" Level="4" Condition="PROXY_SERVICE = 0"/>
|
||||
<ROW Feature_="WebHealthChecksUI" Level="4" Condition="WEB_HEALTHCHECKS_UI_SERVICE = 0"/>
|
||||
<ROW Feature_="DocumentServer.EE" Level="4" Condition="DOCUMENT_SERVER_INSTALL_NONE = 1"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlComponent">
|
||||
<ROW Dialog_="AdminBrowseDlg" Control="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_OK]" Order="300" TextLocId="-" MsiKey="AdminBrowseDlg#OK"/>
|
||||
@ -644,6 +670,16 @@
|
||||
<ROW Dialog_="PrepareDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1048577" Text="[ButtonText_Back]" Order="700" TextLocId="-" MsiKey="PrepareDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="PreparePrereqDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="300" TextLocId="-" MsiKey="PreparePrereqDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="PreparePrereqDlg" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="400" MsiKey="PreparePrereqDlg#Bitmap"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="100" TextLocId="-" Options="1"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="200" TextLocId="-" Options="1"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="300" TextLocId="-" Options="1"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="500"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="BottomLine" Type="Line" X="0" Y="234" Width="368" Height="0" Attributes="1" Order="600"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Attributes="196611" Text="Please read the following license agreement carefully" Order="700"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Title" Type="Text" X="15" Y="6" Width="289" Height="15" Attributes="196611" Text="End-User License Agreement" TextStyle="[DlgTitleFont]" Order="800"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="AgreementText" Type="ScrollableText" X="20" Y="60" Width="330" Height="120" Attributes="7" Text="Resources\License_Redist.rtf" Order="900" TextLocId="-"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control="Buttons" Type="RadioButtonGroup" X="20" Y="187" Width="330" Height="40" Attributes="3" Property="Prereq_IAgree" Order="1000"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="300" TextLocId="-" MsiKey="PrerequisitesDlg#Back" Options="1"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400" MsiKey="PrerequisitesDlg#BannerBitmap"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Select which prerequisites will be installed" Order="700" TextLocId="Control.Text.PrerequisitesDlg#Description" MsiKey="PrerequisitesDlg#Description"/>
|
||||
@ -744,6 +780,10 @@
|
||||
<ROW Dialog_="WelcomePrereqDlg" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="500" MsiKey="WelcomePrereqDlg#Bitmap"/>
|
||||
<ATTRIBUTE name="DeletedRows" value="AdminBrowseDlg#Logo@AdminInstallPointDlg#Logo@BrowseDlg#Logo@CustomizeDlg#Logo@DiskCostDlg#Logo@FilesInUse#Logo@FolderDlg#Logo@MaintenanceTypeDlg#Logo@MsiRMFilesInUse#Logo@OutOfDiskDlg#Logo@OutOfRbDiskDlg#Logo@PrerequisitesDlg#Logo@ProgressDlg#Logo@ProgressPrereqDlg#Logo@SQLConnectionDlg#Logo@SQLConnectionDlg#OdbcResourceEdit@SQLConnectionDlg#OdbcResourceLabel@SQLConnectionDlg.aip@VerifyReadyDlg#Logo@VerifyRemoveDlg#Logo@VerifyRepairDlg#Logo"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlConditionComponent">
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control_="Next" Action="Disable" Condition="Prereq_IAgree <> "Yes""/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control_="Next" Action="Enable" Condition="Prereq_IAgree = "Yes""/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlEventComponent">
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = "" )" Ordering="19"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="SQLConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError <> "" )" Ordering="216"/>
|
||||
@ -765,11 +805,14 @@
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control_="Remove" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="299" Options="1"/>
|
||||
<ROW Dialog_="PatchWelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_PATCH" Ordering="201"/>
|
||||
<ROW Dialog_="ResumeDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_RESUME" Ordering="299"/>
|
||||
<ROW Dialog_="WelcomePrereqDlg" Control_="Next" Event="NewDialog" Argument="PrerequisitesDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="WelcomePrereqDlg" Control_="Next" Event="NewDialog" Argument="PrereqLicenseAgreementDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control_="Next" Event="EndDialog" Argument="Return" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control_="Back" Event="NewDialog" Argument="PrereqLicenseAgreementDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control_="Cancel" Event="SpawnDialog" Argument="CancelDlg" Condition="1" Ordering="100"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control_="Next" Event="NewDialog" Argument="PrerequisitesDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="PrereqLicenseAgreementDlg" Control_="Back" Event="NewDialog" Argument="WelcomePrereqDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_PATCH" Ordering="199"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="PatchWelcomeDlg" Condition="AI_PATCH" Ordering="205"/>
|
||||
<ROW Dialog_="PrerequisitesDlg" Control_="Back" Event="NewDialog" Argument="WelcomePrereqDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_5" Condition="AI_INSTALL AND ( SqlConnectionError <> "" )" Ordering="4"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="DoAction" Argument="TestSQLConnectionMsgBox" Condition="AI_INSTALL AND ( SqlConnectionError <> "" )" Ordering="5"/>
|
||||
<ROW Dialog_="SQLConnectionDlg" Control_="SQLConnectionDlgDialogInitializer" Event="[DB_PWD]" Argument="{}" Condition="AI_INSTALL AND ( OLDPRODUCTS="" AND SQLConnectionDlg_Cond )" Ordering="4"/>
|
||||
@ -983,6 +1026,7 @@
|
||||
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
|
||||
<ROW Action="AI_ResolveLocalizedCredentials" Type="1" Source="aicustact.dll" Target="GetLocalizedCredentials"/>
|
||||
<ROW Action="AI_RestartElevated" Type="1" Source="aicustact.dll" Target="RestartElevated"/>
|
||||
<ROW Action="AI_RevokePermissions" Type="11265" Source="userAccounts.dll" Target="OnRevokePermissions" WithoutSeq="true"/>
|
||||
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
|
||||
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
|
||||
@ -1034,6 +1078,7 @@
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiDialogComponent">
|
||||
<ROW Dialog="ELKConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
|
||||
<ROW Dialog="PostgreSQLConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
|
||||
<ROW Dialog="PrereqLicenseAgreementDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel" TitleLocId="-"/>
|
||||
<ROW Dialog="RabbitMQConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
|
||||
<ROW Dialog="RedisServerConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
|
||||
</COMPONENT>
|
||||
@ -1123,7 +1168,6 @@
|
||||
<ROW Feature_="NodeJSServices" Component_="tools"/>
|
||||
<ROW Feature_="MainFeature" Component_="AppPath"/>
|
||||
<ROW Feature_="MainFeature" Component_="icon.ico"/>
|
||||
<ROW Feature_="DocumentServer.EE" Component_="DocumentServer.EE"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiIconsComponent">
|
||||
<ROW Name="icon.exe" SourcePath="Resources\icon.ico" Index="0"/>
|
||||
@ -1143,16 +1187,16 @@
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
||||
<ROW Action="AI_AppSearchEx" Sequence="103"/>
|
||||
<ROW Action="AI_DetectSoftware" Sequence="102"/>
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Action="AI_DeleteCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="199" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Action="AI_DeleteRCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="198" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Action="AI_ExtractCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="197" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Action="AI_FindExeLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="196" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Action="AI_ExtractLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="1549" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Action="AI_DeleteRLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="1548" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Action="AI_DeleteLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="6597" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Action="AI_ExtractFiles" Sequence="1399" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_DeleteCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="199" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_DeleteRCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="198" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_ExtractCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="197" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_FindExeLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="196" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_ExtractLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="1549" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_DeleteRLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="1548" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_DeleteLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="6597" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_ExtractFiles" Sequence="1399" Builds="DefaultBuild"/>
|
||||
<ROW Action="AI_DATA_SETTER_2" Sequence="1398"/>
|
||||
<ROW Action="AI_ProcessFailActions" Sequence="5848"/>
|
||||
<ROW Action="AI_DATA_SETTER_3" Sequence="5847"/>
|
||||
@ -1204,15 +1248,15 @@
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstallUISequenceComponent">
|
||||
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=""" Sequence="749"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="54"/>
|
||||
<ROW Action="AI_DpiContentScale" Sequence="53"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="55"/>
|
||||
<ROW Action="AI_DpiContentScale" Sequence="54"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="53"/>
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="103"/>
|
||||
<ROW Action="AI_AppSearchEx" Sequence="102"/>
|
||||
<ROW Action="AI_DetectSoftware" Sequence="101"/>
|
||||
<ROW Action="MySQLConfigure" Condition="( NOT Installed )" Sequence="1101"/>
|
||||
<ROW Action="AI_ResolveLocalizedCredentials" Sequence="51"/>
|
||||
<ROW Action="AI_ResolveLocalizedCredentials" Sequence="52"/>
|
||||
<ROW Action="AI_DownloadPrereq" Sequence="1297"/>
|
||||
<ROW Action="AI_ExtractPrereq" Sequence="1298"/>
|
||||
<ROW Action="AI_InstallPrerequisite" Sequence="1299"/>
|
||||
@ -1224,6 +1268,7 @@
|
||||
<ROW Action="Set_DS_JWT_SECRET" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) ) AND ( JWT_ENABLED = "true" )" Sequence="1106"/>
|
||||
<ROW Action="PostgreSQLConfigure" Condition="( NOT Installed )" Sequence="1102"/>
|
||||
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Sequence="199"/>
|
||||
<ROW Action="AI_RestartElevated" Sequence="51" Builds="ExeBuild"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
|
||||
<ROW Condition="( Version9X OR ( NOT VersionNT64 ) OR ( VersionNT64 AND ((VersionNT64 <> 600) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 600) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 602) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 603) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 1000) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 1100) OR (MsiNTProductType <> 1)) ) )" Description="[ProductName] cannot be installed on the following Windows versions: [WindowsTypeNT64Display]." DescriptionLocId="AI.LaunchCondition.NoSpecificNT64" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||
@ -1233,7 +1278,7 @@
|
||||
<ROW Condition="(VersionNT <> 500)" Description="[ProductName] cannot be installed on [WindowsTypeNT50Display]." DescriptionLocId="AI.LaunchCondition.NoNT50" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Condition="AI_DETECTED_ADMIN_USER" Description="[ProductName] requires installation by an Admin user account." DescriptionLocId="AI.LaunchCondition.Admin.User" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Condition="AI_DETECTED_INTERNET_CONNECTION" Description="[ProductName] requires an active Internet connection for installation. Please check your network configuration and proxy settings." DescriptionLocId="AI.LaunchCondition.Internet" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Condition="SETUPEXEDIR OR (REMOVE="ALL")" Description="This package can only be run from a bootstrapper." DescriptionLocId="AI.LaunchCondition.RequireBootstrapper" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||
<ROW Condition="SETUPEXEDIR OR (REMOVE="ALL")" Description="This package can only be run from a bootstrapper." DescriptionLocId="AI.LaunchCondition.RequireBootstrapper" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiLockPermComponent">
|
||||
@ -1296,9 +1341,38 @@
|
||||
<ROW LockObject="Data_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_16_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="0"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiRadioButtonComponent">
|
||||
<ROW Property="Prereq_IAgree" Order="1" Value="Yes" X="5" Y="0" Width="250" Height="15" Text="I &accept the terms in the License Agreement" TextStyle="DlgFont8" TextLocId="RadioButton.Text.IAgree#1"/>
|
||||
<ROW Property="Prereq_IAgree" Order="2" Value="No" X="5" Y="20" Width="250" Height="15" Text="I &do not accept the terms in the License Agreement" TextStyle="DlgFont8" TextLocId="RadioButton.Text.IAgree#2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegLocatorComponent">
|
||||
<ROW Signature_="AI_EXE_PATH_CU" Root="1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
|
||||
<ROW Signature_="AI_EXE_PATH_LM" Root="2" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="REDIS_PWD" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_1" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="REDIS_PORT" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_10" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="ELASTICSEARCH_HOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_11" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DB_USER" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_12" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DB_PWD" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_13" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DB_PORT" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_14" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DB_NAME" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_15" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DB_HOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_16" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_VHOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_17" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_USER" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_18" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_PWD" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_19" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_PORT" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_2" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="REDIS_HOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_20" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="AMQP_HOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_21" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_JWT_ENABLED" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_22" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_JWT_HEADER" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_23" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_JWT_SECRET" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_24" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_PORT" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_3" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_USER" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_4" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_PWD" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_5" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_PORT" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_6" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_NAME" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_7" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="PS_DB_HOST" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_8" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="ELASTICSEARCH_SCHEME" Type="2"/>
|
||||
<ROW Signature_="AppSearchSign_9" Root="2" Key="Software\[Manufacturer]\[ProductName]" Name="ELASTICSEARCH_PORT" Type="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegsComponent">
|
||||
<ROW Registry="AI_ExePath" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Value="[AI_SETUPEXEPATH]" Component_="AI_ExePath"/>
|
||||
@ -1307,11 +1381,11 @@
|
||||
<ROW Registry="Comments" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Comments" Value="[ARPCOMMENTS]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Contact" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Contact" Value="[ARPCONTACT]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="CurrentVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion" Name="\"/>
|
||||
<ROW Registry="DOCUMENT_SERVER_JWT_SECRET" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="DOCUMENT_SERVER_JWT_SECRET" Value="[DOCUMENT_SERVER_JWT_SECRET]" Component_="APPDIR"/>
|
||||
<ROW Registry="DisplayIcon" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayIcon" Value="[ARP_ICON_PATH]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="DisplayName" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayName" Value="[AI_PRODUCTNAME_ARP]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="DisplayVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayVersion" Value="[ProductVersion]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="DocumentServer" Root="-1" Key="Software\Caphyon\Advanced Installer\Prereqs\[ProductCode]\[ProductVersion]" Name="DocumentServer" Value="1" Component_="DocumentServer"/>
|
||||
<ROW Registry="DocumentServer.EE" Root="-1" Key="Software\Caphyon\Advanced Installer\Prereqs\[ProductCode]\[ProductVersion]" Name="DocumentServer.EE" Value="1" Component_="DocumentServer.EE"/>
|
||||
<ROW Registry="EstimatedSize" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="EstimatedSize" Value="#[AI_ARP_SIZE]" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||
<ROW Registry="HelpLink" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="HelpLink" Value="[ARPHELPLINK]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="HelpTelephone" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="HelpTelephone" Value="[ARPHELPTELEPHONE]" Component_="AI_CustomARPName"/>
|
||||
@ -1402,23 +1476,23 @@
|
||||
<ROW ServiceControl="ServiceName_WebStudio" Name="[ServiceName_WebStudio]" Event="161" Wait="0" Component_="ASC.Web.Studio.exe"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiServInstComponent">
|
||||
<ROW ServiceInstall="ServiceName_WebHealthChecksUI" Name="[ServiceName_WebHealthChecksUI]" DisplayName="[ServiceName_WebHealthChecksUI]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5033" Component_="ASC.Web.HealthChecks.UI.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_ApiSystemService" Name="[ServiceName_ApiSystemService]" DisplayName="[ServiceName_ApiSystemService]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5010 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_ApiSystemService]" Component_="ASC.ApiSystem.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_BackgroundTasks" Name="[ServiceName_BackgroundTasks]" DisplayName="[ServiceName_BackgroundTasks]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5032 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER] --core:eventBus:subscriptionClientName=asc_event_bus_backup_queue" Component_="ASC.Data.Backup.BackgroundTasks.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_BackupService" Name="[ServiceName_BackupService]" DisplayName="[ServiceName_BackupService]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5012 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Data.Backup.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_ClearEvents" Name="[ServiceName_ClearEvents]" DisplayName="[ServiceName_ClearEvents]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5027 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.ClearEvents.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_DocEditor" Name="[ServiceName_DocEditor]" DisplayName="[ServiceName_DocEditor]" ServiceType="16" StartType="2" ErrorControl="1" Component_="DocEditor.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_FileServer" Name="[ServiceName_FileServer]" DisplayName="[ServiceName_FileServer]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5007 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_FileServer] [SUBFOLDER_SERVER]" Component_="ASC.Files.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_FileService" Name="[ServiceName_FileService]" DisplayName="[ServiceName_FileService]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5009 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_FileService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER] --core:eventBus:subscriptionClientName=asc_event_bus_files_service_queue" Component_="ASC.Files.Service.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_Login" Name="[ServiceName_Login]" DisplayName="[ServiceName_Login]" ServiceType="16" StartType="2" ErrorControl="1" Component_="Login.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_NotifyService" Name="[ServiceName_NotifyService]" DisplayName="[ServiceName_NotifyService]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5005 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_NotifyService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER] --core:eventBus:subscriptionClientName=asc_event_bus_notify_queue" Component_="ASC.Notify.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_PeopleServer" Name="[ServiceName_PeopleServer]" DisplayName="[ServiceName_PeopleServer]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5004 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_PeopleServer] [SUBFOLDER_SERVER]" Component_="ASC.People.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_Proxy" Name="[ServiceName_Proxy]" DisplayName="[ServiceName_Proxy]" ServiceType="16" StartType="2" ErrorControl="1" Component_="Proxy.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_Socket.IO" Name="[ServiceName_Socket.IO]" DisplayName="[ServiceName_Socket.IO]" ServiceType="16" StartType="2" ErrorControl="1" Component_="Socket.IO.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_SsoAuth" Name="[ServiceName_SsoAuth]" DisplayName="[ServiceName_SsoAuth]" ServiceType="16" StartType="2" ErrorControl="1" Component_="SsoAuth.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_StudioNotifyService" Name="[ServiceName_StudioNotifyService]" DisplayName="[ServiceName_StudioNotifyService]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5006 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_StudioNotifyService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Studio.Notify.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_WebApi" Name="[ServiceName_WebApi]" DisplayName="[ServiceName_WebApi]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5000 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_WebApi] [SUBFOLDER_SERVER]" Component_="ASC.Web.Api.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_WebStudio" Name="[ServiceName_WebStudio]" DisplayName="[ServiceName_WebStudio]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5003 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_WebStudio] [SUBFOLDER_SERVER]" Component_="ASC.Web.Studio.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_WebHealthChecksUI" Name="[ServiceName_WebHealthChecksUI]" DisplayName="[ProductName] Web.HealthChecks.UI" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5033 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_WebHealthChecksUI]" Component_="ASC.Web.HealthChecks.UI.exe" Description="[ProductName] Web.HealthChecks.UI"/>
|
||||
<ROW ServiceInstall="ServiceName_ApiSystemService" Name="[ServiceName_ApiSystemService]" DisplayName="[ProductName] ApiSystem" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5010 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_ApiSystemService]" Component_="ASC.ApiSystem.exe" Description="[ProductName] ApiSystem"/>
|
||||
<ROW ServiceInstall="ServiceName_BackgroundTasks" Name="[ServiceName_BackgroundTasks]" DisplayName="[ProductName] Data.Backup.BackgroundTasks" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5032 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackgroundTasks] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER] --core:eventBus:subscriptionClientName=asc_event_bus_backup_queue" Component_="ASC.Data.Backup.BackgroundTasks.exe" Description="[ProductName] Data.Backup.BackgroundTasks"/>
|
||||
<ROW ServiceInstall="ServiceName_BackupService" Name="[ServiceName_BackupService]" DisplayName="[ProductName] BackupService" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5012 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Data.Backup.exe" Description="[ProductName] BackupService"/>
|
||||
<ROW ServiceInstall="ServiceName_ClearEvents" Name="[ServiceName_ClearEvents]" DisplayName="[ProductName] ClearEvents" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5027 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_ClearEvents] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.ClearEvents.exe" Description="[ProductName] ClearEvents"/>
|
||||
<ROW ServiceInstall="ServiceName_DocEditor" Name="[ServiceName_DocEditor]" DisplayName="[ProductName] DocEditor" ServiceType="16" StartType="2" ErrorControl="1" Component_="DocEditor.exe" Description="[ProductName] DocEditor"/>
|
||||
<ROW ServiceInstall="ServiceName_FileServer" Name="[ServiceName_FileServer]" DisplayName="[ProductName] FileServer" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5007 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_FileServer] [SUBFOLDER_SERVER]" Component_="ASC.Files.exe" Description="[ProductName] FileServer"/>
|
||||
<ROW ServiceInstall="ServiceName_FileService" Name="[ServiceName_FileService]" DisplayName="[ProductName] FileService" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5009 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_FileService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER] --core:eventBus:subscriptionClientName=asc_event_bus_files_service_queue" Component_="ASC.Files.Service.exe" Description="[ProductName] FileService"/>
|
||||
<ROW ServiceInstall="ServiceName_Login" Name="[ServiceName_Login]" DisplayName="[ProductName] Login" ServiceType="16" StartType="2" ErrorControl="1" Component_="Login.exe" Description="[ProductName] Login"/>
|
||||
<ROW ServiceInstall="ServiceName_NotifyService" Name="[ServiceName_NotifyService]" DisplayName="[ProductName] NotifyService" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5005 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_NotifyService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER] --core:eventBus:subscriptionClientName=asc_event_bus_notify_queue" Component_="ASC.Notify.exe" Description="[ProductName] NotifyService"/>
|
||||
<ROW ServiceInstall="ServiceName_PeopleServer" Name="[ServiceName_PeopleServer]" DisplayName="[ProductName] PeopleServer" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5004 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_PeopleServer] [SUBFOLDER_SERVER]" Component_="ASC.People.exe" Description="[ProductName] PeopleServer"/>
|
||||
<ROW ServiceInstall="ServiceName_Proxy" Name="[ServiceName_Proxy]" DisplayName="[ProductName] Proxy" ServiceType="16" StartType="2" ErrorControl="1" Component_="Proxy.exe" Description="[ProductName] Proxy"/>
|
||||
<ROW ServiceInstall="ServiceName_Socket.IO" Name="[ServiceName_Socket.IO]" DisplayName="[ProductName] Socket.IO" ServiceType="16" StartType="2" ErrorControl="1" Component_="Socket.IO.exe" Description="[ProductName] Socket.IO"/>
|
||||
<ROW ServiceInstall="ServiceName_SsoAuth" Name="[ServiceName_SsoAuth]" DisplayName="[ProductName] SsoAuth.Svc" ServiceType="16" StartType="2" ErrorControl="1" Component_="SsoAuth.exe" Description="[ProductName] SsoAuth.Svc"/>
|
||||
<ROW ServiceInstall="ServiceName_StudioNotifyService" Name="[ServiceName_StudioNotifyService]" DisplayName="[ProductName] StudioNotifyService" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5006 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_StudioNotifyService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Studio.Notify.exe" Description="[ProductName] StudioNotifyService"/>
|
||||
<ROW ServiceInstall="ServiceName_WebApi" Name="[ServiceName_WebApi]" DisplayName="[ProductName] WebApi" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5000 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_WebApi] [SUBFOLDER_SERVER]" Component_="ASC.Web.Api.exe" Description="[ProductName] WebApi"/>
|
||||
<ROW ServiceInstall="ServiceName_WebStudio" Name="[ServiceName_WebStudio]" DisplayName="[ProductName] WebStudio" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5003 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_WebStudio] [SUBFOLDER_SERVER]" Component_="ASC.Web.Studio.exe" Description="[ProductName] WebStudio"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiThemeComponent">
|
||||
<ATTRIBUTE name="UsedTheme" value="classic"/>
|
||||
@ -1438,7 +1512,6 @@
|
||||
<ROW PrereqKey="CA62D813A4E74FA2AAE86A7D7B7B1493" DisplayName="Visual C++ Redistributable for Visual Studio 2013 Update 5 x64" VersionMin="12.0" SetupFileUrl="http://download.microsoft.com/download/C/C/2/CC2DF5F8-4454-44B4-802D-5EA68D086676/vcredist_x64.exe" Location="1" ExactSize="7201056" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="xym" MD5="b364dd867258dfc79342e00d57c81bb5" TargetName="Visual C++ Redistributable for Visual Studio 2013?vcredist_2013u5_x64.exe"/>
|
||||
<ROW PrereqKey="D564007E3BBE4F85950A09B470A7CA65" DisplayName="Visual C++ Redistributable for Visual Studio 2013 Update 5 x86" VersionMin="12.0" SetupFileUrl="http://download.microsoft.com/download/C/C/2/CC2DF5F8-4454-44B4-802D-5EA68D086676/vcredist_x86.exe" Location="1" ExactSize="6510272" Operator="0" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" MD5="6a3a1760342ea699d5e6df1f2a1c7707" TargetName="Visual C++ Redistributable for Visual Studio 2013?vcredist_2013u5_x86.exe"/>
|
||||
<ROW PrereqKey="DocumentServer" DisplayName="DocumentServer" SetupFileUrl="onlyoffice-documentserver.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" BasicUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" NoUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" Options="fi=" TargetName="onlyoffice-documentserver.exe" Builds="DefaultBuild" Feature="DocumentServer" RepairComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG"/>
|
||||
<ROW PrereqKey="DocumentServer.EE" DisplayName="DocumentServer-EE" SetupFileUrl="onlyoffice-documentserver-ee.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" BasicUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" NoUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" Options="fi=" TargetName="onlyoffice-documentserver-ee.exe" Builds="ExeBuild" Feature="DocumentServer.EE" RepairComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG"/>
|
||||
<ROW PrereqKey="EA5B60A5CAD4115A8386D017CC889B9" DisplayName="ASP.NET Core Runtime 7.0.3 x64" VersionMin="7.0" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/d37efccc-2ba1-4fc9-a1ef-a8e1e77fb681/b9a20fc29ff05f18d81620ec88ade699/aspnetcore-runtime-7.0.3-win-x64.exe" Location="1" ExactSize="9562088" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="xym" MD5="a87c53a62579d43c6e20683ad686c991" TargetName="ASP.NET Core 7.0"/>
|
||||
<ROW PrereqKey="C5949268848C59079D60551E525B7" DisplayName=".NET Runtime 7.0.3 x86" VersionMin="7.0" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/9dd2da29-ca47-40fb-81a0-96fe26ea8ea2/e8f7e09a6d4848b8c4a13282d964b9e1/dotnet-runtime-7.0.3-win-x86.exe" Location="1" ExactSize="25849872" WinNTVersions="Windows Vista x86, Windows Server 2008 x86, Windows 7 RTM x86, Windows 8 x86, Windows 10 version 1507 x86, Windows 10 version 1511 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" MD5="5252b28e402d52361910ddffe7dc7c2b" TargetName=".NET 7.0"/>
|
||||
<ROW PrereqKey="Erlangv20.3x64" DisplayName="Erlang v20.3 x64" VersionMin="20.3" SetupFileUrl="http://download.onlyoffice.com/install/windows/enterprise/otp_win64_20.3.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="Erlang v20.3 x64"/>
|
||||
@ -1452,7 +1525,7 @@
|
||||
<ROW PrereqKey="RequiredApplication_4" DisplayName="Elasticsearch v7.16.3 x64" VersionMin="7.16.3" SetupFileUrl="https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.3.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="Elasticsearch v7.16.3 x64"/>
|
||||
<ROW PrereqKey="RequiredApplication_5" DisplayName="RabbitMQ v3.7.4 x64" VersionMin="3.7.4" SetupFileUrl="https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.4/rabbitmq-server-3.7.4.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="RabbitMQ v3.7.4 x64"/>
|
||||
<ROW PrereqKey="RequiredApplication_6" DisplayName="Redis 5.0.10 x64" VersionMin="5.0" SetupFileUrl="http://download.onlyoffice.com/install/windows/redist/Redis-x64-5.0.10.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" BasicUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" NoUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" Options="yx" TargetName="Redis 5.0.10 x64"/>
|
||||
<ATTRIBUTE name="PrereqsOrder" value="B96F93FA27E74B02866727AAE83982D0 F3520F64DA5998338D97129FAD2 C5949268848C59079D60551E525B7 EA5B60A5CAD4115A8386D017CC889B9 FC441DA8855740179A0DFCF9560D3DEE D564007E3BBE4F85950A09B470A7CA65 CA62D813A4E74FA2AAE86A7D7B7B1493 A918597FE054CCCB65ABDBA0AD8F63C C4FE6FD5B7C4D07B3A313E754A9A6A8 B365F790B0C4E08A90D54675D858A21 B450414DF7494F99141402B8725A7C RequiredApplication RequiredApplication_2 MySQLInstallerRunn RequiredApplication_1 RequiredApplication_4 Erlangv20.3x64 RequiredApplication_5 RequiredApplication_6 FFmpegx64 PostgreSQL_ODBC PostgresSQL DocumentServer DocumentServer.EE"/>
|
||||
<ATTRIBUTE name="PrereqsOrder" value="B96F93FA27E74B02866727AAE83982D0 F3520F64DA5998338D97129FAD2 C5949268848C59079D60551E525B7 EA5B60A5CAD4115A8386D017CC889B9 FC441DA8855740179A0DFCF9560D3DEE D564007E3BBE4F85950A09B470A7CA65 CA62D813A4E74FA2AAE86A7D7B7B1493 A918597FE054CCCB65ABDBA0AD8F63C C4FE6FD5B7C4D07B3A313E754A9A6A8 B365F790B0C4E08A90D54675D858A21 B450414DF7494F99141402B8725A7C RequiredApplication RequiredApplication_2 MySQLInstallerRunn RequiredApplication_1 RequiredApplication_4 Erlangv20.3x64 RequiredApplication_5 RequiredApplication_6 FFmpegx64 PostgreSQL_ODBC PostgresSQL DocumentServer"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.PreReqSearchComponent">
|
||||
<ROW SearchKey="A918597FE054CCCB65ABDBA0AD8F63CSyst" Prereq="A918597FE054CCCB65ABDBA0AD8F63C" SearchType="0" SearchString="[SystemFolder]vcruntime140.dll" VerMin="14.26.28720" Order="2" Property="PreReqSearch_1_A918597FE054CCCB65AB"/>
|
||||
@ -1475,7 +1548,6 @@
|
||||
<ROW SearchKey="SystemFolderfile.dll" Prereq="RequiredApplication" SearchType="4" SearchString="{FF073FBB-32E2-4052-B6B2-830C5ED4A809}" VerMin="8.0.32" Order="1" Property="PreReqSearch"/>
|
||||
<ROW SearchKey="SystemFolderfile.dll_1" Prereq="RequiredApplication_1" SearchType="4" SearchString="{47C07A3A-42EF-4213-A85D-8F5A59077C28}" VerMin="14.17.4" Order="1" Property="PreReqSearch_1"/>
|
||||
<ROW SearchKey="SystemFolderfile.dll_2" Prereq="RequiredApplication_2" SearchType="4" SearchString="{18B94B70-06F1-4AC0-B308-37280DB868C2}" VerMin="8.0.32" Order="1" Property="PreReqSearch_2"/>
|
||||
<ROW SearchKey="SystemFolderfile.dll_3" Prereq="DocumentServer.EE" SearchType="0" SearchString="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ONLYOFFICE DocumentServer_is1" Order="1" Property="PreReqSearch_8" Platform="1"/>
|
||||
<ROW SearchKey="UpgradeCode" Prereq="PostgreSQL_ODBC" SearchType="4" SearchString="{BBD29DF5-89F6-4B8B-BDC9-C3EA3A4AFDBB}" VerMin="09.05" Order="1" Property="PreReqSearch_14"/>
|
||||
<ROW SearchKey="UpgradeCode_1" Prereq="RequiredApplication_4" SearchType="4" SearchString="{DAAA2CBA-A1ED-4F29-AFBF-5478617B00F6}" VerMin="7.13.1" Order="2" Property="PreReqSearch_7"/>
|
||||
<ROW SearchKey="UpgradeCode_3" Prereq="RequiredApplication_6" SearchType="4" SearchString="{05410198-7212-4FC4-B7C8-AFEFC3DA0FBC}" VerMin="5.0.10" Order="2" Property="PreReqSearch_12"/>
|
||||
@ -1504,7 +1576,7 @@
|
||||
<ROW Key="YourFile.txt" Component="conf" FileName="onlyoffice.conf" Directory="conf_Dir" Options="17"/>
|
||||
<ROW Key="YourFile.txt_1" Component="conf" FileName="onlyoffice-client.conf" Directory="conf_Dir" Options="17"/>
|
||||
<ROW Key="YourFile.txt_2" Component="includes" FileName="onlyoffice-public.conf" Directory="includes_Dir" Options="17"/>
|
||||
<ROW Key="xml" Component="AI_ExePath" FileName="*.xml" Directory="tools_Dir" Options="17"/>
|
||||
<ROW Key="xml" Component="tools" FileName="*.xml" Directory="tools_Dir" Options="17"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.XmlAttributeComponent">
|
||||
<ROW XmlAttribute="minlevel" XmlElement="logger" Name="minlevel" Flags="14" Order="0" Value="Trace"/>
|
||||
|
22
build/install/win/Resources/License_Enterprise_Redist.rtf
Normal file
22
build/install/win/Resources/License_Enterprise_Redist.rtf
Normal file
@ -0,0 +1,22 @@
|
||||
{\rtf1\ansi\ansicpg1251\deff0\nouicompat\deflang1049{\fonttbl{\f0\fnil\fcharset0 Times New Roman;}{\f1\fnil\fcharset2 Symbol;}}
|
||||
{\colortbl ;\red0\green0\blue255;}
|
||||
{\*\generator Riched20 10.0.19041}\viewkind4\uc1
|
||||
\pard\sa200\sl276\slmult1\f0\fs20\lang9 On the next step you will have to review a list of components and applications provided by third parties. Ascensio System SIA is not associated with those third parties and can grant you no rights to use their software. To continue installation of ONLYOFFICE DocSpace Enterprise you will need to install the components listed below by reading and accepting their respective license terms if some of these components have not already been installed on your computer:\par
|
||||
|
||||
{\pntext\f1\'B7\tab}Visual C++ Redistributable. It is distributed under the following license: {{\field{\*\fldinst{HYPERLINK http://onlyo.co/1rr0Ruq }}{\fldrslt{http://onlyo.co/1rr0Ruq\ul0\cf0}}}}\f0\fs20\par
|
||||
{\pntext\f1\'B7\tab}MySQL Community Server. It is distributed under the GNU GPL license v. 2.0: {{\field{\*\fldinst{HYPERLINK http://www.gnu.org/licenses/old-licenses/gpl-2.0.html }}{\fldrslt{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html\ul0\cf0}}}}\f0\fs20\par
|
||||
{\pntext\f1\'B7\tab}MySQL Connector / ODBC. It is distributed under the GNU GPL license v. 2.0. You may use it free of charge due to FOSS License Exception {{\field{\*\fldinst{HYPERLINK http://www.mysql.com/about/legal/licensing/foss-exception/ }}{\fldrslt{http://www.mysql.com/about/legal/licensing/foss-exception/\ul0\cf0}}}}\f0\fs20 The text of the GNU GPL license v. 2.0 can be found here: {{\field{\*\fldinst{HYPERLINK http://www.gnu.org/licenses/old-licenses/gpl-2.0.html }}{\fldrslt{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html\ul0\cf0}}}}\f0\fs20 .\par
|
||||
{\pntext\f1\'B7\tab}Node.js. It is distributed under the MIT license that can be found here: {{\field{\*\fldinst{HYPERLINK https://raw.githubusercontent.com/joyent/node/v0.10.32/LICENSE }}{\fldrslt{https://raw.githubusercontent.com/joyent/node/v0.10.32/LICENSE\ul0\cf0}}}}\f0\fs20 .\par
|
||||
{\pntext\f1\'B7\tab}PostgresSQL. It is distributed under the PostgreSQL License that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.opensource.org/licenses/postgresql }}{\fldrslt{http://www.opensource.org/licenses/postgresql\ul0\cf0}}}}\f0\fs20\par
|
||||
{\pntext\f1\'B7\tab}PostgreSQL ODBC driver. It is distributed under the LGPL License that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.opensource.org/licenses/lgpl-license.php }}{\fldrslt{http://www.opensource.org/licenses/lgpl-license.php\ul0\cf0}}}}\f0\fs20\par
|
||||
{\pntext\f1\'B7\tab}RabbitMQ. It is distributed under the Mozilla Public License 1.1 that can be found here: {{\field{\*\fldinst{HYPERLINK https://www.rabbitmq.com/mpl.html }}{\fldrslt{https://www.rabbitmq.com/mpl.html\ul0\cf0}}}}\f0\fs20\par
|
||||
{\pntext\f1\'B7\tab}Redis. It is distributed under the three clause BSD license that can be found here: {{\field{\*\fldinst{HYPERLINK http://redis.io/topics/license }}{\fldrslt{http://redis.io/topics/license\ul0\cf0}}}}\f0\fs20\par
|
||||
{\pntext\f1\'B7\tab}ERLANG. It is distributed under the ERLANG PUBLIC LICENSE Version 1.1 license that can be found here: {{\field{\*\fldinst{HYPERLINK https://www.erlang.org/EPLICENSE }}{\fldrslt{https://www.erlang.org/EPLICENSE\ul0\cf0}}}}\f0\fs20\par
|
||||
{\pntext\f1\'B7\tab}.NET/C# RabbitMQ client library. It is distributed dual-licensed under the Apache License v2 and the Mozilla Public License v1.1. that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs20 {{\field{\*\fldinst{HYPERLINK https://www.rabbitmq.com/mpl.html }}{\fldrslt{https://www.rabbitmq.com/mpl.html\ul0\cf0}}}}\f0\fs20\par
|
||||
{\pntext\f1\'B7\tab}Elasticsearch. It is distributed under the Apache License v2 license that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs20\par
|
||||
{\pntext\f1\'B7\tab}Python. It is distributed under the following license: {{\field{\*\fldinst{HYPERLINK https://docs.python.org/3.7/license.html }}{\fldrslt{https://docs.python.org/3.7/license.html\ul0\cf0}}}}\f0\fs20\par
|
||||
{\pntext\f1\'B7\tab}redis-sharp. It is distributed under the new BSD license license that can be found here: {{\field{\*\fldinst{HYPERLINK http://redis.io/topics/license }}{\fldrslt{http://redis.io/topics/license\ul0\cf0}}}}\f0\fs20\par
|
||||
|
||||
\pard\sa200\sl276\slmult1 By clicking the "Next" button you indicate that you agree to install the above software on your computer and confirm that you have read and accepted the terms of the above-mentioned licenses.\par
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ REM echo ######## Set variables ########
|
||||
set "publisher="Ascensio System SIA""
|
||||
set "nuget="%cd%\thirdparty\SimpleRestServices\src\.nuget\NuGet.exe""
|
||||
set "nginx_version=1.21.1"
|
||||
set "environment=test"
|
||||
set "environment=production"
|
||||
|
||||
REM echo ######## Extracting and preparing files to build ########
|
||||
%sevenzip% x build\install\win\nginx-%nginx_version%.zip -o"build\install\win\Files" -y
|
||||
@ -37,6 +37,14 @@ copy build\install\win\tools\Login.xml "build\install\win\Files\tools\Login.xml"
|
||||
copy "build\install\win\nginx.conf" "build\install\win\Files\nginx\conf\nginx.conf" /y
|
||||
rmdir build\install\win\publish /s /q
|
||||
|
||||
REM echo ######## Delete test and dev configs ########
|
||||
del /f /q build\install\win\Files\config\*.test.json
|
||||
del /f /q build\install\win\Files\config\*.dev.json
|
||||
|
||||
REM echo ######## Remove AWSTarget from nlog.config ########
|
||||
%sed% -i "/<target type=\"AWSTarget\" name=\"aws\"/,/<\/target>/d; /<target type=\"AWSTarget\" name=\"aws_sql\"/,/<\/target>/d" build\install\win\Files\config\nlog.config
|
||||
del /q build\install\win\Files\config\sed*
|
||||
|
||||
::edit environment
|
||||
%sed% -i "s/\(\W\)PRODUCT.ENVIRONMENT.SUB\(\W\)/\1%environment%\2/g" build\install\win\DocSpace.aip
|
||||
|
||||
@ -62,8 +70,18 @@ REM echo ######## Build DocSpace package ########
|
||||
%AdvancedInstaller% /edit build\install\win\DocSpace.aip /SetVersion %BUILD_VERSION%.%BUILD_NUMBER%
|
||||
|
||||
IF "%SignBuild%"=="true" (
|
||||
:%AdvancedInstaller% /edit build\install\win\DocSpace.aip /SetSig
|
||||
:%AdvancedInstaller% /edit build\install\win\DocSpace.aip /SetDigitalCertificateFile -file %onlyoffice_codesign_path% -password "%onlyoffice_codesign_password%"
|
||||
%AdvancedInstaller% /edit build\install\win\DocSpace.aip /SetSig
|
||||
%AdvancedInstaller% /edit build\install\win\DocSpace.aip /SetDigitalCertificateFile -file %onlyoffice_codesign_path% -password "%onlyoffice_codesign_password%"
|
||||
)
|
||||
|
||||
%AdvancedInstaller% /rebuild build\install\win\DocSpace.aip
|
||||
|
||||
REM echo ######## Build DocSpace Enterprise package ########
|
||||
%AdvancedInstaller% /edit build\install\win\DocSpace.Enterprise.aip /SetVersion %BUILD_VERSION%.%BUILD_NUMBER%
|
||||
|
||||
IF "%SignBuild%"=="true" (
|
||||
%AdvancedInstaller% /edit build\install\win\DocSpace.Enterprise.aip /SetSig
|
||||
%AdvancedInstaller% /edit build\install\win\DocSpace.Enterprise.aip /SetDigitalCertificateFile -file %onlyoffice_codesign_path% -password "%onlyoffice_codesign_password%"
|
||||
)
|
||||
|
||||
%AdvancedInstaller% /rebuild build\install\win\DocSpace.Enterprise.aip
|
@ -103,6 +103,126 @@ $nuget_packages = @(
|
||||
}
|
||||
)
|
||||
|
||||
$path_enterprise_prereq = "${pwd}\build\install\win\redist\"
|
||||
|
||||
$enterprise_prerequisites = @(
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = ".net_framework_4.8.exe";
|
||||
link = "https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/0fd66638cde16859462a6243a4629a50/ndp48-x86-x64-allos-enu.exe"
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "aspnetcore-runtime-7.0.4-win-x64.exe";
|
||||
link = "https://download.visualstudio.microsoft.com/download/pr/1c260404-69d2-4c07-979c-644846ba1f46/7d27639ac67f1e502b83a738406da0ee/aspnetcore-runtime-7.0.4-win-x64.exe";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "aspnetcore-runtime-7.0.4-win-x86.exe";
|
||||
link = "https://download.visualstudio.microsoft.com/download/pr/771de8e0-6c27-435f-8471-32e360408e15/4f84ca38b7988cc602d1ca62c0469ad2/aspnetcore-runtime-7.0.4-win-x86.exe";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "dotnet-runtime-7.0.4-win-x64.exe";
|
||||
link = "https://download.visualstudio.microsoft.com/download/pr/7e842a78-9877-4b82-8450-f3311b406a6f/83352282a0bdf1e5f9dfc5fcc88dc83f/dotnet-runtime-7.0.4-win-x64.exe";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "dotnet-runtime-7.0.4-win-x86.exe";
|
||||
link = "https://download.visualstudio.microsoft.com/download/pr/a44ad7c4-c079-4299-a5a5-669d53707f76/9a94eeb3cdf9529d40e8020a3b8f6c61/dotnet-runtime-7.0.4-win-x86.exe";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "vcredist_2013u5_x86.exe";
|
||||
link = "http://download.microsoft.com/download/C/C/2/CC2DF5F8-4454-44B4-802D-5EA68D086676/vcredist_x86.exe";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "vcredist_2013u5_x64.exe";
|
||||
link = "http://download.microsoft.com/download/C/C/2/CC2DF5F8-4454-44B4-802D-5EA68D086676/vcredist_x64.exe";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "VC_redist.x86.exe";
|
||||
link = "https://download.visualstudio.microsoft.com/download/pr/d60aa805-26e9-47df-b4e3-cd6fcc392333/A06AAC66734A618AB33C1522920654DDFC44FC13CAFAA0F0AB85B199C3D51DC0/VC_redist.x86.exe";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "VC_redist.x64.exe";
|
||||
link = "https://download.visualstudio.microsoft.com/download/pr/d60aa805-26e9-47df-b4e3-cd6fcc392333/7D7105C52FCD6766BEEE1AE162AA81E278686122C1E44890712326634D0B055E/VC_redist.x64.exe";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "mysql-connector-odbc-8.0.32-win32.msi";
|
||||
link = "https://cdn.mysql.com/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.32-win32.msi";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "mysql-installer-community-8.0.32.0.msi";
|
||||
link = "https://cdn.mysql.com/Downloads/MySQLInstaller/mysql-installer-community-8.0.32.0.msi";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "node-v18.16.1-x64.msi";
|
||||
link = "https://nodejs.org/dist/v18.16.1/node-v18.16.1-x64.msi";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "elasticsearch-7.16.3.msi";
|
||||
link = "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.3.msi";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "otp_win64_20.3.exe";
|
||||
link = "https://erlang.org/download/otp_win64_20.3.exe";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "rabbitmq-server-3.7.4.exe";
|
||||
link = "https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.4/rabbitmq-server-3.7.4.exe";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "Redis-x64-5.0.10.msi";
|
||||
link = "http://download.onlyoffice.com/install/windows/redist/Redis-x64-5.0.10.msi";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "FFmpeg_Essentials.msi";
|
||||
link = "https://github.com/icedterminal/ffmpeg-installer/releases/download/6.0.0.20230306/FFmpeg_Essentials.msi";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "psqlodbc_x64.msi";
|
||||
link = "http://download.onlyoffice.com/install/windows/redist/psqlodbc_x64.msi"
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "postgresql-${psql_version}-1-windows-x64.exe";
|
||||
link = "https://get.enterprisedb.com/postgresql/postgresql-${psql_version}-1-windows-x64.exe"
|
||||
}
|
||||
)
|
||||
|
||||
DownloadComponents $prerequisites $path_prereq
|
||||
|
||||
DownloadComponents $nuget_packages $path_nuget_packages
|
||||
|
||||
DownloadComponents $enterprise_prerequisites $path_enterprise_prereq
|
@ -180,7 +180,7 @@ Function MySQLConfigure
|
||||
|
||||
If service.Started Then
|
||||
shell.Run """" & installDir & "bin\mysqladmin"" -u root password " & dbpass, 0, true
|
||||
shell.Run """" & installDir & "bin\mysql"" -u root -p" & dbpass & " -e ""ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY " & "'" & dbpass & "';""", 0, true
|
||||
shell.Run """" & installDir & "bin\mysql"" -u root -p" & dbpass & " -e ""ALTER USER 'root'@'localhost' IDENTIFIED BY " & "'" & dbpass & "';""", 0, true
|
||||
End If
|
||||
|
||||
Set filesys = CreateObject("Scripting.FileSystemObject")
|
||||
@ -191,7 +191,6 @@ Function MySQLConfigure
|
||||
WriteIni filesys.BuildPath(dataDir, "my.ini"), "mysqld", "group_concat_max_len", "2048"
|
||||
WriteIni filesys.BuildPath(dataDir, "my.ini"), "mysqld", "character_set_server", "utf8"
|
||||
WriteIni filesys.BuildPath(dataDir, "my.ini"), "mysqld", "collation_server", "utf8_general_ci"
|
||||
WriteIni filesys.BuildPath(dataDir, "my.ini"), "mysqld", "default-authentication-plugin", "mysql_native_password"
|
||||
|
||||
Call WriteToLog("MySQLConfigure: WriteIni Path" & filesys.BuildPath(dataDir, "my.ini"))
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
PUSHD %~dp0..
|
||||
set dir=%~dp0..
|
||||
PUSHD %~dp0\..
|
||||
set dir="%cd%"
|
||||
echo %dir%
|
||||
dotnet test common\Tests\Frontend.Translations.Tests\Frontend.Translations.Tests.csproj --filter "TestCategory=Locales" -l:html --environment "BASE_DIR=%dir%" --results-directory "%dir%/TestsResults"
|
||||
dotnet test %dir%\common\Tests\Frontend.Translations.Tests\Frontend.Translations.Tests.csproj --filter "TestCategory=Locales" -l:html --environment "BASE_DIR=%dir%" --results-directory "%dir%\TestsResults"
|
10
build/runMigrations.standalone.bat
Normal file
10
build/runMigrations.standalone.bat
Normal file
@ -0,0 +1,10 @@
|
||||
@echo "MIGRATIONS"
|
||||
@echo off
|
||||
|
||||
cd /D "%~dp0"
|
||||
call start\stop.bat nopause
|
||||
dotnet build ..\asc.web.slnf
|
||||
dotnet build ..\ASC.Migrations.sln
|
||||
PUSHD %~dp0..\common\Tools\ASC.Migration.Runner\bin\Debug\net7.0
|
||||
dotnet ASC.Migration.Runner.dll standalone=true
|
||||
pause
|
@ -6,36 +6,27 @@ if ($PSversionMajor -lt 7 -or $PSversionMinor -lt 2) {
|
||||
exit
|
||||
}
|
||||
|
||||
$Branch = git branch --show-current
|
||||
$BranchExistRemote = git ls-remote --heads origin $Branch
|
||||
|
||||
if (-not $BranchExistRemote) {
|
||||
Write-Error "The current branch does not exist in the remote repository. Please push changes."
|
||||
exit
|
||||
}
|
||||
|
||||
$RootDir = Split-Path (Split-Path -Parent $PSScriptRoot) -Parent
|
||||
$DockerDir = ($RootDir + "\build\install\docker")
|
||||
$BuildDate = Get-Date -Format "yyyy-MM-dd"
|
||||
$LocalIp = (Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration | Where-Object { $_.DHCPEnabled -ne $null -and $_.DefaultIPGateway -ne $null }).IPAddress | Select-Object -First 1
|
||||
|
||||
$Doceditor = ($LocalIp + ":5013")
|
||||
$Login = ($LocalIp + ":5011")
|
||||
$Client = ($LocalIp + ":5001")
|
||||
|
||||
$DockerFile = "Dockerfile.dev"
|
||||
$EnvExtension = "dev"
|
||||
$CoreBaseDomain = "localhost"
|
||||
Set-Location -Path $DockerDir
|
||||
|
||||
Write-Host "Start all backend services (containers)" -ForegroundColor Green
|
||||
$Env:DOCKERFILE = $DockerFile
|
||||
$Env:ROOT_DIR = $RootDir
|
||||
$Env:RELEASE_DATE = $BuildDate
|
||||
$Env:GIT_BRANCH = $Branch
|
||||
$Env:SERVICE_DOCEDITOR = $Doceditor
|
||||
$Env:SERVICE_LOGIN = $Login
|
||||
$Env:SERVICE_CLIENT = $Client
|
||||
$Env:APP_CORE_BASE_DOMAIN = $CoreBaseDomain
|
||||
$Env:APP_URL_PORTAL = ("http://" + $LocalIp + ":8092")
|
||||
$Env:ENV_EXTENSION = $EnvExtension
|
||||
docker compose -f ($DockerDir + "\docspace.dev.yml") up -d
|
||||
Write-Host "Start all services (containers)" -ForegroundColor Green
|
||||
$Env:ENV_EXTENSION="dev"
|
||||
$Env:Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:v1.0.0"
|
||||
$Env:Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:v1.0.0"
|
||||
$Env:Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:v1.0.0"
|
||||
$Env:DOCUMENT_SERVER_IMAGE_NAME="onlyoffice/documentserver-de:latest"
|
||||
$Env:SERVICE_DOCEDITOR=$Doceditor
|
||||
$Env:SERVICE_LOGIN=$Login
|
||||
$Env:SERVICE_CLIENT=$Client
|
||||
$Env:ROOT_DIR=$RootDir
|
||||
$Env:BUILD_PATH="/var/www"
|
||||
$Env:SRC_PATH="$RootDir\publish\services"
|
||||
$Env:DATA_DIR="$RootDir\Data"
|
||||
docker compose -f docspace.profiles.yml -f docspace.overcome.yml --profile migration-runner --profile backend-local start
|
@ -8,29 +8,12 @@ dir=$(builtin cd $rd/../../; pwd)
|
||||
|
||||
echo "Root directory:" $dir
|
||||
|
||||
cd $dir
|
||||
|
||||
branch=$(git branch --show-current)
|
||||
|
||||
echo "GIT_BRANCH:" $branch
|
||||
|
||||
branch_exist_remote=$(git ls-remote --heads origin $branch)
|
||||
|
||||
if [ -z "$branch_exist_remote" ]; then
|
||||
echo "The current branch does not exist in the remote repository. Please push changes."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd $dir/build/install/docker/
|
||||
|
||||
docker_dir="$( pwd )"
|
||||
|
||||
echo "Docker directory:" $docker_dir
|
||||
|
||||
build_date=$(date +%Y-%m-%d)
|
||||
|
||||
echo "BUILD DATE: $build_date"
|
||||
|
||||
local_ip=$(ipconfig getifaddr en0)
|
||||
|
||||
echo "LOCAL IP: $local_ip"
|
||||
@ -43,19 +26,16 @@ echo "SERVICE_DOCEDITOR: $doceditor"
|
||||
echo "SERVICE_LOGIN: $login"
|
||||
echo "SERVICE_CLIENT: $client"
|
||||
|
||||
docker_file=Dockerfile.dev
|
||||
env_extension="dev"
|
||||
core_base_domain="localhost"
|
||||
|
||||
echo "Start all backend services (containers)"
|
||||
DOCKERFILE=$docker_file \
|
||||
ROOT_DIR=$dir \
|
||||
RELEASE_DATE=$build_date \
|
||||
GIT_BRANCH=$branch \
|
||||
Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:v1.0.0" \
|
||||
Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:v1.0.0" \
|
||||
Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:v1.0.0" \
|
||||
BUILD_PATH="/var/www" \
|
||||
SRC_PATH="$dir/publish/services" \
|
||||
SERVICE_DOCEDITOR=$doceditor \
|
||||
SERVICE_LOGIN=$login \
|
||||
SERVICE_CLIENT=$client \
|
||||
APP_CORE_BASE_DOMAIN=$core_base_domain \
|
||||
APP_URL_PORTAL="http://$local_ip:8092" \
|
||||
ENV_EXTENSION=$env_extension \
|
||||
docker compose -f docspace.dev.yml up -d
|
||||
ROOT_DIR=$dir \
|
||||
DATA_DIR="$dir/Data" \
|
||||
ENV_EXTENSION="dev" \
|
||||
DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/documentserver-de:latest \
|
||||
docker-compose -f docspace.profiles.yml -f docspace.overcome.yml --profile backend-local start
|
@ -49,7 +49,7 @@ public class DbHelper
|
||||
var data = await activeDirectoryDbContext.WebstudioSettings
|
||||
.Where(r => r.Id == id)
|
||||
.Join(activeDirectoryDbContext.Tenants, r => r.TenantId, r => r.Id, (settings, tenant) => new { settings, tenant })
|
||||
.Select(r => JsonExtensions.JsonValue(nameof(r.settings.Data).ToLower(), enableLdapAuthentication.ToString()))
|
||||
.Select(r => DbFunctionsExtension.JsonValue(nameof(r.settings.Data).ToLower(), enableLdapAuthentication.ToString()))
|
||||
.Distinct()
|
||||
.Select(r => r != null ? Convert.ToInt32(r) : 0)
|
||||
.ToListAsync();
|
||||
|
@ -23,7 +23,7 @@
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.Systemd" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.0" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.2.1" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.0" />
|
||||
<PackageReference Include="StackExchange.Redis.Extensions.AspNetCore" Version="8.0.5" />
|
||||
<PackageReference Include="StackExchange.Redis.Extensions.Newtonsoft" Version="8.0.5" />
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
|
||||
|
@ -199,7 +199,7 @@ public abstract class BaseStartup
|
||||
config.Filters.Add(new TypeFilterAttribute(typeof(IpSecurityFilter)));
|
||||
config.Filters.Add(new TypeFilterAttribute(typeof(ProductSecurityFilter)));
|
||||
config.Filters.Add(new CustomResponseFilterAttribute());
|
||||
config.Filters.Add(new CustomExceptionFilterAttribute());
|
||||
config.Filters.Add<CustomExceptionFilterAttribute>();
|
||||
config.Filters.Add(new TypeFilterAttribute(typeof(WebhooksGlobalFilterAttribute)));
|
||||
});
|
||||
|
||||
@ -316,9 +316,9 @@ public abstract class BaseStartup
|
||||
|
||||
app.UseLoggerMiddleware();
|
||||
|
||||
app.UseEndpoints(async endpoints =>
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
await endpoints.MapCustomAsync(WebhooksEnabled, app.ApplicationServices);
|
||||
endpoints.MapCustomAsync(WebhooksEnabled, app.ApplicationServices).Wait();
|
||||
|
||||
endpoints.MapHealthChecks("/health", new HealthCheckOptions()
|
||||
{
|
||||
|
@ -62,7 +62,7 @@ public class LoggerMiddleware
|
||||
state.Add("tenantMappedDomain", tenant.MappedDomain);
|
||||
}
|
||||
|
||||
using (logger.BeginScope(state.ToArray()))
|
||||
using (logger.BeginScope(state))
|
||||
{
|
||||
await _next.Invoke(context);
|
||||
}
|
||||
|
@ -28,6 +28,13 @@ namespace ASC.Api.Core.Middleware;
|
||||
|
||||
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
|
||||
{
|
||||
private readonly ILogger<CustomExceptionFilterAttribute> _logger;
|
||||
|
||||
public CustomExceptionFilterAttribute(ILogger<CustomExceptionFilterAttribute> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public override void OnException(ExceptionContext context)
|
||||
{
|
||||
var status = (HttpStatusCode)context.HttpContext.Response.StatusCode;
|
||||
@ -69,6 +76,9 @@ public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
|
||||
break;
|
||||
}
|
||||
|
||||
_logger.LogCritical(exception,
|
||||
$"error during executing {context.HttpContext.Request?.Method}: {context.HttpContext.Request?.Path.Value}");
|
||||
|
||||
var result = new ObjectResult(new ErrorApiResponse(status, exception, message, withStackTrace))
|
||||
{
|
||||
StatusCode = (int)status
|
||||
|
114
common/ASC.Api.Core/Middleware/UnhandledExceptionMiddleware.cs
Normal file
114
common/ASC.Api.Core/Middleware/UnhandledExceptionMiddleware.cs
Normal file
@ -0,0 +1,114 @@
|
||||
// (c) Copyright Ascensio System SIA 2010-2022
|
||||
//
|
||||
// This program is a free software product.
|
||||
// You can redistribute it and/or modify it under the terms
|
||||
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
|
||||
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
|
||||
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
|
||||
// any third-party rights.
|
||||
//
|
||||
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
|
||||
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
|
||||
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
//
|
||||
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
|
||||
//
|
||||
// The interactive user interfaces in modified source and object code versions of the Program must
|
||||
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
|
||||
//
|
||||
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
|
||||
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
|
||||
// trademark law for use of our trademarks.
|
||||
//
|
||||
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
|
||||
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
|
||||
namespace ASC.Api.Core.Middleware;
|
||||
|
||||
// problem: https://github.com/aspnet/Logging/issues/677
|
||||
public class UnhandledExceptionMiddleware
|
||||
{
|
||||
private readonly RequestDelegate _next;
|
||||
|
||||
public UnhandledExceptionMiddleware(RequestDelegate next)
|
||||
{
|
||||
_next = next;
|
||||
}
|
||||
|
||||
public async Task Invoke(HttpContext context,
|
||||
ILogger<UnhandledExceptionMiddleware> logger)
|
||||
{
|
||||
try
|
||||
{
|
||||
await _next(context);
|
||||
}
|
||||
catch (Exception ex) when (LogError(ex))
|
||||
{
|
||||
await OnException(context, ex);
|
||||
}
|
||||
|
||||
bool LogError(Exception ex)
|
||||
{
|
||||
logger.LogError(ex,
|
||||
$"Request {context.Request?.Method}: {context.Request?.Path.Value} failed");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public async Task OnException(HttpContext context, Exception exception)
|
||||
{
|
||||
var status = (HttpStatusCode)context.Response.StatusCode;
|
||||
string message = null;
|
||||
|
||||
if (status == HttpStatusCode.OK)
|
||||
{
|
||||
status = HttpStatusCode.InternalServerError;
|
||||
}
|
||||
|
||||
var withStackTrace = true;
|
||||
|
||||
switch (exception)
|
||||
{
|
||||
case ItemNotFoundException:
|
||||
status = HttpStatusCode.NotFound;
|
||||
message = "The record could not be found";
|
||||
break;
|
||||
case ArgumentException:
|
||||
status = HttpStatusCode.BadRequest;
|
||||
message = "Invalid arguments";
|
||||
break;
|
||||
case SecurityException:
|
||||
status = HttpStatusCode.Forbidden;
|
||||
message = "Access denied";
|
||||
break;
|
||||
case AuthenticationException:
|
||||
status = HttpStatusCode.Unauthorized;
|
||||
withStackTrace = false;
|
||||
break;
|
||||
case InvalidOperationException:
|
||||
status = HttpStatusCode.Forbidden;
|
||||
break;
|
||||
case TenantQuotaException:
|
||||
case BillingNotFoundException:
|
||||
status = HttpStatusCode.PaymentRequired;
|
||||
break;
|
||||
}
|
||||
|
||||
var result = new ErrorApiResponse(status, exception, message, withStackTrace);
|
||||
|
||||
context.Response.StatusCode = (int)status;
|
||||
|
||||
await context.Response.WriteAsJsonAsync(result);
|
||||
}
|
||||
}
|
||||
|
||||
public static class UnhandledExceptionMiddlewareExtensions
|
||||
{
|
||||
public static IApplicationBuilder UseUnhandledExceptionMiddleware(this IApplicationBuilder builder)
|
||||
{
|
||||
return builder.UseMiddleware<UnhandledExceptionMiddleware>();
|
||||
}
|
||||
}
|
@ -24,7 +24,7 @@
|
||||
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace ASC.Web.Api.Models;
|
||||
|
||||
@ -54,36 +54,39 @@ public class EmployeeDtoHelper
|
||||
{
|
||||
protected readonly UserPhotoManager _userPhotoManager;
|
||||
protected readonly UserManager _userManager;
|
||||
|
||||
private readonly ILogger<EmployeeDtoHelper> _logger;
|
||||
private readonly ApiContext _httpContext;
|
||||
private readonly DisplayUserSettingsHelper _displayUserSettingsHelper;
|
||||
private readonly CommonLinkUtility _commonLinkUtility;
|
||||
private readonly Dictionary<Guid, EmployeeDto> _dictionary;
|
||||
private readonly ConcurrentDictionary<Guid, EmployeeDto> _dictionary;
|
||||
|
||||
public EmployeeDtoHelper(
|
||||
ApiContext httpContext,
|
||||
DisplayUserSettingsHelper displayUserSettingsHelper,
|
||||
UserPhotoManager userPhotoManager,
|
||||
CommonLinkUtility commonLinkUtility,
|
||||
UserManager userManager)
|
||||
UserManager userManager,
|
||||
ILogger<EmployeeDtoHelper> logger)
|
||||
{
|
||||
_userPhotoManager = userPhotoManager;
|
||||
_userManager = userManager;
|
||||
_logger = logger;
|
||||
_httpContext = httpContext;
|
||||
_displayUserSettingsHelper = displayUserSettingsHelper;
|
||||
_commonLinkUtility = commonLinkUtility;
|
||||
_dictionary = new Dictionary<Guid, EmployeeDto>();
|
||||
_dictionary = new ConcurrentDictionary<Guid, EmployeeDto>();
|
||||
}
|
||||
|
||||
public async Task<EmployeeDto> GetAsync(UserInfo userInfo)
|
||||
{
|
||||
if (_dictionary.ContainsKey(userInfo.Id))
|
||||
if (!_dictionary.TryGetValue(userInfo.Id, out var employee))
|
||||
{
|
||||
return _dictionary[userInfo.Id];
|
||||
employee = await InitAsync(new EmployeeDto(), userInfo);
|
||||
|
||||
_dictionary.AddOrUpdate(userInfo.Id, i => employee, (i, v) => employee);
|
||||
|
||||
}
|
||||
var employee = await InitAsync(new EmployeeDto(), userInfo);
|
||||
_dictionary.Add(userInfo.Id, employee);
|
||||
|
||||
|
||||
return employee;
|
||||
}
|
||||
|
||||
@ -93,8 +96,9 @@ public class EmployeeDtoHelper
|
||||
{
|
||||
return await GetAsync(await _userManager.GetUsersAsync(userId));
|
||||
}
|
||||
catch (Exception)
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.ErrorWithException(e);
|
||||
return await GetAsync(ASC.Core.Users.Constants.LostUser);
|
||||
}
|
||||
}
|
||||
|
@ -114,8 +114,9 @@ public class EmployeeFullDtoHelper : EmployeeDtoHelper
|
||||
ApiDateTimeHelper apiDateTimeHelper,
|
||||
WebItemManager webItemManager,
|
||||
SettingsManager settingsManager,
|
||||
IQuotaService quotaService)
|
||||
: base(context, displayUserSettingsHelper, userPhotoManager, commonLinkUtility, userManager)
|
||||
IQuotaService quotaService,
|
||||
ILogger<EmployeeDtoHelper> logger)
|
||||
: base(context, displayUserSettingsHelper, userPhotoManager, commonLinkUtility, userManager, logger)
|
||||
{
|
||||
_context = context;
|
||||
_webItemSecurity = webItemSecurity;
|
||||
|
@ -86,11 +86,17 @@ public class InvitationLinkHelper
|
||||
var commonLinkResult = await _emailValidationKeyProvider.ValidateEmailKeyAsync(ConfirmType.LinkInvite.ToStringFast() + (int)employeeType,
|
||||
key, _emailValidationKeyProvider.ValidEmailKeyInterval);
|
||||
|
||||
if (commonLinkResult == ValidationResult.Invalid)
|
||||
{
|
||||
commonLinkResult = await _emailValidationKeyProvider.ValidateEmailKeyAsync(email + ConfirmType.EmpInvite.ToStringFast() + (int)employeeType,
|
||||
key, _emailValidationKeyProvider.ValidEmailKeyInterval);
|
||||
}
|
||||
|
||||
if (commonLinkResult != ValidationResult.Invalid)
|
||||
{
|
||||
validationResult.Result = commonLinkResult;
|
||||
validationResult.LinkType = InvitationLinkType.Common;
|
||||
|
||||
|
||||
return validationResult;
|
||||
}
|
||||
|
||||
@ -109,7 +115,7 @@ public class InvitationLinkHelper
|
||||
|
||||
private async Task<ValidationResult> ValidateIndividualLinkAsync(string email, string key, EmployeeType employeeType)
|
||||
{
|
||||
var result = await _emailValidationKeyProvider.ValidateEmailKeyAsync(email + ConfirmType.LinkInvite.ToStringFast() + employeeType.ToStringFast(),
|
||||
var result = await _emailValidationKeyProvider.ValidateEmailKeyAsync(email + ConfirmType.LinkInvite.ToStringFast() + employeeType.ToStringFast(),
|
||||
key, IndividualLinkExpirationInterval);
|
||||
|
||||
if (result != ValidationResult.Ok)
|
||||
@ -123,7 +129,7 @@ public class InvitationLinkHelper
|
||||
{
|
||||
return ValidationResult.Invalid;
|
||||
}
|
||||
|
||||
|
||||
var visitMessage = await GetLinkVisitMessageAsync(email, key);
|
||||
|
||||
if (visitMessage == null)
|
||||
@ -148,7 +154,7 @@ public class InvitationLinkHelper
|
||||
private async Task<AuditEvent> GetLinkVisitMessageAsync(string email, string key)
|
||||
{
|
||||
await using var context = _dbContextFactory.CreateDbContext();
|
||||
|
||||
|
||||
var target = _messageTarget.Create(email);
|
||||
var description = JsonConvert.SerializeObject(new[] { key });
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
<EmbeddedResource Include="Utils\TimeZoneConverter\timeZoneNames.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<FrameworkReference Include="Microsoft.AspNetCore.App" />
|
||||
<PackageReference Include="ARSoft.Tools.NetStandard.DXSdata" Version="1.0.0" />
|
||||
<PackageReference Include="Autofac.Configuration" Version="6.0.0" />
|
||||
<PackageReference Include="AutoMapper" Version="12.0.1" />
|
||||
@ -39,7 +40,6 @@
|
||||
<PackageReference Include="JWT" Version="9.0.3" />
|
||||
<PackageReference Include="log4net" Version="2.0.15" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="7.0.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="7.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
|
||||
@ -55,7 +55,7 @@
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference> -->
|
||||
<PackageReference Include="NLog" Version="5.1.1" />
|
||||
<PackageReference Include="NLog" Version="5.2.0" />
|
||||
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
|
||||
<PackageReference Include="NVelocity" Version="1.2.0" />
|
||||
<PackageReference Include="protobuf-net" Version="3.1.26" />
|
||||
|
@ -24,57 +24,119 @@
|
||||
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
|
||||
|
||||
namespace ASC.Common.Caching;
|
||||
|
||||
[Singletone]
|
||||
public class RedisCacheNotify<T> : ICacheNotify<T> where T : IMessage<T>, new()
|
||||
{
|
||||
private readonly IRedisDatabase _redis;
|
||||
private readonly ConcurrentDictionary<CacheNotifyAction, ConcurrentBag<Action<T>>> _invoctionList;
|
||||
private readonly Guid _instanceId;
|
||||
|
||||
public RedisCacheNotify(IRedisClient redisCacheClient)
|
||||
{
|
||||
_redis = redisCacheClient.GetDefaultDatabase();
|
||||
_instanceId = Guid.NewGuid();
|
||||
_invoctionList = new ConcurrentDictionary<CacheNotifyAction, ConcurrentBag<Action<T>>>();
|
||||
}
|
||||
|
||||
|
||||
public void Publish(T obj, CacheNotifyAction action)
|
||||
{
|
||||
Task.Run(async () => await _redis.PublishAsync(GetChannelName(action), new RedisCachePubSubItem<T>() { Object = obj, Action = action }))
|
||||
Task.Run(async () => await _redis.PublishAsync(GetChannelName(), new RedisCachePubSubItem<T>() { Id = _instanceId, Object = obj, Action = action }))
|
||||
.GetAwaiter()
|
||||
.GetResult();
|
||||
|
||||
foreach (var hanlder in GetInvoctionList(action))
|
||||
{
|
||||
hanlder(obj);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task PublishAsync(T obj, CacheNotifyAction action)
|
||||
{
|
||||
await Task.Run(async () => await _redis.PublishAsync(GetChannelName(action), new RedisCachePubSubItem<T>() { Object = obj, Action = action }));
|
||||
await Task.Run(async () => await _redis.PublishAsync(GetChannelName(), new RedisCachePubSubItem<T>() { Id = _instanceId, Object = obj, Action = action }));
|
||||
|
||||
foreach (var hanlder in GetInvoctionList(action))
|
||||
{
|
||||
hanlder(obj);
|
||||
}
|
||||
}
|
||||
|
||||
public void Subscribe(Action<T> onchange, CacheNotifyAction action)
|
||||
public void Subscribe(Action<T> onChange, CacheNotifyAction action)
|
||||
{
|
||||
Task.Run(async () => await _redis.SubscribeAsync<RedisCachePubSubItem<T>>(GetChannelName(action), (i) =>
|
||||
Task.Run(async () => await _redis.SubscribeAsync<RedisCachePubSubItem<T>>(GetChannelName(), (i) =>
|
||||
{
|
||||
onchange(i.Object);
|
||||
if (i.Id != _instanceId && (i.Action == action || Enum.IsDefined(typeof(CacheNotifyAction), (i.Action & action))))
|
||||
{
|
||||
onChange(i.Object);
|
||||
}
|
||||
|
||||
return Task.FromResult(true);
|
||||
})).GetAwaiter()
|
||||
.GetResult();
|
||||
|
||||
AddToInInvoctionList(onChange, action);
|
||||
}
|
||||
|
||||
public void Unsubscribe(CacheNotifyAction action)
|
||||
{
|
||||
Task.Run(async () => await _redis.UnsubscribeAsync<RedisCachePubSubItem<T>>(GetChannelName(action), (i) =>
|
||||
Task.Run(async () => await _redis.UnsubscribeAsync<RedisCachePubSubItem<T>>(GetChannelName(), (i) =>
|
||||
{
|
||||
return Task.FromResult(true);
|
||||
})).GetAwaiter()
|
||||
.GetResult();
|
||||
|
||||
_invoctionList.TryRemove(action, out _);
|
||||
}
|
||||
|
||||
private string GetChannelName(CacheNotifyAction action)
|
||||
private string GetChannelName()
|
||||
{
|
||||
return $"asc:channel:{action}:{typeof(T).FullName}".ToLower(CultureInfo.InvariantCulture);
|
||||
return $"asc:channel:{typeof(T).FullName}".ToLower(CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
private List<Action<T>> GetInvoctionList(CacheNotifyAction action)
|
||||
{
|
||||
var result = new List<Action<T>>();
|
||||
|
||||
foreach (var val in (CacheNotifyAction[])Enum.GetValues(typeof(CacheNotifyAction)))
|
||||
{
|
||||
if (!(val == action || Enum.IsDefined(typeof(CacheNotifyAction), (val & action)))) continue;
|
||||
|
||||
if (_invoctionList.TryGetValue(val, out var handlers))
|
||||
{
|
||||
result.AddRange(handlers);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private void AddToInInvoctionList(Action<T> onChange, CacheNotifyAction action)
|
||||
{
|
||||
if (onChange != null)
|
||||
{
|
||||
_invoctionList.AddOrUpdate(action,
|
||||
new ConcurrentBag<Action<T>> { onChange },
|
||||
(type, bag) =>
|
||||
{
|
||||
bag.Add(onChange);
|
||||
return bag;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
_invoctionList.TryRemove(action, out _);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class RedisCachePubSubItem<T0>
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public T0 Object { get; set; }
|
||||
|
||||
public CacheNotifyAction Action { get; set; }
|
||||
|
@ -43,6 +43,7 @@ global using System.Text;
|
||||
global using System.Text.Json;
|
||||
global using System.Text.Json.Serialization;
|
||||
global using System.Text.RegularExpressions;
|
||||
global using System.Threading.Channels;
|
||||
global using System.Web;
|
||||
global using System.Xml.Linq;
|
||||
global using System.Xml.XPath;
|
||||
@ -75,7 +76,6 @@ global using JWT.Serializers;
|
||||
global using Microsoft.AspNetCore.Cryptography.KeyDerivation;
|
||||
global using Microsoft.AspNetCore.Http;
|
||||
global using Microsoft.AspNetCore.Http.Extensions;
|
||||
global using Microsoft.AspNetCore.Http.Features;
|
||||
global using Microsoft.AspNetCore.Mvc;
|
||||
global using Microsoft.AspNetCore.Mvc.Filters;
|
||||
global using Microsoft.AspNetCore.WebUtilities;
|
||||
@ -106,4 +106,3 @@ global using RabbitMQ.Client.Events;
|
||||
global using StackExchange.Redis.Extensions.Core.Abstractions;
|
||||
|
||||
global using ILogger = Microsoft.Extensions.Logging.ILogger;
|
||||
global using System.Threading.Channels;
|
||||
|
@ -24,29 +24,29 @@
|
||||
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
|
||||
/*
|
||||
*
|
||||
* (c) Copyright Ascensio System Limited 2010-2018
|
||||
*
|
||||
* This program is freeware. You can redistribute it and/or modify it under the terms of the GNU
|
||||
* General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html).
|
||||
* In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that
|
||||
* Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights.
|
||||
*
|
||||
* THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html
|
||||
*
|
||||
* You can contact Ascensio System SIA by email at sales@onlyoffice.com
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display
|
||||
* Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7 § 3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains
|
||||
* relevant author attributions when distributing the software. If the display of the logo in its graphic
|
||||
* form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE"
|
||||
* in every copy of the program you distribute.
|
||||
* Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
/*
|
||||
*
|
||||
* (c) Copyright Ascensio System Limited 2010-2018
|
||||
*
|
||||
* This program is freeware. You can redistribute it and/or modify it under the terms of the GNU
|
||||
* General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html).
|
||||
* In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that
|
||||
* Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights.
|
||||
*
|
||||
* THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html
|
||||
*
|
||||
* You can contact Ascensio System SIA by email at sales@onlyoffice.com
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display
|
||||
* Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7 § 3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains
|
||||
* relevant author attributions when distributing the software. If the display of the logo in its graphic
|
||||
* form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE"
|
||||
* in every copy of the program you distribute.
|
||||
* Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace ASC.Common.Threading;
|
||||
@ -62,6 +62,7 @@ public class DistributedTaskQueue
|
||||
private readonly ICacheNotify<DistributedTaskCancelation> _cancellationCacheNotify;
|
||||
private readonly IDistributedCache _distributedCache;
|
||||
private readonly ILogger<DistributedTaskQueue> _logger;
|
||||
private bool _subscribed;
|
||||
|
||||
/// <summary>
|
||||
/// setup -1 for infinity thread counts
|
||||
@ -83,23 +84,16 @@ public class DistributedTaskQueue
|
||||
_cancellationCacheNotify = cancelTaskNotify;
|
||||
_cancelations = new ConcurrentDictionary<string, CancellationTokenSource>();
|
||||
_logger = logger;
|
||||
|
||||
_cancellationCacheNotify.Subscribe((c) =>
|
||||
{
|
||||
if (_cancelations.TryGetValue(c.Id, out var s))
|
||||
{
|
||||
s.Cancel();
|
||||
}
|
||||
}, CacheNotifyAction.Remove);
|
||||
_subscribed = false;
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get => _name;
|
||||
set => _name = QUEUE_DEFAULT_PREFIX + value;
|
||||
get => _name;
|
||||
set => _name = QUEUE_DEFAULT_PREFIX + value;
|
||||
}
|
||||
|
||||
public int MaxThreadsCount
|
||||
public int MaxThreadsCount
|
||||
{
|
||||
get
|
||||
{
|
||||
@ -109,8 +103,8 @@ public class DistributedTaskQueue
|
||||
set
|
||||
{
|
||||
Scheduler = value <= 0
|
||||
? TaskScheduler.Default
|
||||
: new ConcurrentExclusiveSchedulerPair(TaskScheduler.Default, value).ConcurrentScheduler;
|
||||
? TaskScheduler.Default
|
||||
: new ConcurrentExclusiveSchedulerPair(TaskScheduler.Default, value).ConcurrentScheduler;
|
||||
|
||||
if (value > 0)
|
||||
{
|
||||
@ -133,10 +127,28 @@ public class DistributedTaskQueue
|
||||
|
||||
distributedTask.InstanceId = INSTANCE_ID;
|
||||
|
||||
if (distributedTask.LastModifiedOn.Equals(DateTime.MinValue))
|
||||
{
|
||||
distributedTask.LastModifiedOn = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
var cancelation = new CancellationTokenSource();
|
||||
var token = cancelation.Token;
|
||||
_cancelations[distributedTask.Id] = cancelation;
|
||||
|
||||
if (!_subscribed)
|
||||
{
|
||||
_cancellationCacheNotify.Subscribe((c) =>
|
||||
{
|
||||
if (_cancelations.TryGetValue(c.Id, out var s))
|
||||
{
|
||||
s.Cancel();
|
||||
}
|
||||
}, CacheNotifyAction.Remove);
|
||||
|
||||
_subscribed = true;
|
||||
}
|
||||
|
||||
var task = new Task(() =>
|
||||
{
|
||||
var t = action(distributedTask, token);
|
||||
@ -146,7 +158,7 @@ public class DistributedTaskQueue
|
||||
}, token, TaskCreationOptions.LongRunning);
|
||||
|
||||
task.ConfigureAwait(false);
|
||||
|
||||
|
||||
distributedTask.Status = DistributedTaskStatus.Running;
|
||||
|
||||
if (distributedTask.Publication == null)
|
||||
@ -174,7 +186,7 @@ public class DistributedTaskQueue
|
||||
|
||||
foreach (var task in queueTasks)
|
||||
{
|
||||
if (task.Publication == null)
|
||||
if (task.Publication == null)
|
||||
{
|
||||
task.Publication = GetPublication();
|
||||
}
|
||||
@ -235,7 +247,7 @@ public class DistributedTaskQueue
|
||||
if (task.Exception != null)
|
||||
{
|
||||
distributedTask.Exception = task.Exception;
|
||||
}
|
||||
}
|
||||
if (task.IsFaulted)
|
||||
{
|
||||
distributedTask.Status = DistributedTaskStatus.Failted;
|
||||
@ -307,11 +319,12 @@ public class DistributedTaskQueue
|
||||
{
|
||||
var listTasks = queueTasks.ToList();
|
||||
|
||||
listTasks.RemoveAll(IsOrphanCacheItem);
|
||||
if (listTasks.RemoveAll(IsOrphanCacheItem) > 0)
|
||||
{
|
||||
SaveToCache(listTasks);
|
||||
}
|
||||
|
||||
SaveToCache(listTasks);
|
||||
|
||||
return queueTasks;
|
||||
return listTasks;
|
||||
}
|
||||
|
||||
private bool IsOrphanCacheItem(DistributedTask obj)
|
||||
|
@ -63,7 +63,6 @@
|
||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="7.0.0" />
|
||||
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
|
||||
<PackageReference Include="Telegram.Bot" Version="18.0.0" />
|
||||
<PackageReference Include="Telegram.Bot.Extensions.Polling" Version="1.0.2" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Protobuf Include="protos\create_client_proto.proto" />
|
||||
|
@ -37,7 +37,7 @@ public class BillingClient
|
||||
|
||||
public BillingClient(IConfiguration configuration, IHttpClientFactory httpClientFactory)
|
||||
{
|
||||
_configuration = configuration.GetSection("core:payment").Get<PaymentConfiguration>();
|
||||
_configuration = configuration.GetSection("core:payment").Get<PaymentConfiguration>() ?? new PaymentConfiguration();
|
||||
_httpClientFactory = httpClientFactory;
|
||||
|
||||
_configuration.Url = (_configuration.Url ?? "").Trim().TrimEnd('/');
|
||||
|
@ -37,8 +37,10 @@ public interface ITariffService
|
||||
Uri GetShoppingUri(string[] productIds, string affiliateId = null, string currency = null, string language = null, string customerId = null, string quantity = null);
|
||||
void ClearCache(int tenantId);
|
||||
Task DeleteDefaultBillingInfoAsync();
|
||||
Task SetTariffAsync(int tenantId, Tariff tariff);
|
||||
Task SetTariffAsync(int tenantId, Tariff tariff, List<TenantQuota> quotas = null);
|
||||
Task<Uri> GetAccountLinkAsync(int tenant, string backUrl);
|
||||
Task<bool> PaymentChangeAsync(int tenant, Dictionary<string, int> quantity);
|
||||
int GetPaymentDelay();
|
||||
Task<Tariff> GetBillingInfoAsync(int? tenant = null, int? id = null);
|
||||
bool IsConfigured();
|
||||
}
|
||||
|
@ -97,15 +97,23 @@ public class LicenseConverter : System.Text.Json.Serialization.JsonConverter<obj
|
||||
|
||||
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (typeToConvert == typeof(int) && reader.TokenType == JsonTokenType.String)
|
||||
if (typeToConvert == typeof(int))
|
||||
{
|
||||
var i = reader.GetString();
|
||||
if (!int.TryParse(i, out var result))
|
||||
if (reader.TokenType == JsonTokenType.String)
|
||||
{
|
||||
return 0;
|
||||
var i = reader.GetString();
|
||||
if (!int.TryParse(i, out var result))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
else if (reader.TokenType == JsonTokenType.Number)
|
||||
{
|
||||
return reader.GetInt32();
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
if (typeToConvert == typeof(bool))
|
||||
|
@ -197,14 +197,20 @@ public class LicenseReader
|
||||
|
||||
var quota = new TenantQuota(-1000)
|
||||
{
|
||||
CountUser = _constants.MaxEveryoneCount,
|
||||
Name = "license",
|
||||
Trial = license.Trial,
|
||||
Audit = true,
|
||||
Ldap = true,
|
||||
Sso = true,
|
||||
WhiteLabel = true,
|
||||
ThirdParty = true,
|
||||
AutoBackupRestore = true,
|
||||
Oauth = true,
|
||||
ContentSearch = true,
|
||||
MaxFileSize = defaultQuota.MaxFileSize,
|
||||
MaxTotalSize = defaultQuota.MaxTotalSize,
|
||||
Name = "license",
|
||||
DocsEdition = true,
|
||||
Customization = license.Customization,
|
||||
Update = true,
|
||||
Trial = license.Trial
|
||||
Customization = license.Customization
|
||||
};
|
||||
|
||||
await _tenantManager.SaveTenantQuotaAsync(quota);
|
||||
@ -215,7 +221,7 @@ public class LicenseReader
|
||||
DueDate = license.DueDate,
|
||||
};
|
||||
|
||||
await _tariffService.SetTariffAsync(-1, tariff);
|
||||
await _tariffService.SetTariffAsync(Tenant.DefaultTenant, tariff, new List<TenantQuota> { quota });
|
||||
}
|
||||
|
||||
private void LogError(Exception error)
|
||||
|
@ -26,6 +26,34 @@
|
||||
|
||||
namespace ASC.Core.Billing;
|
||||
|
||||
[Singletone]
|
||||
public class TenantExtraConfig
|
||||
{
|
||||
private readonly CoreBaseSettings _coreBaseSettings;
|
||||
private readonly LicenseReaderConfig _licenseReaderConfig;
|
||||
|
||||
public TenantExtraConfig(CoreBaseSettings coreBaseSettings, LicenseReaderConfig licenseReaderConfig)
|
||||
{
|
||||
_coreBaseSettings = coreBaseSettings;
|
||||
_licenseReaderConfig = licenseReaderConfig;
|
||||
}
|
||||
|
||||
public bool Saas
|
||||
{
|
||||
get { return !_coreBaseSettings.Standalone; }
|
||||
}
|
||||
|
||||
public bool Enterprise
|
||||
{
|
||||
get { return _coreBaseSettings.Standalone && !string.IsNullOrEmpty(_licenseReaderConfig.LicensePath); }
|
||||
}
|
||||
|
||||
public bool Opensource
|
||||
{
|
||||
get { return _coreBaseSettings.Standalone && string.IsNullOrEmpty(_licenseReaderConfig.LicensePath); }
|
||||
}
|
||||
}
|
||||
|
||||
[Singletone]
|
||||
public class TariffServiceStorage
|
||||
{
|
||||
@ -33,15 +61,17 @@ public class TariffServiceStorage
|
||||
private static readonly TimeSpan _standaloneCacheExpiration = TimeSpan.FromMinutes(15);
|
||||
internal readonly ICache Cache;
|
||||
private readonly CoreBaseSettings _coreBaseSettings;
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
internal readonly ICacheNotify<TariffCacheItem> Notify;
|
||||
private TimeSpan _cacheExpiration;
|
||||
|
||||
public TariffServiceStorage(ICacheNotify<TariffCacheItem> notify, ICache cache, CoreBaseSettings coreBaseSettings)
|
||||
public TariffServiceStorage(ICacheNotify<TariffCacheItem> notify, ICache cache, CoreBaseSettings coreBaseSettings, IServiceProvider serviceProvider)
|
||||
{
|
||||
_cacheExpiration = _defaultCacheExpiration;
|
||||
|
||||
Cache = cache;
|
||||
_coreBaseSettings = coreBaseSettings;
|
||||
_serviceProvider = serviceProvider;
|
||||
Notify = notify;
|
||||
Notify.Subscribe((i) =>
|
||||
{
|
||||
@ -54,23 +84,14 @@ public class TariffServiceStorage
|
||||
|
||||
Notify.Subscribe((i) =>
|
||||
{
|
||||
Cache.Insert(TariffService.GetTariffCacheKey(i.TenantId), i.TariffId.ToString(), DateTime.UtcNow.Add(GetCacheExpiration()));
|
||||
}, CacheNotifyAction.Insert);
|
||||
|
||||
//TODO: Change code of WCF -> not supported in .NET standard/.Net Core
|
||||
/*try
|
||||
{
|
||||
var section = (ClientSection)ConfigurationManager.GetSection("system.serviceModel/client");
|
||||
if (section != null)
|
||||
using var scope = _serviceProvider.CreateScope();
|
||||
var tariffService = scope.ServiceProvider.GetService<ITariffService>();
|
||||
var tariff = tariffService.GetBillingInfoAsync(i.TenantId, i.TariffId).Result;
|
||||
if (tariff != null)
|
||||
{
|
||||
billingConfigured = section.Endpoints.Cast<ChannelEndpointElement>()
|
||||
.Any(e => e.Contract == typeof(IService).FullName);
|
||||
InsertToCache(i.TenantId, tariff);
|
||||
}
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
log.Error(err);
|
||||
}*/
|
||||
}, CacheNotifyAction.Insert);
|
||||
}
|
||||
|
||||
private TimeSpan GetCacheExpiration()
|
||||
@ -82,6 +103,11 @@ public class TariffServiceStorage
|
||||
return _cacheExpiration;
|
||||
}
|
||||
|
||||
public void InsertToCache(int tenantId, Tariff tariff)
|
||||
{
|
||||
Cache.Insert(TariffService.GetTariffCacheKey(tenantId), tariff, DateTime.UtcNow.Add(GetCacheExpiration()));
|
||||
}
|
||||
|
||||
public void ResetCacheExpiration()
|
||||
{
|
||||
if (_coreBaseSettings.Standalone)
|
||||
@ -108,6 +134,7 @@ public class TariffService : ITariffService
|
||||
private readonly TariffServiceStorage _tariffServiceStorage;
|
||||
private readonly BillingClient _billingClient;
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
private readonly TenantExtraConfig _tenantExtraConfig;
|
||||
|
||||
//private readonly int _activeUsersMin;
|
||||
//private readonly int _activeUsersMax;
|
||||
@ -126,8 +153,8 @@ public class TariffService : ITariffService
|
||||
TariffServiceStorage tariffServiceStorage,
|
||||
ILogger<TariffService> logger,
|
||||
BillingClient billingClient,
|
||||
IServiceProvider serviceProvider)
|
||||
|
||||
IServiceProvider serviceProvider,
|
||||
TenantExtraConfig tenantExtraConfig)
|
||||
{
|
||||
_logger = logger;
|
||||
_quotaService = quotaService;
|
||||
@ -136,9 +163,10 @@ public class TariffService : ITariffService
|
||||
_tariffServiceStorage = tariffServiceStorage;
|
||||
_billingClient = billingClient;
|
||||
_serviceProvider = serviceProvider;
|
||||
_tenantExtraConfig = tenantExtraConfig;
|
||||
_coreBaseSettings = coreBaseSettings;
|
||||
|
||||
var paymentConfiguration = configuration.GetSection("core:payment").Get<PaymentConfiguration>();
|
||||
var paymentConfiguration = configuration.GetSection("core:payment").Get<PaymentConfiguration>() ?? new PaymentConfiguration();
|
||||
_paymentDelay = paymentConfiguration.Delay;
|
||||
_trialEnabled = paymentConfiguration.TrialEnabled;
|
||||
|
||||
@ -155,17 +183,13 @@ public class TariffService : ITariffService
|
||||
tenantId = -1;
|
||||
}
|
||||
|
||||
var tariff = refresh ? null : await GetTariffFromCacheAsync(tenantId);
|
||||
var tariff = refresh ? null : _cache.Get<Tariff>(GetTariffCacheKey(tenantId));
|
||||
|
||||
if (tariff == null)
|
||||
{
|
||||
tariff = await GetBillingInfoAsync(tenantId) ?? await CreateDefaultAsync();
|
||||
tariff = await CalculateTariffAsync(tenantId, tariff);
|
||||
|
||||
if (string.IsNullOrEmpty(_cache.Get<string>(GetTariffNeedToUpdateCacheKey(tenantId))))
|
||||
{
|
||||
UpdateCache(tariff.Id);
|
||||
}
|
||||
_tariffServiceStorage.InsertToCache(tenantId, tariff);
|
||||
|
||||
if (_billingClient.Configured && withRequestToPaymentSystem)
|
||||
{
|
||||
@ -261,6 +285,28 @@ public class TariffService : ITariffService
|
||||
UpdateCache(tariff.Id);
|
||||
}
|
||||
}
|
||||
else if (_tenantExtraConfig.Enterprise && tariff.Id == 0 && tariff.LicenseDate == DateTime.MaxValue)
|
||||
{
|
||||
var defaultQuota = await _quotaService.GetTenantQuotaAsync(Tenant.DefaultTenant);
|
||||
|
||||
var quota = new TenantQuota(defaultQuota)
|
||||
{
|
||||
Name = "start_trial",
|
||||
Trial = true,
|
||||
TenantId = -1000
|
||||
};
|
||||
|
||||
await _quotaService.SaveTenantQuotaAsync(quota);
|
||||
|
||||
tariff = new Tariff
|
||||
{
|
||||
Quotas = new List<Quota> { new Quota(quota.TenantId, 1) },
|
||||
DueDate = DateTime.UtcNow.AddDays(DefaultTrialPeriod)
|
||||
};
|
||||
|
||||
await SetTariffAsync(Tenant.DefaultTenant, tariff, new List<TenantQuota> { quota });
|
||||
UpdateCache(tariff.Id);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -343,13 +389,12 @@ public class TariffService : ITariffService
|
||||
}
|
||||
|
||||
|
||||
public async Task SetTariffAsync(int tenantId, Tariff tariff)
|
||||
public async Task SetTariffAsync(int tenantId, Tariff tariff, List<TenantQuota> quotas = null)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(tariff);
|
||||
|
||||
List<TenantQuota> quotas = null;
|
||||
if (tariff.Quotas == null ||
|
||||
(quotas = await tariff.Quotas.ToAsyncEnumerable().SelectAwait(async q => await _quotaService.GetTenantQuotaAsync(q.Id)).ToListAsync()).Any(q => q == null))
|
||||
(quotas ??= await tariff.Quotas.ToAsyncEnumerable().SelectAwait(async q => await _quotaService.GetTenantQuotaAsync(q.Id)).ToListAsync()).Any(q => q == null))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -359,28 +404,18 @@ public class TariffService : ITariffService
|
||||
if (quotas.Any(q => q.Trial))
|
||||
{
|
||||
// reset trial date
|
||||
var tenant = await _tenantService.GetTenantAsync(tenantId);
|
||||
if (tenant != null)
|
||||
if (tenantId != Tenant.DefaultTenant)
|
||||
{
|
||||
tenant.VersionChanged = DateTime.UtcNow;
|
||||
await _tenantService.SaveTenantAsync(_coreSettings, tenant);
|
||||
var tenant = await _tenantService.GetTenantAsync(tenantId);
|
||||
if (tenant != null)
|
||||
{
|
||||
tenant.VersionChanged = DateTime.UtcNow;
|
||||
await _tenantService.SaveTenantAsync(_coreSettings, tenant);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task<Tariff> GetTariffFromCacheAsync(int tenantId)
|
||||
{
|
||||
var id = _cache.Get<string>(GetTariffCacheKey(tenantId));
|
||||
|
||||
if (!int.TryParse(id, out var tariffId))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return await GetBillingInfoAsync(tenantId, tariffId);
|
||||
}
|
||||
|
||||
|
||||
internal static string GetTariffCacheKey(int tenantId)
|
||||
{
|
||||
return $"{tenantId}:tariff";
|
||||
@ -660,13 +695,13 @@ public class TariffService : ITariffService
|
||||
try
|
||||
{
|
||||
url = _billingClient.GetAccountLink(await _coreSettings.GetKeyAsync(tenant), backUrl);
|
||||
_cache.Insert(key, url, DateTime.UtcNow.Add(TimeSpan.FromMinutes(10)));
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
LogError(error);
|
||||
}
|
||||
}
|
||||
_cache.Insert(key, url, DateTime.UtcNow.Add(TimeSpan.FromMinutes(10)));
|
||||
}
|
||||
if (!string.IsNullOrEmpty(url))
|
||||
{
|
||||
@ -677,7 +712,7 @@ public class TariffService : ITariffService
|
||||
}
|
||||
|
||||
|
||||
private async Task<Tariff> GetBillingInfoAsync(int? tenant = null, int? id = null)
|
||||
public async Task<Tariff> GetBillingInfoAsync(int? tenant = null, int? id = null)
|
||||
{
|
||||
await using var coreDbContext = _dbContextFactory.CreateDbContext();
|
||||
|
||||
@ -758,12 +793,16 @@ public class TariffService : ITariffService
|
||||
|
||||
if (inserted)
|
||||
{
|
||||
var t = await _tenantService.GetTenantAsync(tenant);
|
||||
if (t != null)
|
||||
if (tenant != Tenant.DefaultTenant)
|
||||
{
|
||||
// update tenant.LastModified to flush cache in documents
|
||||
await _tenantService.SaveTenantAsync(_coreSettings, t);
|
||||
var t = await _tenantService.GetTenantAsync(tenant);
|
||||
if (t != null)
|
||||
{
|
||||
// update tenant.LastModified to flush cache in documents
|
||||
await _tenantService.SaveTenantAsync(_coreSettings, t);
|
||||
}
|
||||
}
|
||||
|
||||
ClearCache(tenant);
|
||||
|
||||
await NotifyWebSocketAsync(currentTariff, tariffInfo);
|
||||
@ -839,6 +878,40 @@ public class TariffService : ITariffService
|
||||
tariff.DueDate != DateTime.MaxValue && tariff.DueDate.Date < DateTime.UtcNow.Date.AddDays(-delay))
|
||||
{
|
||||
tariff.State = TariffState.NotPaid;
|
||||
|
||||
if (_coreBaseSettings.Standalone)
|
||||
{
|
||||
TenantQuota updatedQuota = null;
|
||||
|
||||
var tenantQuotas = await _quotaService.GetTenantQuotasAsync();
|
||||
|
||||
foreach (var quota in tariff.Quotas)
|
||||
{
|
||||
var tenantQuota = tenantQuotas.SingleOrDefault(q => q.TenantId == quota.Id);
|
||||
|
||||
if (tenantQuota != null)
|
||||
{
|
||||
tenantQuota *= quota.Quantity;
|
||||
updatedQuota += tenantQuota;
|
||||
}
|
||||
}
|
||||
|
||||
var defaultQuota = await _quotaService.GetTenantQuotaAsync(Tenant.DefaultTenant);
|
||||
defaultQuota.Name = "overdue";
|
||||
defaultQuota.Features = updatedQuota.Features;
|
||||
|
||||
await _quotaService.SaveTenantQuotaAsync(defaultQuota);
|
||||
|
||||
var unlimTariff = await CreateDefaultAsync();
|
||||
unlimTariff.LicenseDate = tariff.DueDate;
|
||||
unlimTariff.DueDate = tariff.DueDate;
|
||||
unlimTariff.Quotas = new List<Quota>()
|
||||
{
|
||||
new Quota(defaultQuota.TenantId, 1)
|
||||
};
|
||||
|
||||
tariff = unlimTariff;
|
||||
}
|
||||
}
|
||||
|
||||
return tariff;
|
||||
@ -878,11 +951,10 @@ public class TariffService : ITariffService
|
||||
if (_trialEnabled)
|
||||
{
|
||||
toAdd = allQuotas.FirstOrDefault(r => r.Trial && !r.Custom);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
toAdd = allQuotas.FirstOrDefault(r => r.Free && !r.Custom);
|
||||
toAdd = allQuotas.FirstOrDefault(r => _coreBaseSettings.Standalone || r.Free && !r.Custom);
|
||||
}
|
||||
|
||||
if (toAdd != null)
|
||||
@ -969,6 +1041,11 @@ public class TariffService : ITariffService
|
||||
{
|
||||
return _paymentDelay;
|
||||
}
|
||||
|
||||
public bool IsConfigured()
|
||||
{
|
||||
return _billingClient.Configured;
|
||||
}
|
||||
}
|
||||
|
||||
static file class Queries
|
||||
|
@ -40,6 +40,8 @@ public class SmtpSettings
|
||||
public bool EnableSSL { get; set; }
|
||||
public bool EnableAuth { get; set; }
|
||||
public bool IsDefaultSettings { get; internal set; }
|
||||
public bool UseNtlm { get; set; }
|
||||
|
||||
public static readonly SmtpSettings Empty = new SmtpSettings();
|
||||
|
||||
private SmtpSettings() { }
|
||||
@ -132,10 +134,12 @@ public class SmtpSettings
|
||||
{
|
||||
settings.SetCredentials(credentialsUserName, credentialsUserPassword, credentialsDomain);
|
||||
settings.EnableAuth = true;
|
||||
settings.UseNtlm = 8 < props.Length && !string.IsNullOrEmpty(props[8]) && Convert.ToBoolean(props[8]);
|
||||
}
|
||||
else
|
||||
{
|
||||
settings.EnableAuth = false;
|
||||
settings.UseNtlm = false;
|
||||
}
|
||||
|
||||
return settings;
|
||||
@ -151,6 +155,7 @@ public class SmtpSettings
|
||||
Port.ToString(),
|
||||
HttpUtility.UrlEncode(SenderAddress),
|
||||
HttpUtility.UrlEncode(SenderDisplayName),
|
||||
EnableSSL.ToString());
|
||||
EnableSSL.ToString(),
|
||||
UseNtlm.ToString());
|
||||
}
|
||||
}
|
||||
|
@ -334,7 +334,7 @@ public class CoreConfiguration
|
||||
return _personalMaxSpace.Value;
|
||||
}
|
||||
|
||||
public async Task<SmtpSettings> GetSmtpSettingsAsync()
|
||||
public async Task<SmtpSettings> GetDefaultSmtpSettingsAsync()
|
||||
{
|
||||
var isDefaultSettings = false;
|
||||
var tenant = await _tenantManager.GetCurrentTenantAsync(false);
|
||||
|
@ -455,54 +455,58 @@ public class UserManager
|
||||
new Uri(_cache.Get<string>("REWRITE_URL" + tenant.Id)).ToString() : tenant.GetTenantDomain(_coreSettings);
|
||||
|
||||
var rootAuthorization = _cardDavAddressbook.GetSystemAuthorization();
|
||||
var allUserEmails = (await GetDavUserEmailsAsync()).ToList();
|
||||
|
||||
if (oldUserData != null && oldUserData.Status != newUser.Status && newUser.Status == EmployeeStatus.Terminated)
|
||||
if (rootAuthorization != null)
|
||||
{
|
||||
var userAuthorization = oldUserData.Email.ToLower() + ":" + _instanceCrypto.Encrypt(oldUserData.Email);
|
||||
var requestUrlBook = _cardDavAddressbook.GetRadicaleUrl(myUri, newUser.Email.ToLower(), true, true);
|
||||
var collection = await _cardDavAddressbook.GetCollection(requestUrlBook, userAuthorization, myUri.ToString());
|
||||
if (collection.Completed && collection.StatusCode != 404)
|
||||
var allUserEmails = (await GetDavUserEmailsAsync()).ToList();
|
||||
|
||||
if (oldUserData != null && oldUserData.Status != newUser.Status && newUser.Status == EmployeeStatus.Terminated)
|
||||
{
|
||||
await _cardDavAddressbook.Delete(myUri, newUser.Id, newUser.Email, tenant.Id);
|
||||
}
|
||||
foreach (var email in allUserEmails)
|
||||
{
|
||||
var requestUrlItem = _cardDavAddressbook.GetRadicaleUrl(myUri.ToString(), email.ToLower(), true, true, itemID: newUser.Id.ToString());
|
||||
try
|
||||
var userAuthorization = oldUserData.Email.ToLower() + ":" + _instanceCrypto.Encrypt(oldUserData.Email);
|
||||
var requestUrlBook = _cardDavAddressbook.GetRadicaleUrl(myUri, newUser.Email.ToLower(), true, true);
|
||||
var collection = await _cardDavAddressbook.GetCollection(requestUrlBook, userAuthorization, myUri.ToString());
|
||||
if (collection.Completed && collection.StatusCode != 404)
|
||||
{
|
||||
var davItemRequest = new DavRequest()
|
||||
await _cardDavAddressbook.Delete(myUri, newUser.Id, newUser.Email, tenant.Id);
|
||||
}
|
||||
foreach (var email in allUserEmails)
|
||||
{
|
||||
var requestUrlItem = _cardDavAddressbook.GetRadicaleUrl(myUri.ToString(), email.ToLower(), true, true, itemID: newUser.Id.ToString());
|
||||
try
|
||||
{
|
||||
Url = requestUrlItem,
|
||||
Authorization = rootAuthorization,
|
||||
Header = myUri
|
||||
};
|
||||
await _radicaleClient.RemoveAsync(davItemRequest).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_log.ErrorWithException(ex);
|
||||
var davItemRequest = new DavRequest()
|
||||
{
|
||||
Url = requestUrlItem,
|
||||
Authorization = rootAuthorization,
|
||||
Header = myUri
|
||||
};
|
||||
await _radicaleClient.RemoveAsync(davItemRequest).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_log.ErrorWithException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
else
|
||||
{
|
||||
var cardDavUser = new CardDavItem(u.Id, u.FirstName, u.LastName, u.UserName, u.BirthDate, u.Sex, u.Title, u.Email, u.ContactsList, u.MobilePhone);
|
||||
try
|
||||
{
|
||||
await _cardDavAddressbook.UpdateItemForAllAddBooks(allUserEmails, myUri, cardDavUser, await _tenantManager.GetCurrentTenantIdAsync(), oldUserData != null && oldUserData.Email != newUser.Email ? oldUserData.Email : null);
|
||||
var cardDavUser = new CardDavItem(u.Id, u.FirstName, u.LastName, u.UserName, u.BirthDate, u.Sex, u.Title, u.Email, u.ContactsList, u.MobilePhone);
|
||||
try
|
||||
{
|
||||
await _cardDavAddressbook.UpdateItemForAllAddBooks(allUserEmails, myUri, cardDavUser, await _tenantManager.GetCurrentTenantIdAsync(), oldUserData != null && oldUserData.Email != newUser.Email ? oldUserData.Email : null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_log.ErrorWithException(ex);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_log.ErrorWithException(ex);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_log.ErrorWithException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -544,38 +548,41 @@ public class UserManager
|
||||
new Uri(_cache.Get<string>("REWRITE_URL" + tenant.Id)).ToString() : tenant.GetTenantDomain(_coreSettings);
|
||||
var davUsersEmails = await GetDavUserEmailsAsync();
|
||||
var requestUrlBook = _cardDavAddressbook.GetRadicaleUrl(myUri, delUser.Email.ToLower(), true, true);
|
||||
var addBookCollection = await _cardDavAddressbook.GetCollection(requestUrlBook, userAuthorization, myUri.ToString());
|
||||
|
||||
|
||||
if (addBookCollection.Completed && addBookCollection.StatusCode != 404)
|
||||
|
||||
if(rootAuthorization != null)
|
||||
{
|
||||
var davbookRequest = new DavRequest()
|
||||
var addBookCollection = await _cardDavAddressbook.GetCollection(requestUrlBook, userAuthorization, myUri.ToString());
|
||||
if (addBookCollection.Completed && addBookCollection.StatusCode != 404)
|
||||
{
|
||||
Url = requestUrlBook,
|
||||
Authorization = rootAuthorization,
|
||||
Header = myUri
|
||||
};
|
||||
await _radicaleClient.RemoveAsync(davbookRequest).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
foreach (var email in davUsersEmails)
|
||||
{
|
||||
var requestUrlItem = _cardDavAddressbook.GetRadicaleUrl(myUri.ToString(), email.ToLower(), true, true, itemID: delUser.Id.ToString());
|
||||
try
|
||||
{
|
||||
var davItemRequest = new DavRequest()
|
||||
var davbookRequest = new DavRequest()
|
||||
{
|
||||
Url = requestUrlItem,
|
||||
Url = requestUrlBook,
|
||||
Authorization = rootAuthorization,
|
||||
Header = myUri
|
||||
};
|
||||
await _radicaleClient.RemoveAsync(davItemRequest).ConfigureAwait(false);
|
||||
await _radicaleClient.RemoveAsync(davbookRequest).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
foreach (var email in davUsersEmails)
|
||||
{
|
||||
_log.ErrorWithException(ex);
|
||||
var requestUrlItem = _cardDavAddressbook.GetRadicaleUrl(myUri.ToString(), email.ToLower(), true, true, itemID: delUser.Id.ToString());
|
||||
try
|
||||
{
|
||||
var davItemRequest = new DavRequest()
|
||||
{
|
||||
Url = requestUrlItem,
|
||||
Authorization = rootAuthorization,
|
||||
Header = myUri
|
||||
};
|
||||
await _radicaleClient.RemoveAsync(davItemRequest).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_log.ErrorWithException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -46,6 +46,6 @@ public class WebstudioDbContext : DbContext
|
||||
.AddWebstudioUserVisit()
|
||||
.AddDbWebstudioIndex()
|
||||
.AddDbTenant()
|
||||
.AddDbFunction();
|
||||
.AddDbFunctions();
|
||||
}
|
||||
}
|
||||
|
@ -1,36 +1,41 @@
|
||||
// (c) Copyright Ascensio System SIA 2010-2022
|
||||
//
|
||||
// This program is a free software product.
|
||||
// You can redistribute it and/or modify it under the terms
|
||||
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
|
||||
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
|
||||
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
|
||||
// any third-party rights.
|
||||
//
|
||||
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
|
||||
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
|
||||
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
//
|
||||
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
|
||||
//
|
||||
// The interactive user interfaces in modified source and object code versions of the Program must
|
||||
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
|
||||
//
|
||||
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
|
||||
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
|
||||
// trademark law for use of our trademarks.
|
||||
//
|
||||
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
|
||||
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
|
||||
namespace ASC.Core.Common.EF;
|
||||
|
||||
public static class JsonExtensions
|
||||
{
|
||||
public static string JsonValue(string column, [NotParameterized] string path)
|
||||
{
|
||||
//not using
|
||||
return column + path;
|
||||
}
|
||||
}
|
||||
// (c) Copyright Ascensio System SIA 2010-2022
|
||||
//
|
||||
// This program is a free software product.
|
||||
// You can redistribute it and/or modify it under the terms
|
||||
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
|
||||
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
|
||||
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
|
||||
// any third-party rights.
|
||||
//
|
||||
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
|
||||
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
|
||||
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
//
|
||||
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
|
||||
//
|
||||
// The interactive user interfaces in modified source and object code versions of the Program must
|
||||
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
|
||||
//
|
||||
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
|
||||
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
|
||||
// trademark law for use of our trademarks.
|
||||
//
|
||||
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
|
||||
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
|
||||
namespace ASC.Core.Common.EF;
|
||||
|
||||
public static class DbFunctionsExtension
|
||||
{
|
||||
public static string SubstringIndex(string str, char delimiter, int number)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public static string JsonValue(string column, [NotParameterized] string path)
|
||||
{
|
||||
//not using
|
||||
return column + path;
|
||||
}
|
||||
}
|
@ -82,10 +82,10 @@ public class ModelBuilderWrapper
|
||||
return ModelBuilder.Entity<T>();
|
||||
}
|
||||
|
||||
public void AddDbFunction()
|
||||
public void AddDbFunctions()
|
||||
{
|
||||
ModelBuilder
|
||||
.HasDbFunction(typeof(JsonExtensions).GetMethod(nameof(JsonExtensions.JsonValue)))
|
||||
.HasDbFunction(typeof(DbFunctionsExtension).GetMethod(nameof(DbFunctionsExtension.JsonValue))!)
|
||||
.HasTranslation(e =>
|
||||
{
|
||||
var res = new List<SqlExpression>();
|
||||
@ -104,5 +104,21 @@ public class ModelBuilderWrapper
|
||||
|
||||
return new SqlFunctionExpression("JSON_EXTRACT", res, true, res.Select((SqlExpression a) => false), typeof(string), null);
|
||||
});
|
||||
|
||||
switch (Provider)
|
||||
{
|
||||
case Provider.MySql:
|
||||
ModelBuilder
|
||||
.HasDbFunction(typeof(DbFunctionsExtension).GetMethod(nameof(DbFunctionsExtension.SubstringIndex), new[] { typeof(string), typeof(char), typeof(int) })!)
|
||||
.HasName("SUBSTRING_INDEX");
|
||||
break;
|
||||
case Provider.PostgreSql:
|
||||
ModelBuilder
|
||||
.HasDbFunction(typeof(DbFunctionsExtension).GetMethod(nameof(DbFunctionsExtension.SubstringIndex), new[] { typeof(string), typeof(char), typeof(int) })!)
|
||||
.HasName("SPLIT_PART");
|
||||
break;
|
||||
default:
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -52,7 +52,9 @@ public static class DbQuotaExtension
|
||||
{
|
||||
modelBuilder
|
||||
.Add(MySqlAddDbQuota, Provider.MySql)
|
||||
.Add(PgSqlAddDbQuota, Provider.PostgreSql)
|
||||
.Add(PgSqlAddDbQuota, Provider.PostgreSql);
|
||||
|
||||
modelBuilder
|
||||
.HasData(
|
||||
new DbQuota
|
||||
{
|
||||
|
@ -93,7 +93,7 @@ public class GeolocationHelper
|
||||
|
||||
if (!ip.Equals(IPAddress.Loopback))
|
||||
{
|
||||
_logger.DebugRemoteIpAddress(ip.ToString());
|
||||
_logger.TraceRemoteIpAddress(ip.ToString());
|
||||
|
||||
return await GetIPGeolocationAsync(ip);
|
||||
}
|
||||
|
@ -42,8 +42,6 @@ public class HostedSolution
|
||||
internal SettingsManager SettingsManager { get; set; }
|
||||
internal CoreSettings CoreSettings { get; set; }
|
||||
|
||||
public string Region { get; private set; }
|
||||
|
||||
public HostedSolution(ITenantService tenantService,
|
||||
IUserService userService,
|
||||
IQuotaService quotaService,
|
||||
@ -65,14 +63,9 @@ public class HostedSolution
|
||||
CoreSettings = coreSettings;
|
||||
}
|
||||
|
||||
public void Init(string region)
|
||||
{
|
||||
Region = region;
|
||||
}
|
||||
|
||||
public async Task<List<Tenant>> GetTenantsAsync(DateTime from)
|
||||
{
|
||||
return (await TenantService.GetTenantsAsync(from)).Select(AddRegion).ToList();
|
||||
return (await TenantService.GetTenantsAsync(from)).ToList();
|
||||
}
|
||||
|
||||
public async Task<List<Tenant>> FindTenantsAsync(string login, string passwordHash = null)
|
||||
@ -82,22 +75,22 @@ public class HostedSolution
|
||||
throw new SecurityException("Invalid login or password.");
|
||||
}
|
||||
|
||||
return (await TenantService.GetTenantsAsync(login, passwordHash)).Select(AddRegion).ToList();
|
||||
return (await TenantService.GetTenantsAsync(login, passwordHash)).ToList();
|
||||
}
|
||||
|
||||
public async Task<Tenant> GetTenantAsync(string domain)
|
||||
{
|
||||
return AddRegion(await TenantService.GetTenantAsync(domain));
|
||||
return await TenantService.GetTenantAsync(domain);
|
||||
}
|
||||
|
||||
public async Task<Tenant> GetTenantAsync(int id)
|
||||
{
|
||||
return AddRegion(await TenantService.GetTenantAsync(id));
|
||||
return await TenantService.GetTenantAsync(id);
|
||||
}
|
||||
|
||||
public Tenant GetTenant(int id)
|
||||
{
|
||||
return AddRegion(TenantService.GetTenant(id));
|
||||
return TenantService.GetTenant(id);
|
||||
}
|
||||
|
||||
public async Task CheckTenantAddressAsync(string address)
|
||||
@ -242,14 +235,4 @@ public class HostedSolution
|
||||
{
|
||||
return await UserService.GetUsersAllTenantsAsync(userIds);
|
||||
}
|
||||
|
||||
private Tenant AddRegion(Tenant tenant)
|
||||
{
|
||||
if (tenant != null)
|
||||
{
|
||||
tenant.HostedRegion = Region;
|
||||
}
|
||||
|
||||
return tenant;
|
||||
}
|
||||
}
|
||||
|
@ -27,8 +27,8 @@
|
||||
namespace ASC.Core.Common.Log;
|
||||
internal static partial class GeolocationHelperLogger
|
||||
{
|
||||
[LoggerMessage(Level = LogLevel.Debug, Message = "This is remote ip address {remoteIp}")]
|
||||
public static partial void DebugRemoteIpAddress(this ILogger<GeolocationHelper> logger, string remoteIp);
|
||||
[LoggerMessage(Level = LogLevel.Trace, Message = "This is remote ip address {remoteIp}")]
|
||||
public static partial void TraceRemoteIpAddress(this ILogger<GeolocationHelper> logger, string remoteIp);
|
||||
|
||||
[LoggerMessage(Level = LogLevel.Error, Message = "GetIPGeolocation")]
|
||||
public static partial void ErrorGetIPGeolocation(this ILogger<GeolocationHelper> logger, Exception exception);
|
||||
|
@ -48,6 +48,6 @@ public class MessagesContext : DbContext
|
||||
.AddUser()
|
||||
.AddWebstudioSettings()
|
||||
.AddDbTenant()
|
||||
.AddDbFunction();
|
||||
.AddDbFunctions();
|
||||
}
|
||||
}
|
||||
|
@ -161,11 +161,6 @@ public class MultiRegionHostedSolution
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetRegions()
|
||||
{
|
||||
return GetRegionServices().Select(s => s.Region).ToList();
|
||||
}
|
||||
|
||||
private IEnumerable<HostedSolution> GetRegionServices()
|
||||
{
|
||||
return _regions.Where(x => !string.IsNullOrEmpty(x.Key))
|
||||
|
@ -97,7 +97,7 @@ public class EmailSenderSinkMessageCreator : SinkMessageCreator
|
||||
var tenant = await _tenantManager.GetCurrentTenantAsync(false);
|
||||
m.TenantId = tenant == null ? Tenant.DefaultTenant : tenant.Id;
|
||||
|
||||
var settings = await _coreConfiguration.GetSmtpSettingsAsync();
|
||||
var settings = await _coreConfiguration.GetDefaultSmtpSettingsAsync();
|
||||
var from = MailAddressUtils.Create(settings.SenderAddress, settings.SenderDisplayName);
|
||||
var fromTag = message.Arguments.FirstOrDefault(x => x.Tag.Equals("MessageFrom"));
|
||||
if ((settings.IsDefaultSettings || string.IsNullOrEmpty(settings.SenderDisplayName)) &&
|
||||
|
@ -49,7 +49,7 @@ class FirebaseApiKey
|
||||
{
|
||||
get
|
||||
{
|
||||
return _configuration["firebase:projectId"] ?? "";
|
||||
return _configuration["firebase-mobile:projectId"] ?? "";
|
||||
}
|
||||
}
|
||||
[JsonProperty("private_key_id")]
|
||||
@ -57,7 +57,7 @@ class FirebaseApiKey
|
||||
{
|
||||
get
|
||||
{
|
||||
return _configuration["firebase:privateKeyId"] ?? "";
|
||||
return _configuration["firebase-mobile:privateKeyId"] ?? "";
|
||||
}
|
||||
}
|
||||
[JsonProperty("private_key")]
|
||||
@ -65,7 +65,7 @@ class FirebaseApiKey
|
||||
{
|
||||
get
|
||||
{
|
||||
return _configuration["firebase:privateKey"] ?? "";
|
||||
return _configuration["firebase-mobile:privateKey"] ?? "";
|
||||
}
|
||||
}
|
||||
[JsonProperty("client_email")]
|
||||
@ -73,7 +73,7 @@ class FirebaseApiKey
|
||||
{
|
||||
get
|
||||
{
|
||||
return _configuration["firebase:clientEmail"] ?? "";
|
||||
return _configuration["firebase-mobile:clientEmail"] ?? "";
|
||||
}
|
||||
}
|
||||
[JsonProperty("client_id")]
|
||||
@ -81,7 +81,7 @@ class FirebaseApiKey
|
||||
{
|
||||
get
|
||||
{
|
||||
return _configuration["firebase:clientId"] ?? "";
|
||||
return _configuration["firebase-mobile:clientId"] ?? "";
|
||||
}
|
||||
}
|
||||
[JsonProperty("auth_uri")]
|
||||
@ -113,7 +113,7 @@ class FirebaseApiKey
|
||||
{
|
||||
get
|
||||
{
|
||||
return _configuration["firebase:x509CertUrl"] ?? "";
|
||||
return _configuration["firebase-mobile:x509CertUrl"] ?? "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,8 +24,6 @@
|
||||
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
|
||||
using Message = Amazon.SimpleEmail.Model.Message;
|
||||
|
||||
namespace ASC.Core.Notify.Senders;
|
||||
|
||||
[Singletone]
|
||||
@ -69,7 +67,7 @@ public class AWSSender : SmtpSender, IDisposable
|
||||
await tenantManager.SetCurrentTenantAsync(m.TenantId);
|
||||
|
||||
var configuration = scope.ServiceProvider.GetService<CoreConfiguration>();
|
||||
if (!(await configuration.GetSmtpSettingsAsync()).IsDefaultSettings)
|
||||
if (!(await configuration.GetDefaultSmtpSettingsAsync()).IsDefaultSettings)
|
||||
{
|
||||
result = await base.SendAsync(m);
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ public class SmtpSender : INotifySender
|
||||
private int _port;
|
||||
private bool _ssl;
|
||||
private ICredentials _credentials;
|
||||
private SaslMechanism _saslMechanism;
|
||||
protected bool _useCoreSettings;
|
||||
const int NetworkTimeout = 30000;
|
||||
|
||||
@ -84,6 +85,10 @@ public class SmtpSender : INotifySender
|
||||
{
|
||||
smtpClient.Authenticate(_credentials);
|
||||
}
|
||||
else if (_saslMechanism != null)
|
||||
{
|
||||
smtpClient.Authenticate(_saslMechanism);
|
||||
}
|
||||
|
||||
smtpClient.Send(mail);
|
||||
result = NoticeSendResult.OK;
|
||||
@ -154,7 +159,7 @@ public class SmtpSender : INotifySender
|
||||
|
||||
private async Task BuildSmtpSettingsAsync(CoreConfiguration configuration)
|
||||
{
|
||||
if ((await configuration.GetSmtpSettingsAsync()).IsDefaultSettings && _initProperties.ContainsKey("host") && !string.IsNullOrEmpty(_initProperties["host"]))
|
||||
if ((await configuration.GetDefaultSmtpSettingsAsync()).IsDefaultSettings && _initProperties.ContainsKey("host") && !string.IsNullOrEmpty(_initProperties["host"]))
|
||||
{
|
||||
_host = _initProperties["host"];
|
||||
|
||||
@ -178,21 +183,24 @@ public class SmtpSender : INotifySender
|
||||
|
||||
if (_initProperties.ContainsKey("userName"))
|
||||
{
|
||||
_credentials = new NetworkCredential(
|
||||
_initProperties["userName"],
|
||||
_initProperties["password"]);
|
||||
var useNtlm = _initProperties.ContainsKey("useNtlm") && bool.Parse(_initProperties["useNtlm"]);
|
||||
_credentials = !useNtlm ? new NetworkCredential(_initProperties["userName"], _initProperties["password"]) : null;
|
||||
_saslMechanism = useNtlm ? new SaslMechanismNtlm(_initProperties["userName"], _initProperties["password"]) : null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var s = await configuration.GetSmtpSettingsAsync();
|
||||
var s = await configuration.GetDefaultSmtpSettingsAsync();
|
||||
|
||||
_host = s.Host;
|
||||
_port = s.Port;
|
||||
_ssl = s.EnableSSL;
|
||||
_credentials = !string.IsNullOrEmpty(s.CredentialsUserName)
|
||||
? new NetworkCredential(s.CredentialsUserName, s.CredentialsUserPassword)
|
||||
: null;
|
||||
|
||||
if (!string.IsNullOrEmpty(s.CredentialsUserName))
|
||||
{
|
||||
_credentials = !s.UseNtlm ? new NetworkCredential(s.CredentialsUserName, s.CredentialsUserPassword) : null;
|
||||
_saslMechanism = s.UseNtlm ? new SaslMechanismNtlm(s.CredentialsUserName, s.CredentialsUserPassword) : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
protected MimeMessage BuildMailMessage(NotifyMessage m)
|
||||
|
@ -32,6 +32,7 @@ public class TenantQuotaFeature
|
||||
public virtual bool Visible { get; init; } = true;
|
||||
public virtual string Name { get; init; }
|
||||
public virtual bool Paid { get; init; }
|
||||
public bool Standalone { get; init; }
|
||||
|
||||
protected internal virtual void Multiply(int quantity)
|
||||
{
|
||||
@ -63,7 +64,7 @@ public class TenantQuotaFeature<T> : TenantQuotaFeature
|
||||
}
|
||||
set
|
||||
{
|
||||
_tenantQuota.ReplaceFeature(Name, value);
|
||||
_tenantQuota.ReplaceFeature(Name, value, Default);
|
||||
}
|
||||
}
|
||||
|
||||
@ -96,9 +97,16 @@ public class TenantQuotaFeatureCount : TenantQuotaFeature<int>
|
||||
|
||||
protected internal override void Multiply(int quantity)
|
||||
{
|
||||
if (Value != int.MaxValue)
|
||||
try
|
||||
{
|
||||
Value *= quantity;
|
||||
if (Value != int.MaxValue)
|
||||
{
|
||||
Value = checked(Value * quantity);
|
||||
}
|
||||
}
|
||||
catch (OverflowException)
|
||||
{
|
||||
Value = int.MaxValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -118,9 +126,16 @@ public class TenantQuotaFeatureSize : TenantQuotaFeature<long>
|
||||
|
||||
protected internal override void Multiply(int quantity)
|
||||
{
|
||||
if (Value != long.MaxValue)
|
||||
try
|
||||
{
|
||||
Value *= quantity;
|
||||
if (Value != long.MaxValue)
|
||||
{
|
||||
Value = checked(Value * quantity);
|
||||
}
|
||||
}
|
||||
catch (OverflowException)
|
||||
{
|
||||
Value = long.MaxValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -68,7 +68,11 @@ public abstract class RadicaleEntity
|
||||
}
|
||||
|
||||
public string GetSystemAuthorization()
|
||||
{
|
||||
{
|
||||
if(_configuration["radicale:admin"] == null || _configuration["radicale:admin"] == "")
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return _configuration["radicale:admin"] + ":" + _instanceCrypto.Encrypt(_configuration["radicale:admin"]);
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,7 @@ public class TenantCookieSettings : ISettings<TenantCookieSettings>
|
||||
{
|
||||
public int Index { get; set; }
|
||||
public int LifeTime { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
|
||||
public TenantCookieSettings GetDefault()
|
||||
{
|
||||
@ -41,12 +42,15 @@ public class TenantCookieSettings : ISettings<TenantCookieSettings>
|
||||
{
|
||||
var defaultSettings = GetInstance();
|
||||
|
||||
return LifeTime == defaultSettings.LifeTime;
|
||||
return LifeTime == defaultSettings.LifeTime && Enabled == defaultSettings.Enabled;
|
||||
}
|
||||
|
||||
public static TenantCookieSettings GetInstance()
|
||||
{
|
||||
return new TenantCookieSettings();
|
||||
return new TenantCookieSettings()
|
||||
{
|
||||
LifeTime = 1440
|
||||
};
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
@ -113,7 +117,9 @@ public class TenantCookieSettingsHelper
|
||||
public async Task<DateTime> GetExpiresTimeAsync(int tenantId)
|
||||
{
|
||||
var settingsTenant = await GetForTenantAsync(tenantId);
|
||||
var expires = settingsTenant.IsDefault() ? DateTime.UtcNow.AddYears(1) : DateTime.UtcNow.AddMinutes(settingsTenant.LifeTime);
|
||||
var expires = settingsTenant.IsDefault() || !settingsTenant.Enabled ?
|
||||
DateTime.UtcNow.AddYears(1) :
|
||||
DateTime.UtcNow.AddMinutes(settingsTenant.LifeTime);
|
||||
|
||||
return expires;
|
||||
}
|
||||
|
@ -230,7 +230,7 @@ public class TenantQuota : IMapFrom<DbQuota>
|
||||
_nonProfitFeature = new TenantQuotaFeatureFlag(this) { Name = "non-profit", Visible = false };
|
||||
_trialFeature = new TenantQuotaFeatureFlag(this) { Name = "trial", Visible = false };
|
||||
_freeFeature = new FreeFeature(this) { Visible = false };
|
||||
_updateFeature = new TenantQuotaFeatureFlag(this) { Name = "update", Visible = false };
|
||||
_updateFeature = new TenantQuotaFeatureFlag(this) { Name = "update", Standalone = true };
|
||||
_auditFeature = new TenantQuotaFeatureFlag(this) { Name = "audit", Order = 7 };
|
||||
_docsEditionFeature = new TenantQuotaFeatureFlag(this) { Name = "docs", Visible = false };
|
||||
_ldapFeature = new TenantQuotaFeatureFlag(this) { Name = "ldap", Visible = false };
|
||||
@ -239,9 +239,9 @@ public class TenantQuota : IMapFrom<DbQuota>
|
||||
_customizationFeature = new TenantQuotaFeatureFlag(this) { Name = "customization", Visible = false };
|
||||
_customFeature = new TenantQuotaFeatureFlag(this) { Name = "custom", Visible = false };
|
||||
_autoBackupRestoreFeature = new TenantQuotaFeatureFlag(this) { Name = "restore", Order = 6 };
|
||||
_oauthFeature = new TenantQuotaFeatureFlag(this) { Name = "oauth", Visible = false };
|
||||
_oauthFeature = new TenantQuotaFeatureFlag(this) { Name = "oauth" };
|
||||
_contentSearchFeature = new TenantQuotaFeatureFlag(this) { Name = "contentsearch", Visible = false };
|
||||
_thirdPartyFeature = new TenantQuotaFeatureFlag(this) { Name = "thirdparty", Visible = false };
|
||||
_thirdPartyFeature = new TenantQuotaFeatureFlag(this) { Name = "thirdparty", Order = 9 };
|
||||
|
||||
TenantQuotaFeatures = new List<TenantQuotaFeature>
|
||||
{
|
||||
@ -333,7 +333,10 @@ public class TenantQuota : IMapFrom<DbQuota>
|
||||
{
|
||||
if (f is MaxFileSizeFeature fileSize)
|
||||
{
|
||||
fileSize.Value = Math.Max(fileSize.Value, quota.MaxFileSize);
|
||||
if (quota.MaxFileSize != long.MaxValue)
|
||||
{
|
||||
fileSize.Value = Math.Max(fileSize.Value, quota.MaxFileSize);
|
||||
}
|
||||
}
|
||||
else if (f is TenantQuotaFeatureCount count)
|
||||
{
|
||||
@ -346,7 +349,17 @@ public class TenantQuota : IMapFrom<DbQuota>
|
||||
}
|
||||
else if (currentValue != count.Default && newValue != count.Default)
|
||||
{
|
||||
count.Value += newValue;
|
||||
try
|
||||
{
|
||||
if (newValue != int.MaxValue)
|
||||
{
|
||||
count.Value = checked(count.Value + newValue);
|
||||
}
|
||||
}
|
||||
catch (OverflowException)
|
||||
{
|
||||
count.Value = int.MaxValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (f is TenantQuotaFeatureSize length)
|
||||
@ -360,7 +373,17 @@ public class TenantQuota : IMapFrom<DbQuota>
|
||||
}
|
||||
else
|
||||
{
|
||||
length.Value += newValue;
|
||||
try
|
||||
{
|
||||
if (newValue != long.MaxValue)
|
||||
{
|
||||
length.Value = checked(length.Value + newValue);
|
||||
}
|
||||
}
|
||||
catch (OverflowException)
|
||||
{
|
||||
length.Value = long.MaxValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (f is TenantQuotaFeatureFlag flag)
|
||||
@ -393,14 +416,21 @@ public class TenantQuota : IMapFrom<DbQuota>
|
||||
return _featuresList.FirstOrDefault(f => string.Equals(f.Split(':')[0], $"{name}", StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
internal void ReplaceFeature<T>(string name, T value)
|
||||
internal void ReplaceFeature<T>(string name, T value, T defaultValue)
|
||||
{
|
||||
var featureValue = GetFeature(name);
|
||||
_featuresList.Remove(featureValue);
|
||||
|
||||
if (!EqualityComparer<T>.Default.Equals(value, default))
|
||||
if (!EqualityComparer<T>.Default.Equals(value, default) && !EqualityComparer<T>.Default.Equals(value, defaultValue))
|
||||
{
|
||||
_featuresList.Add($"{name}:{value}");
|
||||
if (value is bool)
|
||||
{
|
||||
_featuresList.Add($"{name}");
|
||||
}
|
||||
else
|
||||
{
|
||||
_featuresList.Add($"{name}:{value}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
126
common/ASC.Data.Backup.Core/BackupResource.bg.resx
Normal file
126
common/ASC.Data.Backup.Core/BackupResource.bg.resx
Normal file
@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="BackupNotFound" xml:space="preserve">
|
||||
<value>Архивният файл е невалиден. Моля, използвайте файл, създаден в ONLYOFFICE v11.5 или по-нова версия.</value>
|
||||
</data>
|
||||
<data name="ButtonSetPassword" xml:space="preserve">
|
||||
<value>Задайте парола</value>
|
||||
</data>
|
||||
</root>
|
126
common/ASC.Data.Backup.Core/BackupResource.cs.resx
Normal file
126
common/ASC.Data.Backup.Core/BackupResource.cs.resx
Normal file
@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="BackupNotFound" xml:space="preserve">
|
||||
<value>Záložní soubor je neplatný. Použijte prosím soubor vytvořený v aplikaci ONLYOFFICE v11.5 nebo novější.</value>
|
||||
</data>
|
||||
<data name="ButtonSetPassword" xml:space="preserve">
|
||||
<value>Nastavit heslo</value>
|
||||
</data>
|
||||
</root>
|
126
common/ASC.Data.Backup.Core/BackupResource.es.resx
Normal file
126
common/ASC.Data.Backup.Core/BackupResource.es.resx
Normal file
@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ButtonSetPassword" xml:space="preserve">
|
||||
<value>Establecer contraseña</value>
|
||||
</data>
|
||||
<data name="BackupNotFound" xml:space="preserve">
|
||||
<value>El archivo de copia de seguridad no es válido. Por favor, utilice un archivo creado en ONLYOFFICE v11.5 o superior.</value>
|
||||
</data>
|
||||
</root>
|
126
common/ASC.Data.Backup.Core/BackupResource.fi.resx
Normal file
126
common/ASC.Data.Backup.Core/BackupResource.fi.resx
Normal file
@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ButtonSetPassword" xml:space="preserve">
|
||||
<value>Aseta salasana</value>
|
||||
</data>
|
||||
<data name="BackupNotFound" xml:space="preserve">
|
||||
<value>Varmuuskopiotiedosto on virheellinen. Ole hyvä ja käytä tiedostoa, joka on luotu ONLYOFFICE v11.5:llä tai uudemmalla versiolla.</value>
|
||||
</data>
|
||||
</root>
|
126
common/ASC.Data.Backup.Core/BackupResource.hy-AM.resx
Normal file
126
common/ASC.Data.Backup.Core/BackupResource.hy-AM.resx
Normal file
@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="BackupNotFound" xml:space="preserve">
|
||||
<value>Պահուստային ֆայլն անվավեր է. Խնդրում ենք օգտագործել ONLYOFFICE v11.5 կամ ավելի ուշ.</value>
|
||||
</data>
|
||||
<data name="ButtonSetPassword" xml:space="preserve">
|
||||
<value>Սահմանել գաղտնաբառ</value>
|
||||
</data>
|
||||
</root>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user