Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ jobs:
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf libssl-dev libxdo-dev unzip protobuf-compiler libprotobuf-dev rpm
- name: Build packages
uses: tauri-apps/tauri-action@v0
uses: tauri-apps/tauri-action@v0.5.23 # .24 seems broken, TODO: update when fixed
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
Expand Down Expand Up @@ -117,7 +117,7 @@ jobs:
sudo apt-get install -y ruby
gem install deb-s3
echo "$(ruby -r rubygems -e 'puts Gem.user_dir')/bin" >> $GITHUB_PATH
- name: Upload DEB to APT repository #Add this to ubuntu 22.04 job (on merge dev -> main) with --codename=bookworm
- name: Upload DEB to APT repository #Add this to ubuntu 22.04 job (on merge dev -> main) with --codename=bookworm
run: |
COMPONENT=$([[ "${{ github.ref_name }}" == *"-"* ]] && echo "pre-release" || echo "release") # if tag contain "-" assume it's pre-release.

Expand Down Expand Up @@ -207,7 +207,7 @@ jobs:
asset_content_type: application/octet-stream

apt-sign:
needs: #Add needs: -ubuntu-22-04-build (on merge dev -> main)
needs: #Add needs: -ubuntu-22-04-build (on merge dev -> main)
- build-linux
runs-on:
- self-hosted
Expand Down Expand Up @@ -289,9 +289,9 @@ jobs:

echo "Updating to version: $VERSION"
sed -i "s/^pkgver=.*/pkgver=$VERSION/" PKGBUILD

AMD64_SHA="${{ needs.build-linux.outputs.deb_sha256_amd64 }}"

echo "AMD64 DEB SHA256: $AMD64_SHA"
sed -i "s/^sha256sums_x86_64=.*/sha256sums_x86_64=('$AMD64_SHA')/" PKGBUILD
- name: Update .SRCINFO
Expand Down Expand Up @@ -361,7 +361,7 @@ jobs:
- name: Unlock keychain
run: security -v unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" /Users/admin/Library/Keychains/login.keychain
- name: Build app
uses: tauri-apps/tauri-action@v0
uses: tauri-apps/tauri-action@v0.5.23 # .24 seems broken, TODO: update when fixed
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
APPLE_SIGNING_IDENTITY: ${{ env.APPLE_SIGNING_IDENTITY_APPLICATION }}
Expand Down Expand Up @@ -429,7 +429,7 @@ jobs:
run: |
Set-Content -Path ".\src-tauri\Cargo.toml" -Value (get-content -Path ".\src-tauri\Cargo.toml" | Select-String -Pattern 'default-run =' -NotMatch)
- name: Build packages
uses: tauri-apps/tauri-action@v0
uses: tauri-apps/tauri-action@v0.5.23 # .24 seems broken, TODO: update when fixed
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload unsigned bundle
Expand Down Expand Up @@ -468,4 +468,3 @@ jobs:
asset_path: defguard-client-signed.msi
asset_name: defguard-client_${{ env.VERSION }}_x64_en-US.msi
asset_content_type: application/octet-stream

84 changes: 36 additions & 48 deletions src-tauri/src/service/windows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use std::{

use clap::Parser;
use error;
use tokio::{runtime::Runtime, select};
use tokio::runtime::Runtime;
use windows_service::{
define_windows_service,
service::{
Expand Down Expand Up @@ -108,69 +108,57 @@ fn run_service() -> Result<(), DaemonError> {

let service_location_manager = Arc::new(RwLock::new(service_location_manager));

// Spawn service location management task
let service_location_manager_clone = service_location_manager.clone();
runtime.spawn(async move {
let manager = service_location_manager_clone.clone();
let manager = service_location_manager_clone;

let service_location_task = async move {
info!("Starting service location management task");
info!("Starting service location management task");

info!("Attempting to auto-connect to service locations");
match manager.write().unwrap().connect_to_service_locations() {
info!("Attempting to auto-connect to service locations");
match manager.write().unwrap().connect_to_service_locations() {
Ok(_) => {
info!("Auto-connect to service locations completed successfully");
}
Err(e) => {
warn!(
"Error while trying to auto-connect to service locations: {e}. \
Will continue monitoring for login/logoff events.",
);
}
}

info!("Starting login/logoff event monitoring");
loop {
match watch_for_login_logoff(
manager.clone(),
).await {
Ok(_) => {
info!("Auto-connect to service locations completed successfully");
warn!("Login/logoff event monitoring ended unexpectedly. Restarting in {LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS:?}...");
tokio::time::sleep(LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS).await;
}
Err(e) => {
warn!(
"Error while trying to auto-connect to service locations: {e}. \
Will continue monitoring for login/logoff events.",
error!(
"Error in login/logoff event monitoring: {e}. Restarting in {LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS:?}...",
);
tokio::time::sleep(LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS).await;
info!("Restarting login/logoff event monitoring");
}
}
}

info!("Starting login/logoff event monitoring");
loop {
match watch_for_login_logoff(
manager.clone(),
).await {
Ok(_) => {
warn!("Login/logoff event monitoring ended unexpectedly");
break;
}
Err(e) => {
error!(
"Error in login/logoff event monitoring: {e}. Restarting in {LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS:?} seconds...",
);
tokio::time::sleep(LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS).await;
info!("Restarting login/logoff event monitoring");
}
}
}

warn!("Service location management task terminated");
Ok::<(), ServiceLocationError>(())
};

let server_task = async move {
run_server(config, service_location_manager_clone).await
};
});

let result = select! {
result = service_location_task => {
warn!("Service location task completed");
result.map_err(|e| format!("Service location error: {e}"))
}
result = server_task => {
warn!("Server task completed");
result.map_err(|e| format!("Server error: {e}"))
}
};
// Spawn the main gRPC server task
let service_location_manager_clone = service_location_manager.clone();
runtime.spawn(async move {
let result = run_server(config, service_location_manager_clone).await;

let signal = if result.is_err() {
error!("Task ended with error: {:?}", result.err());
error!("Server task ended with error: {:?}", result.err());
2
} else {
info!("Task ended without an error.");
warn!("Server task ended without an error.");
1
};

Expand Down