forked from shaytan/rdgen
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca0d321873 | ||
|
|
80fc9f6a84 | ||
|
|
b567c74902 | ||
|
|
cc47350fab | ||
|
|
e882a604d7 | ||
|
|
1b7468a1f2 | ||
|
|
1424caffb0 | ||
|
|
47cf713307 | ||
|
|
fe505ed35c | ||
|
|
a68e9d8a83 | ||
|
|
995f78b6a1 | ||
|
|
7951080c6c | ||
|
|
6792760e57 | ||
|
|
da33c6f5fd | ||
|
|
6c2e2f39e9 | ||
|
|
f420425ecb | ||
|
|
4a5dce088a | ||
|
|
51cb240b13 | ||
|
|
a9bf03b34b | ||
|
|
286320cd81 | ||
|
|
0f1b1d1d55 | ||
|
|
ee673c2667 | ||
|
|
2c970680ef |
615
.github/old-workflows/pre133-generator-android.yml
vendored
615
.github/old-workflows/pre133-generator-android.yml
vendored
File diff suppressed because one or more lines are too long
587
.github/old-workflows/pre133-generator-linux.yml
vendored
587
.github/old-workflows/pre133-generator-linux.yml
vendored
File diff suppressed because one or more lines are too long
566
.github/old-workflows/pre133-generator-windows.yml
vendored
566
.github/old-workflows/pre133-generator-windows.yml
vendored
File diff suppressed because one or more lines are too long
29
.github/patches/allowCustom.diff
vendored
Normal file
29
.github/patches/allowCustom.diff
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
diff --git a/src/common.rs b/src/common.rs
|
||||
index 56361a5da..92b221e9a 100644
|
||||
--- a/src/common.rs
|
||||
+++ b/src/common.rs
|
||||
@@ -1474,15 +1474,15 @@ pub fn read_custom_client(config: &str) {
|
||||
log::error!("Failed to decode custom client config");
|
||||
return;
|
||||
};
|
||||
- const KEY: &str = "5Qbwsde3unUcJBtrx9ZkvUmwFNoExHzpryHuPUdqlWM=";
|
||||
- let Some(pk) = get_rs_pk(KEY) else {
|
||||
- log::error!("Failed to parse public key of custom client");
|
||||
- return;
|
||||
- };
|
||||
- let Ok(data) = sign::verify(&data, &pk) else {
|
||||
- log::error!("Failed to dec custom client config");
|
||||
- return;
|
||||
- };
|
||||
+ // const KEY: &str = "5Qbwsde3unUcJBtrx9ZkvUmwFNoExHzpryHuPUdqlWM=";
|
||||
+ // let Some(pk) = get_rs_pk(KEY) else {
|
||||
+ // log::error!("Failed to parse public key of custom client");
|
||||
+ // return;
|
||||
+ // };
|
||||
+ // let Ok(data) = sign::verify(&data, &pk) else {
|
||||
+ // log::error!("Failed to dec custom client config");
|
||||
+ // return;
|
||||
+ // };
|
||||
let Ok(mut data) =
|
||||
serde_json::from_slice::<std::collections::HashMap<String, serde_json::Value>>(&data)
|
||||
else {
|
||||
13
.github/patches/removeSetupServerTip.diff
vendored
Normal file
13
.github/patches/removeSetupServerTip.diff
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart
|
||||
index d9dc3eec4..76f386b76 100644
|
||||
--- a/flutter/lib/desktop/pages/connection_page.dart
|
||||
+++ b/flutter/lib/desktop/pages/connection_page.dart
|
||||
@@ -131,7 +131,7 @@ class _OnlineStatusWidgetState extends State<OnlineStatusWidget> {
|
||||
if (!isIncomingOnly) startServiceWidget(),
|
||||
// ready && public
|
||||
// No need to show the guide if is custom client.
|
||||
- if (!isIncomingOnly) setupServerWidget(),
|
||||
+ //if (!isIncomingOnly) setupServerWidget(),
|
||||
],
|
||||
);
|
||||
|
||||
29
.github/workflows/generator-android.yml
vendored
29
.github/workflows/generator-android.yml
vendored
@@ -75,15 +75,8 @@ env:
|
||||
#signing keys env variable checks
|
||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||
# To make a custom build with your own servers set the below secret values
|
||||
RS_PUB_KEY: "${{ inputs.key }}"
|
||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
||||
CUSTOM: "${{ inputs.custom }}"
|
||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
||||
API_SERVER: "${{ inputs.apiServer }}"
|
||||
UPLOAD_ARTIFACT: 'true'
|
||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||
ICONBASE64: "$${{ inputs.iconbase64 }}"
|
||||
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
||||
|
||||
jobs:
|
||||
@@ -297,7 +290,6 @@ jobs:
|
||||
mv ./res/icon.ico ./res/icon.ico.bak
|
||||
mv ./res/icon.png ./res/icon.png.bak
|
||||
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
||||
#echo "${{ inputs.iconbase64 }}" | base64 -d > ./res/icon.png
|
||||
wget -O ./res/icon.png ${{ fromJson(inputs.iconlink).url }}/get_png?filename=${{ fromJson(inputs.iconlink).file }}"&"uuid=${{ fromJson(inputs.iconlink).uuid }}
|
||||
mv ./res/32x32.png ./res/32x32.png.bak
|
||||
mv ./res/64x64.png ./res/64x64.png.bak
|
||||
@@ -338,7 +330,7 @@ jobs:
|
||||
sed -i -e 's|"Copyright © 2025 Purslane Ltd. All rights reserved."|"Copyright © 2025"|' ./flutter/windows/runner/Runner.rc
|
||||
sed -i -e 's|"rustdesk.exe"|"${{ inputs.filename }}"|' ./flutter/windows/runner/Runner.rc
|
||||
sed -i -e 's|"RustDesk"|"${{ inputs.appname }}"|' ./flutter/windows/runner/Runner.rc
|
||||
sed -i -e 's|RustDesk|${{ inputs.appname }}|' ./src/lang/en.rs
|
||||
find ./src/lang -name "*.rs" -exec sed -i -e 's|RustDesk|${{ inputs.appname }}|' {} \;
|
||||
sed -i -e 's|RustDesk|${{ inputs.appname }}|' ./flutter/android/app/src/main/res/values/strings.xml
|
||||
sed -i -e "s|title: 'RustDesk'|title: '${{ inputs.appname }}'|" ./flutter/lib/main.dart
|
||||
sed -i -e "s|return 'RustDesk';|return '${{ inputs.appname }}';|" ./flutter/lib/web/bridge.dart
|
||||
@@ -499,7 +491,7 @@ jobs:
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a
|
||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
||||
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||
@@ -516,7 +508,7 @@ jobs:
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a
|
||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
||||
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||
@@ -533,7 +525,7 @@ jobs:
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/x86_64
|
||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86_64/
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86_64/librustdesk.so
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
||||
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||
@@ -550,7 +542,7 @@ jobs:
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/x86
|
||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/i686-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86/
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86/librustdesk.so
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
||||
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||
@@ -603,17 +595,6 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./signed-apk/${{ inputs.filename }}-${{ matrix.job.arch }}.apk" ${{ inputs.apiServer }}/api/save_custom_client
|
||||
# uses: SamKirkland/FTP-Deploy-Action@v4.3.5
|
||||
# with:
|
||||
# server: ${{ secrets.GEN_FTP_SERVER }}
|
||||
# username: ${{ secrets.GEN_FTP_USER }}
|
||||
# password: ${{ secrets.GEN_FTP_PASSWORD }}
|
||||
# local-dir: ./signed-apk/
|
||||
# server-dir: /root/rdgen/exe/${{ env.UUIDFOLDER }}/
|
||||
# exclude: |
|
||||
# *.idsig
|
||||
# *.jks
|
||||
# *aligned.apk
|
||||
|
||||
- name: Report Status
|
||||
uses: fjogeleit/http-request-action@v1
|
||||
|
||||
102
.github/workflows/generator-linux.yml
vendored
102
.github/workflows/generator-linux.yml
vendored
@@ -75,15 +75,8 @@ env:
|
||||
#signing keys env variable checks
|
||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||
# To make a custom build with your own servers set the below secret values
|
||||
RS_PUB_KEY: "${{ inputs.key }}"
|
||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
||||
CUSTOM: "${{ inputs.custom }}"
|
||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
||||
API_SERVER: "${{ inputs.apiServer }}"
|
||||
UPLOAD_ARTIFACT: 'true'
|
||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||
ICONBASE64: "$${{ inputs.iconbase64 }}"
|
||||
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
||||
|
||||
jobs:
|
||||
@@ -252,7 +245,6 @@ jobs:
|
||||
mv ./res/icon.ico ./res/icon.ico.bak
|
||||
mv ./res/icon.png ./res/icon.png.bak
|
||||
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
||||
#echo "${{ inputs.iconbase64 }}" | base64 -d > ./res/icon.png
|
||||
wget -O ./res/icon.png ${{ fromJson(inputs.iconlink).url }}/get_png?filename=${{ fromJson(inputs.iconlink).file }}"&"uuid=${{ fromJson(inputs.iconlink).uuid }}
|
||||
mv ./res/32x32.png ./res/32x32.png.bak
|
||||
mv ./res/64x64.png ./res/64x64.png.bak
|
||||
@@ -283,20 +275,31 @@ jobs:
|
||||
sed -i -e 's|ProductName = "RustDesk"|ProductName = "${{ inputs.appname }}"|' ./libs/portable/Cargo.toml
|
||||
sed -i -e 's|FileDescription = "RustDesk Remote Desktop"|FileDescription = "${{ inputs.appname }}"|' ./libs/portable/Cargo.toml
|
||||
sed -i -e 's|OriginalFilename = "rustdesk.exe"|OriginalFilename = "${{ inputs.appname }}.exe"|' ./libs/portable/Cargo.toml
|
||||
sed -i -e 's|RustDesk|${{ inputs.appname }}|' ./src/lang/en.rs
|
||||
find ./src/lang -name "*.rs" -exec sed -i -e 's|RustDesk|${{ inputs.appname }}|' {} \;
|
||||
sed -i -e '/-p tmpdeb\/usr\/lib\/rustdesk/d' ./build.py
|
||||
|
||||
- name: change company name
|
||||
if: fromJson(inputs.extras).compname != 'Purslane Ltd'
|
||||
continue-on-error: true
|
||||
shell: bash
|
||||
run: |
|
||||
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./flutter/lib/desktop/pages/desktop_setting_page.dart
|
||||
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./Cargo.toml
|
||||
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./libs/portable/Cargo.toml
|
||||
|
||||
- name: allow custom.txt
|
||||
continue-on-error: true
|
||||
shell: bash
|
||||
run: |
|
||||
sed -i -e 's|rs-ny.rustdesk.com|${{ env.RENDEZVOUS_SERVER }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ env.RS_PUB_KEY }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|For faster connection, please set up your own server||' ./src/lang/en.rs
|
||||
sed -i -e '/const KEY:/,/};/d' ./src/common.rs
|
||||
sed -i -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./custom.txt
|
||||
sed -i -e 's|rs-ny.rustdesk.com|${{ inputs.server }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ inputs.key }}|' ./libs/hbb_common/src/config.rs
|
||||
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/allowCustom.diff
|
||||
git apply allowCustom.diff
|
||||
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/removeSetupServerTip.diff
|
||||
git apply removeSetupServerTip.diff
|
||||
echo -n "${{ inputs.custom }}" | cat > ./custom.txt
|
||||
sed -i '/intl:/a \ \ archive: ^3.6.1' ./flutter/pubspec.yaml
|
||||
sed -i -e 's|https://admin.rustdesk.com|${{ inputs.apiServer }}|' ./src/common.rs
|
||||
|
||||
- name: change url to custom
|
||||
if: fromJson(inputs.extras).urlLink != 'https://rustdesk.com'
|
||||
@@ -369,22 +372,6 @@ jobs:
|
||||
name: bridge-artifact
|
||||
path: ./
|
||||
|
||||
# - name: logo stuff
|
||||
# if: ${{ inputs.logolink != 'false' }}
|
||||
# continue-on-error: true
|
||||
# shell: bash
|
||||
# run: |
|
||||
# #echo "${{ inputs.logobase64 }}" | base64 -d > ./rustdesk/data/flutter_assets/assets/logo.png
|
||||
# wget -O ./rustdesk/data/flutter_assets/assets/logo.png https://${{ fromJson(inputs.logolink).url }}/get_png?filename=${{ fromJson(inputs.logolink).file }}"&"uuid=${{ fromJson(inputs.logolink).uuid }}
|
||||
|
||||
# - name: icon stuff
|
||||
# if: ${{ inputs.iconlink != 'false' }}
|
||||
# continue-on-error: true
|
||||
# run: |
|
||||
# #mv ./rustdesk/data/flutter_assets/assets/icon.svg ./rustdesk/data/flutter_assets/assets/icon.svg.bak
|
||||
# convert ./res/icon.png ./rustdesk/data/flutter_assets/assets/icon.svg
|
||||
# convert ./res/icon.png ./rustdesk/data/flutter_assets/assets/scalable.svg
|
||||
|
||||
- name: Report Status
|
||||
uses: fjogeleit/http-request-action@v1
|
||||
with:
|
||||
@@ -538,7 +525,6 @@ jobs:
|
||||
mkdir -p flutter/tmpdeb/usr/lib/rustdesk
|
||||
cp ./custom.txt ./flutter/tmpdeb/usr/lib/rustdesk/custom.txt
|
||||
if [[ "${{ inputs.logolink }}" != "false" ]]; then
|
||||
#echo "${{ inputs.logobase64 }}" | base64 -d > ./flutter/assets/logo.png
|
||||
wget -O ./flutter/assets/logo.png ${{ fromJson(inputs.logolink).url }}/get_png?filename=${{ fromJson(inputs.logolink).file }}"&"uuid=${{ fromJson(inputs.logolink).uuid }}
|
||||
fi
|
||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||
@@ -584,25 +570,32 @@ jobs:
|
||||
mv "$name" /workspace/output/"${{ inputs.filename }}-suse.rpm"
|
||||
done
|
||||
|
||||
# - name: Publish debian/rpm package
|
||||
# if: env.UPLOAD_ARTIFACT == 'true'
|
||||
# uses: softprops/action-gh-release@v1
|
||||
# with:
|
||||
# prerelease: true
|
||||
# tag_name: ${{ env.TAG_NAME }}
|
||||
# files: |
|
||||
# rustdesk-*.deb
|
||||
# rustdesk-*.rpm
|
||||
# only x86_64 for arch since we can not find newest arm64 docker image to build
|
||||
# old arch image does not make sense for arch since it is "arch" which always update to date
|
||||
# and failed to makepkg arm64 on x86_64
|
||||
- name: Patch archlinux PKGBUILD
|
||||
continue-on-error: true
|
||||
if: matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true' && env.VERSION != 'master'
|
||||
run: |
|
||||
sed -i "s/x86_64/${{ matrix.job.arch }}/g" res/PKGBUILD
|
||||
if [[ "${{ matrix.job.arch }}" == "aarch64" ]]; then
|
||||
sed -i "s/x86_64/aarch64/g" ./res/PKGBUILD
|
||||
fi
|
||||
|
||||
# - name: Upload to FTP
|
||||
# if: ${{ fromJson(inputs.extras).rdgen == 'true' }}
|
||||
# uses: SamKirkland/FTP-Deploy-Action@v4.3.5
|
||||
# with:
|
||||
# server: ${{ secrets.GEN_FTP_SERVER }}
|
||||
# username: ${{ secrets.GEN_FTP_USER }}
|
||||
# password: ${{ secrets.GEN_FTP_PASSWORD }}
|
||||
# local-dir: output/
|
||||
# server-dir: /root/rdgen/exe/${{ env.UUIDFOLDER }}/
|
||||
- name: Build archlinux package
|
||||
continue-on-error: true
|
||||
if: matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true' && env.VERSION != 'master'
|
||||
uses: rustdesk-org/arch-makepkg-action@master
|
||||
with:
|
||||
packages:
|
||||
scripts: |
|
||||
cd res && HBB=`pwd`/.. FLUTTER=1 makepkg -f
|
||||
|
||||
- name: Rename archlinux package
|
||||
continue-on-error: true
|
||||
if: matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true' && env.VERSION != 'master'
|
||||
run: |
|
||||
cp ./res/rustdesk-${{ env.VERSION }}-0-x86_64.pkg.tar.zst ./output/${{ inputs.filename }}.pkg.tar.zst
|
||||
|
||||
- name: send file to rdgen server
|
||||
if: ${{ fromJson(inputs.extras).rdgen == 'true' }}
|
||||
@@ -611,6 +604,7 @@ jobs:
|
||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}.deb" -F "uuid=${{ inputs.uuid }}" ${{ secrets.GENURL }}/save_custom_client
|
||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}.rpm" -F "uuid=${{ inputs.uuid }}" ${{ secrets.GENURL }}/save_custom_client
|
||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}-suse.rpm" -F "uuid=${{ inputs.uuid }}" ${{ secrets.GENURL }}/save_custom_client
|
||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}.pkg.tar.zst" -F "uuid=${{ inputs.uuid }}" ${{ secrets.GENURL }}/save_custom_client || true
|
||||
|
||||
- name: send file to api server
|
||||
if: ${{ fromJson(inputs.extras).rdgen == 'false' }}
|
||||
@@ -619,13 +613,7 @@ jobs:
|
||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}.deb" ${{ inputs.apiServer }}/api/save_custom_client
|
||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}.rpm" ${{ inputs.apiServer }}/api/save_custom_client
|
||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}-suse.rpm" ${{ inputs.apiServer }}/api/save_custom_client
|
||||
|
||||
- name: Upload deb
|
||||
uses: actions/upload-artifact@master
|
||||
if: env.UPLOAD_ARTIFACT == 'true'
|
||||
with:
|
||||
name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb
|
||||
path: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb
|
||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}.pkg.tar.zst" ${{ inputs.apiServer }}/api/save_custom_client || true
|
||||
|
||||
- name: Report Status
|
||||
uses: fjogeleit/http-request-action@v1
|
||||
|
||||
42
.github/workflows/generator-macos.yml
vendored
42
.github/workflows/generator-macos.yml
vendored
@@ -75,12 +75,6 @@ env:
|
||||
#signing keys env variable checks
|
||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||
# To make a custom build with your own servers set the below secret values
|
||||
RS_PUB_KEY: "${{ inputs.key }}"
|
||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
||||
CUSTOM: "${{ inputs.custom }}"
|
||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
||||
API_SERVER: "${{ inputs.apiServer }}"
|
||||
UPLOAD_ARTIFACT: 'true'
|
||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
||||
@@ -186,9 +180,12 @@ jobs:
|
||||
# MACSTUFF Update AppInfo.xcconfig
|
||||
sed -i '' -e 's|PRODUCT_NAME = .*|PRODUCT_NAME = ${{ inputs.appname }}|' ./flutter/macos/Runner/Configs/AppInfo.xcconfig
|
||||
sed -i '' -e 's|PRODUCT_BUNDLE_IDENTIFIER = .*|PRODUCT_BUNDLE_IDENTIFIER = com.${{ inputs.appname }}.app|' ./flutter/macos/Runner/Configs/AppInfo.xcconfig
|
||||
#sed -i '' -e 's|PRODUCT_COPYRIGHT = .*|PRODUCT_COPYRIGHT = Copyright 2025 ${{ inputs.appname }}. All rights reserved.|' ./flutter/macos/Runner/Configs/AppInfo.xcconfig
|
||||
sed -i '' -e 's|Purslane Ltd.|${{ inputs.appname }}|' ./flutter/macos/Runner/Configs/AppInfo.xcconfig
|
||||
# Keep DEVELOPMENT_TEAM if it exists, don't blank it out
|
||||
|
||||
sed -i -e 's|Purslane Ltd.|${{ inputs.appname }}|' ./Cargo.toml
|
||||
sed -i -e 's|Purslane Ltd|${{ inputs.appname }}|' ./libs/portable/Cargo.toml
|
||||
|
||||
# Update Xcode project settings
|
||||
sed -i '' -e 's/PRODUCT_NAME = "RustDesk"/PRODUCT_NAME = "${{ inputs.appname }}"/' ./flutter/macos/Runner.xcodeproj/project.pbxproj
|
||||
sed -i '' -e 's/PRODUCT_BUNDLE_IDENTIFIER = ".*"/PRODUCT_BUNDLE_IDENTIFIER = "com.${{ inputs.appname }}.app"/' ./flutter/macos/Runner.xcodeproj/project.pbxproj
|
||||
@@ -205,7 +202,7 @@ jobs:
|
||||
|
||||
cp ./src/lang/en.rs ./src/lang/en.rs.bak
|
||||
cp ./src/lang/nl.rs ./src/lang/nl.rs.bak
|
||||
sed -i '' -e 's|RustDesk|${{ inputs.appname }}|' ./src/lang/en.rs
|
||||
find ./src/lang -name "*.rs" -exec sed -i '' -e 's|RustDesk|${{ inputs.appname }}|' {} \;
|
||||
sed -i '' -e 's|RustDesk|${{ inputs.appname }}|' ./src/lang/nl.rs
|
||||
|
||||
sed -i '' -e 's|Homepage: https://rustdesk.com|Homepage: ${{ fromJson(inputs.extras).urlLink }}|' ./build.py
|
||||
@@ -239,12 +236,14 @@ jobs:
|
||||
sed -i '' -e 's/("About RustDesk", "Over RustDesk")/("About RustDesk", "Over ${{ inputs.appname }}")/' ./src/lang/nl.rs
|
||||
sed -i '' -e 's/("About", "Over")/("About", "Over ${{ inputs.appname }}")/' ./src/lang/nl.rs
|
||||
|
||||
sed -i -e 's|rs-ny.rustdesk.com|${{ env.RENDEZVOUS_SERVER }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ env.RS_PUB_KEY }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|For faster connection, please set up your own server||' ./src/lang/en.rs
|
||||
sed -i -e 's|rs-ny.rustdesk.com|${{ inputs.server }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ inputs.key }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|https://admin.rustdesk.com|${{ inputs.apiServer }}|' ./src/common.rs
|
||||
|
||||
sed -i '' -e '/const KEY:/,/};/d' ./src/common.rs
|
||||
sed -i '' -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
||||
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/allowCustom.diff
|
||||
git apply allowCustom.diff
|
||||
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/removeSetupServerTip.diff
|
||||
git apply removeSetupServerTip.diff
|
||||
|
||||
# Update pubspec.yaml with proper YAML formatting
|
||||
cp ./flutter/pubspec.yaml ./flutter/pubspec.yaml.bak
|
||||
@@ -724,14 +723,6 @@ jobs:
|
||||
"${{ inputs.appname }}.app"
|
||||
mv "${{ inputs.appname }}-${{ matrix.job.arch }}.dmg" $GITHUB_WORKSPACE/
|
||||
|
||||
#- name: Upload unsigned macOS app
|
||||
# if: env.UPLOAD_ARTIFACT == 'true'
|
||||
# uses: actions/upload-artifact@master
|
||||
# with:
|
||||
# name: ${{ inputs.appname }}-${{ matrix.job.arch }}
|
||||
# path: ${{ inputs.appname }}-${{ matrix.job.arch }}.dmg
|
||||
|
||||
|
||||
- name: Rename rustdesk
|
||||
if: env.UPLOAD_ARTIFACT == 'true'
|
||||
run: |
|
||||
@@ -798,12 +789,3 @@ jobs:
|
||||
method: 'POST'
|
||||
customHeaders: '{"Content-Type": "application/json"}'
|
||||
data: '{"uuid": "${{ inputs.uuid }}", "status": "Generation cancelled, try again"}'
|
||||
|
||||
#- name: Publish DMG package
|
||||
# if: env.UPLOAD_ARTIFACT == 'true'
|
||||
# uses: softprops/action-gh-release@v1
|
||||
# with:
|
||||
# prerelease: true
|
||||
# tag_name: ${{ inputs.upload-tag }}
|
||||
# files: |
|
||||
# ${{ inputs.appname }}*-${{ matrix.job.arch }}.dmg
|
||||
|
||||
100
.github/workflows/generator-windows.yml
vendored
100
.github/workflows/generator-windows.yml
vendored
@@ -76,12 +76,6 @@ env:
|
||||
#signing keys env variable checks
|
||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||
# To make a custom build with your own servers set the below secret values
|
||||
RS_PUB_KEY: "${{ inputs.key }}"
|
||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
||||
CUSTOM: "${{ inputs.custom }}"
|
||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
||||
API_SERVER: "${{ inputs.apiServer }}"
|
||||
UPLOAD_ARTIFACT: 'true'
|
||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
||||
@@ -191,11 +185,25 @@ jobs:
|
||||
# ./flutter/windows/runner/Runner.rc
|
||||
sed -i -e 's|"RustDesk Remote Desktop"|"${{ inputs.appname }}"|' ./flutter/windows/runner/Runner.rc
|
||||
sed -i -e 's|VALUE "InternalName", "rustdesk" "\0"|VALUE "InternalName", "${{ inputs.appname }}" "\0"|' ./flutter/windows/runner/Runner.rc
|
||||
sed -i -e 's|"Copyright © 2025 Purslane Ltd. All rights reserved."|"Copyright © 2025"|' ./flutter/windows/runner/Runner.rc
|
||||
sed -i -e 's|"rustdesk.exe"|"${{ inputs.filename }}"|' ./flutter/windows/runner/Runner.rc
|
||||
sed -i -e 's|"RustDesk"|"${{ inputs.appname }}"|' ./flutter/windows/runner/Runner.rc
|
||||
# ./src/lang/en.rs
|
||||
sed -i -e 's|RustDesk|${{ inputs.appname }}|' ./src/lang/en.rs
|
||||
find ./src/lang -name "*.rs" -exec sed -i -e 's|RustDesk|${{ inputs.appname }}|' {} \;
|
||||
|
||||
|
||||
- name: change company name
|
||||
if: fromJson(inputs.extras).compname != 'Purslane Ltd'
|
||||
continue-on-error: true
|
||||
shell: bash
|
||||
run: |
|
||||
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./flutter/lib/desktop/pages/desktop_setting_page.dart
|
||||
sed -i -e 's|Purslane Ltd.|${{ fromJson(inputs.extras).compname }}|' ./res/setup.nsi
|
||||
sed -i -e 's|PURSLANE|${{ fromJson(inputs.extras).compname }}|' ./res/msi/preprocess.py
|
||||
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./res/msi/preprocess.py
|
||||
sed -i -e 's|"Copyright © 2025 Purslane Ltd. All rights reserved."|"Copyright © 2025 ${{ fromJson(inputs.extras).compname }}. All rights reserved."|' ./flutter/windows/runner/Runner.rc
|
||||
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./flutter/windows/runner/Runner.rc
|
||||
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./Cargo.toml
|
||||
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./libs/portable/Cargo.toml
|
||||
|
||||
- name: change url to custom
|
||||
if: fromJson(inputs.extras).urlLink != 'https://rustdesk.com'
|
||||
@@ -209,6 +217,7 @@ jobs:
|
||||
sed -i -e "s|const url = 'https://rustdesk.com/';|const url = '${{ fromJson(inputs.extras).urlLink }}';|" ./flutter/lib/mobile/pages/settings_page.dart
|
||||
sed -i -e "s|launchUrlString('https://rustdesk.com/privacy.html')|launchUrlString('${{ fromJson(inputs.extras).urlLink }}/privacy.html')|" ./flutter/lib/mobile/pages/settings_page.dart
|
||||
sed -i -e "s|https://rustdesk.com/privacy.html|${{ fromJson(inputs.extras).urlLink }}/privacy.html|" ./flutter/lib/desktop/pages/install_page.dart
|
||||
sed -i -e "s|https://rustdesk.com/|${{fromJson(inputs.extras).urlLink }}|" ./res/setup.nsi
|
||||
|
||||
- name: change download link to custom
|
||||
if: fromJson(inputs.extras).downloadLink != 'https://rustdesk.com/download'
|
||||
@@ -219,18 +228,24 @@ jobs:
|
||||
sed -i -e 's|https://rustdesk.com/download|${{ fromJson(inputs.extras).downloadLink }}|' ./flutter/lib/mobile/pages/connection_page.dart
|
||||
sed -i -e 's|https://rustdesk.com/download|${{ fromJson(inputs.extras).downloadLink }}|' ./src/ui/index.tis
|
||||
|
||||
- name: allow custom.txt
|
||||
- name: set server, key, and apiserver
|
||||
continue-on-error: true
|
||||
shell: bash
|
||||
run: |
|
||||
sed -i -e 's|rs-ny.rustdesk.com|${{ env.RENDEZVOUS_SERVER }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ env.RS_PUB_KEY }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|For faster connection, please set up your own server||' ./src/lang/en.rs
|
||||
sed -i -e '/const KEY:/,/};/d' ./src/common.rs
|
||||
sed -i -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
||||
sed -i -e 's|rs-ny.rustdesk.com|${{ inputs.server }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ inputs.key }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|https://admin.rustdesk.com|${{ inputs.apiServer }}|' ./src/common.rs
|
||||
# ./flutter/pubspec.yaml
|
||||
sed -i '/intl:/a \ \ archive: ^3.6.1' ./flutter/pubspec.yaml
|
||||
|
||||
- name: allow custom.txt
|
||||
continue-on-error: true
|
||||
run: |
|
||||
Invoke-WebRequest -Uri https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/allowCustom.diff -OutFile allowCustom.diff
|
||||
git apply allowCustom.diff
|
||||
Invoke-WebRequest -Uri https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/removeSetupServerTip.diff -OutFile removeSetupServerTip.diff
|
||||
git apply removeSetupServerTip.diff
|
||||
|
||||
|
||||
- name: Install LLVM and Clang
|
||||
uses: KyleMayes/install-llvm-action@v1
|
||||
@@ -330,7 +345,6 @@ jobs:
|
||||
mv ./res/icon.ico ./res/icon.ico.bak
|
||||
mv ./res/icon.png ./res/icon.png.bak
|
||||
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
||||
#echo "${{ inputs.iconbase64 }}" | base64 -d > ./res/icon.png
|
||||
|
||||
- name: magick stuff
|
||||
if: ${{ inputs.iconlink != 'false' }}
|
||||
@@ -483,20 +497,6 @@ jobs:
|
||||
name: topmostwindow-artifacts
|
||||
path: "./rustdesk"
|
||||
|
||||
- name: Upload unsigned
|
||||
if: env.UPLOAD_ARTIFACT == 'true'
|
||||
uses: actions/upload-artifact@master
|
||||
with:
|
||||
name: rustdesk-unsigned-windows-${{ matrix.job.arch }}
|
||||
path: rustdesk
|
||||
|
||||
# - name: Sign rustdesk files
|
||||
# if: env.UPLOAD_ARTIFACT == 'true' && env.SIGN_BASE_URL != ''
|
||||
# shell: bash
|
||||
# run: |
|
||||
# pip3 install requests argparse
|
||||
# BASE_URL=${{ secrets.SIGN_BASE_URL }} SECRET_KEY=${{ secrets.SIGN_SECRET_KEY }} python3 res/job.py sign_files ./rustdesk/
|
||||
|
||||
- name: Report Status
|
||||
uses: fjogeleit/http-request-action@v1
|
||||
with:
|
||||
@@ -530,12 +530,14 @@ jobs:
|
||||
shell: pwsh
|
||||
run: |
|
||||
Expand-Archive -Path ./rustdesk/signed_files.zip -DestinationPath ./rustdesk/ -Force
|
||||
Remove-Item ./rustdesk/unsigned_files.zip
|
||||
Remove-Item ./rustdesk/signed_files.zip
|
||||
|
||||
|
||||
- name: Create custom.txt file
|
||||
shell: bash
|
||||
run: |
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./rustdesk/custom.txt
|
||||
echo -n "${{ inputs.custom }}" | cat > ./rustdesk/custom.txt
|
||||
|
||||
|
||||
- name: Build self-extracted executable
|
||||
@@ -568,12 +570,6 @@ jobs:
|
||||
mv ./Package/bin/x64/Release/en-us/Package.msi ../../SignOutput/rustdesk.msi
|
||||
sha256sum ../../SignOutput/rustdesk.msi
|
||||
|
||||
# - name: Sign rustdesk self-extracted file
|
||||
# if: env.UPLOAD_ARTIFACT == 'true' && env.SIGN_BASE_URL != ''
|
||||
# shell: bash
|
||||
# run: |
|
||||
# BASE_URL=${{ secrets.SIGN_BASE_URL }} SECRET_KEY=${{ secrets.SIGN_SECRET_KEY }} python3 res/job.py sign_files ./SignOutput
|
||||
|
||||
- name: Report Status
|
||||
uses: fjogeleit/http-request-action@v1
|
||||
with:
|
||||
@@ -607,27 +603,8 @@ jobs:
|
||||
shell: pwsh
|
||||
run: |
|
||||
Expand-Archive -Path ./SignOutput/signed_files.zip -DestinationPath ./SignOutput/ -Force
|
||||
|
||||
# - name: Sign rustdesk self-extracted file
|
||||
# uses: GermanBluefox/code-sign-action@v7
|
||||
# if: env.UPLOAD_ARTIFACT == 'true'
|
||||
# with:
|
||||
# certificate: '${{ secrets.WINDOWS_PFX_BASE64 }}'
|
||||
# password: '${{ secrets.WINDOWS_PFX_PASSWORD }}'
|
||||
# certificatesha1: '${{ secrets.WINDOWS_PFX_SHA1_THUMBPRINT }}'
|
||||
# # certificatename: '${{ secrets.WINDOWS_PFX_NAME }}'
|
||||
# folder: './SignOutput'
|
||||
# recursive: false
|
||||
|
||||
# - name: Publish Release
|
||||
# uses: softprops/action-gh-release@v1
|
||||
# if: env.UPLOAD_ARTIFACT == 'true'
|
||||
# with:
|
||||
# prerelease: true
|
||||
# tag_name: ${{ env.TAG_NAME }}
|
||||
# files: |
|
||||
# ./SignOutput/rustdesk-*.msi
|
||||
# ./SignOutput/rustdesk-*.exe
|
||||
Remove-Item ./SignOutput/unsigned_files.zip
|
||||
Remove-Item ./SignOutput/signed_files.zip
|
||||
|
||||
- name: rename rustdesk.exe to filename.exe
|
||||
run: |
|
||||
@@ -638,15 +615,6 @@ jobs:
|
||||
run: |
|
||||
mv ./SignOutput/rustdesk.msi "./SignOutput/${{ inputs.filename }}.msi" || echo "rustdesk"
|
||||
|
||||
# - name: Upload to FTP
|
||||
# if: ${{ fromJson(inputs.extras).rdgen == 'true' }}
|
||||
# uses: SamKirkland/FTP-Deploy-Action@v4.3.5
|
||||
# with:
|
||||
# server: ${{ secrets.GEN_FTP_SERVER }}
|
||||
# username: ${{ secrets.GEN_FTP_USER }}
|
||||
# password: ${{ secrets.GEN_FTP_PASSWORD }}
|
||||
# local-dir: ./SignOutput/
|
||||
# server-dir: /root/rdgen/exe/${{ env.UUIDFOLDER }}/
|
||||
- name: send file to rdgen server
|
||||
if: ${{ fromJson(inputs.extras).rdgen == 'true' }}
|
||||
shell: bash
|
||||
|
||||
14
.github/workflows/pre137-generator-android.yml
vendored
14
.github/workflows/pre137-generator-android.yml
vendored
@@ -75,12 +75,6 @@ env:
|
||||
#signing keys env variable checks
|
||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||
# To make a custom build with your own servers set the below secret values
|
||||
RS_PUB_KEY: "${{ inputs.key }}"
|
||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
||||
CUSTOM: "${{ inputs.custom }}"
|
||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
||||
API_SERVER: "${{ inputs.apiServer }}"
|
||||
UPLOAD_ARTIFACT: 'true'
|
||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||
ICONBASE64: "$${{ inputs.iconbase64 }}"
|
||||
@@ -488,7 +482,7 @@ jobs:
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a
|
||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
||||
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||
@@ -505,7 +499,7 @@ jobs:
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a
|
||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
||||
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||
@@ -522,7 +516,7 @@ jobs:
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/x86_64
|
||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86_64/
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86_64/librustdesk.so
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
||||
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||
@@ -539,7 +533,7 @@ jobs:
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/x86
|
||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/i686-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86/
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86/librustdesk.so
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
||||
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||
|
||||
13
.github/workflows/pre137-generator-linux.yml
vendored
13
.github/workflows/pre137-generator-linux.yml
vendored
@@ -76,11 +76,6 @@ env:
|
||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||
# To make a custom build with your own servers set the below secret values
|
||||
RS_PUB_KEY: "${{ inputs.key }}"
|
||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
||||
CUSTOM: "${{ inputs.custom }}"
|
||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
||||
API_SERVER: "${{ inputs.apiServer }}"
|
||||
UPLOAD_ARTIFACT: 'true'
|
||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||
ICONBASE64: "$${{ inputs.iconbase64 }}"
|
||||
@@ -250,7 +245,6 @@ jobs:
|
||||
mv ./res/icon.ico ./res/icon.ico.bak
|
||||
mv ./res/icon.png ./res/icon.png.bak
|
||||
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
||||
#echo "${{ inputs.iconbase64 }}" | base64 -d > ./res/icon.png
|
||||
wget -O ./res/icon.png ${{ fromJson(inputs.iconlink).url }}/get_png?filename=${{ fromJson(inputs.iconlink).file }}"&"uuid=${{ fromJson(inputs.iconlink).uuid }}
|
||||
mv ./res/32x32.png ./res/32x32.png.bak
|
||||
mv ./res/64x64.png ./res/64x64.png.bak
|
||||
@@ -288,12 +282,12 @@ jobs:
|
||||
continue-on-error: true
|
||||
shell: bash
|
||||
run: |
|
||||
sed -i -e 's|rs-ny.rustdesk.com|${{ env.RENDEZVOUS_SERVER }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ env.RS_PUB_KEY }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|rs-ny.rustdesk.com|${{ inputs.server }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ inputs.key }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|For faster connection, please set up your own server||' ./src/lang/en.rs
|
||||
sed -i -e '/const KEY:/,/};/d' ./src/common.rs
|
||||
sed -i -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./custom.txt
|
||||
echo -n "${{ inputs.custom }}" | cat > ./custom.txt
|
||||
sed -i '/intl:/a \ \ archive: ^3.6.1' ./flutter/pubspec.yaml
|
||||
|
||||
- name: change url to custom
|
||||
@@ -527,7 +521,6 @@ jobs:
|
||||
mkdir -p flutter/tmpdeb/usr/lib/rustdesk
|
||||
cp ./custom.txt ./flutter/tmpdeb/usr/lib/rustdesk/custom.txt
|
||||
if [[ "${{ inputs.logolink }}" != "false" ]]; then
|
||||
#echo "${{ inputs.logobase64 }}" | base64 -d > ./flutter/assets/logo.png
|
||||
wget -O ./flutter/assets/logo.png ${{ fromJson(inputs.logolink).url }}/get_png?filename=${{ fromJson(inputs.logolink).file }}"&"uuid=${{ fromJson(inputs.logolink).uuid }}
|
||||
fi
|
||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||
|
||||
12
.github/workflows/pre137-generator-windows.yml
vendored
12
.github/workflows/pre137-generator-windows.yml
vendored
@@ -76,12 +76,6 @@ env:
|
||||
#signing keys env variable checks
|
||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||
# To make a custom build with your own servers set the below secret values
|
||||
RS_PUB_KEY: "${{ inputs.key }}"
|
||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
||||
CUSTOM: "${{ inputs.custom }}"
|
||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
||||
API_SERVER: "${{ inputs.apiServer }}"
|
||||
UPLOAD_ARTIFACT: 'true'
|
||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
||||
@@ -212,6 +206,9 @@ jobs:
|
||||
continue-on-error: true
|
||||
shell: bash
|
||||
run: |
|
||||
sed -i -e 's|rs-ny.rustdesk.com|${{ inputs.server }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ inputs.key }}|' ./libs/hbb_common/src/config.rs
|
||||
sed -i -e 's|For faster connection, please set up your own server||' ./src/lang/en.rs
|
||||
sed -i -e '/const KEY:/,/};/d' ./src/common.rs
|
||||
sed -i -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
||||
# ./flutter/pubspec.yaml
|
||||
@@ -317,7 +314,6 @@ jobs:
|
||||
mv ./res/icon.ico ./res/icon.ico.bak
|
||||
mv ./res/icon.png ./res/icon.png.bak
|
||||
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
||||
#echo "${{ inputs.iconbase64 }}" | base64 -d > ./res/icon.png
|
||||
|
||||
- name: magick stuff
|
||||
if: ${{ inputs.iconlink != 'false' }}
|
||||
@@ -522,7 +518,7 @@ jobs:
|
||||
- name: Create custom.txt file
|
||||
shell: bash
|
||||
run: |
|
||||
echo -n "${{ env.CUSTOM }}" | cat > ./rustdesk/custom.txt
|
||||
echo -n "${{ inputs.custom }}" | cat > ./rustdesk/custom.txt
|
||||
|
||||
|
||||
- name: Build self-extracted executable
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
from django import forms
|
||||
from PIL import Image
|
||||
|
||||
class GenerateForm(forms.Form):
|
||||
#Platform
|
||||
platform = forms.ChoiceField(choices=[('windows','Windows'),('linux','Linux (currently unavailable)'),('android','Android'),('macos','macOS')], initial='windows')
|
||||
version = forms.ChoiceField(choices=[('master','nightly'),('1.3.7','1.3.7'),('1.3.6','1.3.6'),('1.3.5','1.3.5'),('1.3.4','1.3.4'),('1.3.3','1.3.3')], initial='1.3.7')
|
||||
version = forms.ChoiceField(choices=[('master','nightly'),('1.3.8','1.3.8'),('1.3.7','1.3.7'),('1.3.6','1.3.6'),('1.3.5','1.3.5'),('1.3.4','1.3.4'),('1.3.3','1.3.3')], initial='1.3.8')
|
||||
delayFix = forms.BooleanField(initial=True, required=False)
|
||||
|
||||
#General
|
||||
@@ -29,6 +30,7 @@ class GenerateForm(forms.Form):
|
||||
key = forms.CharField(label="Key", required=False)
|
||||
urlLink = forms.CharField(label="Custom URL for links", required=False)
|
||||
downloadLink = forms.CharField(label="Custom URL for downloading new versions", required=False)
|
||||
compname = forms.CharField(label="Company name",required=False)
|
||||
|
||||
#Visual
|
||||
iconfile = forms.FileField(label="Custom App Icon (in .png format)", required=False, widget=forms.FileInput(attrs={'accept': 'image/png'}))
|
||||
@@ -76,3 +78,28 @@ class GenerateForm(forms.Form):
|
||||
hidecm = forms.BooleanField(initial=False, required=False)
|
||||
statussort = forms.BooleanField(initial=False, required=False)
|
||||
removeNewVersionNotif = forms.BooleanField(initial=False, required=False)
|
||||
|
||||
def clean_iconfile(self):
|
||||
print("checking icon")
|
||||
image = self.cleaned_data['iconfile']
|
||||
if image:
|
||||
try:
|
||||
# Open the image using Pillow
|
||||
img = Image.open(image)
|
||||
|
||||
# Check if the image is a PNG (optional, but good practice)
|
||||
if img.format != 'PNG':
|
||||
raise forms.ValidationError("Only PNG images are allowed.")
|
||||
|
||||
# Get image dimensions
|
||||
width, height = img.size
|
||||
|
||||
# Check for square dimensions
|
||||
if width != height:
|
||||
raise forms.ValidationError("Custom App Icon dimensions must be square.")
|
||||
|
||||
return image
|
||||
except OSError: # Handle cases where the uploaded file is not a valid image
|
||||
raise forms.ValidationError("Invalid icon file.")
|
||||
except Exception as e: # Catch any other image processing errors
|
||||
raise forms.ValidationError(f"Error processing icon: {e}")
|
||||
@@ -133,6 +133,7 @@
|
||||
<a href='/download?filename={{filename}}.deb&uuid={{uuid}}' class="download-link">Download {{filename}}.deb</a>
|
||||
<a href='/download?filename={{filename}}.rpm&uuid={{uuid}}' class="download-link">Download {{filename}}.rpm</a>
|
||||
<a href='/download?filename={{filename}}-suse.rpm&uuid={{uuid}}' class="download-link">Download {{filename}}-suse.rpm</a>
|
||||
<a href='/download?filename={{filename}}.pkg.tar.zst&uuid={{uuid}}' class="download-link">Download {{filename}}.pkg.tar.zst</a>
|
||||
{% elif platform == 'android' %}
|
||||
<a href='/download?filename={{filename}}-aarch64.apk&uuid={{uuid}}' class="download-link">Download {{filename}}-aarch64.apk</a>
|
||||
<a href='/download?filename={{filename}}-x86_64.apk&uuid={{uuid}}' class="download-link">Download {{filename}}-x86_64.apk</a>
|
||||
|
||||
@@ -122,6 +122,20 @@
|
||||
.error {
|
||||
color: red;
|
||||
}
|
||||
.errorlist {
|
||||
color: red;
|
||||
display: flex; /* Enable flexbox for centering */
|
||||
justify-content: center; /* Center horizontally */
|
||||
align-items: center; /* Center vertically (if needed) */
|
||||
list-style: none; /* Remove bullet points if it's a list */
|
||||
padding: 0; /* Remove default padding */
|
||||
margin: 10px auto; /* Center the list itself, add some top/bottom margin */
|
||||
width: fit-content; /* Make the width fit the content */
|
||||
}
|
||||
|
||||
.errorlist li {
|
||||
margin: 5px; /* Add some spacing between list items */
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -137,6 +151,13 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% if form.iconfile.errors %}
|
||||
<ul class="errorlist">
|
||||
{% for error in form.iconfile.errors %}
|
||||
<li>{{ error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
<div class="platform">
|
||||
<h2><i class="fas fa-desktop"></i> Select Platform</h2>
|
||||
<div class="platform-icons">
|
||||
@@ -183,6 +204,8 @@
|
||||
{{ form.urlLink }}<br><br>
|
||||
<label for="{{ form.downloadLink.id_for_label }}">Custom URL for downloading updates (replaces https://rustdesk.com/download):</label>
|
||||
{{ form.downloadLink }}<br><br>
|
||||
<label for="{{ form.compname.id_for_label }}">Company name for copyright (replaces Purslane Ltd):</label>
|
||||
{{ form.compname }}<br><br>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
@@ -398,24 +421,33 @@
|
||||
try {
|
||||
const formData = JSON.parse(e.target.result);
|
||||
for (const key in formData) {
|
||||
const element = document.querySelector(`[name="${key}"]`);
|
||||
// More robust selector: checks for name OR id
|
||||
const elements = document.querySelectorAll(`[name="${key}"], [id="${key}"]`);
|
||||
|
||||
if (element) { // Check if the element exists
|
||||
if (element.type === 'checkbox' || element.type === 'radio') {
|
||||
element.checked = formData[key]; // Set checked property
|
||||
} else if (element.type !== 'file') { //for other elements
|
||||
if (elements.length > 0) { // Check if any element(s) exist
|
||||
elements.forEach(element => { // Loop through all matching elements (important for radios)
|
||||
if (element.type === 'radio') {
|
||||
if (element.value === String(formData[key])) { // Compare value, crucial for radios
|
||||
element.checked = true;
|
||||
} else {
|
||||
element.checked = false; // Uncheck others in the group
|
||||
}
|
||||
} else if (element.type === 'checkbox') {
|
||||
element.checked = formData[key];
|
||||
} else if (element.type !== 'file') {
|
||||
element.value = formData[key];
|
||||
}
|
||||
|
||||
// Handle image previews (as before)
|
||||
if (key === 'iconfile' && formData[key]) {
|
||||
document.getElementById('id_iconbase64').value = formData[key]
|
||||
document.getElementById('id_iconbase64').value = formData[key];
|
||||
document.getElementById('icon-preview').innerHTML = `<img src="${formData[key]}" style="max-width: 300px; max-height: 60px;">`;
|
||||
}
|
||||
if (key === 'logofile' && formData[key]) {
|
||||
document.getElementById('id_logobase64').value = formData[key]
|
||||
document.getElementById('id_logobase64').value = formData[key];
|
||||
document.getElementById('logo-preview').innerHTML = `<img src="${formData[key]}" style="max-width: 300px; max-height: 60px;">`;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
|
||||
@@ -48,6 +48,9 @@ def generator_view(request):
|
||||
settings = form.cleaned_data['settings']
|
||||
appname = form.cleaned_data['appname']
|
||||
filename = form.cleaned_data['exename']
|
||||
compname = form.cleaned_data['compname']
|
||||
if not compname:
|
||||
compname = "Purslane Ltd"
|
||||
permPass = form.cleaned_data['permanentPassword']
|
||||
theme = form.cleaned_data['theme']
|
||||
themeDorO = form.cleaned_data['themeDorO']
|
||||
@@ -72,8 +75,13 @@ def generator_view(request):
|
||||
defaultManual = form.cleaned_data['defaultManual']
|
||||
overrideManual = form.cleaned_data['overrideManual']
|
||||
|
||||
|
||||
if all(char.isascii() for char in filename):
|
||||
filename = re.sub(r'[^\w\s-]', '_', filename).strip()
|
||||
filename = filename.replace(" ","_")
|
||||
else:
|
||||
filename = "rustdesk"
|
||||
if not all(char.isascii() for char in appname):
|
||||
appname = "rustdesk"
|
||||
myuuid = str(uuid.uuid4())
|
||||
protocol = _settings.PROTOCOL
|
||||
host = request.get_host()
|
||||
@@ -170,6 +178,7 @@ def generator_view(request):
|
||||
extras['hidecm'] = 'true' if hidecm else 'false'
|
||||
extras['statussort'] = 'true' if statussort else 'false'
|
||||
extras['removeNewVersionNotif'] = 'true' if removeNewVersionNotif else 'false'
|
||||
extras['compname'] = compname
|
||||
extra_input = json.dumps(extras)
|
||||
|
||||
####from here run the github action, we need user, repo, access token.
|
||||
@@ -183,28 +192,6 @@ def generator_view(request):
|
||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/generator-macos.yml/dispatches'
|
||||
else:
|
||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/generator-windows.yml/dispatches'
|
||||
####changes were made to use hbb_common as a submodule in version 1.3.7, so if 1.3.3 through 1.3.6, use:
|
||||
if version == '1.3.3' or version == '1.3.4' or version == '1.3.5' or version == '1.3.6':
|
||||
if platform == 'windows':
|
||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre137-generator-windows.yml/dispatches'
|
||||
elif platform == 'linux':
|
||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre137-generator-linux.yml/dispatches'
|
||||
elif platform == 'android':
|
||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre137-generator-android.yml/dispatches'
|
||||
elif platform == 'macos':
|
||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre137-generator-macos.yml/dispatches'
|
||||
else:
|
||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre137-generator-windows.yml/dispatches'
|
||||
####breaking changes were made in 1.3.3 version, so if 1.3.2 or lower, use:
|
||||
if version == '1.3.2' or version == '1.3.1' or version == '1.3.0':
|
||||
if platform == 'windows':
|
||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre133-generator-windows.yml/dispatches'
|
||||
elif platform == 'linux':
|
||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre133-generator-linux.yml/dispatches'
|
||||
elif platform == 'android':
|
||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre133-generator-android.yml/dispatches'
|
||||
else:
|
||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre133-generator-windows.yml/dispatches'
|
||||
|
||||
#url = 'https://api.github.com/repos/'+_settings.GHUSER+'/rustdesk/actions/workflows/test.yml/dispatches'
|
||||
data = {
|
||||
|
||||
49
setup.md
49
setup.md
@@ -1,4 +1,35 @@
|
||||
## To fully host the client generator yourself, you will need to following:
|
||||
## Host the rdgen server with docker
|
||||
|
||||
1. First you will need to fork this repo on github
|
||||
2. Next, setup a A Github fine-grained access token with permissions for your rdgen
|
||||
repository:
|
||||
* login to your github account
|
||||
* click on your profile picture at the top right, click Settings
|
||||
* at the bottom of the left panel, click Developer Settings
|
||||
* click Personal access tokens
|
||||
* click Fine-grained tokens
|
||||
* click Generate new token
|
||||
* give a token name, change expiration to whatever you want
|
||||
* under Repository access, select Only select repositories, then pick your
|
||||
rdgen repo
|
||||
* give Read and Write access to actions and workflows
|
||||
* You might have to go to: https://github.com/USERNAME/rdgen/actions and hit green Enable Actions button so it works.
|
||||
3. Next, login to your Github account, go to your rdgen repo page (https://github.com/USERNAME/rdgen)
|
||||
* Click on Settings
|
||||
* In the left pane, click on Secrets and variables, then click Actions
|
||||
* Now click New repository secret
|
||||
* Set the Name to GENURL
|
||||
* Set the Secret to https://rdgen.hostname.com (or whatever your server will be accessed from)
|
||||
4. Now download the docker-compose.yml file and fill in the environment variables:
|
||||
* SECRET_KEY="your secret key" - generate a secret key by running: ```python3 -c 'import secrets; print(secrets.token_hex(100))'```
|
||||
* GHUSER="your github username"
|
||||
* GHBEARER="your fine-grained access token"
|
||||
* PROTOCOL="https" *optional - defaults to "https", change to "http" if you need to
|
||||
* REPONAME="rdgen" *optional - defaults to "rdgen", change this if you renamed the repo when you forked it
|
||||
5. Now just run ```docker compose up -d```
|
||||
|
||||
|
||||
## Host manually:
|
||||
|
||||
1. A Github account with a fork of this repo
|
||||
2. A Github fine-grained access token with permissions for your rdgen
|
||||
@@ -24,20 +55,6 @@
|
||||
* GENURL="example.com:8000" *this is the domain and port that you are
|
||||
running rdgen on, needs to be accessible on the internet, depending
|
||||
on how you have this setup the port may not be needed
|
||||
* optional github secrets (for signing the code):
|
||||
* WINDOWS_PFX_BASE64
|
||||
* WINDOWS_PFX_PASSWORD
|
||||
* WINDOWS_PFX_SHA1_THUMBPRINT
|
||||
|
||||
|
||||
## A few notes:
|
||||
|
||||
* If you change your repository name, make sure to change the url on lines
|
||||
172-203 of views.py to reflect the change
|
||||
* If you are running on http instead of https, make sure to make the change on
|
||||
line 75 of views.py
|
||||
|
||||
## To run rdgen on your server without docker:
|
||||
|
||||
```
|
||||
# Open to the directory you want to install rdgen (change /opt to wherever you want)
|
||||
@@ -69,7 +86,7 @@ open your web browser to yourdomain:8000
|
||||
|
||||
use nginx, caddy, traefik, etc. for ssl reverse proxy
|
||||
|
||||
## To autostart the server on boot, you can set up a systemd service called rdgen.service
|
||||
### To autostart the server on boot, you can set up a systemd service called rdgen.service
|
||||
|
||||
replace user, group, and port if you need to replace /opt with wherever you
|
||||
have installed rdgen save the following file as
|
||||
|
||||
Reference in New Issue
Block a user