added fallback mechanism in case signal-cli-native doesn't exist

This commit is contained in:
Bernhard B
2021-02-19 22:19:43 +01:00
parent 23c6fabf8e
commit 4567210688
3 changed files with 30 additions and 11 deletions

View File

@@ -3,6 +3,7 @@ services:
signal-cli-rest-api: signal-cli-rest-api:
build: "." build: "."
environment: environment:
- USE_NATIVE=1
- PORT=8080 - PORT=8080
ports: ports:
- "8080:8080" #map docker port 8080 to host port 8080. - "8080:8080" #map docker port 8080 to host port 8080.

View File

@@ -22,6 +22,7 @@ import (
"github.com/h2non/filetype" "github.com/h2non/filetype"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
qrcode "github.com/skip2/go-qrcode" qrcode "github.com/skip2/go-qrcode"
utils "github.com/bbernhard/signal-cli-rest-api/utils"
) )
const signalCliV2GroupError = "Cannot create a V2 group as self does not have a versioned profile" const signalCliV2GroupError = "Cannot create a V2 group as self does not have a versioned profile"
@@ -319,10 +320,21 @@ func runSignalCli(wait bool, args []string, stdin string) (string, error) {
} else { } else {
log.Debug("*) docker exec -it <container id> /bin/bash") log.Debug("*) docker exec -it <container id> /bin/bash")
} }
log.Debug("*) su signal-api")
log.Debug("*) signal-cli ", strings.Join(args, " "))
cmd := exec.Command("signal-cli", args...) signalCliBinary := "signal-cli"
if utils.GetEnv("USE_NATIVE", "0") == "1" {
if utils.GetEnv("SUPPORTS_NATIVE", "0") == "1" {
signalCliBinary = "signal-cli-native"
} else {
log.Error("signal-cli-native is not support on this system...falling back to signal-cli")
signalCliBinary = "signal-cli"
}
}
log.Debug("*) su signal-api")
log.Debug("*) ", signalCliBinary, " ", strings.Join(args, " "))
cmd := exec.Command(signalCliBinary, args...)
if stdin != "" { if stdin != "" {
cmd.Stdin = strings.NewReader(stdin) cmd.Stdin = strings.NewReader(stdin)
} }

View File

@@ -2,14 +2,15 @@ package main
import ( import (
"flag" "flag"
"os"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
swaggerFiles "github.com/swaggo/files" swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger" ginSwagger "github.com/swaggo/gin-swagger"
"github.com/bbernhard/signal-cli-rest-api/api" "github.com/bbernhard/signal-cli-rest-api/api"
"github.com/bbernhard/signal-cli-rest-api/utils"
_ "github.com/bbernhard/signal-cli-rest-api/docs" _ "github.com/bbernhard/signal-cli-rest-api/docs"
"os"
) )
@@ -57,6 +58,16 @@ func main() {
log.Info("Started Signal Messenger REST API") log.Info("Started Signal Messenger REST API")
supportsSignalCliNative := "0"
if _, err := os.Stat("/usr/bin/signal-cli-native"); err == nil {
supportsSignalCliNative = "1"
}
err := os.Setenv("SUPPORTS_NATIVE", supportsSignalCliNative)
if err != nil {
log.Fatal("Couldn't set env variable: ", err.Error())
}
api := api.NewApi(*signalCliConfig, *attachmentTmpDir, *avatarTmpDir) api := api.NewApi(*signalCliConfig, *attachmentTmpDir, *avatarTmpDir)
v1 := router.Group("/v1") v1 := router.Group("/v1")
{ {
@@ -135,7 +146,7 @@ func main() {
} }
} }
swaggerPort := getEnv("PORT", "8080") swaggerPort := utils.GetEnv("PORT", "8080")
swaggerUrl := ginSwagger.URL("http://127.0.0.1:" + string(swaggerPort) + "/swagger/doc.json") swaggerUrl := ginSwagger.URL("http://127.0.0.1:" + string(swaggerPort) + "/swagger/doc.json")
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, swaggerUrl)) router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, swaggerUrl))
@@ -143,9 +154,4 @@ func main() {
router.Run() router.Run()
} }
func getEnv(key string, defaultVal string) string {
if value, exists := os.LookupEnv(key); exists {
return value
}
return defaultVal
}