Compare commits

..

8 Commits

Author SHA1 Message Date
Kevin Yue
1bbfee34b8 Fix changelog date format 2024-03-31 09:28:39 +08:00
Kevin Yue
d97b3ba350 Merge remote-tracking branch 'origin/release/2.1.2' into dev 2024-03-29 20:30:32 +08:00
Kevin Yue
b2ca82e105 Update changelog 2024-03-29 07:55:10 -04:00
Kevin Yue
5ba6b1d5fc Merge branch 'hotfix/handle_network_error' into release/2.1.2 2024-03-29 07:52:17 -04:00
Kevin Yue
a96e77c758 Bump version 2.1.2 2024-03-29 07:48:02 -04:00
Kevin Yue
79e0f0c7c1 Handle portal endpoint network error 2024-03-29 01:57:53 -04:00
Kevin Yue
e69de98884 Fix gp-service name 2024-03-28 21:48:51 +08:00
Kevin Yue
e602b3b018 Add gp-suspend.service 2024-03-27 09:58:30 -04:00
18 changed files with 193 additions and 26 deletions

View File

@@ -9,6 +9,9 @@ on:
branches:
- main
- dev
- hotfix/*
- feature/*
- release/*
tags:
- latest
- v*.*.*
@@ -42,6 +45,7 @@ jobs:
with:
token: ${{ secrets.GH_PAT }}
repository: yuezk/GlobalProtect-openconnect
ref: ${{ github.ref }}
path: source/gp
- name: Create tarball
run: |
@@ -62,20 +66,39 @@ jobs:
strategy:
matrix:
os: ${{fromJson(needs.setup-matrix.outputs.matrix)}}
package: [deb, rpm, pkg, binary]
runs-on: ${{ matrix.os }}
steps:
- name: Prepare workspace
run: rm -rf build-gp && mkdir build-gp
run: |
rm -rf build-gp-${{ matrix.package }}
mkdir -p build-gp-${{ matrix.package }}
- name: Download tarball
uses: actions/download-artifact@v3
with:
name: artifact-source
path: build-gp
path: build-gp-${{ matrix.package }}
- name: Docker Login
run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin
- name: Build gp in Docker
- name: Build ${{ matrix.package }} package in Docker
run: |
docker run --rm -v $(pwd)/build-gp:/gp yuezk/gpdev:gp-builder
docker run --rm \
-v $(pwd)/build-gp-${{ matrix.package }}:/${{ matrix.package }} \
yuezk/gpdev:${{ matrix.package }}-builder
- name: Install ${{ matrix.package }} package in Docker
run: |
docker run --rm \
-e GPGUI_INSTALLED=0 \
-v $(pwd)/build-gp-${{ matrix.package }}:/${{ matrix.package }} \
yuezk/gpdev:${{ matrix.package }}-builder \
bash install.sh
- name: Upload ${{ matrix.package }} package
uses: actions/upload-artifact@v3
with:
name: artifact-gp-${{ matrix.os }}-${{ matrix.package }}
if-no-files-found: error
path: |
build-gp-${{ matrix.package }}/artifacts/*
build-gpgui:
needs:
@@ -95,12 +118,14 @@ jobs:
with:
token: ${{ secrets.GH_PAT }}
repository: yuezk/GlobalProtect-openconnect
ref: ${{ github.ref }}
path: gpgui-source/gp
- name: Checkout gpgui
- name: Checkout gpgui@${{ github.ref_name }}
uses: actions/checkout@v3
with:
token: ${{ secrets.GH_PAT }}
repository: yuezk/gpgui
ref: ${{ github.ref_name }}
path: gpgui-source/gpgui
- name: Tarball
run: |

View File

@@ -109,11 +109,16 @@ jobs:
run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin
- name: Build ${{ matrix.package }} package in Docker
run: |
docker run --rm -v $(pwd)/build-${{ matrix.package }}:/${{ matrix.package }} -e INCLUDE_GUI=1 yuezk/gpdev:${{ matrix.package }}-builder
docker run --rm \
-v $(pwd)/build-${{ matrix.package }}:/${{ matrix.package }} \
-e INCLUDE_GUI=1 \
yuezk/gpdev:${{ matrix.package }}-builder
- name: Install ${{ matrix.package }} package in Docker
run: |
docker run --rm -v $(pwd)/build-${{ matrix.package }}:/${{ matrix.package }} yuezk/gpdev:${{ matrix.package }}-builder \
docker run --rm \
-v $(pwd)/build-${{ matrix.package }}:/${{ matrix.package }} \
yuezk/gpdev:${{ matrix.package }}-builder \
bash install.sh
- name: Upload ${{ matrix.package }} package

14
Cargo.lock generated
View File

@@ -564,7 +564,7 @@ dependencies = [
[[package]]
name = "common"
version = "2.1.1"
version = "2.1.2"
dependencies = [
"is_executable",
]
@@ -1430,7 +1430,7 @@ dependencies = [
[[package]]
name = "gpapi"
version = "2.1.1"
version = "2.1.2"
dependencies = [
"anyhow",
"base64 0.21.5",
@@ -1462,7 +1462,7 @@ dependencies = [
[[package]]
name = "gpauth"
version = "2.1.1"
version = "2.1.2"
dependencies = [
"anyhow",
"clap",
@@ -1482,7 +1482,7 @@ dependencies = [
[[package]]
name = "gpclient"
version = "2.1.1"
version = "2.1.2"
dependencies = [
"anyhow",
"clap",
@@ -1504,7 +1504,7 @@ dependencies = [
[[package]]
name = "gpgui-helper"
version = "2.1.1"
version = "2.1.2"
dependencies = [
"anyhow",
"clap",
@@ -1522,7 +1522,7 @@ dependencies = [
[[package]]
name = "gpservice"
version = "2.1.1"
version = "2.1.2"
dependencies = [
"anyhow",
"axum",
@@ -2527,7 +2527,7 @@ dependencies = [
[[package]]
name = "openconnect"
version = "2.1.1"
version = "2.1.2"
dependencies = [
"cc",
"common",

View File

@@ -5,7 +5,7 @@ members = ["crates/*", "apps/gpclient", "apps/gpservice", "apps/gpauth", "apps/g
[workspace.package]
rust-version = "1.70"
version = "2.1.1"
version = "2.1.2"
authors = ["Kevin Yue <k3vinyue@gmail.com>"]
homepage = "https://github.com/yuezk/GlobalProtect-openconnect"
edition = "2021"

View File

@@ -13,6 +13,12 @@ PKG = $(PKG_NAME)-$(VERSION)
SERIES ?= $(shell lsb_release -cs)
PUBLISH ?= 0
# Indicate if it is a Debian packaging
DEB_PACKAGING ?= 0
INCLUDE_SYSTEMD ?= $(shell [ -d /run/systemd/system ] && echo 1 || echo 0)
# Enable the systemd service after installation
ENABLE_SERVICE ?= 1
export DEBEMAIL = k3vinyue@gmail.com
export DEBFULLNAME = Kevin Yue
@@ -116,9 +122,34 @@ install:
install -Dm644 packaging/files/usr/share/icons/hicolor/256x256@2/apps/gpgui.png $(DESTDIR)/usr/share/icons/hicolor/256x256@2/apps/gpgui.png
install -Dm644 packaging/files/usr/share/polkit-1/actions/com.yuezk.gpgui.policy $(DESTDIR)/usr/share/polkit-1/actions/com.yuezk.gpgui.policy
# Install the systemd service
if [ $(INCLUDE_SYSTEMD) -eq 1 ]; then \
if [ $(DEB_PACKAGING) -eq 1 ]; then \
install -Dm644 packaging/files/usr/lib/systemd/system/gp-suspend.service $(DESTDIR)/lib/systemd/system/gp-suspend.service; \
else \
install -Dm644 packaging/files/usr/lib/systemd/system/gp-suspend.service $(DESTDIR)/usr/lib/systemd/system/gp-suspend.service; \
fi; \
if [ $(ENABLE_SERVICE) -eq 1 ]; then \
systemctl --system daemon-reload \
systemctl enable gp-suspend.service || true; \
fi \
else \
echo "Skipping systemd service installation"; \
fi
@echo "Installation complete."
uninstall:
@echo "Uninstalling $(PKG_NAME)..."
# Disable the systemd service
if [ -d /run/systemd/system ]; then \
systemctl disable gp-suspend.service >/dev/null || true; \
fi
rm -f $(DESTDIR)/lib/systemd/system/gp-suspend.service
rm -f $(DESTDIR)/usr/lib/systemd/system/gp-suspend.service
rm -f $(DESTDIR)/usr/bin/gpclient
rm -f $(DESTDIR)/usr/bin/gpauth
rm -f $(DESTDIR)/usr/bin/gpservice
@@ -195,7 +226,7 @@ init-rpm: clean-rpm
sed -i "s/@VERSION@/$(VERSION)/g" .build/rpm/globalprotect-openconnect.spec
sed -i "s/@REVISION@/$(REVISION)/g" .build/rpm/globalprotect-openconnect.spec
sed -i "s/@OFFLINE@/$(OFFLINE)/g" .build/rpm/globalprotect-openconnect.spec
sed -i "s/@DATE@/$(shell date "+%a %b %d %Y")/g" .build/rpm/globalprotect-openconnect.spec
sed -i "s/@DATE@/$(shell LC_ALL=en.US date "+%a %b %d %Y")/g" .build/rpm/globalprotect-openconnect.spec
sed -i "s/@VERSION@/$(VERSION)/g" .build/rpm/globalprotect-openconnect.changes
sed -i "s/@DATE@/$(shell LC_ALL=en.US date -u "+%a %b %e %T %Z %Y")/g" .build/rpm/globalprotect-openconnect.changes
@@ -223,6 +254,7 @@ init-pkgbuild: clean-pkgbuild tarball
cp .build/tarball/${PKG}.tar.gz .build/pkgbuild
cp packaging/pkgbuild/PKGBUILD.in .build/pkgbuild/PKGBUILD
cp packaging/pkgbuild/gp.install .build/pkgbuild
sed -i "s/@PKG_NAME@/$(PKG_NAME)/g" .build/pkgbuild/PKGBUILD
sed -i "s/@VERSION@/$(VERSION)/g" .build/pkgbuild/PKGBUILD
@@ -244,7 +276,10 @@ binary: clean-binary tarball
mkdir -p .build/binary/$(PKG_NAME)_$(VERSION)/artifacts
make -C .build/binary/${PKG} build OFFLINE=$(OFFLINE) BUILD_FE=0 INCLUDE_GUI=$(INCLUDE_GUI)
make -C .build/binary/${PKG} install DESTDIR=$(PWD)/.build/binary/$(PKG_NAME)_$(VERSION)/artifacts
make -C .build/binary/${PKG} install \
DESTDIR=$(PWD)/.build/binary/$(PKG_NAME)_$(VERSION)/artifacts \
INCLUDE_SYSTEMD=1 \
ENABLE_SERVICE=0
cp packaging/binary/Makefile.in .build/binary/$(PKG_NAME)_$(VERSION)/Makefile

View File

@@ -153,7 +153,7 @@ impl<'a> ConnectHandler<'a> {
}
async fn connect_gateway_with_prelogin(&self, gateway: &str) -> anyhow::Result<()> {
info!("Treat the portal as the gateway, connecting...");
info!("Performing the gateway authentication...");
let mut gp_params = self.build_gp_params();
gp_params.set_is_gateway(true);

View File

@@ -1,5 +1,9 @@
# Changelog
## 2.1.2 - 2024-03-29
- Treat portal as gateway when the gateway login is failed (fix #338)
## 2.1.1 - 2024-03-25
- Add the `--hip` option to enable HIP report

View File

@@ -6,6 +6,6 @@ pub enum PortalError {
PreloginError(String),
#[error("Portal config error: {0}")]
ConfigError(String),
#[error("Gateway error: {0}")]
GatewayError(String),
#[error("Network error: {0}")]
NetworkError(String),
}

View File

@@ -34,7 +34,7 @@ pub async fn gateway_login(gateway: &str, cred: &Credential, gp_params: &GpParam
.form(&params)
.send()
.await
.map_err(|e| anyhow::anyhow!(PortalError::GatewayError(e.to_string())))?;
.map_err(|e| anyhow::anyhow!(PortalError::NetworkError(e.to_string())))?;
let status = res.status();

View File

@@ -102,7 +102,12 @@ pub async fn retrieve_config(portal: &str, cred: &Credential, gp_params: &GpPara
info!("Portal config, user_agent: {}", gp_params.user_agent());
let res = client.post(&url).form(&params).send().await?;
let res = client
.post(&url)
.form(&params)
.send()
.await
.map_err(|e| anyhow::anyhow!(PortalError::NetworkError(e.to_string())))?;
let status = res.status();
if status == StatusCode::NOT_FOUND {

View File

@@ -118,7 +118,12 @@ pub async fn prelogin(portal: &str, gp_params: &GpParams) -> anyhow::Result<Prel
.user_agent(user_agent)
.build()?;
let res = client.post(&prelogin_url).form(&params).send().await?;
let res = client
.post(&prelogin_url)
.form(&params)
.send()
.await
.map_err(|e| anyhow::anyhow!(PortalError::NetworkError(e.to_string())))?;
let status = res.status();
if status == StatusCode::NOT_FOUND {

View File

@@ -1,3 +1,7 @@
INCLUDE_SYSTEMD ?= $(shell [ -d /run/systemd/system ] && echo 1 || echo 0)
# Enable the systemd service after installation
ENABLE_SERVICE ?= 1
install:
@echo "===> Installing..."
@@ -5,7 +9,10 @@ install:
install -Dm755 artifacts/usr/bin/gpservice $(DESTDIR)/usr/bin/gpservice
install -Dm755 artifacts/usr/bin/gpauth $(DESTDIR)/usr/bin/gpauth
install -Dm755 artifacts/usr/bin/gpgui-helper $(DESTDIR)/usr/bin/gpgui-helper
install -Dm755 artifacts/usr/bin/gpgui $(DESTDIR)/usr/bin/gpgui
if [ -f artifacts/usr/bin/gpgui ]; then \
install -Dm755 artifacts/usr/bin/gpgui $(DESTDIR)/usr/bin/gpgui; \
fi
install -Dm644 artifacts/usr/share/applications/gpgui.desktop $(DESTDIR)/usr/share/applications/gpgui.desktop
install -Dm644 artifacts/usr/share/icons/hicolor/scalable/apps/gpgui.svg $(DESTDIR)/usr/share/icons/hicolor/scalable/apps/gpgui.svg
@@ -14,9 +21,28 @@ install:
install -Dm644 artifacts/usr/share/icons/hicolor/256x256@2/apps/gpgui.png $(DESTDIR)/usr/share/icons/hicolor/256x256@2/apps/gpgui.png
install -Dm644 artifacts/usr/share/polkit-1/actions/com.yuezk.gpgui.policy $(DESTDIR)/usr/share/polkit-1/actions/com.yuezk.gpgui.policy
# Install the service
if [ $(INCLUDE_SYSTEMD) -eq 1 ]; then \
install -Dm644 artifacts/usr/lib/systemd/system/gp-suspend.service $(DESTDIR)/usr/lib/systemd/system/gp-suspend.service; \
if [ $(ENABLE_SERVICE) -eq 1 ]; then \
systemctl --system daemon-reload; \
systemctl enable gp-suspend.service; \
fi; \
fi
@echo "===> Done."
uninstall:
@echo "===> Uninstalling from $(DESTDIR)..."
# Disable the systemd service
if [ -d /run/systemd/system ]; then \
systemctl disable gp-suspend.service >/dev/null || true; \
fi
rm -f $(DESTDIR)/lib/systemd/system/gp-suspend.service
rm -f $(DESTDIR)/usr/lib/systemd/system/gp-suspend.service
rm -f $(DESTDIR)/usr/bin/gpclient
rm -f $(DESTDIR)/usr/bin/gpservice
rm -f $(DESTDIR)/usr/bin/gpauth
@@ -29,3 +55,5 @@ uninstall:
rm -f $(DESTDIR)/usr/share/icons/hicolor/128x128/apps/gpgui.png
rm -f $(DESTDIR)/usr/share/icons/hicolor/256x256@2/apps/gpgui.png
rm -f $(DESTDIR)/usr/share/polkit-1/actions/com.yuezk.gpgui.policy
@echo "===> Done."

View File

@@ -11,4 +11,6 @@ case "$1" in
;;
esac
#DEBHELPER#
exit 0

View File

@@ -2,6 +2,12 @@
export OFFLINE = @OFFLINE@
export BUILD_FE = 0
export DEB_PACKAGING = 1
export INCLUDE_SYSTEMD = 1
export ENABLE_SERVICE = 0
%:
dh $@ --no-parallel
override_dh_installsystemd:
dh_installsystemd gp-suspend.service --no-start

View File

@@ -0,0 +1,10 @@
[Unit]
Description=Disconnect from the VPN when suspending
Before=sleep.target
[Service]
Type=oneshot
ExecStart=/usr/bin/gpclient disconnect
[Install]
WantedBy=sleep.target

View File

@@ -14,6 +14,8 @@ optdepends=('wmctrl: for window management')
provides=('globalprotect-openconnect' 'gpclient' 'gpservice' 'gpauth' 'gpgui')
install=gp.install
source=("${_pkgname}-${pkgver}.tar.gz")
sha256sums=('SKIP')
@@ -31,5 +33,5 @@ build() {
package() {
cd "$pkgname-$pkgver"
make install DESTDIR="$pkgdir"
make install DESTDIR="$pkgdir" INCLUDE_SYSTEMD=1 ENABLE_SERVICE=0
}

View File

@@ -0,0 +1,12 @@
post_install() {
systemctl --system daemon-reload
systemctl enable gp-suspend.service
}
post_upgrade() {
post_install
}
post_remove() {
systemctl disable gp-suspend.service
}

View File

@@ -22,6 +22,7 @@ BuildRequires: perl
BuildRequires: (webkit2gtk4.0-devel or webkit2gtk3-soup2-devel)
BuildRequires: (libappindicator-gtk3-devel or libappindicator3-1)
BuildRequires: (librsvg2-devel or librsvg-devel)
BuildRequires: systemd-rpm-macros
Requires: openconnect >= 8.20, (libayatana-appindicator or libappindicator-gtk3)
Conflicts: globalprotect-openconnect-snapshot
@@ -34,16 +35,42 @@ A GUI for GlobalProtect VPN, based on OpenConnect, supports the SSO authenticati
%prep
%setup
%pre
%if 0%{?suse_version}
%service_add_pre gp-suspend.service
%endif
%post
%if 0%{?suse_version}
%service_add_post gp-suspend.service
%else
%systemd_post gp-suspend.service
%endif
%preun
%if 0%{?suse_version}
%service_del_preun gp-suspend.service
%else
%systemd_preun gp-suspend.service
%endif
%postun
# Clean up the gpgui downloaded at runtime
rm -f %{_bindir}/gpgui
%if 0%{?suse_version}
%service_del_postun_without_restart gp-suspend.service
%else
%systemd_postun gp-suspend.service
%endif
%build
# The injected RUSTFLAGS could fail the build
unset RUSTFLAGS
make build OFFLINE=@OFFLINE@ BUILD_FE=0
%install
%make_install
%make_install INCLUDE_SYSTEMD=1 ENABLE_SERVICE=0
%files
%defattr(-,root,root)
@@ -54,6 +81,7 @@ make build OFFLINE=@OFFLINE@ BUILD_FE=0
%{_datadir}/icons/hicolor/256x256@2/apps/gpgui.png
%{_datadir}/icons/hicolor/scalable/apps/gpgui.svg
%{_datadir}/polkit-1/actions/com.yuezk.gpgui.policy
%{_unitdir}/gp-suspend.service
%dir %{_datadir}/icons/hicolor
%dir %{_datadir}/icons/hicolor/32x32