.
6 |
--------------------------------------------------------------------------------
/release/src/macos/Customer.app/Contents/MacOS/Start.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | # ----------------------------------------------------------------------------
3 | # Start CustomerSupportTool
4 | # Copyright 2015-2019 OpenIndex.de
5 | # ----------------------------------------------------------------------------
6 |
7 | SCRIPT_DIR=$( cd $( dirname ${BASH_SOURCE[0]} ) && pwd )
8 | CONTENTS_DIR=$( cd $( dirname ${SCRIPT_DIR} ) && pwd )
9 | START_SH="$CONTENTS_DIR/Resources/bin/Start.sh"
10 | exec ${START_SH}
11 |
--------------------------------------------------------------------------------
/release/src/openjdk/README.md:
--------------------------------------------------------------------------------
1 | This folder contains *OpenJDK* binaries for the supported target platforms.
2 |
3 | Launch the `init-*.sh` scripts from this folder or the `openjdk-init.sh` script in the `release` directory in order to download *OpenJDK* for the different target platforms. After downloading a Java runtime environment is created in the `runtime` folder.
4 |
5 | The created runtime environments are used by the bundle scripts (`bundle-linux.sh` / `bundle-mac.sh` / `bundle-windows.sh`) in order to create the application bundles.
6 |
--------------------------------------------------------------------------------
/.idea/dictionaries/global.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | aligny
5 | appdata
6 | benutzername
7 | drittanbietern
8 | fillx
9 | gapright
10 | growx
11 | hidemode
12 | imgscalr
13 | lizenztext
14 | openindex
15 | passphrase
16 | portnummer
17 | resized
18 | screenshot
19 | zlib
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/.idea/runConfigurations/StaffTool.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/runConfigurations/CustomerTool.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/fileTemplates/includes/License Header.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/release/src/windows/Staff.rc:
--------------------------------------------------------------------------------
1 |
2 | 1 VERSIONINFO
3 | FILEVERSION 1,1,2,0
4 | PRODUCTVERSION 1,1,2,0
5 | FILEOS 0x40004
6 | FILETYPE 0x1
7 | {
8 | BLOCK "StringFileInfo"
9 | {
10 | BLOCK "040904B0"
11 | {
12 | VALUE "CompanyName", "OpenIndex.de"
13 | VALUE "FileDescription", "Remote Support Tool for staff members"
14 | VALUE "FileVersion", "1.1.2"
15 | VALUE "InternalName", "StaffSupportTool.exe"
16 | VALUE "LegalCopyright", "Copyright (c) 2015-2021 OpenIndex.de"
17 | VALUE "OriginalFilename", "StaffSupportTool.exe"
18 | VALUE "ProductName", "Staff Support Tool"
19 | VALUE "ProductVersion", "1.1.2"
20 | }
21 | }
22 |
23 | BLOCK "VarFileInfo"
24 | {
25 | VALUE "Translation", 0x0409 0x04B0
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/release/src/windows/Customer.rc:
--------------------------------------------------------------------------------
1 |
2 | 1 VERSIONINFO
3 | FILEVERSION 1,1,2,0
4 | PRODUCTVERSION 1,1,2,0
5 | FILEOS 0x40004
6 | FILETYPE 0x1
7 | {
8 | BLOCK "StringFileInfo"
9 | {
10 | BLOCK "040904B0"
11 | {
12 | VALUE "CompanyName", "OpenIndex.de"
13 | VALUE "FileDescription", "Remote Support Tool for customers"
14 | VALUE "FileVersion", "1.1.2"
15 | VALUE "InternalName", "CustomerSupportTool.exe"
16 | VALUE "LegalCopyright", "Copyright (c) 2015-2021 OpenIndex.de"
17 | VALUE "OriginalFilename", "CustomerSupportTool.exe"
18 | VALUE "ProductName", "Customer Support Tool"
19 | VALUE "ProductVersion", "1.1.2"
20 | }
21 | }
22 |
23 | BLOCK "VarFileInfo"
24 | {
25 | VALUE "Translation", 0x0409 0x04B0
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/mvn-clean.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" clean
25 |
--------------------------------------------------------------------------------
/Core/mvn-clean.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" clean
25 |
--------------------------------------------------------------------------------
/Staff/mvn-clean.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd ${DIR}
24 | ${MVN} clean
25 |
--------------------------------------------------------------------------------
/mvn-tidy-pom.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" tidy:pom
25 |
--------------------------------------------------------------------------------
/Customer/mvn-clean.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" clean
25 |
--------------------------------------------------------------------------------
/mvn-install.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" clean install
25 |
--------------------------------------------------------------------------------
/release/mvn-clean.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" clean
25 |
--------------------------------------------------------------------------------
/Core/mvn-install.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" clean install
25 |
--------------------------------------------------------------------------------
/Staff/mvn-install.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd ${DIR}
24 | ${MVN} clean install
25 |
--------------------------------------------------------------------------------
/Customer/mvn-install.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" clean install
25 |
--------------------------------------------------------------------------------
/mvn-release.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" -Prelease clean install
25 |
--------------------------------------------------------------------------------
/release/mvn-install.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" clean install
25 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * General classes.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | package de.openindex.support.core;
23 |
--------------------------------------------------------------------------------
/Staff/src/main/java/de/openindex/support/staff/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * Staff application.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | package de.openindex.support.staff;
23 |
--------------------------------------------------------------------------------
/mvn-deploy.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" -Prelease -Pdeploy clean deploy
25 |
--------------------------------------------------------------------------------
/release/mvn-release.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | MVN="mvn"
19 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 |
21 | set -e
22 | export LANG=en
23 | cd "$DIR"
24 | "$MVN" -Prelease clean install
25 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/gui/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * General GUI classes.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | package de.openindex.support.core.gui;
23 |
--------------------------------------------------------------------------------
/Customer/src/main/java/de/openindex/support/customer/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * Customer application.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | package de.openindex.support.customer;
23 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/monitor/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * Classes for monitoring data transfer.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | package de.openindex.support.core.monitor;
23 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * Classes for communication between the applications.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | package de.openindex.support.core.io;
23 |
--------------------------------------------------------------------------------
/Staff/src/main/java/de/openindex/support/staff/utils/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * Additional classes of the staff application.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | package de.openindex.support.staff.utils;
23 |
--------------------------------------------------------------------------------
/Customer/src/main/java/de/openindex/support/customer/utils/mac/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * JNA libraries used on macOS systems.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | package de.openindex.support.customer.utils.mac;
23 |
--------------------------------------------------------------------------------
/Customer/src/main/java/de/openindex/support/customer/utils/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * Additional classes of the customer application.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | package de.openindex.support.customer.utils;
23 |
--------------------------------------------------------------------------------
/.idea/jarRepositories.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/ResponseFactory.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.io.Serializable;
19 |
20 | /**
21 | * Factory for delayed creation of responses.
22 | *
23 | * @author Andreas Rudolph
24 | */
25 | public interface ResponseFactory {
26 | Serializable create();
27 | }
28 |
--------------------------------------------------------------------------------
/Staff/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | [%level] %msg%n
8 |
9 |
10 |
11 |
12 | ${app.dir}/staff.log
13 | false
14 | true
15 |
16 | %-4relative [%thread] %-5level %logger{35} - %msg%n
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Customer/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | [%level] %msg%n
8 |
9 |
10 |
11 |
12 | ${app.dir}/customer.log
13 | false
14 | true
15 |
16 | %-4relative [%thread] %-5level %logger{35} - %msg%n
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/.idea/runConfigurations/Clean.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/.idea/runConfigurations/Install.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Core/src/main/java/org/imgscalr/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2011 The Buzz Media, LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * Classes for image scaling.
19 | *
20 | * This package bundles the development version of the imgscalr library,
21 | * that was not officially released yet.
22 | *
23 | * @author Riyad Kalla (software@thebuzzmedia.com)
24 | * @see repository of the imgscalr library
25 | */
26 | package org.imgscalr;
27 |
--------------------------------------------------------------------------------
/Staff/src/main/java/module-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * Staff application.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | module de.openindex.support.staff {
23 | requires de.openindex.support.core;
24 | requires jsch;
25 | requires logback.classic;
26 | requires miglayout.swing;
27 | requires org.apache.commons.io;
28 | requires org.apache.commons.lang3;
29 | requires org.apache.commons.text;
30 | requires org.slf4j;
31 | }
32 |
--------------------------------------------------------------------------------
/.idea/runConfigurations/Release.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/share/ssl/README.md:
--------------------------------------------------------------------------------
1 | This folder contains the key pair and certificate, that was created with the provided `init.sh` script and may be bundled with this application.
2 |
3 | In order to create custom builds of this application, you should create your own keystore and truststore by executing `init.sh` in this folder.
4 |
5 | - Copy the created `keystore.jks` and `keystore.jks.txt` into the [Client resources](../Client/src/main/resources/de/openindex/support/client/resources).
6 | - Copy the created `truststore.jks` and `truststore.jks.txt` into the [Server resources](../Server/src/main/resources/de/openindex/support/server/resources).
7 |
8 | Additionally you may disable the custom keystore / truststore in the application settings:
9 |
10 | - Set `customKeyStore=false` in [client settings](../Client/src/main/resources/de/openindex/support/client/resources/application.properties).
11 | - Set `customTrustStore=false` in [server settings](../Server/src/main/resources/de/openindex/support/server/resources/application.properties).
12 |
13 | These settings enforce usage of the generated keystore / truststore. Otherwise users may replace these files through their application work directory.
14 |
--------------------------------------------------------------------------------
/.idea/runConfigurations/Deploy.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/Customer/src/main/resources/de/openindex/support/customer/resources/application_de.properties:
--------------------------------------------------------------------------------
1 | #
2 | # translations
3 | #
4 |
5 | i18n.appTitle=Kunden Support Tool ${project.version}
6 | i18n.title=Fernwartung für unsere Kunden
7 | i18n.info=Verwenden Sie dieses Programm um unseren Support-Mitarbeitern den Zugriff auf Ihren Bildschirm zu ermöglichen.
8 | i18n.host=Hostname
9 | i18n.port=Port
10 | i18n.screen=Bildschirm
11 | i18n.ssl=SSL-Verschlüsselung verwenden.
12 | i18n.connect=Verbinden
13 | i18n.disconnect=Trennen
14 | i18n.settings=Einstellungen
15 | i18n.about=Über…
16 | i18n.aboutTitle=Über dieses Programm…
17 | i18n.quit=Beenden
18 | i18n.close=Schließen
19 | i18n.website=Webseite
20 | i18n.source=Quelltext
21 | i18n.status.connected=Verbindung wurde hergestellt.
22 | i18n.status.connecting=Verbindung wird hergestellt.
23 | i18n.status.disconnected=Verbindung wurde getrennt.
24 | i18n.error=Fehler
25 | i18n.error.connectionFailed=Die Verbindung konnte nicht hergestellt werden!
26 | i18n.invalid=Ihre Einstellungen sind fehlerhaft.
27 | i18n.invalid.sshHost=Kein gültiger Hostname angegeben.
28 | i18n.invalid.sshPort=Die Portnummer ist ungültig.
29 | i18n.invalid.screen=Kein Bildschirm wurde ausgewählt.
30 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/ScreenTile.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.io.Serializable;
19 |
20 | /**
21 | * Tile of a screenshot.
22 | *
23 | * @author Andreas Rudolph
24 | */
25 | public class ScreenTile implements Serializable {
26 | private static final long serialVersionUID = 1;
27 | public final byte[] data;
28 |
29 | public ScreenTile() {
30 | this(null);
31 | }
32 |
33 | public ScreenTile(byte[] data) {
34 | super();
35 | this.data = data;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Customer/src/main/java/module-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * Customer application.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | module de.openindex.support.customer {
23 | requires de.openindex.support.core;
24 | requires logback.classic;
25 | requires miglayout.swing;
26 | requires org.apache.commons.io;
27 | requires org.apache.commons.lang3;
28 | requires org.apache.commons.text;
29 | requires org.slf4j;
30 | requires com.sun.jna.platform;
31 | requires com.sun.jna;
32 | exports de.openindex.support.customer.utils.mac to com.sun.jna;
33 | }
34 |
--------------------------------------------------------------------------------
/release/openjdk-init.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Build all supported OpenJDK runtime environments.
4 | # Copyright 2015-2021 OpenIndex.de
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20 | set -e
21 |
22 | init() {
23 | echo ""
24 | printf "\e[1m\e[92m=================================================\e[0m\n"
25 | printf "\e[1m\e[92m launching %s\e[0m\n" "$1"
26 | printf "\e[1m\e[92m=================================================\e[0m\n"
27 | echo ""
28 | exec "$1"
29 | }
30 | export -f init
31 |
32 | cd "${DIR}"
33 | find "src/openjdk/" \
34 | -maxdepth 1 \
35 | -type f \
36 | -name "init-*.sh" \
37 | -exec bash -c 'init {}' \;
38 |
--------------------------------------------------------------------------------
/release/src/scripts/Staff.bat:
--------------------------------------------------------------------------------
1 | @REM ----------------------------------------------------------------------------
2 | @REM RemoteSupportTool for staff members
3 | @REM Copyright 2015-2021 OpenIndex.de
4 | @REM ----------------------------------------------------------------------------
5 | @echo off
6 |
7 | :: Use a specific command to launch the Java Runtime Environment
8 | set "JAVACMD="
9 |
10 | :: Memory settings of the Java Runtime Environment
11 | set "JAVA_HEAP_MINIMUM=32m"
12 | set "JAVA_HEAP_MAXIMUM=512m"
13 |
14 | :: Additional options for the Java Runtime Environment
15 | set "JAVA_OPTS=-Dfile.encoding=UTF-8"
16 |
17 | set "APP=de.openindex.support.staff/de.openindex.support.staff.StaffApplication"
18 |
19 | ::
20 | :: Start execution...
21 | ::
22 |
23 | :: set "SCRIPT=%~nx0"
24 | set "SCRIPT_DIR=%~dp0"
25 | set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%"
26 | :: set "BASE_DIR=%SCRIPT_DIR%"
27 | set "BASE_DIR=%SCRIPT_DIR%\..\"
28 | if "%JAVACMD%"=="" set "JAVACMD=%BASE_DIR%\bin\javaw.exe"
29 |
30 | pushd %BASE_DIR%
31 | set "BASE_DIR=%CD%"
32 |
33 | :: echo SCRIPT: %SCRIPT%
34 | :: echo SCRIPT_DIR: %SCRIPT_DIR%
35 | :: echo BASE_DIR: %BASE_DIR%
36 |
37 | "%JAVACMD%" -Xms%JAVA_HEAP_MINIMUM% -Xmx%JAVA_HEAP_MAXIMUM% %JAVA_OPTS% -p "modules" -m %APP% %*
38 | popd
39 |
--------------------------------------------------------------------------------
/release/src/scripts/Customer.bat:
--------------------------------------------------------------------------------
1 | @REM ----------------------------------------------------------------------------
2 | @REM RemoteSupportTool for customers
3 | @REM Copyright 2015-2021 OpenIndex.de
4 | @REM ----------------------------------------------------------------------------
5 | @echo off
6 |
7 | :: Use a specific command to launch the Java Runtime Environment
8 | set "JAVACMD="
9 |
10 | :: Memory settings of the Java Runtime Environment
11 | set "JAVA_HEAP_MINIMUM=32m"
12 | set "JAVA_HEAP_MAXIMUM=512m"
13 |
14 | :: Additional options for the Java Runtime Environment
15 | set "JAVA_OPTS=-Dfile.encoding=UTF-8"
16 |
17 | set "APP=de.openindex.support.customer/de.openindex.support.customer.CustomerApplication"
18 |
19 | ::
20 | :: Start execution...
21 | ::
22 |
23 | :: set "SCRIPT=%~nx0"
24 | set "SCRIPT_DIR=%~dp0"
25 | set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%"
26 | :: set "BASE_DIR=%SCRIPT_DIR%"
27 | set "BASE_DIR=%SCRIPT_DIR%\..\"
28 | if "%JAVACMD%"=="" set "JAVACMD=%BASE_DIR%\bin\java.exe"
29 |
30 | pushd %BASE_DIR%
31 | set "BASE_DIR=%CD%"
32 |
33 | :: echo SCRIPT: %SCRIPT%
34 | :: echo SCRIPT_DIR: %SCRIPT_DIR%
35 | :: echo BASE_DIR: %BASE_DIR%
36 |
37 | "%JAVACMD%" -Xms%JAVA_HEAP_MINIMUM% -Xmx%JAVA_HEAP_MAXIMUM% %JAVA_OPTS% -p "modules" -m %APP% %*
38 | popd
39 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/monitor/DataSample.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.monitor;
17 |
18 | import java.util.Date;
19 |
20 | /**
21 | * Statistical record about data transfer.
22 | *
23 | * @author Andreas Rudolph
24 | */
25 | @SuppressWarnings("WeakerAccess")
26 | public class DataSample {
27 | public final long byteCount;
28 | public final Date start;
29 | public final Date end;
30 |
31 | public DataSample(long byteCount, Date start, Date end) {
32 | this.byteCount = byteCount;
33 | this.start = start;
34 | this.end = end;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/MouseWheelRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.io.Serializable;
19 |
20 | /**
21 | * Request for the mouse wheel being rotated.
22 | *
23 | * @author Andreas Rudolph
24 | */
25 | public class MouseWheelRequest implements Serializable {
26 | private static final long serialVersionUID = 1;
27 | public final int wheelAmt;
28 |
29 | public MouseWheelRequest() {
30 | this(0);
31 | }
32 |
33 | public MouseWheelRequest(int wheelAmt) {
34 | super();
35 | this.wheelAmt = wheelAmt;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Core/src/main/java/module-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * General components.
19 | *
20 | * @author Andreas Rudolph
21 | */
22 | module de.openindex.support.core {
23 | exports de.openindex.support.core;
24 | exports de.openindex.support.core.gui;
25 | exports de.openindex.support.core.io;
26 | exports de.openindex.support.core.monitor;
27 | exports org.imgscalr;
28 |
29 | requires transitive java.desktop;
30 | requires logback.classic;
31 | requires org.apache.commons.io;
32 | requires org.apache.commons.lang3;
33 | requires org.apache.commons.text;
34 | requires org.slf4j;
35 | }
36 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/CopyTextRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.io.Serializable;
19 |
20 | /**
21 | * Request for a text being copied into the clipboard of the customer.
22 | *
23 | * @author Andreas Rudolph
24 | */
25 | public class CopyTextRequest implements Serializable {
26 | private static final long serialVersionUID = 1;
27 | public final String text;
28 |
29 | public CopyTextRequest() {
30 | this(null);
31 | }
32 |
33 | public CopyTextRequest(String text) {
34 | super();
35 | this.text = text;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/MouseMoveRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.io.Serializable;
19 |
20 | /**
21 | * Request for a mouse being moved.
22 | *
23 | * @author Andreas Rudolph
24 | */
25 | public class MouseMoveRequest implements Serializable {
26 | private static final long serialVersionUID = 1;
27 | public final int x;
28 | public final int y;
29 |
30 | public MouseMoveRequest() {
31 | this(-1, -1);
32 | }
33 |
34 | public MouseMoveRequest(int x, int y) {
35 | super();
36 | this.x = x;
37 | this.y = y;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/release/.env.example:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Environment variables for build scripts.
4 | # Copy this file to ".env" and enter your environment variables.
5 | #
6 |
7 | # Bundle name for Staff tool in generated bundles.
8 | STAFF_TOOL="StaffSupportTool"
9 |
10 | # Name for Customer tool in generated bundles.
11 | CUSTOMER_TOOL="CustomerSupportTool"
12 |
13 | # Version number used in generated bundles.
14 | VERSION="1.1.2"
15 |
16 | # In order to sign the application for yourself, you need to obtain a Developer ID from Apple and set the
17 | # name of your signature key in the APPLE_CODESIGN_KEY variable.
18 | APPLE_CODESIGN_KEY=""
19 |
20 | # In order to notarize the application, you need to obtain a Developer ID from Apple and set its email address in the
21 | # APPLE_DEVELOPER_MAIL variable.
22 | APPLE_DEVELOPER_MAIL=""
23 |
24 | # In order to notarize the application, you need to obtain a Developer ID from Apple and set its password in the
25 | # APPLE_DEVELOPER_PASSWORD variable. If no password is provided, you need to enter it manually during the notification
26 | # process.
27 | #
28 | # Notice: You can't use the global password. Instead you need to login at https://appleid.apple.com/ with your account
29 | # and create an application specific password.
30 | APPLE_DEVELOPER_PASSWORD=""
31 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/KeyTypeRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.awt.event.KeyEvent;
19 | import java.io.Serializable;
20 |
21 | /**
22 | * Request for a key being typed.
23 | *
24 | * @author Andreas Rudolph
25 | */
26 | public class KeyTypeRequest implements Serializable {
27 | private static final long serialVersionUID = 1;
28 | public final char keyChar;
29 |
30 | public KeyTypeRequest() {
31 | this(KeyEvent.CHAR_UNDEFINED);
32 | }
33 |
34 | public KeyTypeRequest(char keyChar) {
35 | super();
36 | this.keyChar = keyChar;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/KeyPressRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.awt.event.KeyEvent;
19 | import java.io.Serializable;
20 |
21 | /**
22 | * Request for a key being pressed.
23 | *
24 | * @author Andreas Rudolph
25 | */
26 | public class KeyPressRequest implements Serializable {
27 | private static final long serialVersionUID = 2;
28 | public final int keyCode;
29 |
30 | public KeyPressRequest() {
31 | this(KeyEvent.VK_UNDEFINED);
32 | }
33 |
34 | public KeyPressRequest(int keyCode) {
35 | super();
36 | this.keyCode = keyCode;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/KeyReleaseRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.awt.event.KeyEvent;
19 | import java.io.Serializable;
20 |
21 | /**
22 | * Request for a key being released.
23 | *
24 | * @author Andreas Rudolph
25 | */
26 | public class KeyReleaseRequest implements Serializable {
27 | private static final long serialVersionUID = 2;
28 | public final int keyCode;
29 |
30 | public KeyReleaseRequest() {
31 | this(KeyEvent.VK_UNDEFINED);
32 | }
33 |
34 | public KeyReleaseRequest(int keyCode) {
35 | super();
36 | this.keyCode = keyCode;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/MousePressRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.awt.event.MouseEvent;
19 | import java.io.Serializable;
20 |
21 | /**
22 | * Request for a mouse button being pressed.
23 | *
24 | * @author Andreas Rudolph
25 | */
26 | public class MousePressRequest implements Serializable {
27 | private static final long serialVersionUID = 1;
28 | public final int buttons;
29 |
30 | public MousePressRequest() {
31 | this(MouseEvent.NOBUTTON);
32 | }
33 |
34 | public MousePressRequest(int buttons) {
35 | super();
36 | this.buttons = buttons;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/MouseReleaseRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.awt.event.MouseEvent;
19 | import java.io.Serializable;
20 |
21 | /**
22 | * Request for a mouse button being released.
23 | *
24 | * @author Andreas Rudolph
25 | */
26 | public class MouseReleaseRequest implements Serializable {
27 | private static final long serialVersionUID = 1;
28 | public final int buttons;
29 |
30 | public MouseReleaseRequest() {
31 | this(MouseEvent.NOBUTTON);
32 | }
33 |
34 | public MouseReleaseRequest(int buttons) {
35 | super();
36 | this.buttons = buttons;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/ScreenRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.io.Serializable;
19 |
20 | /**
21 | * Request for a screenshot.
22 | *
23 | * @author Andreas Rudolph
24 | */
25 | public class ScreenRequest implements Serializable {
26 | private static final long serialVersionUID = 1;
27 | public final int maxWidth;
28 | public final int maxHeight;
29 |
30 | public ScreenRequest() {
31 | this(0, 0);
32 | }
33 |
34 | public ScreenRequest(int maxWidth, int maxHeight) {
35 | super();
36 | this.maxWidth = maxWidth;
37 | this.maxHeight = maxHeight;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/release/src/windows/README.md:
--------------------------------------------------------------------------------
1 | Files in this folder are used by the [`bundle-windows.sh`](../../bundle-windows.sh) script in order to create EXE launchers for Windows systems.
2 |
3 | EXE launchers are basically self extracting [7-Zip](https://www.7-zip.org/) archives, that automatically start the application after extraction and automatically remove extracted files after the application is closed. Those EXE files are created with the `7zSD.sfx` file, which is part of 7-Zip's LZMA SDK. We're currently using version 19.00 (2019-02-21), that was downloaded from . Further documentation about self extracting archives are available at .
4 |
5 | If [Wine](https://www.winehq.org/) is installed on the build environment, the [`bundle-windows.sh`](../../bundle-windows.sh) script automatically does some modifications to the created EXE files by using the Freeware [Resource Hacker](http://angusj.com/resourcehacker/) application:
6 |
7 | - The application icon is replaced - either with a file called `Customer.ico` / `Staff.ico` located in this folder or with the [default icons](../icons).
8 |
9 | - Version information is replaced with the contents of the [`Customer.rc`](Customer.rc) / [`Staff.rc`](Staff.rc) file. You might customize these values but be aware to keep the general file structure intact.
10 |
11 | - The [manifest](https://en.wikipedia.org/wiki/Manifest_file#Application_and_assembly_manifest) defined in the [`manifest.rc`](manifest.rc) file is added. This ensures, that the application does not ask for admin permissions on startup. Of course the user still might run the application as administrator, but it is not strictly necessary.
12 |
--------------------------------------------------------------------------------
/Customer/src/main/java/de/openindex/support/customer/utils/mac/CoreFoundation.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.customer.utils.mac;
17 |
18 | import com.sun.jna.Library;
19 | import com.sun.jna.Structure;
20 |
21 | /**
22 | * Definition (incomplete) of the Core Foundation framework.
23 | *
24 | * @author Andreas Rudolph
25 | * @see Core Foundation
26 | */
27 | @SuppressWarnings("unused")
28 | public interface CoreFoundation extends Library {
29 | String JNA_LIBRARY_NAME = "CoreFoundation";
30 |
31 | /**
32 | * Releases a Core Foundation object.
33 | *
34 | * @param cf A CFType object to release. This value must not be NULL.
35 | * @see CFRelease
36 | */
37 | void CFRelease(CFTypeRef cf);
38 |
39 | /**
40 | * An untyped "generic" reference to any Core Foundation object.
41 | *
42 | * @see CFTypeRef
43 | */
44 | class CFTypeRef extends Structure {
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/io/ScreenResponse.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.io;
17 |
18 | import java.io.Serializable;
19 |
20 | /**
21 | * Response with a screenshot.
22 | *
23 | * @author Andreas Rudolph
24 | */
25 | public class ScreenResponse implements Serializable {
26 | private static final long serialVersionUID = 1;
27 | public final ScreenTile[] tiles;
28 | public final int screenWidth;
29 | public final int screenHeight;
30 | public final int imageWidth;
31 | public final int imageHeight;
32 | public final int tileWidth;
33 | public final int tileHeight;
34 |
35 | public ScreenResponse() {
36 | this(null, 0, 0, 0, 0, 0, 0);
37 | }
38 |
39 | public ScreenResponse(ScreenTile[] tiles, int screenWidth, int screenHeight, int imageWidth, int imageHeight, int tileWidth, int tileHeight) {
40 | super();
41 | this.tiles = tiles;
42 | this.screenWidth = screenWidth;
43 | this.screenHeight = screenHeight;
44 | this.imageWidth = imageWidth;
45 | this.imageHeight = imageHeight;
46 | this.tileWidth = tileWidth;
47 | this.tileHeight = tileHeight;
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/release/src/assembly/customer-linux-x86.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Server-linux-x86
7 | linux-x86
8 | true
9 |
10 |
11 | dir
12 |
13 |
14 |
15 |
16 |
17 | src/openjdk/runtime/linux-x86
18 |
19 |
20 |
21 |
22 |
23 | src/scripts/Customer.sh
24 | Start.sh
25 | bin
26 | unix
27 | 0755
28 |
29 |
30 | ${project.parent.basedir}/LICENSE.txt
31 | LICENSE.txt
32 |
33 | unix
34 | 0644
35 |
36 |
37 |
38 |
39 |
40 | modules
41 | false
42 |
43 |
44 | ${project.groupId}:RemoteSupportTool-Staff:*:*
45 | com.jcraft:*:*:*
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/release/src/assembly/staff-linux-x86.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Client-linux-x86
7 | linux-x86
8 | true
9 |
10 |
11 | dir
12 |
13 |
14 |
15 |
16 |
17 | src/openjdk/runtime/linux-x86
18 |
19 |
20 |
21 |
22 |
23 | src/scripts/Staff.sh
24 | Start.sh
25 | bin
26 | unix
27 | 0755
28 |
29 |
30 | ${project.parent.basedir}/LICENSE.txt
31 | LICENSE.txt
32 |
33 | unix
34 | 0644
35 |
36 |
37 |
38 |
39 |
40 | modules
41 | false
42 |
43 |
44 | ${project.groupId}:RemoteSupportTool-Customer:*:*
45 | net.java.dev.jna:*:*:*
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/release/src/assembly/customer-linux-x86-64.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Server-linux-x86-64
7 | linux-x86-64
8 | true
9 |
10 |
11 | dir
12 |
13 |
14 |
15 |
16 |
17 | src/openjdk/runtime/linux-x86-64
18 |
19 |
20 |
21 |
22 |
23 | src/scripts/Customer.sh
24 | Start.sh
25 | bin
26 | unix
27 | 0755
28 |
29 |
30 | ${project.parent.basedir}/LICENSE.txt
31 | LICENSE.txt
32 |
33 | unix
34 | 0644
35 |
36 |
37 |
38 |
39 |
40 | modules
41 | false
42 |
43 |
44 | ${project.groupId}:RemoteSupportTool-Staff:*:*
45 | com.jcraft:*:*:*
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/release/src/assembly/staff-linux-x86-64.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Client-linux-x86-64
7 | linux-x86-64
8 | true
9 |
10 |
11 | dir
12 |
13 |
14 |
15 |
16 |
17 | src/openjdk/runtime/linux-x86-64
18 |
19 |
20 |
21 |
22 |
23 | src/scripts/Staff.sh
24 | Start.sh
25 | bin
26 | unix
27 | 0755
28 |
29 |
30 | ${project.parent.basedir}/LICENSE.txt
31 | LICENSE.txt
32 |
33 | unix
34 | 0644
35 |
36 |
37 |
38 |
39 |
40 | modules
41 | false
42 |
43 |
44 | ${project.groupId}:RemoteSupportTool-Customer:*:*
45 | net.java.dev.jna:*:*:*
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/release/src/scripts/Staff.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | # ----------------------------------------------------------------------------
3 | # RemoteSupportTool for staff members
4 | # Copyright 2015-2021 OpenIndex.de
5 | # ----------------------------------------------------------------------------
6 |
7 | # Use a specific command to launch the Java Runtime Environment.
8 | JAVA=""
9 |
10 | # Set memory settings of the Java Runtime Environment.
11 | JAVA_HEAP_MINIMUM="32m"
12 | JAVA_HEAP_MAXIMUM="512m"
13 |
14 | # Set additional parameters for the Java Runtime Environment.
15 | JAVA_OPTS="-Dfile.encoding=UTF-8"
16 |
17 | # Set application to start.
18 | APP="de.openindex.support.staff/de.openindex.support.staff.StaffApplication"
19 |
20 | # Detect directories.
21 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
22 | BASE_DIR="$( cd "$( dirname "$SCRIPT_DIR" )" && pwd )"
23 |
24 | # OS specific initialization.
25 | SYSTEM="$( uname -s )"
26 | case "$SYSTEM" in
27 |
28 | Darwin)
29 | echo "Initializing macOS environment..."
30 | JAVA_OPTS="$JAVA_OPTS -Dapple.laf.useScreenMenuBar=true"
31 | JAVA_OPTS="$JAVA_OPTS -Xdock:name=StaffSupportTool"
32 | JAVA_OPTS="$JAVA_OPTS -Xdock:icon=./share/icon.icns"
33 | ;;
34 |
35 | Linux)
36 | echo "Initializing Linux environment..."
37 | JAVA_OPTS="$JAVA_OPTS --add-opens java.desktop/sun.awt.X11=de.openindex.support.core"
38 | ;;
39 |
40 | *)
41 | echo "Initializing unknown environment ($SYSTEM)..."
42 | ;;
43 |
44 | esac
45 |
46 | # Use bundled Java runtime environment, if no JAVA variable was specified.
47 | if [[ -z "$JAVA" ]] ; then
48 | JAVA="$BASE_DIR/bin/java"
49 | fi
50 |
51 | # Launch the application.
52 | cd "$BASE_DIR"
53 | exec "$JAVA" \
54 | -Xms${JAVA_HEAP_MINIMUM} \
55 | -Xmx${JAVA_HEAP_MAXIMUM} \
56 | ${JAVA_OPTS} \
57 | -p "modules" \
58 | -m "$APP" \
59 | "$@"
60 |
--------------------------------------------------------------------------------
/release/src/scripts/Customer.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | # ----------------------------------------------------------------------------
3 | # RemoteSupportTool for customers
4 | # Copyright 2015-2021 OpenIndex.de
5 | # ----------------------------------------------------------------------------
6 |
7 | # Use a specific command to launch the Java Runtime Environment.
8 | JAVA=""
9 |
10 | # Set memory settings of the Java Runtime Environment.
11 | JAVA_HEAP_MINIMUM="32m"
12 | JAVA_HEAP_MAXIMUM="512m"
13 |
14 | # Set additional parameters for the Java Runtime Environment.
15 | JAVA_OPTS="-Dfile.encoding=UTF-8"
16 |
17 | # Set application to start.
18 | APP="de.openindex.support.customer/de.openindex.support.customer.CustomerApplication"
19 |
20 | # Detect directories.
21 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
22 | BASE_DIR="$( cd "$( dirname "$SCRIPT_DIR" )" && pwd )"
23 |
24 | # OS specific initialization.
25 | SYSTEM="$( uname -s )"
26 | case "$SYSTEM" in
27 |
28 | Darwin)
29 | echo "Initializing macOS environment..."
30 | JAVA_OPTS="$JAVA_OPTS -Dapple.laf.useScreenMenuBar=true"
31 | JAVA_OPTS="$JAVA_OPTS -Xdock:name=CustomerSupportTool"
32 | JAVA_OPTS="$JAVA_OPTS -Xdock:icon=./share/icon.icns"
33 | ;;
34 |
35 | Linux)
36 | echo "Initializing Linux environment..."
37 | JAVA_OPTS="$JAVA_OPTS --add-opens java.desktop/sun.awt.X11=de.openindex.support.core"
38 | ;;
39 |
40 | *)
41 | echo "Initializing unknown environment ($SYSTEM)..."
42 | ;;
43 |
44 | esac
45 |
46 | # Use bundled Java runtime environment, if no JAVA variable was specified.
47 | if [[ -z "$JAVA" ]] ; then
48 | JAVA="$BASE_DIR/bin/java"
49 | fi
50 |
51 | # Launch the application.
52 | cd "$BASE_DIR"
53 | exec "$JAVA" \
54 | -Xms${JAVA_HEAP_MINIMUM} \
55 | -Xmx${JAVA_HEAP_MAXIMUM} \
56 | ${JAVA_OPTS} \
57 | -p "modules" \
58 | -m "$APP" \
59 | "$@"
60 |
--------------------------------------------------------------------------------
/Customer/src/main/resources/de/openindex/support/customer/resources/application.properties:
--------------------------------------------------------------------------------
1 | #
2 | # application details
3 | #
4 |
5 | name=RemoteSupportTool
6 | title=Customer Support Tool
7 | version=${project.version}
8 | website.author=https://openindex.de/
9 | website.source=https://github.com/OpenIndex/RemoteSupportTool
10 |
11 |
12 | #
13 | # hide connection settings on application startup
14 | #
15 |
16 | connectionSettingsVisible=true
17 |
18 |
19 | #
20 | # allow users to change connection settings
21 | #
22 |
23 | connectionSettingsEditable=true
24 |
25 |
26 | #
27 | # permanently save options in user directory
28 | #
29 |
30 | permanentOptions=true
31 |
32 |
33 | #
34 | # load truststore (truststore.jks) and truststore password (truststore.jks.txt) from work directory
35 | #
36 |
37 | customTrustStore=true
38 |
39 |
40 | #
41 | # default options
42 | #
43 |
44 | default.host=
45 | default.port=5900
46 | default.ssl=false
47 |
48 |
49 | #
50 | # translations
51 | #
52 |
53 | i18n.appTitle=Customer Support Tool ${project.version}
54 | i18n.title=Remote support for our customers
55 | i18n.info=Use this program to share your screen with our support staff.
56 | i18n.host=Host
57 | i18n.port=Port
58 | i18n.screen=Screen
59 | i18n.ssl=Use SSL encryption.
60 | i18n.connect=Connect
61 | i18n.disconnect=Disconnect
62 | i18n.settings=Settings
63 | i18n.about=About…
64 | i18n.aboutTitle=About this application…
65 | i18n.quit=Quit
66 | i18n.close=Close
67 | i18n.website=Website
68 | i18n.source=Source code
69 | i18n.status.connected=Connection was established.
70 | i18n.status.connecting=Establishing the connection.
71 | i18n.status.disconnected=Connection was closed.
72 | i18n.error=Error
73 | i18n.error.connectionFailed=Can't establish connection!
74 | i18n.invalid=Your settings are invalid.
75 | i18n.invalid.host=No valid SSH hostname was specified.
76 | i18n.invalid.port=No valid port number was specified.
77 | i18n.invalid.screen=No screen was selected.
78 |
--------------------------------------------------------------------------------
/Customer/src/main/java/de/openindex/support/customer/KeyboardTest.java:
--------------------------------------------------------------------------------
1 | package de.openindex.support.customer;
2 |
3 | import de.openindex.support.customer.utils.LinuxUtils;
4 | import de.openindex.support.customer.utils.MacUtils;
5 | import de.openindex.support.customer.utils.WindowsUtils;
6 | import java.awt.GraphicsDevice;
7 | import java.awt.GraphicsEnvironment;
8 | import java.awt.Robot;
9 | import org.apache.commons.lang3.StringUtils;
10 | import org.apache.commons.lang3.SystemUtils;
11 | import org.slf4j.Logger;
12 | import org.slf4j.LoggerFactory;
13 |
14 | public class KeyboardTest {
15 | private final static Logger LOGGER = LoggerFactory.getLogger(KeyboardTest.class);
16 |
17 | public static void main(String[] args) {
18 |
19 | final StringBuilder text = new StringBuilder();
20 | for (String arg : args) {
21 | text.append(arg).append(StringUtils.SPACE);
22 | }
23 | String txt = text.toString().trim();
24 | if (StringUtils.isBlank(txt))
25 | txt = "test123 - äöüß / ÄÖÜ @€ \\";
26 |
27 | try {
28 | if (SystemUtils.IS_OS_WINDOWS) {
29 | LOGGER.debug("Send text on Windows...");
30 | GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0];
31 | Robot robot = new Robot(device);
32 | WindowsUtils.sendText(txt, robot);
33 | } else if (SystemUtils.IS_OS_LINUX) {
34 | LOGGER.debug("Send text on Linux...");
35 | LinuxUtils.sendText(txt);
36 | } else if (SystemUtils.IS_OS_MAC) {
37 | LOGGER.debug("Send text on macOS...");
38 | MacUtils.sendText(txt);
39 | } else {
40 | throw new UnsupportedOperationException("Operating system is not supported.");
41 | }
42 | } catch (Exception ex) {
43 | LOGGER.error("Can't send text!", ex);
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/release/src/assembly/customer-windows-x86.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Server-windows-x86
7 | windows-x86
8 | true
9 |
10 |
11 | dir
12 |
13 |
14 |
15 |
16 |
17 | src/openjdk/runtime/windows-x86
18 | 0644
19 |
20 |
21 |
22 |
23 |
24 | src/scripts/Customer.bat
25 | Start.bat
26 | bin
27 | windows
28 |
29 |
30 | ${project.parent.basedir}/LICENSE.txt
31 | LICENSE.txt
32 |
33 | windows
34 | 0644
35 |
36 |
37 | target/launch4j/Customer-x86.exe
38 | Start.exe
39 | bin
40 | 0644
41 |
42 |
43 |
44 |
45 |
46 | modules
47 | false
48 |
49 |
50 | ${project.groupId}:RemoteSupportTool-Staff:*:*
51 | com.jcraft:*:*:*
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/release/src/assembly/staff-windows-x86.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Client-windows-x86
7 | windows-x86
8 | true
9 |
10 |
11 | dir
12 |
13 |
14 |
15 |
16 |
17 | src/openjdk/runtime/windows-x86
18 | 0644
19 |
20 |
21 |
22 |
23 |
24 | src/scripts/Staff.bat
25 | Start.bat
26 | bin
27 | windows
28 |
29 |
30 | ${project.parent.basedir}/LICENSE.txt
31 | LICENSE.txt
32 |
33 | windows
34 | 0644
35 |
36 |
37 | target/launch4j/Staff-x86.exe
38 | Start.exe
39 | bin
40 | 0644
41 |
42 |
43 |
44 |
45 |
46 | modules
47 | false
48 |
49 |
50 | ${project.groupId}:RemoteSupportTool-Customer:*:*
51 | net.java.dev.jna:*:*:*
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/release/src/assembly/staff-macos-x86-64.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Client-macos-x86-64
7 | macos-x86-64
8 | true
9 |
10 |
11 | dir
12 |
13 |
14 |
15 |
16 |
17 | src/openjdk/runtime/macos-x86-64
18 |
19 |
20 |
21 |
22 |
23 | src/scripts/Staff.sh
24 | Start.sh
25 | bin
26 | unix
27 | 0755
28 |
29 |
30 | ${project.parent.basedir}/LICENSE.txt
31 | LICENSE.txt
32 |
33 | unix
34 | 0644
35 |
36 |
37 | ${project.basedir}/src/icons/help.icns
38 | icon.icns
39 | share
40 | 0644
41 |
42 |
43 |
44 |
45 |
46 | modules
47 | false
48 |
49 |
50 | ${project.groupId}:RemoteSupportTool-Customer:*:*
51 | net.java.dev.jna:*:*:*
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/release/src/assembly/customer-macos-x86-64.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Server-macos-x86-64
7 | macos-x86-64
8 | true
9 |
10 |
11 | dir
12 |
13 |
14 |
15 |
16 |
17 | src/openjdk/runtime/macos-x86-64
18 |
19 |
20 |
21 |
22 |
23 | src/scripts/Customer.sh
24 | Start.sh
25 | bin
26 | unix
27 | 0755
28 |
29 |
30 | ${project.parent.basedir}/LICENSE.txt
31 | LICENSE.txt
32 |
33 | unix
34 | 0644
35 |
36 |
37 | ${project.basedir}/src/icons/desktopshare.icns
38 | icon.icns
39 | share
40 | 0644
41 |
42 |
43 |
44 |
45 |
46 | modules
47 | false
48 |
49 |
50 | ${project.groupId}:RemoteSupportTool-Staff:*:*
51 | com.jcraft:*:*:*
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | target
2 |
3 | # Don't put generated keystore / truststore files in repository.
4 | share/ssl/*
5 | !share/ssl/init.sh
6 | !share/ssl/README.md
7 |
8 |
9 | #
10 | # Default entries for IntelliJ IDEA
11 | # based on https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore
12 | #
13 |
14 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
15 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
16 |
17 | # User-specific stuff
18 | .idea/**/workspace.xml
19 | .idea/**/tasks.xml
20 | .idea/**/usage.statistics.xml
21 | .idea/**/dictionaries/*
22 | .idea/**/shelf
23 |
24 | # Generated files
25 | .idea/**/contentModel.xml
26 |
27 | # Sensitive or high-churn files
28 | .idea/**/dataSources/
29 | .idea/**/dataSources.ids
30 | .idea/**/dataSources.local.xml
31 | .idea/**/sqlDataSources.xml
32 | .idea/**/dynamic.xml
33 | .idea/**/uiDesigner.xml
34 | .idea/**/dbnavigator.xml
35 |
36 | # Gradle
37 | .idea/**/gradle.xml
38 | .idea/**/libraries
39 |
40 | # Gradle and Maven with auto-import
41 | # When using Gradle or Maven with auto-import, you should exclude module files,
42 | # since they will be recreated, and may cause churn. Uncomment if using
43 | # auto-import.
44 | .idea/modules.xml
45 | .idea/*.iml
46 | .idea/modules
47 |
48 | # CMake
49 | cmake-build-*/
50 |
51 | # Mongo Explorer plugin
52 | .idea/**/mongoSettings.xml
53 |
54 | # File-based project format
55 | *.iws
56 |
57 | # IntelliJ
58 | out/
59 |
60 | # mpeltonen/sbt-idea plugin
61 | .idea_modules/
62 |
63 | # JIRA plugin
64 | atlassian-ide-plugin.xml
65 |
66 | # Cursive Clojure plugin
67 | .idea/replstate.xml
68 |
69 | # Crashlytics plugin (for Android Studio and IntelliJ)
70 | com_crashlytics_export_strings.xml
71 | crashlytics.properties
72 | crashlytics-build.properties
73 | fabric.properties
74 |
75 | # Editor-based Rest Client
76 | .idea/httpRequests
77 |
78 | # Android studio 3.1+ serialized cache file
79 | .idea/caches/build_file_checksums.ser
80 |
81 |
82 | #
83 | # Modifications to the default entries.
84 | #
85 |
86 | # Keep a global dictionary in repository.
87 | !.idea/**/dictionaries/global.xml
88 |
89 |
--------------------------------------------------------------------------------
/release/src/assembly/customer-windows-x86-64.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Server-windows-x86-64
7 | windows-x86-64
8 | true
9 |
10 |
11 | dir
12 |
13 |
14 |
15 |
16 |
17 | src/openjdk/runtime/windows-x86-64
18 | 0644
19 |
20 |
21 |
22 |
23 |
24 | src/scripts/Customer.bat
25 | Start.bat
26 | bin
27 | windows
28 |
29 |
30 | ${project.parent.basedir}/LICENSE.txt
31 | LICENSE.txt
32 |
33 | windows
34 | 0644
35 |
36 |
37 | target/launch4j/Customer-x86-64.exe
38 | Start.exe
39 | bin
40 | 0644
41 |
42 |
43 |
44 |
45 |
46 | modules
47 | false
48 |
49 |
50 | ${project.groupId}:RemoteSupportTool-Staff:*:*
51 | com.jcraft:*:*:*
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/release/src/assembly/staff-windows-x86-64.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Client-windows-x86-64
7 | windows-x86-64
8 | true
9 |
10 |
11 | dir
12 |
13 |
14 |
15 |
16 |
17 | src/openjdk/runtime/windows-x86-64
18 | 0644
19 |
20 |
21 |
22 |
23 |
24 | src/scripts/Staff.bat
25 | Start.bat
26 | bin
27 | windows
28 |
29 |
30 | ${project.parent.basedir}/LICENSE.txt
31 | LICENSE.txt
32 |
33 | windows
34 | 0644
35 |
36 |
37 | target/launch4j/Staff-x86-64.exe
38 | Start.exe
39 | bin
40 | 0644
41 |
42 |
43 |
44 |
45 |
46 | modules
47 | false
48 |
49 |
50 | ${project.groupId}:RemoteSupportTool-Customer:*:*
51 | net.java.dev.jna:*:*:*
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 |
4 | ## Notes about branches
5 |
6 | This project follows the principles of the [GitFlow branching model](http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/) as [proposed by Vincent Driessen](http://nvie.com/posts/a-successful-git-branching-model/). According to this model you will find these branches at the GitHub project page:
7 |
8 | - The [master branch](https://github.com/OpenIndex/RemoteSupportTool/tree/master) contains the current stable releases. No development is directly taking place in that branch.
9 |
10 | - The [develop branch](https://github.com/OpenIndex/RemoteSupportTool/tree/develop) represents the current state of development. Changes from this branch are merged into [master](https://github.com/OpenIndex/RemoteSupportTool/tree/master) when a new version is released.
11 |
12 | - For more complex features you may also find different feature branches. These are derived from [develop branch](https://github.com/OpenIndex/RemoteSupportTool/tree/develop) and are merged back / removed as soon as the feature is ready for release.
13 |
14 | > **Notice:** If you like to provide changes to this project, you should always use the [develop branch](https://github.com/OpenIndex/RemoteSupportTool/tree/develop) as basis for your customization. Feel free to create separate feature branches for any custom feature you like to share.
15 |
16 |
17 | ## Create a pull request
18 |
19 | We love pull requests. Here's a quick guide.
20 |
21 | - Fork this project into you GitHub profile.
22 |
23 | - Clone the [develop branch](https://github.com/OpenIndex/RemoteSupportTool/tree/develop) of the repository to your
24 | local disk:
25 | ```
26 | git clone -b develop git@github.com:your-username/RemoteSupportTool.git
27 | ```
28 |
29 | - Do your changes to the local repository and push the changes back into your fork at GitHub.
30 |
31 | - [Submit a pull request](https://github.com/OpenIndex/RemoteSupportTool/compare/) with the changes from your fork.
32 |
33 | At this point you're waiting on us. We like to comment on pull requests as soon as possible. We may suggest some changes or improvements or alternatives.
34 |
35 | Some things that will increase the chance that your pull request is accepted:
36 |
37 | - Test your changes.
38 |
39 | - Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
40 |
--------------------------------------------------------------------------------
/Staff/src/main/resources/de/openindex/support/staff/resources/application_de.properties:
--------------------------------------------------------------------------------
1 | #
2 | # translations
3 | #
4 |
5 | i18n.appTitle=Mitarbeiter Support Tool ${project.version}
6 | i18n.port=Port
7 | i18n.sslEncryption=SSL-Verschlüsselung
8 | i18n.sshTunneling=SSH-Tunnel
9 | i18n.sshHost=SSH-Host
10 | i18n.sshPort=SSH-Port
11 | i18n.sshRemotePort=Entfernter Port
12 | i18n.sshUser=SSH-Benutzer
13 | i18n.sshKey=SSH-Schlüssel
14 | i18n.sshKeySelect=Privaten Schlüssel wählen.
15 | i18n.sshKeyAuth=Authentifizierung via öffentlichem Schlüssel.
16 | i18n.start=Start
17 | i18n.stop=Stop
18 | i18n.options=Optionen
19 | i18n.actions=Aktionen
20 | i18n.sendKeyboardInput=Tastatur-Eingaben senden
21 | i18n.sendMouseInput=Maus-Eingaben senden
22 | i18n.copyText=Text kopieren
23 | i18n.copyTextTitle=Auf entfernte Maschine kopieren
24 | i18n.copyTextDefault=Tragen Sie den Text ein, der in die Zwischenablage der entfernten Maschine kopiert werden soll.
25 | i18n.about=Über…
26 | i18n.aboutTitle=Über dieses Programm…
27 | i18n.quit=Beenden
28 | i18n.close=Schließen
29 | i18n.submit=Übernehmen
30 | i18n.cancel=Abbrechen
31 | i18n.website=Webseite
32 | i18n.source=Quelltext
33 | i18n.listening=Lausche auf
34 | i18n.connectionClosed=Verbindung wurde getrennt.
35 | i18n.sshAuth=SSH-Authentifizierung
36 | i18n.sshAuthPassphrase=Tragen Sie Ihre SSH-Passphrase ein.
37 | i18n.sshAuthPassword=Tragen Sie Ihr SSH-Passwort ein.
38 | i18n.sshQuestion=Frage zur SSH-Verbindung:
39 | i18n.sshInformation=Information zur SSH-Verbindung:
40 | i18n.information=Information
41 | i18n.question=Frage
42 | i18n.error=Fehler
43 | i18n.error.sshTunnelFailed=SSH-Tunnel kann nicht erzeugt werden!
44 | i18n.error.socketFailed=Server-Socket kann nicht erzeugt werden!
45 | i18n.error.communicationFailed=Die Kommunikation ist fehlgeschlagen!
46 | i18n.invalid=Ihre Einstellungen sind fehlerhaft.
47 | i18n.invalid.port=Die lokale Portnummer ist ungültig.
48 | i18n.invalid.keystoreNotConfigured=Kein Keystore wurde konfiguriert.
49 | i18n.invalid.keystoreNotFound=Kein Keystore gefunden unter:
50 | i18n.invalid.keystorePasswordMissing=Keine Passwort zum Keystore konfiguriert.
51 | i18n.invalid.sshHost=Kein gültiger SSH-Hostname angegeben.
52 | i18n.invalid.sshPort=Die SSH-Portnummer ist ungültig.
53 | i18n.invalid.sshRemotePort=Die entfernte Portnummer ist ungültig.
54 | i18n.invalid.sshUser=Kein gültiger SSH-Benutzername angegeben.
55 | i18n.invalid.sshKey=Kein gültiger SSH-Schlüssel ausgewählt.
56 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/monitor/MonitoringOutputStream.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.monitor;
17 |
18 | import java.io.FilterOutputStream;
19 | import java.io.IOException;
20 | import java.io.OutputStream;
21 | import java.util.Date;
22 | import org.apache.commons.lang3.ObjectUtils;
23 | import org.slf4j.Logger;
24 | import org.slf4j.LoggerFactory;
25 |
26 | /**
27 | * OutputStream, that collects statistical records about data transfer.
28 | *
29 | * @author Andreas Rudolph
30 | */
31 | public class MonitoringOutputStream extends FilterOutputStream {
32 | @SuppressWarnings("unused")
33 | private final static Logger LOGGER = LoggerFactory.getLogger(MonitoringOutputStream.class);
34 | private final DataMonitor monitor;
35 |
36 | @SuppressWarnings("unused")
37 | public MonitoringOutputStream(OutputStream out) {
38 | this(out, null);
39 | }
40 |
41 | public MonitoringOutputStream(OutputStream out, DataMonitor monitor) {
42 | super(out);
43 | this.monitor = ObjectUtils.defaultIfNull(monitor, new DataMonitor());
44 | }
45 |
46 | @SuppressWarnings("unused")
47 | public DataMonitor getMonitor() {
48 | return monitor;
49 | }
50 |
51 | public void write(int b) throws IOException {
52 | Date start = new Date();
53 | super.write(b);
54 | monitor.addSample(1, start, new Date());
55 | }
56 |
57 | public void write(byte data[]) throws IOException {
58 | Date start = new Date();
59 | super.write(data);
60 | monitor.addSample(data.length, start, new Date());
61 | }
62 |
63 | public void write(byte data[], int off, int len) throws IOException {
64 | Date start = new Date();
65 | super.write(data, off, len);
66 | monitor.addSample(len, start, new Date());
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/monitor/MonitoringInputStream.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.monitor;
17 |
18 | import java.io.FilterInputStream;
19 | import java.io.IOException;
20 | import java.io.InputStream;
21 | import java.util.Date;
22 | import org.apache.commons.lang3.ObjectUtils;
23 | import org.slf4j.Logger;
24 | import org.slf4j.LoggerFactory;
25 |
26 | /**
27 | * InputStream, that collects statistical records about data transfer.
28 | *
29 | * @author Andreas Rudolph
30 | */
31 | public class MonitoringInputStream extends FilterInputStream {
32 | @SuppressWarnings("unused")
33 | private final static Logger LOGGER = LoggerFactory.getLogger(MonitoringInputStream.class);
34 | private final DataMonitor monitor;
35 |
36 | @SuppressWarnings("unused")
37 | public MonitoringInputStream(InputStream in) {
38 | this(in, null);
39 | }
40 |
41 | public MonitoringInputStream(InputStream in, DataMonitor monitor) {
42 | super(in);
43 | this.monitor = ObjectUtils.defaultIfNull(monitor, new DataMonitor());
44 | }
45 |
46 | @SuppressWarnings("unused")
47 | public final DataMonitor getMonitor() {
48 | return monitor;
49 | }
50 |
51 | public int read() throws IOException {
52 | Date start = new Date();
53 | int b = super.read();
54 | monitor.addSample(1, start, new Date());
55 | return b;
56 | }
57 |
58 | public int read(byte data[]) throws IOException {
59 | Date start = new Date();
60 | int cnt = super.read(data);
61 | monitor.addSample(cnt, start, new Date());
62 | return cnt;
63 | }
64 |
65 | public int read(byte data[], int off, int len) throws IOException {
66 | Date start = new Date();
67 | int cnt = super.read(data, off, len);
68 | monitor.addSample(cnt, start, new Date());
69 | return cnt;
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/gui/SidebarPanel.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.gui;
17 |
18 | import java.awt.Dimension;
19 | import java.awt.Graphics;
20 | import java.awt.Graphics2D;
21 | import java.awt.image.BufferedImage;
22 | import javax.swing.JPanel;
23 | import org.slf4j.Logger;
24 | import org.slf4j.LoggerFactory;
25 |
26 | /**
27 | * Panel, that renders a sidebar with multiple background images.
28 | *
29 | * @author Andreas Rudolph
30 | */
31 | public class SidebarPanel extends JPanel {
32 | @SuppressWarnings("unused")
33 | private final static Logger LOGGER = LoggerFactory.getLogger(SidebarPanel.class);
34 |
35 | private final BufferedImage sidebarImage;
36 | private final BufferedImage brandingImage;
37 |
38 | public SidebarPanel(BufferedImage sidebarImage, BufferedImage brandingImage) {
39 | super();
40 | this.sidebarImage = sidebarImage;
41 | this.brandingImage = brandingImage;
42 | this.setOpaque(false);
43 | }
44 |
45 | @Override
46 | public Dimension getPreferredSize() {
47 | return new Dimension(sidebarImage.getWidth(), sidebarImage.getHeight());
48 | }
49 |
50 | @Override
51 | protected void paintComponent(Graphics g) {
52 | super.paintComponent(g);
53 |
54 | final int panelWidth = getWidth();
55 | final int panelHeight = getHeight();
56 | final Graphics2D g2d = (Graphics2D) g;
57 |
58 | g2d.drawImage(sidebarImage, 0, 0, null);
59 |
60 | if (brandingImage != null) {
61 | final int brandingWidth = brandingImage.getWidth();
62 | final int brandingHeight = brandingImage.getHeight();
63 |
64 | final int x = (panelWidth - brandingWidth) / 2;
65 | final int y = panelHeight - brandingHeight;
66 | g2d.drawImage(brandingImage, x, y, null);
67 | }
68 |
69 | g2d.dispose();
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/release/src/assembly/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | modules
7 | ${project.parent.artifactId}-${project.version}
8 | false
9 |
10 |
11 | dir
12 |
13 |
14 |
15 |
16 | true
17 |
18 |
19 |
20 | ${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}
21 |
22 | false
23 |
24 | ${project.groupId}:*
25 |
26 |
27 |
28 |
58 |
59 |
60 |
61 |
62 |
63 | false
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/release/src/macos/Staff.app/Contents/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleInfoDictionaryVersion
6 | 6.0
7 |
8 | CFBundleIdentifier
9 | de.openindex.support.staff.default
10 |
11 | CFBundleName
12 | StaffSupport
13 |
14 | CFBundleDisplayName
15 | StaffSupportTool
16 |
17 | CFBundleVersion
18 | {VERSION}
19 |
20 | CFBundlePackageType
21 | APPL
22 |
23 | CFBundleExecutable
24 | JavaMacLauncher
25 |
26 | CFBundleIconFile
27 | share/icon.icns
28 |
29 | CFBundleDevelopmentRegion
30 | en-US
31 |
32 | LSApplicationCategoryType
33 | public.app-category.utilities
34 |
35 | LSMinimumSystemVersion
36 | 10.9
37 |
38 | NSHumanReadableCopyright
39 | ©2015-2021 OpenIndex.de
40 |
41 | NSHighResolutionCapable
42 |
43 |
44 | JavaMacLauncher
45 |
46 | JavaHome
47 | Contents/Resources
48 | JavaCommand
49 | Contents/Resources/bin/java
50 | JavaOptions
51 |
52 | -Dfile.encoding=UTF-8
53 |
54 | JavaModulePath
55 |
56 | Contents/Resources/modules
57 |
58 | ApplicationCommand
59 | -m de.openindex.support.staff/de.openindex.support.staff.StaffApplication
60 | HeapMinimum
61 | 32m
62 | HeapMaximum
63 | 512m
64 | DockName
65 |
66 | default
67 | Staff Support
68 | de
69 | Mitarbeiter Support
70 |
71 | DockIcon
72 | Contents/Resources/share/icon.icns
73 | UseScreenMenuBar
74 |
75 | LaunchInForeground
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/release/src/macos/Customer.app/Contents/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleInfoDictionaryVersion
6 | 6.0
7 |
8 | CFBundleIdentifier
9 | de.openindex.support.customer.default
10 |
11 | CFBundleName
12 | CustomerSupport
13 |
14 | CFBundleDisplayName
15 | CustomerSupportTool
16 |
17 | CFBundleVersion
18 | {VERSION}
19 |
20 | CFBundlePackageType
21 | APPL
22 |
23 | CFBundleExecutable
24 | JavaMacLauncher
25 |
26 | CFBundleIconFile
27 | share/icon.icns
28 |
29 | CFBundleDevelopmentRegion
30 | en-US
31 |
32 | LSApplicationCategoryType
33 | public.app-category.utilities
34 |
35 | LSMinimumSystemVersion
36 | 10.9
37 |
38 | NSHumanReadableCopyright
39 | ©2015-2021 OpenIndex.de
40 |
41 | NSHighResolutionCapable
42 |
43 |
44 | JavaMacLauncher
45 |
46 | JavaHome
47 | Contents/Resources
48 | JavaCommand
49 | Contents/Resources/bin/java
50 | JavaOptions
51 |
52 | -Dfile.encoding=UTF-8
53 |
54 | JavaModulePath
55 |
56 | Contents/Resources/modules
57 |
58 | ApplicationCommand
59 | -m de.openindex.support.customer/de.openindex.support.customer.CustomerApplication
60 | HeapMinimum
61 | 32m
62 | HeapMaximum
63 | 512m
64 | DockName
65 |
66 | default
67 | Customer Support
68 | de
69 | Kunden Support
70 |
71 | DockIcon
72 | Contents/Resources/share/icon.icns
73 | UseScreenMenuBar
74 |
75 | LaunchInForeground
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/AbstractOptions.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core;
17 |
18 | import java.io.File;
19 | import java.io.FileInputStream;
20 | import java.io.FileOutputStream;
21 | import java.io.IOException;
22 | import java.io.InputStream;
23 | import java.io.OutputStream;
24 | import java.util.Properties;
25 | import java.util.ResourceBundle;
26 | import org.apache.commons.lang3.StringUtils;
27 | import org.slf4j.Logger;
28 | import org.slf4j.LoggerFactory;
29 |
30 | /**
31 | * General application options.
32 | *
33 | * @author Andreas Rudolph
34 | */
35 | public abstract class AbstractOptions extends Properties {
36 | @SuppressWarnings("unused")
37 | private final static Logger LOGGER = LoggerFactory.getLogger(AbstractOptions.class);
38 | protected final File location;
39 | protected final ResourceBundle settings;
40 |
41 | protected AbstractOptions(File location, ResourceBundle settings) {
42 | super();
43 | this.location = location;
44 | this.settings = settings;
45 | }
46 |
47 | protected Boolean getPropertyAsBoolean(String key, Boolean defaultValue) {
48 | String value = StringUtils.trimToNull(this.getProperty(key));
49 | return (value != null) ?
50 | Boolean.valueOf(value) :
51 | defaultValue;
52 | }
53 |
54 | protected Integer getPropertyAsInteger(String key, Integer defaultValue) {
55 | String value = StringUtils.trimToNull(this.getProperty(key));
56 | try {
57 | return (value != null) ?
58 | Integer.valueOf(value) :
59 | defaultValue;
60 | } catch (NumberFormatException ex) {
61 | LOGGER.warn("Can't read option '" + key + "'!", ex);
62 | return defaultValue;
63 | }
64 | }
65 |
66 | public void read() throws IOException {
67 | if (!Boolean.parseBoolean(settings.getString("permanentOptions"))) return;
68 | if (!this.location.isFile()) return;
69 | try (InputStream input = new FileInputStream(this.location)) {
70 | this.load(input);
71 | }
72 | }
73 |
74 | public void write() throws IOException {
75 | if (!Boolean.parseBoolean(settings.getString("permanentOptions"))) return;
76 | try (OutputStream output = new FileOutputStream(this.location)) {
77 | this.store(output, null);
78 | }
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/Core/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 |
8 | RemoteSupportTool
9 | de.openindex.support
10 | 1.1.2
11 |
12 |
13 | RemoteSupportTool-Core
14 |
15 | RemoteSupportTool-Core
16 | RemoteSupportTool is a cross platform solution for remote support.
17 | https://openindex.de
18 |
19 | OpenIndex.de
20 | https://openindex.de
21 |
22 |
23 |
24 | The Apache Software License, Version 2.0
25 | http://www.apache.org/licenses/LICENSE-2.0.txt
26 | repo
27 | A business-friendly OSS license
28 |
29 |
30 |
31 |
32 |
33 | andy
34 | Andreas Rudolph
35 | andy@openindex.de
36 | OpenIndex.de
37 | https://openindex.de/
38 |
39 |
40 |
41 |
42 |
43 | commons-io
44 | commons-io
45 |
46 |
47 | org.apache.commons
48 | commons-lang3
49 |
50 |
51 | org.apache.commons
52 | commons-text
53 |
54 |
55 | ch.qos.logback
56 | logback-classic
57 |
58 |
59 | org.slf4j
60 | slf4j-api
61 |
62 |
63 |
64 |
65 |
66 |
67 | ${project.basedir}/src/main/resources
68 | true
69 |
70 | **/*.properties
71 | **/*.html
72 |
73 |
74 |
75 | ${project.basedir}/src/main/resources
76 | false
77 |
78 | **/*.properties
79 | **/*.html
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/Staff/src/main/resources/de/openindex/support/staff/resources/application.properties:
--------------------------------------------------------------------------------
1 | #
2 | # application details
3 | #
4 |
5 | name=RemoteSupportTool
6 | title=Staff Support Tool
7 | version=${project.version}
8 | website.author=https://openindex.de/
9 | website.source=https://github.com/OpenIndex/RemoteSupportTool
10 |
11 |
12 | #
13 | # permanently save options in user directory
14 | #
15 |
16 | permanentOptions=true
17 |
18 |
19 | #
20 | # check host keys for SSH connections
21 | #
22 |
23 | sshHostKeyCheck=true
24 |
25 |
26 | #
27 | # load keystore (keystore.jks) and keystore password (keystore.jks.txt) from work directory
28 | #
29 |
30 | customKeyStore=true
31 |
32 |
33 | #
34 | # default options
35 | #
36 |
37 | default.localPort=5900
38 | default.ssh=false
39 | default.sshHost=
40 | default.sshKey=
41 | default.sshPort=22
42 | default.sshKeyAuth=false
43 | default.sshRemotePort=12345
44 | default.sshUser=
45 | default.ssl=false
46 |
47 |
48 | #
49 | # translations
50 | #
51 |
52 | i18n.appTitle=Staff Support Tool ${project.version}
53 | i18n.port=Port
54 | i18n.sslEncryption=SSL encryption
55 | i18n.sshTunneling=SSH tunneling
56 | i18n.sshHost=SSH host
57 | i18n.sshPort=SSH port
58 | i18n.sshRemotePort=Remote port
59 | i18n.sshUser=SSH user
60 | i18n.sshKey=SSH key
61 | i18n.sshKeySelect=Select private key.
62 | i18n.sshKeyAuth=Authentication via public key.
63 | i18n.start=Start
64 | i18n.stop=Stop
65 | i18n.options=Options
66 | i18n.actions=Actions
67 | i18n.sendKeyboardInput=Send keyboard input
68 | i18n.sendMouseInput=Send mouse input
69 | i18n.copyText=Copy text
70 | i18n.copyTextTitle=Paste on the remote machine
71 | i18n.copyTextDefault=Enter the text you like to copy into the clipboard of the remote machine.
72 | i18n.about=About…
73 | i18n.aboutTitle=About this application…
74 | i18n.quit=Quit
75 | i18n.close=Close
76 | i18n.submit=Submit
77 | i18n.cancel=Cancel
78 | i18n.website=Website
79 | i18n.source=Source code
80 | i18n.listening=Listening at
81 | i18n.connectionClosed=Connection was closed.
82 | i18n.sshAuth=SSH authentication
83 | i18n.sshAuthPassphrase=Enter your SSH passphrase.
84 | i18n.sshAuthPassword=Enter your SSH password.
85 | i18n.sshQuestion=Question about SSH connection:
86 | i18n.sshInformation=Information about SSH connection:
87 | i18n.information=Information
88 | i18n.question=Question
89 | i18n.error=Error
90 | i18n.error.sshTunnelFailed=Can't setup SSH tunnel!
91 | i18n.error.socketFailed=Can't setup server socket!
92 | i18n.error.communicationFailed=Can't initiate communication!
93 | i18n.invalid=Your settings are invalid.
94 | i18n.invalid.port=No valid local port number was specified.
95 | i18n.invalid.keystoreNotConfigured=No keystore configured.
96 | i18n.invalid.keystoreNotFound=No keystore found at:
97 | i18n.invalid.keystorePasswordMissing=No keystore password configured.
98 | i18n.invalid.sshHost=No valid SSH hostname was specified.
99 | i18n.invalid.sshPort=No valid SSH port number was specified.
100 | i18n.invalid.sshRemotePort=No valid remote port number was specified.
101 | i18n.invalid.sshUser=No valid SSH username was specified.
102 | i18n.invalid.sshKey=No valid SSH key was selected.
103 |
--------------------------------------------------------------------------------
/share/ssl/init.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Copyright 2015-2021 OpenIndex.de
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 |
18 | KEYTOOL="keytool"
19 | ALIAS="support"
20 | VALIDITY=9999
21 |
22 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
23 | KEYSTORE="$DIR/keystore.jks"
24 | TRUSTSTORE="$DIR/truststore.jks"
25 | CERT="$DIR/$ALIAS.crt"
26 |
27 | KEYSTORE_PASSWORD="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c16)"
28 | TRUSTSTORE_PASSWORD="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c16)"
29 |
30 | set -e
31 |
32 | echo ""
33 | echo "--------------------------------------------------------"
34 | echo " Generating key pair..."
35 | echo "--------------------------------------------------------"
36 | echo ""
37 |
38 | rm -f "$KEYSTORE"
39 | "$KEYTOOL" \
40 | -genkeypair \
41 | -keyalg RSA \
42 | -keysize 4096 \
43 | -alias "$ALIAS" \
44 | -validity "$VALIDITY" \
45 | -keystore "$KEYSTORE" \
46 | -keypass "$KEYSTORE_PASSWORD" \
47 | -storepass "$KEYSTORE_PASSWORD"
48 |
49 | echo ""
50 | echo "--------------------------------------------------------"
51 | echo " Exporting certificate..."
52 | echo "--------------------------------------------------------"
53 | echo ""
54 |
55 | rm -f "$CERT"
56 | "$KEYTOOL" \
57 | -export \
58 | -alias "$ALIAS" \
59 | -file "$CERT" \
60 | -keystore "$KEYSTORE" \
61 | -storepass "$KEYSTORE_PASSWORD"
62 |
63 | echo ""
64 | echo "--------------------------------------------------------"
65 | echo " Adding certificate to truststore..."
66 | echo "--------------------------------------------------------"
67 | echo ""
68 |
69 | rm -f "$TRUSTSTORE"
70 | "$KEYTOOL" \
71 | -import \
72 | -v \
73 | -alias "$ALIAS" \
74 | -file "$CERT" \
75 | -keystore "$TRUSTSTORE" \
76 | -keypass "$TRUSTSTORE_PASSWORD" \
77 | -storepass "$TRUSTSTORE_PASSWORD"
78 |
79 | echo ""
80 | echo "--------------------------------------------------------"
81 | echo ""
82 | echo "The keystore for the staff application is stored at"
83 | echo ""
84 | echo " $KEYSTORE"
85 | echo ""
86 | echo "and protected with the password"
87 | echo ""
88 | echo " $KEYSTORE_PASSWORD"
89 |
90 | echo ""
91 | echo "--------------------------------------------------------"
92 | echo ""
93 | echo "The truststore for the customer application is stored at:"
94 | echo ""
95 | echo " $TRUSTSTORE"
96 | echo ""
97 | echo "and protected with the password"
98 | echo ""
99 | echo " $TRUSTSTORE_PASSWORD"
100 | echo ""
101 |
102 | echo "$KEYSTORE_PASSWORD" > "$KEYSTORE.txt"
103 | echo "$TRUSTSTORE_PASSWORD" > "$TRUSTSTORE.txt"
104 |
--------------------------------------------------------------------------------
/release/src/openjdk/init-linux-x86.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Build a runtime environment for Linux 32-bit x86 (i386).
4 | # Copyright 2015-2021 OpenIndex.de
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20 | DOWNLOADS_DIR="${DIR}/downloads"
21 | LOCAL_DIR="${DIR}/local"
22 | TEMP_DIR="${DIR}/temp"
23 |
24 | #
25 | # initialization
26 | #
27 |
28 | set -e
29 | # shellcheck disable=SC1090
30 | source "${DIR}/init.sh"
31 | mkdir -p "${LOCAL_DIR}"
32 | rm -Rf "${TEMP_DIR}"
33 | mkdir -p "${TEMP_DIR}"
34 |
35 | TARGET="linux-x86"
36 | TARGET_JDK="${LINUX_X86_JDK}"
37 |
38 | #
39 | # download OpenJDK binaries
40 | #
41 |
42 | mkdir -p "${DOWNLOADS_DIR}"
43 | cd "${DOWNLOADS_DIR}"
44 |
45 | if [[ ! -f "${DOWNLOADS_DIR}/$(basename "${TARGET_JDK}")" ]]; then
46 | echo "Downloading OpenJDK for ${TARGET}..."
47 | #wget -nc "${TARGET_JDK}"
48 | curl -L \
49 | -o "$(basename "${TARGET_JDK}")" \
50 | "${TARGET_JDK}"
51 | fi
52 |
53 | if [[ ! -f "${DOWNLOADS_DIR}/$(basename "${SYSTEM_JDK}")" ]]; then
54 | echo "Downloading OpenJDK for jlink..."
55 | #wget -nc "${SYSTEM_JDK}"
56 | curl -L \
57 | -o "$(basename "${SYSTEM_JDK}")" \
58 | "${SYSTEM_JDK}"
59 | fi
60 |
61 | #
62 | # extract OpenJDK modules
63 | #
64 |
65 | echo "Extracting OpenJDK modules for ${TARGET}..."
66 | mkdir -p "${TEMP_DIR}/jdk"
67 | cd "${TEMP_DIR}/jdk"
68 | extract_archive "${DOWNLOADS_DIR}/$(basename "${TARGET_JDK}")"
69 | mv "$(ls -1)/jmods" "${TEMP_DIR}"
70 |
71 | #
72 | # extract OpenJDK for jlink
73 | #
74 |
75 | echo "Extracting OpenJDK for jlink..."
76 | SYSTEM_JDK_DIR="${LOCAL_DIR}/$(basename "${SYSTEM_JDK}")"
77 | if [[ ! -d "${SYSTEM_JDK_DIR}" ]]; then
78 | mkdir -p "${SYSTEM_JDK_DIR}"
79 | cd "${SYSTEM_JDK_DIR}"
80 | extract_archive "${DOWNLOADS_DIR}/$(basename "${SYSTEM_JDK}")"
81 | fi
82 | cd "${SYSTEM_JDK_DIR}"
83 | if [[ -d "${SYSTEM_JDK_DIR}/$(ls -1)/Contents/Home" ]]; then
84 | JLINK="${SYSTEM_JDK_DIR}/$(ls -1)/Contents/Home/bin/jlink"
85 | else
86 | JLINK="${SYSTEM_JDK_DIR}/$(ls -1)/bin/jlink"
87 | fi
88 |
89 | #
90 | # build OpenJDK runtime
91 | #
92 |
93 | cd "${DIR}"
94 | rm -Rf "${DIR}/runtime/${TARGET}"
95 | mkdir -p "${DIR}/runtime"
96 |
97 | echo "Building runtime environment for ${TARGET}..."
98 | "$JLINK" \
99 | --add-modules "${MODULES}" \
100 | --module-path "${TEMP_DIR}/jmods" \
101 | --output "${DIR}/runtime/${TARGET}" \
102 | --compress=1 \
103 | --strip-debug \
104 | --no-header-files \
105 | --no-man-pages
106 |
107 | configure_runtime "${DIR}/runtime/${TARGET}"
108 |
109 | #
110 | # cleanup
111 | #
112 |
113 | rm -Rf "${TEMP_DIR}"
114 |
--------------------------------------------------------------------------------
/release/src/openjdk/init-linux-x86-64.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Build a runtime environment for Linux 64-bit x86 (amd64).
4 | # Copyright 2015-2021 OpenIndex.de
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20 | DOWNLOADS_DIR="${DIR}/downloads"
21 | LOCAL_DIR="${DIR}/local"
22 | TEMP_DIR="${DIR}/temp"
23 |
24 | #
25 | # initialization
26 | #
27 |
28 | set -e
29 | # shellcheck disable=SC1090
30 | source "${DIR}/init.sh"
31 | mkdir -p "${LOCAL_DIR}"
32 | rm -Rf "${TEMP_DIR}"
33 | mkdir -p "${TEMP_DIR}"
34 |
35 | TARGET="linux-x86-64"
36 | TARGET_JDK="${LINUX_X86_64_JDK}"
37 |
38 | #
39 | # download OpenJDK binaries
40 | #
41 |
42 | mkdir -p "${DOWNLOADS_DIR}"
43 | cd "${DOWNLOADS_DIR}"
44 |
45 | if [[ ! -f "${DOWNLOADS_DIR}/$(basename "${TARGET_JDK}")" ]]; then
46 | echo "Downloading OpenJDK for ${TARGET}..."
47 | #wget -nc "${TARGET_JDK}"
48 | curl -L \
49 | -o "$(basename "${TARGET_JDK}")" \
50 | "${TARGET_JDK}"
51 | fi
52 |
53 | if [[ ! -f "${DOWNLOADS_DIR}/$(basename "${SYSTEM_JDK}")" ]]; then
54 | echo "Downloading OpenJDK for jlink..."
55 | #wget -nc "${SYSTEM_JDK}"
56 | curl -L \
57 | -o "$(basename "${SYSTEM_JDK}")" \
58 | "${SYSTEM_JDK}"
59 | fi
60 |
61 | #
62 | # extract OpenJDK modules
63 | #
64 |
65 | echo "Extracting OpenJDK modules for ${TARGET}..."
66 | mkdir -p "${TEMP_DIR}/jdk"
67 | cd "${TEMP_DIR}/jdk"
68 | extract_archive "${DOWNLOADS_DIR}/$(basename "${TARGET_JDK}")"
69 | mv "$(ls -1)/jmods" "${TEMP_DIR}"
70 |
71 | #
72 | # extract OpenJDK for jlink
73 | #
74 |
75 | echo "Extracting OpenJDK for jlink..."
76 | SYSTEM_JDK_DIR="${LOCAL_DIR}/$(basename "${SYSTEM_JDK}")"
77 | if [[ ! -d "${SYSTEM_JDK_DIR}" ]]; then
78 | mkdir -p "${SYSTEM_JDK_DIR}"
79 | cd "${SYSTEM_JDK_DIR}"
80 | extract_archive "${DOWNLOADS_DIR}/$(basename "${SYSTEM_JDK}")"
81 | fi
82 | cd "${SYSTEM_JDK_DIR}"
83 | if [[ -d "${SYSTEM_JDK_DIR}/$(ls -1)/Contents/Home" ]]; then
84 | JLINK="${SYSTEM_JDK_DIR}/$(ls -1)/Contents/Home/bin/jlink"
85 | else
86 | JLINK="${SYSTEM_JDK_DIR}/$(ls -1)/bin/jlink"
87 | fi
88 |
89 | #
90 | # build OpenJDK runtime
91 | #
92 |
93 | cd "${DIR}"
94 | rm -Rf "${DIR}/runtime/${TARGET}"
95 | mkdir -p "${DIR}/runtime"
96 |
97 | echo "Building runtime environment for ${TARGET}..."
98 | "$JLINK" \
99 | --add-modules "${MODULES}" \
100 | --module-path "${TEMP_DIR}/jmods" \
101 | --output "${DIR}/runtime/${TARGET}" \
102 | --compress=1 \
103 | --strip-debug \
104 | --no-header-files \
105 | --no-man-pages
106 |
107 | configure_runtime "${DIR}/runtime/${TARGET}"
108 |
109 | #
110 | # cleanup
111 | #
112 |
113 | rm -Rf "${TEMP_DIR}"
114 |
--------------------------------------------------------------------------------
/release/src/openjdk/init.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Detect operating system and select the appropriate OpenJDK bundle.
4 | # Copyright 2015-2021 OpenIndex.de
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | # -----------------------------------------------------------------------
20 | #
21 | # OpenJDK binaries are provided by:
22 | # https://bell-sw.com/pages/downloads/#/java-11-lts
23 | #
24 | # -----------------------------------------------------------------------
25 |
26 | LINUX_X86_JDK="https://download.bell-sw.com/java/11.0.10+9/bellsoft-jdk11.0.10+9-linux-i586.tar.gz"
27 | LINUX_X86_64_JDK="https://download.bell-sw.com/java/11.0.10+9/bellsoft-jdk11.0.10+9-linux-amd64.tar.gz"
28 | MACOS_X86_64_JDK="https://download.bell-sw.com/java/11.0.10+9/bellsoft-jdk11.0.10+9-macos-amd64.zip"
29 | WINDOWS_X86_JDK="https://download.bell-sw.com/java/11.0.10+9/bellsoft-jdk11.0.10+9-windows-i586.zip"
30 | WINDOWS_X86_64_JDK="https://download.bell-sw.com/java/11.0.10+9/bellsoft-jdk11.0.10+9-windows-amd64.zip"
31 |
32 | MODULES="java.desktop,java.naming,jdk.crypto.ec"
33 |
34 | SYSTEM="$(uname -s)"
35 | SYSTEM_ARCH="$(arch)"
36 | case "${SYSTEM}" in
37 |
38 | Darwin)
39 | echo "Initializing macOS environment..."
40 | SYSTEM_JDK="${MACOS_X86_64_JDK}"
41 | ;;
42 |
43 | Linux)
44 | case "${SYSTEM_ARCH}" in
45 | i386 | i586 | i686)
46 | echo "Initializing Linux x86 environment..."
47 | SYSTEM_JDK="${LINUX_X86_JDK}"
48 | ;;
49 | x86_64)
50 | echo "Initializing Linux x86_64 environment..."
51 | SYSTEM_JDK="${LINUX_X86_64_JDK}"
52 | ;;
53 | *)
54 | echo "Unsupported Linux environment (${SYSTEM_ARCH})..."
55 | exit 1
56 | ;;
57 | esac
58 | ;;
59 |
60 | *)
61 | echo "Unsupported environment (${SYSTEM})..."
62 | exit 1
63 | ;;
64 |
65 | esac
66 |
67 | #
68 | # Configure generated runtime environment.
69 | #
70 |
71 | function configure_runtime() {
72 | echo "Configuring runtime environment..."
73 |
74 | runtimeDir="$1"
75 | if [[ ! -d "${runtimeDir}" ]]; then
76 | echo "WARNING: Can't find runtime environment at: ${runtimeDir}"
77 | exit 1
78 | fi
79 |
80 | securityConf="${runtimeDir}/conf/security/java.security"
81 | if [[ ! -f "${securityConf}" ]]; then
82 | echo "WARNING: Can't find security configuration at: ${securityConf}"
83 | exit 1
84 | fi
85 |
86 | echo "There is nothing to configure."
87 | }
88 |
89 | #
90 | # Extract a downloaded archive.
91 | #
92 |
93 | function extract_archive() {
94 | archive="${1}"
95 | if [[ "$archive" == *.zip ]]; then
96 | #echo "unzip $archive"
97 | unzip -q "${archive}"
98 | else
99 | #echo "untar $archive"
100 | tar xfz "${archive}"
101 | fi
102 | }
103 |
--------------------------------------------------------------------------------
/Customer/src/main/java/de/openindex/support/customer/CustomerOptions.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.customer;
17 |
18 | import de.openindex.support.core.AbstractOptions;
19 | import java.io.File;
20 | import org.apache.commons.lang3.StringUtils;
21 | import org.slf4j.Logger;
22 | import org.slf4j.LoggerFactory;
23 |
24 | /**
25 | * Options of the customer application.
26 | *
27 | * @author Andreas Rudolph
28 | */
29 | @SuppressWarnings("WeakerAccess")
30 | public class CustomerOptions extends AbstractOptions {
31 | @SuppressWarnings("unused")
32 | private final static Logger LOGGER = LoggerFactory.getLogger(CustomerOptions.class);
33 |
34 | public CustomerOptions(File location) {
35 | super(location, CustomerApplication.SETTINGS);
36 | }
37 |
38 | public String getHost() {
39 | String defaultValue = StringUtils.trimToEmpty(
40 | settings.getString("default.host"));
41 | return StringUtils.defaultIfBlank(getProperty("host"), defaultValue);
42 | }
43 |
44 | public void setHost(String value) {
45 | if (StringUtils.isBlank(value))
46 | remove("host");
47 | else
48 | setProperty("host", StringUtils.trimToEmpty(value));
49 | }
50 |
51 | public Integer getPort() {
52 | Integer defaultValue;
53 | try {
54 | defaultValue = Integer.valueOf(StringUtils.trimToNull(
55 | settings.getString("default.port")));
56 | } catch (NumberFormatException ex) {
57 | defaultValue = 5900;
58 | }
59 | return getPropertyAsInteger("port", defaultValue);
60 | }
61 |
62 | public void setPort(Integer value) {
63 | if (value == null)
64 | remove("port");
65 | else
66 | setProperty("port", value.toString());
67 | }
68 |
69 | public String getScreenId() {
70 | return StringUtils.trimToNull(getProperty("screenId"));
71 | }
72 |
73 | public void setScreenId(String value) {
74 | if (StringUtils.isBlank(value))
75 | remove("screenId");
76 | else
77 | setProperty("screenId", StringUtils.trimToEmpty(value));
78 | }
79 |
80 | public Boolean getSsl() {
81 | Boolean defaultValue = Boolean.valueOf(StringUtils.trimToNull(
82 | settings.getString("default.ssl")));
83 | return getPropertyAsBoolean("ssl", defaultValue);
84 | }
85 |
86 | public boolean isSsl() {
87 | return Boolean.TRUE.equals(getSsl());
88 | }
89 |
90 | public void setSsl(Boolean value) {
91 | if (value == null)
92 | remove("ssl");
93 | else
94 | setProperty("ssl", value.toString());
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/release/src/openjdk/init-windows-x86-64.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Build a runtime environment for Windows 64-bit x86
4 | # Copyright 2015-2021 OpenIndex.de
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20 | DOWNLOADS_DIR="${DIR}/downloads"
21 | LOCAL_DIR="${DIR}/local"
22 | TEMP_DIR="${DIR}/temp"
23 |
24 | #
25 | # initialization
26 | #
27 |
28 | set -e
29 | # shellcheck disable=SC1090
30 | source "${DIR}/init.sh"
31 | mkdir -p "${LOCAL_DIR}"
32 | rm -Rf "${TEMP_DIR}"
33 | mkdir -p "${TEMP_DIR}"
34 |
35 | TARGET="windows-x86-64"
36 | TARGET_JDK="${WINDOWS_X86_64_JDK}"
37 |
38 | #
39 | # download OpenJDK binaries
40 | #
41 |
42 | mkdir -p "${DOWNLOADS_DIR}"
43 | cd "${DOWNLOADS_DIR}"
44 |
45 | if [[ ! -f "${DOWNLOADS_DIR}/$(basename "${TARGET_JDK}")" ]]; then
46 | echo "Downloading OpenJDK for ${TARGET}..."
47 | #wget -nc "${TARGET_JDK}"
48 | curl -L \
49 | -o "$(basename "${TARGET_JDK}")" \
50 | "${TARGET_JDK}"
51 | fi
52 |
53 | if [[ ! -f "${DOWNLOADS_DIR}/$(basename "${SYSTEM_JDK}")" ]]; then
54 | echo "Downloading OpenJDK for jlink..."
55 | #wget -nc "${SYSTEM_JDK}"
56 | curl -L \
57 | -o "$(basename "${SYSTEM_JDK}")" \
58 | "${SYSTEM_JDK}"
59 | fi
60 |
61 | #
62 | # extract OpenJDK modules
63 | #
64 |
65 | echo "Extracting OpenJDK modules for ${TARGET}..."
66 | mkdir -p "${TEMP_DIR}/jdk"
67 | cd "${TEMP_DIR}/jdk"
68 | extract_archive "${DOWNLOADS_DIR}/$(basename "${TARGET_JDK}")"
69 | find . -type f -exec chmod ugo-x {} \;
70 | mv "$(ls -1)/jmods" "${TEMP_DIR}"
71 |
72 | #
73 | # extract OpenJDK for jlink
74 | #
75 |
76 | echo "Extracting OpenJDK for jlink..."
77 | SYSTEM_JDK_DIR="${LOCAL_DIR}/$(basename "${SYSTEM_JDK}")"
78 | if [[ ! -d "${SYSTEM_JDK_DIR}" ]]; then
79 | mkdir -p "${SYSTEM_JDK_DIR}"
80 | cd "${SYSTEM_JDK_DIR}"
81 | extract_archive "${DOWNLOADS_DIR}/$(basename "${SYSTEM_JDK}")"
82 | find "$(ls -1)" -type f -name "._*" -exec rm {} \;
83 | fi
84 | cd "${SYSTEM_JDK_DIR}"
85 | if [[ -d "${SYSTEM_JDK_DIR}/$(ls -1)/Contents/Home" ]]; then
86 | JLINK="${SYSTEM_JDK_DIR}/$(ls -1)/Contents/Home/bin/jlink"
87 | else
88 | JLINK="${SYSTEM_JDK_DIR}/$(ls -1)/bin/jlink"
89 | fi
90 |
91 | #
92 | # build OpenJDK runtime
93 | #
94 |
95 | cd "${DIR}"
96 | rm -Rf "${DIR}/runtime/${TARGET}"
97 | mkdir -p "${DIR}/runtime"
98 |
99 | echo "Building runtime environment for ${TARGET}..."
100 | "$JLINK" \
101 | --add-modules "${MODULES}" \
102 | --module-path "${TEMP_DIR}/jmods" \
103 | --output "${DIR}/runtime/${TARGET}" \
104 | --compress=1 \
105 | --strip-debug \
106 | --no-header-files \
107 | --no-man-pages
108 |
109 | configure_runtime "${DIR}/runtime/${TARGET}"
110 |
111 | #
112 | # cleanup
113 | #
114 |
115 | rm -Rf "${TEMP_DIR}"
116 |
--------------------------------------------------------------------------------
/release/notarize-macos-verify.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Verifies the status of a notarization request.
4 | # Copyright 2015-2021 OpenIndex.de
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | # ----------------------------------------------------------------------------
20 | # NOTICE: This script has to be executed on a macOS system with the
21 | # required certificate available. In order to sign the application for
22 | # yourself, you need to obtain a Developer ID from Apple and set some
23 | # environment variables in the ".env" file. If it is not available, create a
24 | # copy of ".env.example".
25 | # ----------------------------------------------------------------------------
26 |
27 | # ----------------------------------------------------------------------------
28 | # You can find further information at:
29 | # https://github.com/OpenIndex/RemoteSupportTool/wiki/Development#notarizing-application-bundle-for-macos
30 | # ----------------------------------------------------------------------------
31 |
32 | DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
33 | SIGNED_DIR="${DIR}/signed"
34 | FOUND="0"
35 | set -e
36 |
37 | APPLE_DEVELOPER_MAIL=""
38 | APPLE_DEVELOPER_PASSWORD=""
39 | if [[ -f "${DIR}/.env" ]]; then
40 | source "${DIR}/.env"
41 | fi
42 |
43 | APPLE_DEVELOPER="--username ${APPLE_DEVELOPER_MAIL}"
44 | if [[ -n "${APPLE_DEVELOPER_PASSWORD}" ]]; then
45 | APPLE_DEVELOPER="${APPLE_DEVELOPER} --password ${APPLE_DEVELOPER_PASSWORD}"
46 | fi
47 |
48 | if [[ -n "${1}" ]]; then
49 | echo ""
50 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
51 | printf "\e[1m\e[92m Verifying notarization %s...\e[0m\n" "${1}"
52 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
53 | echo ""
54 |
55 | xcrun altool \
56 | --notarization-info "${1}" \
57 | ${APPLE_DEVELOPER}
58 |
59 | echo ""
60 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
61 | printf "\e[1m\e[92m Finished verification.\e[0m\n"
62 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
63 | echo ""
64 |
65 | echo "The application bundle was successfully notarized, if "
66 | echo ""
67 | echo " \"Status: success\""
68 | echo " \"Status Message: Package Approved\""
69 | echo ""
70 | echo "is shown in the response. In this case you can finally build the notarized package with:"
71 | echo ""
72 | echo "notarize-macos-finish.sh"
73 | echo ""
74 |
75 | else
76 | echo ""
77 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
78 | printf "\e[1m\e[92m Showing notarization history...\e[0m\n"
79 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
80 | echo ""
81 |
82 | xcrun altool \
83 | --notarization-history 0 \
84 | ${APPLE_DEVELOPER}
85 | fi
86 |
--------------------------------------------------------------------------------
/release/src/openjdk/init-macos-x86-64.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Build a runtime environment for macOS 64-bit.
4 | # Copyright 2015-2021 OpenIndex.de
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20 | DOWNLOADS_DIR="${DIR}/downloads"
21 | LOCAL_DIR="${DIR}/local"
22 | TEMP_DIR="${DIR}/temp"
23 |
24 | #
25 | # initialization
26 | #
27 |
28 | set -e
29 | # shellcheck disable=SC1090
30 | source "${DIR}/init.sh"
31 | mkdir -p "${LOCAL_DIR}"
32 | rm -Rf "${TEMP_DIR}"
33 | mkdir -p "${TEMP_DIR}"
34 |
35 | TARGET="macos-x86-64"
36 | TARGET_JDK="${MACOS_X86_64_JDK}"
37 |
38 | #
39 | # download OpenJDK binaries
40 | #
41 |
42 | mkdir -p "${DOWNLOADS_DIR}"
43 | cd "${DOWNLOADS_DIR}"
44 |
45 | if [[ ! -f "${DOWNLOADS_DIR}/$(basename "${TARGET_JDK}")" ]]; then
46 | echo "Downloading OpenJDK for ${TARGET}..."
47 | #wget -nc "${TARGET_JDK}"
48 | curl -L \
49 | -o "$(basename "${TARGET_JDK}")" \
50 | "${TARGET_JDK}"
51 | fi
52 |
53 | if [[ ! -f "${DOWNLOADS_DIR}/$(basename "${SYSTEM_JDK}")" ]]; then
54 | echo "Downloading OpenJDK for jlink..."
55 | #wget -nc "${SYSTEM_JDK}"
56 | curl -L \
57 | -o "$(basename "${SYSTEM_JDK}")" \
58 | "${SYSTEM_JDK}"
59 | fi
60 |
61 | #
62 | # extract OpenJDK modules
63 | #
64 |
65 | echo "Extracting OpenJDK modules for ${TARGET}..."
66 | mkdir -p "${TEMP_DIR}/jdk"
67 | cd "${TEMP_DIR}/jdk"
68 | extract_archive "${DOWNLOADS_DIR}/$(basename "${TARGET_JDK}")"
69 | find "$(ls -1)" -type f -name "._*" -exec rm {} \;
70 | if [[ -d "$(ls -1)/Contents/Home" ]]; then
71 | mv "$(ls -1)/Contents/Home/jmods" "${TEMP_DIR}"
72 | else
73 | mv "$(ls -1)/jmods" "${TEMP_DIR}"
74 | fi
75 |
76 | #
77 | # extract OpenJDK for jlink
78 | #
79 |
80 | echo "Extracting OpenJDK for jlink..."
81 | SYSTEM_JDK_DIR="${LOCAL_DIR}/$(basename "${SYSTEM_JDK}")"
82 | if [[ ! -d "${SYSTEM_JDK_DIR}" ]]; then
83 | mkdir -p "${SYSTEM_JDK_DIR}"
84 | cd "${SYSTEM_JDK_DIR}"
85 | extract_archive "${DOWNLOADS_DIR}/$(basename "${SYSTEM_JDK}")"
86 | find "$(ls -1)" -type f -name "._*" -exec rm {} \;
87 | fi
88 | cd "${SYSTEM_JDK_DIR}"
89 | if [[ -d "${SYSTEM_JDK_DIR}/$(ls -1)/Contents/Home" ]]; then
90 | JLINK="${SYSTEM_JDK_DIR}/$(ls -1)/Contents/Home/bin/jlink"
91 | else
92 | JLINK="${SYSTEM_JDK_DIR}/$(ls -1)/bin/jlink"
93 | fi
94 |
95 | #
96 | # build OpenJDK runtime
97 | #
98 |
99 | cd "${DIR}"
100 | rm -Rf "${DIR}/runtime/${TARGET}"
101 | mkdir -p "${DIR}/runtime"
102 |
103 | echo "Building runtime environment for ${TARGET}..."
104 | "$JLINK" \
105 | --add-modules "${MODULES}" \
106 | --module-path "${TEMP_DIR}/jmods" \
107 | --output "${DIR}/runtime/${TARGET}" \
108 | --compress=1 \
109 | --strip-debug \
110 | --no-header-files \
111 | --no-man-pages
112 |
113 | configure_runtime "${DIR}/runtime/${TARGET}"
114 |
115 | #
116 | # cleanup
117 | #
118 |
119 | rm -Rf "${TEMP_DIR}"
120 |
--------------------------------------------------------------------------------
/Staff/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 |
8 | RemoteSupportTool
9 | de.openindex.support
10 | 1.1.2
11 |
12 |
13 | RemoteSupportTool-Staff
14 |
15 | RemoteSupportTool-Staff
16 | RemoteSupportTool is a cross platform solution for remote support.
17 | https://openindex.de
18 |
19 | OpenIndex.de
20 | https://openindex.de
21 |
22 |
23 |
24 | The Apache Software License, Version 2.0
25 | http://www.apache.org/licenses/LICENSE-2.0.txt
26 | repo
27 | A business-friendly OSS license
28 |
29 |
30 |
31 |
32 |
33 | andy
34 | Andreas Rudolph
35 | andy@openindex.de
36 | OpenIndex.de
37 | https://openindex.de/
38 |
39 |
40 |
41 |
42 |
43 | de.openindex.support
44 | RemoteSupportTool-Core
45 |
46 |
47 | com.jcraft
48 | jsch
49 |
50 |
51 | com.jcraft
52 | jzlib
53 |
54 |
55 | com.miglayout
56 | miglayout-swing
57 |
58 |
59 |
60 |
61 |
62 |
63 | ${project.basedir}/src/main/resources
64 | true
65 |
66 | **/*.properties
67 | **/*.html
68 |
69 |
70 |
71 | ${project.basedir}/src/main/resources
72 | false
73 |
74 | **/*.properties
75 | **/*.html
76 |
77 |
78 |
79 |
80 |
81 | org.apache.maven.plugins
82 | maven-jar-plugin
83 |
84 |
85 |
86 | de.openindex.support.staff.StaffApplication
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/SwingUtils.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core;
17 |
18 | import java.awt.Toolkit;
19 | import java.lang.reflect.Field;
20 | import javax.swing.UIManager;
21 | import org.apache.commons.lang3.SystemUtils;
22 | import org.slf4j.Logger;
23 | import org.slf4j.LoggerFactory;
24 |
25 | /**
26 | * Swing helper methods.
27 | *
28 | * @author Andreas Rudolph
29 | */
30 | @SuppressWarnings("WeakerAccess")
31 | public class SwingUtils {
32 | @SuppressWarnings("unused")
33 | private final static Logger LOGGER = LoggerFactory.getLogger(SwingUtils.class);
34 |
35 | private SwingUtils() {
36 | super();
37 | }
38 |
39 | public static UIManager.LookAndFeelInfo getLookAndFeelInfo(String name) {
40 | for (UIManager.LookAndFeelInfo lnf : UIManager.getInstalledLookAndFeels()) {
41 | if (lnf.getName().equalsIgnoreCase(name)) {
42 | return lnf;
43 | }
44 | }
45 | return null;
46 | }
47 |
48 | public static void installLookAndFeel() {
49 | try {
50 | if (SystemUtils.IS_OS_WINDOWS || SystemUtils.IS_OS_MAC) {
51 | // Always use system look & feel on Windows & Mac.
52 | UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
53 | } else {
54 | // Prefer Nimbus or Metal look & feel on other systems.
55 | UIManager.LookAndFeelInfo lnf = SwingUtils.getLookAndFeelInfo("Nimbus");
56 | if (lnf == null) lnf = SwingUtils.getLookAndFeelInfo("Metal");
57 | UIManager.setLookAndFeel((lnf != null) ?
58 | lnf.getClassName() :
59 | UIManager.getSystemLookAndFeelClassName());
60 | }
61 | } catch (Exception ex) {
62 | LOGGER.warn("Can't set look & feel!", ex);
63 | }
64 | }
65 |
66 | /**
67 | * Change application title for certain Linux desktop environments (e.g. Gnome 3, Ubuntu Unity).
68 | *
69 | * This method may not work with future Java version. In this case it might be replaced with the
70 | * window-matching-agent approach.
71 | *
72 | * @param value application title to set
73 | * @see stackoverflow.com
74 | */
75 | public static void setAwtAppClassName(String value) {
76 | try {
77 | Toolkit toolkit = Toolkit.getDefaultToolkit();
78 | if (toolkit.getClass().getName().equals("sun.awt.X11.XToolkit")) {
79 | Field awtAppClassNameField = toolkit.getClass().getDeclaredField("awtAppClassName");
80 | awtAppClassNameField.setAccessible(true);
81 | awtAppClassNameField.set(toolkit, value);
82 | }
83 | } catch (Exception ex) {
84 | LOGGER.warn("Can't set awtAppClassName!", ex);
85 | }
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/Customer/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 |
8 | RemoteSupportTool
9 | de.openindex.support
10 | 1.1.2
11 |
12 |
13 | RemoteSupportTool-Customer
14 |
15 | RemoteSupportTool-Customer
16 | RemoteSupportTool is a remote maintenance software entirely written in Java.
17 | https://openindex.de
18 |
19 | OpenIndex.de
20 | https://openindex.de
21 |
22 |
23 |
24 | The Apache Software License, Version 2.0
25 | http://www.apache.org/licenses/LICENSE-2.0.txt
26 | repo
27 | A business-friendly OSS license
28 |
29 |
30 |
31 |
32 |
33 | andy
34 | Andreas Rudolph
35 | andy@openindex.de
36 | OpenIndex.de
37 | https://openindex.de/
38 |
39 |
40 |
41 |
42 |
43 | de.openindex.support
44 | RemoteSupportTool-Core
45 |
46 |
47 | net.java.dev.jna
48 | jna
49 |
50 |
51 | net.java.dev.jna
52 | jna-platform
53 |
54 |
55 | com.miglayout
56 | miglayout-swing
57 |
58 |
59 |
60 |
61 |
62 |
63 | ${project.basedir}/src/main/resources
64 | true
65 |
66 | **/*.properties
67 | **/*.html
68 |
69 |
70 |
71 | ${project.basedir}/src/main/resources
72 | false
73 |
74 | **/*.properties
75 | **/*.html
76 |
77 |
78 |
79 |
80 |
81 | org.apache.maven.plugins
82 | maven-jar-plugin
83 |
84 |
85 |
86 | de.openindex.support.customer.CustomerApplication
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/release/src/openjdk/init-windows-x86.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Build a runtime environment for Windows 32-bit x86
4 | # Copyright 2015-2021 OpenIndex.de
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20 | DOWNLOADS_DIR="${DIR}/downloads"
21 | LOCAL_DIR="${DIR}/local"
22 | TEMP_DIR="${DIR}/temp"
23 |
24 | #
25 | # initialization
26 | #
27 |
28 | set -e
29 | # shellcheck disable=SC1090
30 | source "${DIR}/init.sh"
31 | mkdir -p "${LOCAL_DIR}"
32 | rm -Rf "${TEMP_DIR}"
33 | mkdir -p "${TEMP_DIR}"
34 |
35 | TARGET="windows-x86"
36 | TARGET_JDK="${WINDOWS_X86_JDK}"
37 |
38 | #
39 | # download OpenJDK binaries
40 | #
41 |
42 | mkdir -p "${DOWNLOADS_DIR}"
43 | cd "${DOWNLOADS_DIR}"
44 |
45 | if [[ ! -f "${DOWNLOADS_DIR}/$(basename "${TARGET_JDK}")" ]]; then
46 | echo "Downloading OpenJDK for ${TARGET}..."
47 | #wget -nc "${TARGET_JDK}"
48 | curl -L \
49 | -o "$(basename "${TARGET_JDK}")" \
50 | "${TARGET_JDK}"
51 | fi
52 |
53 | if [[ ! -f "${DOWNLOADS_DIR}/$(basename "${SYSTEM_JDK}")" ]]; then
54 | echo "Downloading OpenJDK for jlink..."
55 | #wget -nc "${SYSTEM_JDK}"
56 | curl -L \
57 | -o "$(basename "${SYSTEM_JDK}")" \
58 | "${SYSTEM_JDK}"
59 | fi
60 |
61 | #
62 | # extract OpenJDK modules
63 | #
64 |
65 | echo "Extracting OpenJDK modules for ${TARGET}..."
66 | mkdir -p "${TEMP_DIR}/jdk"
67 | cd "${TEMP_DIR}/jdk"
68 | extract_archive "${DOWNLOADS_DIR}/$(basename "${TARGET_JDK}")"
69 | find . -type f -exec chmod ugo-x {} \;
70 | mv "$(ls -1)/jmods" "${TEMP_DIR}"
71 |
72 | #
73 | # extract OpenJDK for jlink
74 | #
75 |
76 | echo "Extracting OpenJDK for jlink..."
77 | SYSTEM_JDK_DIR="${LOCAL_DIR}/$(basename "${SYSTEM_JDK}")"
78 | if [[ ! -d "${SYSTEM_JDK_DIR}" ]]; then
79 | mkdir -p "${SYSTEM_JDK_DIR}"
80 | cd "${SYSTEM_JDK_DIR}"
81 | extract_archive "${DOWNLOADS_DIR}/$(basename "${SYSTEM_JDK}")"
82 | find "$(ls -1)" -type f -name "._*" -exec rm {} \;
83 | fi
84 | cd "${SYSTEM_JDK_DIR}"
85 | if [[ -d "${SYSTEM_JDK_DIR}/$(ls -1)/Contents/Home" ]]; then
86 | JLINK="${SYSTEM_JDK_DIR}/$(ls -1)/Contents/Home/bin/jlink"
87 | else
88 | JLINK="${SYSTEM_JDK_DIR}/$(ls -1)/bin/jlink"
89 | fi
90 |
91 | #
92 | # build OpenJDK runtime
93 | #
94 |
95 | cd "${DIR}"
96 | rm -Rf "${DIR}/runtime/${TARGET}"
97 | mkdir -p "${DIR}/runtime"
98 |
99 | echo "Building runtime environment for ${TARGET}..."
100 |
101 | # ZIP compression seems to produce errors in Windows x86
102 | #
103 | # see https://github.com/AdoptOpenJDK/openjdk-build/issues/763
104 | # see https://bugs.openjdk.java.net/browse/JDK-8215123
105 | #
106 | # Therefore we're using --compress=1 instead of --compress=2
107 |
108 | "$JLINK" \
109 | --add-modules "${MODULES}" \
110 | --module-path "${TEMP_DIR}/jmods" \
111 | --output "${DIR}/runtime/${TARGET}" \
112 | --compress=1 \
113 | --strip-debug \
114 | --no-header-files \
115 | --no-man-pages
116 |
117 | configure_runtime "${DIR}/runtime/${TARGET}"
118 |
119 | #
120 | # cleanup
121 | #
122 |
123 | rm -Rf "${TEMP_DIR}"
124 |
--------------------------------------------------------------------------------
/release/notarize-macos-finish.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Creates a notarized application bundle after upload and approval.
4 | # Copyright 2015-2021 OpenIndex.de
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | # ----------------------------------------------------------------------------
20 | # You can find further information at:
21 | # https://github.com/OpenIndex/RemoteSupportTool/wiki/Development#notarizing-application-bundle-for-macos
22 | # ----------------------------------------------------------------------------
23 |
24 | DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
25 | SIGNED_DIR="${DIR}/signed"
26 | NOTARIZED_DIR="${DIR}/notarized"
27 | FOUND="0"
28 | set -e
29 |
30 | if [[ -n "${1}" ]]; then
31 | # Using application bundle, provided as first command line argument.
32 | PKG_DIR="${SIGNED_DIR}/$(basename "$1")"
33 | else
34 | # Otherwise, showing available application bundles and let the user select.
35 | for f in "${SIGNED_DIR}"/*; do
36 | if [[ -d "${f}" ]]; then
37 | n=$(basename "${f}")
38 | if [[ -f "${f}/${n}.zip" ]]; then
39 | if [[ "${FOUND}" == "0" ]]; then
40 | echo ""
41 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
42 | printf "\e[1m\e[92m Available signed macOS application bundles:\e[0m\n"
43 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
44 | echo ""
45 | fi
46 | FOUND="1"
47 | echo "${n}"
48 | fi
49 | fi
50 | done
51 |
52 | if [[ "${FOUND}" == "0" ]]; then
53 | echo "ERROR: No signed macOS packages were found at:"
54 | echo "${SIGNED_DIR}"
55 | exit 1
56 | fi
57 |
58 | echo ""
59 | echo "Which of these bundles were successfully notarized and are ready for release?"
60 | read -r -p "Enter one of the packages names listed above: " pkg
61 |
62 | PKG_DIR="${SIGNED_DIR}/${pkg}"
63 | fi
64 |
65 | if [[ ! -d "${PKG_DIR}" ]]; then
66 | echo ""
67 | echo "ERROR: The application bundle does not exist in \"${SIGNED_DIR}\"!"
68 | exit 1
69 | fi
70 |
71 | PKG_NAME="$(basename "${PKG_DIR}")"
72 |
73 | PKG_BUNDLE=$(find "${PKG_DIR}" -maxdepth 1 -type d -name "*.app" | head -1)
74 | if [[ ! -d "${PKG_BUNDLE}" ]]; then
75 | echo ""
76 | echo "ERROR: Na application bundle found within \"${SIGNED_DIR}\"!"
77 | exit 1
78 | fi
79 |
80 | echo ""
81 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
82 | printf "\e[1m\e[92m Finishing notarization for %s...\e[0m\n" "${PKG_NAME}"
83 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
84 | echo ""
85 |
86 | xcrun stapler staple -v "${PKG_BUNDLE}"
87 |
88 | mkdir -p "${NOTARIZED_DIR}"
89 | NOTARIZED_ARCHIVE="${NOTARIZED_DIR}/${PKG_NAME}.tar.gz"
90 |
91 | echo ""
92 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
93 | printf "\e[1m\e[92m Archiving notarized application bundle...\e[0m\n"
94 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
95 | echo ""
96 | echo "Archiving notarized application bundle to:"
97 | echo "${NOTARIZED_ARCHIVE}"
98 | cd "${PKG_DIR}"
99 | tar cfz "${NOTARIZED_ARCHIVE}" "$(basename "${PKG_BUNDLE}")"
100 |
101 | echo ""
102 | echo "It seems, that the notarization process finished successfully!"
103 | echo "Please check the output above for the message:"
104 | echo " \"The staple and validate action worked!\""
105 | echo ""
106 |
--------------------------------------------------------------------------------
/Core/src/main/java/de/openindex/support/core/monitor/DataMonitor.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015-2021 OpenIndex.de.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package de.openindex.support.core.monitor;
17 |
18 | import java.util.Date;
19 | import java.util.Vector;
20 | import org.slf4j.Logger;
21 | import org.slf4j.LoggerFactory;
22 |
23 | /**
24 | * Monitor, that holds multiple statistical records about data transfer.
25 | *
26 | * @author Andreas Rudolph
27 | */
28 | @SuppressWarnings("WeakerAccess")
29 | public class DataMonitor {
30 | @SuppressWarnings("unused")
31 | private final static Logger LOGGER = LoggerFactory.getLogger(DataMonitor.class);
32 | protected Vector samples;
33 | protected final Date epoch;
34 |
35 | public DataMonitor() {
36 | samples = new Vector<>();
37 | epoch = new Date();
38 | }
39 |
40 | public void addSample(long byteCount, Date start, Date end) {
41 | samples.addElement(new DataSample(byteCount, start, end));
42 | }
43 |
44 | public float getAverageRate() {
45 | long msCount = 0;
46 | long byteCount = 0;
47 | Date start;
48 | Date finish;
49 | int sampleCount = samples.size();
50 | for (int i = 0; i < sampleCount; i++) {
51 | DataSample ds = samples.elementAt(i);
52 |
53 | if (ds.start != null)
54 | start = ds.start;
55 | else if (i > 0) {
56 | //DataSample prev = samples.elementAt(i - 1);
57 | start = ds.end;
58 | } else
59 | start = epoch;
60 |
61 | if (ds.end != null)
62 | finish = ds.end;
63 | else if (i < sampleCount - 1) {
64 | //DataSample next = samples.elementAt(i + 1);
65 | finish = ds.start;
66 | } else
67 | finish = new Date();
68 |
69 | // Only include this sample if we could figure out a start
70 | // and finish time for it.
71 | if (start != null && finish != null) {
72 | byteCount += ds.byteCount;
73 | msCount += finish.getTime() - start.getTime();
74 | }
75 | }
76 |
77 | float rate = 0;
78 | if (msCount > 0) {
79 | rate = 1000 * (float) byteCount / (float) msCount;
80 | }
81 |
82 | return rate;
83 | }
84 |
85 | @SuppressWarnings("unused")
86 | public float getLastRate() {
87 | int sampleCount = samples.size();
88 | return getRateFor(sampleCount - 1);
89 | }
90 |
91 | public float getRateFor(int sampleIndex) {
92 | float rate = 0.0f;
93 | int sampleCount = samples.size();
94 | if (sampleCount > sampleIndex && sampleIndex >= 0) {
95 | DataSample s = samples.elementAt(sampleIndex);
96 | Date start = s.start;
97 | Date end = s.end;
98 | if (start == null && sampleIndex >= 1) {
99 | DataSample prev = samples.elementAt(sampleIndex - 1);
100 | start = prev.end;
101 | }
102 |
103 | if (start != null && end != null) {
104 | long msec = end.getTime() - start.getTime();
105 | rate = 1000 * (float) s.byteCount / (float) msec;
106 | }
107 | }
108 |
109 | return rate;
110 | }
111 |
112 | public void removeOldSamples(Date olderThan) {
113 | Vector oldSamples = samples;
114 | samples = new Vector<>();
115 | for (DataSample sample : oldSamples) {
116 | if (!sample.end.before(olderThan))
117 | samples.add(sample);
118 | }
119 | }
120 | }
121 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | Changelog for Remote Support Tool
2 | =================================
3 |
4 | 1.1.2 (19 Mar 2021)
5 | -------------------
6 |
7 | - added [enhancement #33](https://github.com/OpenIndex/RemoteSupportTool/issues/33): Enable encryption via TLS 1.3
8 | - added [enhancement #46](https://github.com/OpenIndex/RemoteSupportTool/issues/46): Hide connection settings in Customer Tool via configuration
9 | - added [enhancement #49](https://github.com/OpenIndex/RemoteSupportTool/issues/49): Improved application bundles for macOS
10 | - added [enhancement #50](https://github.com/OpenIndex/RemoteSupportTool/issues/50): Provide notarized application bundles for macOS
11 | - update bundled [Java Runtime Environment](https://openjdk.java.net/) to version 11.0.10+9
12 | - update [Commons Lang](https://commons.apache.org/lang/) library to version 3.12.0
13 | - update [Commons IO](https://commons.apache.org/io) library to version 2.8.0
14 | - update [Commons Text](https://commons.apache.org/text/) library to version 1.9
15 | - update [SLF4J](https://www.slf4j.org/) library to version 1.7.30
16 | - update [Java Native Access](https://github.com/java-native-access/jna) library to version 5.7.0
17 | - minor changes, see [Milestone v1.1.2](https://github.com/OpenIndex/RemoteSupportTool/milestone/7)
18 |
19 |
20 | 1.1.1 (22 Mar 2019)
21 | -------------------
22 |
23 | - fixed [issue #28](https://github.com/OpenIndex/RemoteSupportTool/issues/28): Uppercase characters are printed in lowercase for Linux customers
24 | - fixed [issue #29](https://github.com/OpenIndex/RemoteSupportTool/issues/29): Wrong mouse position on multi monitor setups
25 | - fixed [issue #30](https://github.com/OpenIndex/RemoteSupportTool/issues/30): Wrong screen information shown in customer tool
26 | - fixed [issue #31](https://github.com/OpenIndex/RemoteSupportTool/issues/31): Staff tool on macOS doesn't send characters typed with option key
27 |
28 |
29 | 1.1.0 (20 Mar 2019)
30 | -------------------
31 |
32 | - upgrade to Java 11
33 | - update [Commons Text](https://commons.apache.org/text/) library to version 1.6
34 | - update [JSch](http://www.jcraft.com/jsch/) library to version 0.1.55
35 | - update [Simple Logging Facade for Java](https://www.slf4j.org/) library to version 1.7.26
36 | - provide sh application launcher for macOS ([issue #20](https://github.com/OpenIndex/RemoteSupportTool/issues/20))
37 | - tab key is not sent to the customer application ([issue #21](https://github.com/OpenIndex/RemoteSupportTool/issues/21))
38 | - enable / disable transfer of keyboard & mouse inputs ([issue #22](https://github.com/OpenIndex/RemoteSupportTool/issues/22))
39 | - rework transfer of keyboard inputs ([issue #23](https://github.com/OpenIndex/RemoteSupportTool/issues/23))
40 | - prefer Nimbus look & feel on Linux ([issue #25](https://github.com/OpenIndex/RemoteSupportTool/issues/25))
41 | - set awtAppClassName for Gnome / Ubuntu Unity ([issue #26](https://github.com/OpenIndex/RemoteSupportTool/issues/26))
42 |
43 |
44 | 1.0.1 (13 Mar 2019)
45 | -------------------
46 |
47 | - fixed [issue #18](https://github.com/OpenIndex/RemoteSupportTool/issues/18): Mouse is shifted on Windows clients with high resolution screen
48 |
49 |
50 | 1.0.0 (20 Oct 2018)
51 | -------------------
52 |
53 | - migrated from Tcl/Tk to Java
54 | - implement the whole support session in Java, no need for external applications (x11vnc, OSXvnc, TightVNC, OpenSSH)
55 | - provide a graphical interface for both sides of a support session (customer & support staff)
56 | - provided binaries are bundled with a stripped down version of the OpenJDK runtime environment (version 10)
57 | - provide a signed application bundle for macOS
58 | - switched from MIT to Apache License 2.0
59 |
60 |
61 | 0.5 (16 Jan 2017)
62 | -----------------
63 |
64 | - migrated from Python to Tcl/Tk
65 | - replaced Paramiko with OpenSSH
66 | - implemented a new build process based on Tclkit
67 | - updated to OSXvnc 5.0.1, which should fix problems with Retina displays on Mac OS X
68 | - rebuild x11vnc, which should fix problems with a missing libxss library on amd64 based Linux systems
69 | - added some more options for GUI configuration via config.ini
70 |
71 |
72 | 0.4.1 (10 Nov 2015)
73 | -------------------
74 |
75 | - translated into Italian (thanks to [Sjd-Risca](https://github.com/Sjd-Risca))
76 | - compatibility fixes for PyInstaller 3 (thanks to [Sjd-Risca](https://github.com/Sjd-Risca))
77 | - rebuilt with PyInstaller 3 on all supported platforms
78 |
79 | 0.4 (17 Jun 2015)
80 | -----------------
81 |
82 | - first public release
83 |
--------------------------------------------------------------------------------
/release/bundle-linux.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Create application bundles for Linux systems.
4 | # Copyright 2015-2021 OpenIndex.de
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | # ----------------------------------------------------------------------------
20 | # NOTICE: This script requires an ".env" file in the same folder. If it is not
21 | # available, create a copy of ".env.example" and place your settings inside.
22 | # ----------------------------------------------------------------------------
23 |
24 | # ----------------------------------------------------------------------------
25 | # You can find further information at:
26 | # https://github.com/OpenIndex/RemoteSupportTool/wiki/Development#create-application-bundles
27 | # ----------------------------------------------------------------------------
28 |
29 | MAKESELF="makeself"
30 | DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
31 | TARGET_DIR="${DIR}/target"
32 | FOUND="0"
33 | set -e
34 |
35 | STAFF_TOOL=""
36 | CUSTOMER_TOOL=""
37 | VERSION=""
38 | if [[ -f "${DIR}/.env" ]]; then
39 | source "${DIR}/.env"
40 | fi
41 |
42 | if [[ -d "${TARGET_DIR}/Staff/linux-x86" ]]; then
43 | FOUND="1"
44 | echo ""
45 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
46 | printf "\e[1m\e[92m Creating %s.linux-x86.sh...\e[0m\n" "${STAFF_TOOL}-${VERSION}"
47 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
48 | echo ""
49 | rm -f "${TARGET_DIR}/${STAFF_TOOL}-${VERSION}.linux-x86.sh"
50 | cd "${TARGET_DIR}/Staff/linux-x86"
51 | "$MAKESELF" --tar-quietly \
52 | . \
53 | "${TARGET_DIR}/${STAFF_TOOL}-${VERSION}.linux-x86.sh" \
54 | "${STAFF_TOOL} ${VERSION}" \
55 | bin/Start.sh
56 | fi
57 |
58 | if [[ -d "${TARGET_DIR}/Staff/linux-x86-64" ]]; then
59 | FOUND="1"
60 | echo ""
61 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
62 | printf "\e[1m\e[92m Creating %s.linux-x86-64.sh...\e[0m\n" "${STAFF_TOOL}-${VERSION}"
63 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
64 | echo ""
65 | rm -f "${TARGET_DIR}/${STAFF_TOOL}-${VERSION}.linux-x86-64.sh"
66 | cd "${TARGET_DIR}/Staff/linux-x86-64"
67 | "$MAKESELF" --tar-quietly \
68 | . \
69 | "${TARGET_DIR}/${STAFF_TOOL}-${VERSION}.linux-x86-64.sh" \
70 | "${STAFF_TOOL} ${VERSION}" \
71 | bin/Start.sh
72 | fi
73 |
74 | if [[ -d "${TARGET_DIR}/Customer/linux-x86" ]]; then
75 | FOUND="1"
76 | echo ""
77 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
78 | printf "\e[1m\e[92m Creating %s.linux-x86.sh...\e[0m\n" "${CUSTOMER_TOOL}-${VERSION}"
79 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
80 | echo ""
81 | rm -f "${TARGET_DIR}/${CUSTOMER_TOOL}-${VERSION}.linux-x86.sh"
82 | cd "${TARGET_DIR}/Customer/linux-x86"
83 | "$MAKESELF" --tar-quietly \
84 | . \
85 | "${TARGET_DIR}/${CUSTOMER_TOOL}-${VERSION}.linux-x86.sh" \
86 | "${CUSTOMER_TOOL} ${VERSION}" \
87 | bin/Start.sh
88 | fi
89 |
90 | if [[ -d "${TARGET_DIR}/Customer/linux-x86-64" ]]; then
91 | FOUND="1"
92 | echo ""
93 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
94 | printf "\e[1m\e[92m Creating %s.linux-x86-64.sh...\e[0m\n" "${CUSTOMER_TOOL}-${VERSION}"
95 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
96 | echo ""
97 | rm -f "${TARGET_DIR}/${CUSTOMER_TOOL}-${VERSION}.linux-x86-64.sh"
98 | cd "${TARGET_DIR}/Customer/linux-x86-64"
99 | "$MAKESELF" --tar-quietly \
100 | . \
101 | "${TARGET_DIR}/${CUSTOMER_TOOL}-${VERSION}.linux-x86-64.sh" \
102 | "${CUSTOMER_TOOL} ${VERSION}" \
103 | bin/Start.sh
104 | fi
105 |
106 | if [[ "${FOUND}" == "0" ]]; then
107 | echo "ERROR: No Linux packages were found at:"
108 | echo "${TARGET_DIR}"
109 | fi
110 |
--------------------------------------------------------------------------------
/release/codesign-macos.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # Create signed application bundles for macOS systems.
4 | # Copyright 2015-2021 OpenIndex.de
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | # ----------------------------------------------------------------------------
20 | # NOTICE: This script has to be executed on a macOS system with the
21 | # required certificate available. In order to sign the application for
22 | # yourself, you need to obtain a Developer ID from Apple and set some
23 | # environment variables in the ".env" file. If it is not available, create a
24 | # copy of ".env.example".
25 | # ----------------------------------------------------------------------------
26 |
27 | # ----------------------------------------------------------------------------
28 | # You can find further information at:
29 | # https://github.com/OpenIndex/RemoteSupportTool/wiki/Development#sign-application-bundle-for-macos
30 | # ----------------------------------------------------------------------------
31 |
32 | DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
33 | TARGET_DIR="${DIR}/target"
34 | SIGNED_DIR="${DIR}/signed"
35 | FOUND="0"
36 | set -e
37 |
38 | APPLE_CODESIGN_KEY=""
39 | if [[ -f "${DIR}/.env" ]]; then
40 | source "${DIR}/.env"
41 | fi
42 |
43 | if [[ -z "${APPLE_CODESIGN_KEY}" ]]; then
44 | echo "ERROR: No signature key was specified!"
45 | exit 1
46 | fi
47 |
48 | mkdir -p "${SIGNED_DIR}"
49 | export LANG="en_US.UTF-8"
50 |
51 | for f in "${TARGET_DIR}"/*.macos-*.tar.gz; do
52 |
53 | if [[ "${FOUND}" == "0" ]]; then
54 | echo ""
55 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
56 | printf "\e[1m\e[92m Unlocking keychain...\e[0m\n"
57 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
58 | echo ""
59 | security unlock-keychain
60 | fi
61 |
62 | FOUND="1"
63 | archive="$(basename "${f}")"
64 | archive_name="$(basename "${archive}" ".tar.gz")"
65 | signed_dir="${SIGNED_DIR}/${archive_name}"
66 | rm -Rf "${signed_dir}"
67 | mkdir -p "${signed_dir}"
68 |
69 | echo ""
70 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
71 | printf "\e[1m\e[92m Processing %s...\e[0m\n" "${archive}"
72 | printf "\e[1m\e[92m=======================================================================\e[0m\n"
73 |
74 | echo ""
75 | echo "Extracting application bundle."
76 | tar xfz "${f}" -C "${signed_dir}"
77 | pkg="$(ls -1 "${signed_dir}")"
78 | signed_bundle="${signed_dir}/${pkg}"
79 |
80 | echo ""
81 | echo "Signing application bundle at:"
82 | echo ""
83 | echo "${signed_bundle}"
84 | codesign --deep --force --verify --sign "${APPLE_CODESIGN_KEY}" --options runtime "${signed_bundle}"
85 |
86 | echo ""
87 | echo "Verifying signature:"
88 | codesign --verify --verbose=4 "${signed_bundle}"
89 | #codesign --display --verbose=4 "${signed_bundle}"
90 |
91 | echo ""
92 | echo "Verifying access for Gatekeeper:"
93 | spctl --assess --verbose=4 --type execute "${signed_dir}/${pkg}"
94 |
95 | echo ""
96 | echo "Compressing application bundle to:"
97 | signed_tar="${signed_dir}/${archive_name}.tar.gz"
98 | echo "${signed_tar}"
99 | cd "${signed_dir}"
100 | rm -f "${signed_tar}"
101 | tar cfz "${signed_tar}" "$(basename "${signed_bundle}")"
102 |
103 | echo ""
104 | echo "Compressing application bundle to:"
105 | signed_zip="${signed_dir}/${archive_name}.zip"
106 | echo "${signed_zip}"
107 | cd "${signed_dir}"
108 | rm -f "${signed_zip}"
109 | # According to Apples documentation "Customizing the Notarization Workflow" at
110 | # https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/customizing_the_notarization_workflow
111 | # we can't use the ZIP command, as it leads to problems in the notarization process.
112 | # Therefore we're using ditto instead.
113 | #zip -r -q "${signed_zip}" "$(basename "${signed_bundle}")"
114 | ditto -c -k --keepParent "$(basename "${signed_bundle}")" "${signed_zip}"
115 |
116 | done
117 |
118 | if [[ "${FOUND}" == "0" ]]; then
119 | echo "ERROR: No macOS packages were found at:"
120 | echo "${TARGET_DIR}"
121 | exit 1
122 | fi
123 |
--------------------------------------------------------------------------------