Skip to content

Commit

Permalink
Only open connection to system bus on demand
Browse files Browse the repository at this point in the history
  • Loading branch information
benfrancis committed Nov 13, 2024
1 parent 9e7f01c commit 14a1ea5
Showing 1 changed file with 47 additions and 4 deletions.
51 changes: 47 additions & 4 deletions src/platforms/utilities/network-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,26 @@ export interface AddressData {
* Manages networking devices over DBus.
*/
class NetworkManager {
// Note there can only be one system bus instance open at a time.
private systemBus = DBus.getBus('system');
// Reference to the DBus system bus once connected
private systemBus: DBus.DBusConnection | null = null;

/**
* Disconnect the system bus.
* Connect to the system bus.
*/
start(): void {
// There can only be one system bus instance open at a time.
if (!this.systemBus) {
this.systemBus = DBus.getBus('system');
}
}

/**
* Disconnect from the system bus.
*/
stop(): void {
this.systemBus.disconnect();
if (this.systemBus) {
this.systemBus.disconnect();
}
}

/**
Expand All @@ -49,7 +61,9 @@ class NetworkManager {
* @returns {Promise<string[]>} An array of DBus object paths.
*/
getDevices(): Promise<string[]> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()

Check failure on line 66 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (10)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 66 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (12)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 66 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (14)

Do not use "@ts-ignore" because it alters compilation errors
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
'/org/freedesktop/NetworkManager',
Expand Down Expand Up @@ -81,7 +95,9 @@ class NetworkManager {
* (1 is Ethernet, 2 is Wi-Fi...).
*/
getDeviceType(path: string): Promise<number> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()

Check failure on line 100 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (10)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 100 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (12)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 100 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (14)

Do not use "@ts-ignore" because it alters compilation errors
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand Down Expand Up @@ -153,7 +169,9 @@ class NetworkManager {
* connection object associated with this device.
*/
getDeviceConnection(path: string): Promise<string> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()

Check failure on line 174 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (10)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 174 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (12)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 174 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (14)

Do not use "@ts-ignore" because it alters compilation errors
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand All @@ -170,6 +188,7 @@ class NetworkManager {
reject();
return;
}
// @ts-ignore: this.systemBus assigned in this.start()

Check failure on line 191 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (10)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 191 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (12)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 191 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (14)

Do not use "@ts-ignore" because it alters compilation errors
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
activeConnectionPath,
Expand Down Expand Up @@ -203,7 +222,9 @@ class NetworkManager {
* @returns {Promise<ConnectionSettings>} Resolves with the settings of a connection.
*/
getConnectionSettings(path: string): Promise<ConnectionSettings> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()

Check failure on line 227 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (10)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 227 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (12)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 227 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (14)

Do not use "@ts-ignore" because it alters compilation errors
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand Down Expand Up @@ -239,7 +260,9 @@ class NetworkManager {
* rejects with an Error on failure.
*/
setConnectionSettings(path: string, settings: ConnectionSettings): Promise<boolean> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()

Check failure on line 265 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (10)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 265 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (12)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 265 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (14)

Do not use "@ts-ignore" because it alters compilation errors
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand Down Expand Up @@ -272,7 +295,9 @@ class NetworkManager {
* or rejects on failure.
*/
activateConnection(connection: string, device: string): Promise<boolean> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()

Check failure on line 300 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (10)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 300 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (12)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 300 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (14)

Do not use "@ts-ignore" because it alters compilation errors
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
'/org/freedesktop/NetworkManager',
Expand Down Expand Up @@ -303,7 +328,9 @@ class NetworkManager {
* @returns {Promise<Array<AddressData>>} Promise resolves with IP4Config object.
*/
getDeviceIp4Config(path: string): Promise<Array<AddressData>> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()

Check failure on line 333 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (10)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 333 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (12)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 333 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (14)

Do not use "@ts-ignore" because it alters compilation errors
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand All @@ -320,6 +347,7 @@ class NetworkManager {
reject();
return;
}
// @ts-ignore: this.systemBus assigned in this.start()

Check failure on line 350 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (10)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 350 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (12)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 350 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (14)

Do not use "@ts-ignore" because it alters compilation errors
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
ip4ConfigPath,
Expand Down Expand Up @@ -355,7 +383,9 @@ class NetworkManager {
* @returns {Promise<string>} The SSID of the access point.
*/
getAccessPointSsid(path: string): Promise<string> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()

Check failure on line 388 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (10)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 388 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (12)

Do not use "@ts-ignore" because it alters compilation errors

Check failure on line 388 in src/platforms/utilities/network-manager.ts

View workflow job for this annotation

GitHub Actions / build (14)

Do not use "@ts-ignore" because it alters compilation errors
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand Down Expand Up @@ -390,7 +420,9 @@ class NetworkManager {
* @returns {Promise<number>} The strength of the signal as a percentage.
*/
getAccessPointStrength(path: string): Promise<number> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand Down Expand Up @@ -423,7 +455,9 @@ class NetworkManager {
* @returns {Promise<boolean>} true if encrypted, false if not.
*/
async getAccessPointSecurity(path: string): Promise<boolean> {
this.start();
const wpaFlagRequest = new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand All @@ -448,6 +482,7 @@ class NetworkManager {
);
});
const wpa2FlagRequest = new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand Down Expand Up @@ -538,7 +573,9 @@ class NetworkManager {
* @returns {Promise<string>} Promise resolves with the DBUS object path of an access point.
*/
getActiveAccessPoint(path: string): Promise<string> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand Down Expand Up @@ -569,7 +606,9 @@ class NetworkManager {
* @returns {Promise<string[]>} An array of DBus object paths of Access Points.
*/
getWifiAccessPoints(path: string): Promise<string[]> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand Down Expand Up @@ -633,7 +672,9 @@ class NetworkManager {
secure: boolean,
password: string
): Promise<void> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
'/org/freedesktop/NetworkManager',
Expand Down Expand Up @@ -695,7 +736,9 @@ class NetworkManager {
* deactivation or rejects with an Error on failure.
*/
disconnectNetworkDevice(path: string): Promise<void> {
this.start();
return new Promise((resolve, reject) => {
// @ts-ignore: this.systemBus assigned in this.start()
this.systemBus.getInterface(
'org.freedesktop.NetworkManager',
path,
Expand Down

0 comments on commit 14a1ea5

Please sign in to comment.