forked from MirrorHub/mautrix-whatsapp
Remove config update stuff
This commit is contained in:
parent
c7348f29b0
commit
5a1a6f9c3c
4 changed files with 8 additions and 227 deletions
|
@ -1,115 +0,0 @@
|
|||
// mautrix-whatsapp - A Matrix-WhatsApp puppeting bridge.
|
||||
// Copyright (C) 2018 Tulir Asokan
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
type RecursiveMap map[interface{}]interface{}
|
||||
|
||||
func (rm RecursiveMap) GetDefault(path string, defVal interface{}) interface{} {
|
||||
val, ok := rm.Get(path)
|
||||
if !ok {
|
||||
return defVal
|
||||
}
|
||||
return val
|
||||
}
|
||||
|
||||
func (rm RecursiveMap) GetMap(path string) RecursiveMap {
|
||||
val := rm.GetDefault(path, nil)
|
||||
if val == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
newRM, ok := val.(map[interface{}]interface{})
|
||||
if ok {
|
||||
return RecursiveMap(newRM)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (rm RecursiveMap) Get(path string) (interface{}, bool) {
|
||||
if index := strings.IndexRune(path, '.'); index >= 0 {
|
||||
key := path[:index]
|
||||
path = path[index+1:]
|
||||
|
||||
submap := rm.GetMap(key)
|
||||
if submap == nil {
|
||||
return nil, false
|
||||
}
|
||||
return submap.Get(path)
|
||||
}
|
||||
val, ok := rm[path]
|
||||
return val, ok
|
||||
}
|
||||
|
||||
func (rm RecursiveMap) GetIntDefault(path string, defVal int) int {
|
||||
val, ok := rm.GetInt(path)
|
||||
if !ok {
|
||||
return defVal
|
||||
}
|
||||
return val
|
||||
}
|
||||
|
||||
func (rm RecursiveMap) GetInt(path string) (int, bool) {
|
||||
val, ok := rm.Get(path)
|
||||
if !ok {
|
||||
return 0, ok
|
||||
}
|
||||
intVal, ok := val.(int)
|
||||
return intVal, ok
|
||||
}
|
||||
|
||||
func (rm RecursiveMap) GetStringDefault(path string, defVal string) string {
|
||||
val, ok := rm.GetString(path)
|
||||
if !ok {
|
||||
return defVal
|
||||
}
|
||||
return val
|
||||
}
|
||||
|
||||
func (rm RecursiveMap) GetString(path string) (string, bool) {
|
||||
val, ok := rm.Get(path)
|
||||
if !ok {
|
||||
return "", ok
|
||||
}
|
||||
strVal, ok := val.(string)
|
||||
return strVal, ok
|
||||
}
|
||||
|
||||
func (rm RecursiveMap) Set(path string, value interface{}) {
|
||||
if index := strings.IndexRune(path, '.'); index >= 0 {
|
||||
key := path[:index]
|
||||
path = path[index+1:]
|
||||
nextRM := rm.GetMap(key)
|
||||
if nextRM == nil {
|
||||
nextRM = make(RecursiveMap)
|
||||
rm[key] = nextRM
|
||||
}
|
||||
nextRM.Set(path, value)
|
||||
return
|
||||
}
|
||||
rm[path] = value
|
||||
}
|
||||
|
||||
func (rm RecursiveMap) CopyFrom(otherRM RecursiveMap, path string) {
|
||||
val, ok := otherRM.Get(path)
|
||||
if ok {
|
||||
rm.Set(path, val)
|
||||
}
|
||||
}
|
100
config/update.go
100
config/update.go
|
@ -1,100 +0,0 @@
|
|||
// mautrix-whatsapp - A Matrix-WhatsApp puppeting bridge.
|
||||
// Copyright (C) 2018 Tulir Asokan
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
func Update(path, basePath string) error {
|
||||
oldCfgData, err := ioutil.ReadFile(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
oldCfg := make(RecursiveMap)
|
||||
err = yaml.Unmarshal(oldCfgData, &oldCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
baseCfgData, err := ioutil.ReadFile(basePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
baseCfg := make(RecursiveMap)
|
||||
err = yaml.Unmarshal(baseCfgData, &baseCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = runUpdate(oldCfg, baseCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
newCfgData, err := yaml.Marshal(&baseCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return ioutil.WriteFile(path, newCfgData, 0600)
|
||||
}
|
||||
|
||||
func runUpdate(oldCfg, newCfg RecursiveMap) error {
|
||||
cp := func(path string) {
|
||||
newCfg.CopyFrom(oldCfg, path)
|
||||
}
|
||||
|
||||
cp("homeserver.address")
|
||||
cp("homeserver.domain")
|
||||
|
||||
cp("appservice.address")
|
||||
cp("appservice.hostname")
|
||||
cp("appservice.port")
|
||||
|
||||
cp("appservice.database.type")
|
||||
cp("appservice.database.uri")
|
||||
cp("appservice.state_store_path")
|
||||
|
||||
cp("appservice.id")
|
||||
cp("appservice.bot.username")
|
||||
cp("appservice.bot.displayname")
|
||||
cp("appservice.bot.avatar")
|
||||
|
||||
cp("appservice.bot.as_token")
|
||||
cp("appservice.bot.hs_token")
|
||||
|
||||
cp("bridge.username_template")
|
||||
cp("bridge.displayname_template")
|
||||
|
||||
cp("bridge.command_prefix")
|
||||
|
||||
cp("bridge.permissions")
|
||||
|
||||
cp("logging.directory")
|
||||
cp("logging.file_name_format")
|
||||
cp("logging.file_date_format")
|
||||
cp("logging.file_mode")
|
||||
cp("logging.timestamp_format")
|
||||
cp("logging.print_level")
|
||||
|
||||
return nil
|
||||
}
|
|
@ -29,7 +29,7 @@ appservice:
|
|||
# Appservice bot details.
|
||||
bot:
|
||||
# Username of the appservice bot.
|
||||
username: whatsapp
|
||||
username: whatsappbot
|
||||
# Display name and avatar for bot. Set to "remove" to remove display name/avatar, leave empty
|
||||
# to leave display name/avatar as-is.
|
||||
displayname: WhatsApp bridge bot
|
||||
|
|
18
main.go
18
main.go
|
@ -91,16 +91,12 @@ func NewBridge() *Bridge {
|
|||
portalsByJID: make(map[database.PortalKey]*Portal),
|
||||
puppets: make(map[types.WhatsAppID]*Puppet),
|
||||
}
|
||||
err := config.Update(*configPath, *baseConfigPath)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "Failed to update config:", err)
|
||||
os.Exit(10)
|
||||
}
|
||||
|
||||
var err error
|
||||
bridge.Config, err = config.Load(*configPath)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "Failed to load config:", err)
|
||||
os.Exit(11)
|
||||
os.Exit(10)
|
||||
}
|
||||
return bridge
|
||||
}
|
||||
|
@ -111,7 +107,7 @@ func (bridge *Bridge) Init() {
|
|||
bridge.AS, err = bridge.Config.MakeAppService()
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "Failed to initialize AppService:", err)
|
||||
os.Exit(12)
|
||||
os.Exit(11)
|
||||
}
|
||||
bridge.AS.Init()
|
||||
bridge.Bot = bridge.AS.BotIntent()
|
||||
|
@ -122,7 +118,7 @@ func (bridge *Bridge) Init() {
|
|||
err = log.OpenFile()
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "Failed to open log file:", err)
|
||||
os.Exit(13)
|
||||
os.Exit(12)
|
||||
}
|
||||
bridge.AS.Log = log.Sub("Matrix")
|
||||
|
||||
|
@ -131,7 +127,7 @@ func (bridge *Bridge) Init() {
|
|||
err = bridge.StateStore.Load()
|
||||
if err != nil {
|
||||
bridge.Log.Fatalln("Failed to load state store:", err)
|
||||
os.Exit(14)
|
||||
os.Exit(13)
|
||||
}
|
||||
bridge.AS.StateStore = bridge.StateStore
|
||||
|
||||
|
@ -139,7 +135,7 @@ func (bridge *Bridge) Init() {
|
|||
bridge.DB, err = database.New(bridge.Config.AppService.Database.URI)
|
||||
if err != nil {
|
||||
bridge.Log.Fatalln("Failed to initialize database:", err)
|
||||
os.Exit(15)
|
||||
os.Exit(14)
|
||||
}
|
||||
|
||||
bridge.Log.Debugln("Initializing Matrix event processor")
|
||||
|
@ -153,7 +149,7 @@ func (bridge *Bridge) Start() {
|
|||
err := bridge.DB.CreateTables()
|
||||
if err != nil {
|
||||
bridge.Log.Fatalln("Failed to create database tables:", err)
|
||||
os.Exit(16)
|
||||
os.Exit(15)
|
||||
}
|
||||
bridge.Log.Debugln("Starting application service HTTP server")
|
||||
go bridge.AS.Start()
|
||||
|
|
Loading…
Reference in a new issue