Basic Auth and RemoveApp Support
parent
db56530311
commit
e238e9d71d
|
@ -25,6 +25,7 @@ type EdgeApp struct {
|
||||||
InternetURL string `json:"internet_url"`
|
InternetURL string `json:"internet_url"`
|
||||||
Options []EdgeAppOption `json:"options"`
|
Options []EdgeAppOption `json:"options"`
|
||||||
NeedsConfig bool `json:"needs_config"`
|
NeedsConfig bool `json:"needs_config"`
|
||||||
|
Login EdgeAppLogin `json:"login"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// MaybeEdgeApp : Boolean flag for validation of edgeapp existance
|
// MaybeEdgeApp : Boolean flag for validation of edgeapp existance
|
||||||
|
@ -55,11 +56,19 @@ type EdgeAppOption struct {
|
||||||
IsInstallLocked bool `json:"is_install_locked"`
|
IsInstallLocked bool `json:"is_install_locked"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type EdgeAppLogin struct {
|
||||||
|
Enabled bool `json:"enabled"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
Password string `json:"password"`
|
||||||
|
}
|
||||||
|
|
||||||
const configFilename = "/edgebox-compose.yml"
|
const configFilename = "/edgebox-compose.yml"
|
||||||
const envFilename = "/edgebox.env"
|
const envFilename = "/edgebox.env"
|
||||||
const optionsTemplateFilename = "/edgeapp.template.env"
|
const optionsTemplateFilename = "/edgeapp.template.env"
|
||||||
const optionsEnvFilename = "/edgeapp.env"
|
const optionsEnvFilename = "/edgeapp.env"
|
||||||
|
const authEnvFilename = "/auth.env"
|
||||||
const runnableFilename = "/.run"
|
const runnableFilename = "/.run"
|
||||||
|
const appdataFoldername = "/appdata"
|
||||||
const myEdgeAppServiceEnvFilename = "/myedgeapp.env"
|
const myEdgeAppServiceEnvFilename = "/myedgeapp.env"
|
||||||
const defaultContainerOperationSleepTime time.Duration = time.Second * 10
|
const defaultContainerOperationSleepTime time.Duration = time.Second * 10
|
||||||
|
|
||||||
|
@ -202,6 +211,21 @@ func GetEdgeApp(ID string) MaybeEdgeApp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
edgeAppBasicAuthEnabled := false
|
||||||
|
edgeAppBasicAuthUsername := ""
|
||||||
|
edgeAppBasicAuthPassword := ""
|
||||||
|
|
||||||
|
edgeAppAuthEnv, err := godotenv.Read(utils.GetPath(utils.EdgeAppsPath) + ID + authEnvFilename)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("No auth.env file found. Login status is disabled.")
|
||||||
|
} else {
|
||||||
|
if edgeAppAuthEnv["USERNAME"] != "" && edgeAppAuthEnv["PASSWORD"] != "" {
|
||||||
|
edgeAppBasicAuthEnabled = true
|
||||||
|
edgeAppBasicAuthUsername = edgeAppAuthEnv["USERNAME"]
|
||||||
|
edgeAppBasicAuthPassword = edgeAppAuthEnv["PASSWORD"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
result = MaybeEdgeApp{
|
result = MaybeEdgeApp{
|
||||||
EdgeApp: EdgeApp{
|
EdgeApp: EdgeApp{
|
||||||
ID: ID,
|
ID: ID,
|
||||||
|
@ -214,6 +238,8 @@ func GetEdgeApp(ID string) MaybeEdgeApp {
|
||||||
InternetURL: edgeAppInternetURL,
|
InternetURL: edgeAppInternetURL,
|
||||||
Options: edgeAppOptions,
|
Options: edgeAppOptions,
|
||||||
NeedsConfig: needsConfig,
|
NeedsConfig: needsConfig,
|
||||||
|
Login: EdgeAppLogin{edgeAppBasicAuthEnabled, edgeAppBasicAuthUsername, edgeAppBasicAuthPassword},
|
||||||
|
|
||||||
},
|
},
|
||||||
Valid: true,
|
Valid: true,
|
||||||
}
|
}
|
||||||
|
@ -268,11 +294,40 @@ func SetEdgeAppInstalled(ID string) bool {
|
||||||
|
|
||||||
func SetEdgeAppNotInstalled(ID string) bool {
|
func SetEdgeAppNotInstalled(ID string) bool {
|
||||||
|
|
||||||
|
// Stop the app first
|
||||||
|
StopEdgeApp(ID)
|
||||||
|
|
||||||
|
// Now remove any files
|
||||||
result := true
|
result := true
|
||||||
|
|
||||||
err := os.Remove(utils.GetPath(utils.EdgeAppsPath) + ID + runnableFilename)
|
err := os.Remove(utils.GetPath(utils.EdgeAppsPath) + ID + runnableFilename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
result = false
|
result = false
|
||||||
log.Fatal(err)
|
log.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = os.Remove(utils.GetPath(utils.EdgeAppsPath) + ID + authEnvFilename)
|
||||||
|
if err != nil {
|
||||||
|
result = false
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = os.RemoveAll(utils.GetPath(utils.EdgeAppsPath) + ID + appdataFoldername)
|
||||||
|
if err != nil {
|
||||||
|
result = false
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = os.Remove(utils.GetPath(utils.EdgeAppsPath) + ID + myEdgeAppServiceEnvFilename)
|
||||||
|
if err != nil {
|
||||||
|
result = false
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = os.Remove(utils.GetPath(utils.EdgeAppsPath) + ID + optionsEnvFilename)
|
||||||
|
if err != nil {
|
||||||
|
result = false
|
||||||
|
log.Println(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
buildFrameworkContainers()
|
buildFrameworkContainers()
|
||||||
|
|
|
@ -39,6 +39,11 @@ type TaskOption struct {
|
||||||
Value string `json:"value"`
|
Value string `json:"value"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TaskBasicAuth struct {
|
||||||
|
Username string `json:"username"`
|
||||||
|
Password string `json:"password"`
|
||||||
|
}
|
||||||
|
|
||||||
type taskSetupTunnelArgs struct {
|
type taskSetupTunnelArgs struct {
|
||||||
DomainName string `json:"domain_name"`
|
DomainName string `json:"domain_name"`
|
||||||
}
|
}
|
||||||
|
@ -65,6 +70,15 @@ type taskSetEdgeAppOptionsArgs struct {
|
||||||
Options []TaskOption `json:"options"`
|
Options []TaskOption `json:"options"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type taskSetEdgeAppBasicAuthArgs struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
Login TaskBasicAuth `json:"login"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type taskRemoveEdgeAppBasicAuthArgs struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
type taskEnableOnlineArgs struct {
|
type taskEnableOnlineArgs struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
InternetURL string `json:"internet_url"`
|
InternetURL string `json:"internet_url"`
|
||||||
|
@ -287,6 +301,30 @@ func ExecuteTask(task Task) Task {
|
||||||
task.Result = sql.NullString{String: taskResult, Valid: true}
|
task.Result = sql.NullString{String: taskResult, Valid: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "set_edgeapp_basic_auth":
|
||||||
|
|
||||||
|
log.Println("Settig EdgeApp Basic Authentication...")
|
||||||
|
var args taskSetEdgeAppBasicAuthArgs
|
||||||
|
err := json.Unmarshal([]byte(task.Args.String), &args)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error reading arguments of set_edgeapp_basic_auth task: %s", err)
|
||||||
|
} else {
|
||||||
|
taskResult := taskSetEdgeAppBasicAuth(args)
|
||||||
|
task.Result = sql.NullString{String: taskResult, Valid: true}
|
||||||
|
}
|
||||||
|
|
||||||
|
case "remove_edgeapp_basic_auth":
|
||||||
|
|
||||||
|
log.Println("Removing EdgeApp Basic Authentication...")
|
||||||
|
var args taskRemoveEdgeAppBasicAuthArgs
|
||||||
|
err := json.Unmarshal([]byte(task.Args.String), &args)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error reading arguments of remove_edgeapp_basic_auth task: %s", err)
|
||||||
|
} else {
|
||||||
|
taskResult := taskRemoveEdgeAppBasicAuth(args)
|
||||||
|
task.Result = sql.NullString{String: taskResult, Valid: true}
|
||||||
|
}
|
||||||
|
|
||||||
case "enable_online":
|
case "enable_online":
|
||||||
|
|
||||||
log.Println("Enabling online access to EdgeApp...")
|
log.Println("Enabling online access to EdgeApp...")
|
||||||
|
@ -986,6 +1024,77 @@ func taskSetEdgeAppOptions(args taskSetEdgeAppOptionsArgs) string {
|
||||||
return string(resultJSON)
|
return string(resultJSON)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func taskSetEdgeAppBasicAuth(args taskSetEdgeAppBasicAuthArgs) string {
|
||||||
|
// Id is the edgeapp id
|
||||||
|
appID := args.ID
|
||||||
|
|
||||||
|
|
||||||
|
// Open the file to write the options,
|
||||||
|
// it is an env file in /home/system/components/apps/<app_id>/auth.env
|
||||||
|
|
||||||
|
// Get the path to the auth.env file
|
||||||
|
edgeappAuthEnvPath := "/home/system/components/apps/" + appID + "/auth.env"
|
||||||
|
|
||||||
|
// If the file does not exist, create it
|
||||||
|
if _, err := os.Stat(edgeappAuthEnvPath); os.IsNotExist(err) {
|
||||||
|
// Create the file
|
||||||
|
_, err := os.Create(edgeappAuthEnvPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error creating auth.env file: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// It is an env file, so we can use go-dotenv to write the options
|
||||||
|
// Open the file
|
||||||
|
edgeappAuthEnvFile, err := os.OpenFile(edgeappAuthEnvPath, os.O_WRONLY, 0600)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error opening auth.env file: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write the login values to the file
|
||||||
|
_, err = edgeappAuthEnvFile.WriteString("USERNAME=" + args.Login.Username + "\n" + "PASSWORD=" + args.Login.Password + "\n")
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error writing credentials to auth.env file: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the file
|
||||||
|
err = edgeappAuthEnvFile.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error closing auth.env file: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
result := edgeapps.GetEdgeAppStatus(appID)
|
||||||
|
resultJSON, _ := json.Marshal(result)
|
||||||
|
|
||||||
|
system.StartWs()
|
||||||
|
taskGetEdgeApps() // This task will imediatelly update the entry in the api database.
|
||||||
|
|
||||||
|
return string(resultJSON)
|
||||||
|
}
|
||||||
|
|
||||||
|
func taskRemoveEdgeAppBasicAuth(args taskRemoveEdgeAppBasicAuthArgs) string {
|
||||||
|
// Id is the edgeapp id
|
||||||
|
appID := args.ID
|
||||||
|
|
||||||
|
// Get the path to the auth.env file
|
||||||
|
edgeappAuthEnvFile := "/auth.env"
|
||||||
|
|
||||||
|
fmt.Println("Removing auth.env file" + edgeappAuthEnvFile)
|
||||||
|
|
||||||
|
err := os.Remove(utils.GetPath(utils.EdgeAppsPath) + args.ID + edgeappAuthEnvFile)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
result := edgeapps.GetEdgeAppStatus(appID)
|
||||||
|
resultJSON, _ := json.Marshal(result)
|
||||||
|
|
||||||
|
system.StartWs()
|
||||||
|
taskGetEdgeApps() // This task will imediatelly update the entry in the api database.
|
||||||
|
|
||||||
|
return string(resultJSON)
|
||||||
|
}
|
||||||
|
|
||||||
func taskEnableOnline(args taskEnableOnlineArgs) string {
|
func taskEnableOnline(args taskEnableOnlineArgs) string {
|
||||||
fmt.Println("Executing taskEnableOnline for " + args.ID)
|
fmt.Println("Executing taskEnableOnline for " + args.ID)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue