Skip to content

Commit

Permalink
Merge pull request #7398 from alvasw/updater_Implement_pkexec_executor
Browse files Browse the repository at this point in the history
updater: Implement pkexec executor
  • Loading branch information
alejandrogarcia83 authored Feb 25, 2025
2 parents 79017de + 599f49d commit 2bbdf33
Show file tree
Hide file tree
Showing 6 changed files with 82 additions and 0 deletions.
1 change: 1 addition & 0 deletions platform/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ plugins {
dependencies {
constraints {
api libs.protobuf.java
api libs.slf4j.api
}
}
2 changes: 2 additions & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ include 'statsnode'
include 'apitest'
include 'platform'
include 'code-coverage-report'
include 'updater'

includeBuild 'bitcoind'

rootProject.name = 'bisq'
12 changes: 12 additions & 0 deletions updater/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
plugins {
id 'bisq.java-conventions'
id 'java-library'
}

dependencies {
implementation enforcedPlatform(project(':platform'))
annotationProcessor libs.lombok
compileOnly libs.lombok
implementation libs.logback.classic
implementation libs.logback.core
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package bisq.updater;

public class InstallationFailedException extends RuntimeException {
public InstallationFailedException(String message) {
super(message);
}

public InstallationFailedException(String message, Throwable cause) {
super(message, cause);
}
}
49 changes: 49 additions & 0 deletions updater/src/main/java/bisq/updater/linux/pkexec/PkExec.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package bisq.updater.linux.pkexec;

import java.io.IOException;

import java.util.List;
import java.util.concurrent.TimeUnit;


import lombok.extern.slf4j.Slf4j;



import bisq.updater.InstallationFailedException;

@Slf4j
public class PkExec {
public static final int AUTHORIZATION_FAILED = 127;
private static final int AUTHORIZATION_DIALOG_DISMISSED = 126;

public static Process run(List<String> args) {
try {
var processBuilder = new ProcessBuilder("pkexec");
processBuilder.command().addAll(args);

Process process = processBuilder
.redirectErrorStream(true)
.redirectOutput(ProcessBuilder.Redirect.DISCARD)
.start();

boolean isSuccess = process.waitFor(2, TimeUnit.MINUTES);
if (!isSuccess) {
throw new InstallationFailedException(processBuilder.command() + " didn't finish after 2 minutes.");
}

int exitCode = process.exitValue();
switch (exitCode) {
case AUTHORIZATION_FAILED:
throw new PkexecAuthorizationFailedException("Couldn't get authorization from user.");
case AUTHORIZATION_DIALOG_DISMISSED:
throw new PkexecAuthorizationFailedException("User dismissed authorization dialog.");
}

return process;

} catch (IOException | InterruptedException e) {
throw new InstallationFailedException("Installation failed.", e);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package bisq.updater.linux.pkexec;

public class PkexecAuthorizationFailedException extends RuntimeException {
public PkexecAuthorizationFailedException(String message) {
super(message);
}
}

0 comments on commit 2bbdf33

Please sign in to comment.