126 lines
3.3 KiB
Go
126 lines
3.3 KiB
Go
package config
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
|
|
"git.paulbsd.com/paulbsd/qrz/utils"
|
|
"github.com/jmoiron/sqlx"
|
|
"gopkg.in/ini.v1"
|
|
)
|
|
|
|
// GetConfig fetch configuration
|
|
func (config *Config) GetConfig() error {
|
|
var configfile string
|
|
var nofeed bool
|
|
var port int
|
|
|
|
flag.Usage = utils.Usage
|
|
|
|
flag.StringVar(&configfile, "configfile", "qrz.ini", "config file to use with qrz section")
|
|
flag.IntVar(&port, "port", 8080, "web port to use")
|
|
flag.BoolVar(&nofeed, "nofeed", false, "no feed database table with entries at first launch")
|
|
flag.Parse()
|
|
|
|
cfg, err := ini.Load(configfile)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
qrzsection := cfg.Section("qrz")
|
|
|
|
config.Port = port
|
|
config.NoFeed = nofeed
|
|
config.DbHostname = qrzsection.Key("db_hostname").MustString("localhost")
|
|
config.DbName = qrzsection.Key("db_name").MustString("database")
|
|
config.DbUsername = qrzsection.Key("db_username").MustString("username")
|
|
config.DbPassword = qrzsection.Key("db_password").MustString("password")
|
|
config.DbSchema = qrzsection.Key("db_schema").MustString("")
|
|
config.DbTable = qrzsection.Key("db_table").MustString("qrz")
|
|
config.Cron = qrzsection.Key("cron").MustString("@every 1h")
|
|
|
|
config.DbSchema = fmt.Sprintf(`
|
|
CREATE TABLE IF NOT EXISTS %[1]s (
|
|
id serial NOT NULL PRIMARY KEY,
|
|
qrz varchar(25) NOT NULL,
|
|
name varchar(25) DEFAULT NULL,
|
|
address varchar(50) DEFAULT NULL,
|
|
city varchar(50) DEFAULT NULL,
|
|
zipcode varchar(5) DEFAULT NULL,
|
|
dept varchar(50) DEFAULT NULL,
|
|
country varchar(25) DEFAULT NULL,
|
|
dmrid varchar(25) DEFAULT NULL,
|
|
fts tsvector NULL,
|
|
CONSTRAINT qrz_unique UNIQUE(qrz, name, city, dept, country)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS fts_idx ON %[1]s (fts);
|
|
|
|
CREATE OR REPLACE FUNCTION updateFTS() RETURNS trigger AS $fts_trigger$
|
|
BEGIN
|
|
IF pg_trigger_depth() <> 1 THEN
|
|
RETURN NEW;
|
|
END IF;
|
|
UPDATE %[1]s SET fts = to_tsvector(concat_ws(' ', qrz, name, city, dept, country)) WHERE id = NEW.id;
|
|
RETURN NEW;
|
|
END;
|
|
$fts_trigger$ LANGUAGE plpgsql;
|
|
|
|
DROP TRIGGER IF EXISTS fts_trigger ON %[1]s;
|
|
|
|
CREATE TRIGGER fts_trigger
|
|
AFTER INSERT ON %[1]s
|
|
FOR EACH ROW EXECUTE PROCEDURE updateFTS();
|
|
`,
|
|
config.DbTable)
|
|
|
|
config.DbStatements.Insert = fmt.Sprintf(`
|
|
INSERT INTO %[1]s (qrz, dmrid, name, city, dept, country)
|
|
VALUES ($1, $2, $3, $4, $5, $6);
|
|
`,
|
|
config.DbTable)
|
|
|
|
config.DbStatements.ExportCSV = fmt.Sprintf(`
|
|
SELECT qrz, name, city, dept, country
|
|
FROM %[1]s;
|
|
`,
|
|
config.DbTable)
|
|
|
|
config.DbStatements.Countries = fmt.Sprintf(`
|
|
SELECT country
|
|
FROM %[1]s
|
|
GROUP BY country;
|
|
`,
|
|
config.DbTable)
|
|
|
|
config.URLBase = `http://groupe-frs.hamstation.eu/index_qrz_liste_%s.php`
|
|
|
|
config.QrzGroups = []string{"01", "03", "09", "103", "104", "107", "119", "13", "14", "146", "147", "15", "156", "16", "161", "163", "18", "188", "2", "214", "233", "25", "26", "29", "30", "31", "32", "34", "43", "44", "49", "54", "64", "66", "76", "79", "84", "97", "98"}
|
|
//config.QrzGroups = map[string]string{"France": "14"}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Config is the global config of qrz
|
|
type Config struct {
|
|
Db *sqlx.DB
|
|
|
|
DbHostname string
|
|
DbName string
|
|
DbUsername string
|
|
DbPassword string
|
|
DbSchema string
|
|
DbTable string
|
|
DbStatements struct {
|
|
Insert string
|
|
ExportCSV string
|
|
Countries string
|
|
}
|
|
URLBase string
|
|
QrzGroups []string
|
|
Cron string
|
|
Port int
|
|
NoFeed bool
|
|
Version string
|
|
}
|