Automate calls using asterisk
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
3.1 KiB

package main
import (
"encoding/json"
"io/ioutil"
"log"
"os"
"os/user"
"path/filepath"
)
// Reference from:
// https://wiki.asterisk.org/wiki/display/AST/Asterisk+Call+Files
// Config all configurations for this application.
type Config struct {
HTTPBind string `json:"http_bind"`
HTTPPort uint `json:"http_port"`
HTTPDebug bool `json:"http_debug"`
HTTPSystemDSocket bool `json:"http_systemd_socket"`
AsteriskSpoolDir string `json:"asterisk_spool_dir"`
DefaultChannel string `json:"default_channel"`
DefaultCallerId string `json:"default_caller_id"`
DefaultWaitTime uint64 `json:"default_wait_time"` // 5 seconds per ring.
DefaultMaxRetries uint64 `json:"default_max_retries"`
DefaultRetryTime uint64 `json:"default_retry_time"`
DefaultAccount string `json:"default_account"`
DefaultApplication string `json:"default_application"`
DefaultData string `json:"default_data"`
PreventAPIApplication bool `json:"prevent_api_application"` // For security, prevent applications from being executed via API call.
DefaultContext string `json:"default_context"`
DefaultExtension string `json:"default_extension"`
DefaultPriority string `json:"default_priority"`
DefaultSetVar map[string]string `json:"default_set_var"`
DefaultArchive bool `json:"default_archive"`
APIToken string `json:"api_token"`
}
// ReadConfig read the configuration file into the config structure of the app.
func (a *App) ReadConfig() {
// Get our current user for use in determining the home path.
usr, err := user.Current()
if err != nil {
log.Fatal(err)
}
// Different configuration file paths.
localConfig, _ := filepath.Abs("./config.json")
homeDirConfig := usr.HomeDir + "/.config/asterisk-outgoing-call-api/config.json"
etcConfig := "/etc/asterisk/outgoing-call-api.json"
// Store defaults first.
app.config = Config{
HTTPPort: 9747,
HTTPDebug: false,
HTTPSystemDSocket: false,
AsteriskSpoolDir: "/var/spool/asterisk",
PreventAPIApplication: true,
DefaultArchive: false,
}
// Determine which config file to use.
var configFile string
if _, err := os.Stat(app.flags.ConfigPath); err == nil && app.flags.ConfigPath != "" {
configFile = app.flags.ConfigPath
} else if _, err := os.Stat(localConfig); err == nil {
configFile = localConfig
} else if _, err := os.Stat(homeDirConfig); err == nil {
configFile = homeDirConfig
} else if _, err := os.Stat(etcConfig); err == nil {
configFile = etcConfig
} else {
log.Fatal("Unable to find a configuration file.")
}
// Read the config file.
jsonFile, err := ioutil.ReadFile(configFile)
if err != nil {
log.Fatalf("Error reading JSON file: %v\n", err)
}
// Parse the config file into the configuration structure.
err = json.Unmarshal(jsonFile, &app.config)
if err != nil {
log.Fatalf("Error parsing JSON file: %v\n", err)
}
}