Refactor connector creation logic
This commit is contained in:
parent
11963aaf3d
commit
30a5cdc2a3
7 changed files with 120 additions and 115 deletions
11
account.go
11
account.go
|
@ -9,6 +9,11 @@ import (
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
. "git.deuxfleurs.fr/Deuxfleurs/easybridge/connector"
|
. "git.deuxfleurs.fr/Deuxfleurs/easybridge/connector"
|
||||||
|
|
||||||
|
// Necessary for them to register their protocols
|
||||||
|
_ "git.deuxfleurs.fr/Deuxfleurs/easybridge/connector/irc"
|
||||||
|
_ "git.deuxfleurs.fr/Deuxfleurs/easybridge/connector/mattermost"
|
||||||
|
_ "git.deuxfleurs.fr/Deuxfleurs/easybridge/connector/xmpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Account struct {
|
type Account struct {
|
||||||
|
@ -45,7 +50,11 @@ func SetAccount(mxid string, name string, protocol string, config map[string]str
|
||||||
go prev_acct.connect()
|
go prev_acct.connect()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
conn := createConnector(protocol)
|
proto, ok := Protocols[protocol]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("Invalid protocol: %s", protocol)
|
||||||
|
}
|
||||||
|
conn := proto.NewConnector()
|
||||||
if conn == nil {
|
if conn == nil {
|
||||||
return fmt.Errorf("Could not create connector for protocol %s", protocol)
|
return fmt.Errorf("Could not create connector for protocol %s", protocol)
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,11 @@ func (c Configuration) GetBool(k string, deflt ...bool) (bool, error) {
|
||||||
|
|
||||||
// ----
|
// ----
|
||||||
|
|
||||||
|
type Protocol struct {
|
||||||
|
NewConnector func() Connector
|
||||||
|
Schema ConfigSchema
|
||||||
|
}
|
||||||
|
|
||||||
type ConfigSchema []*ConfigEntry
|
type ConfigSchema []*ConfigEntry
|
||||||
|
|
||||||
type ConfigEntry struct {
|
type ConfigEntry struct {
|
||||||
|
@ -59,8 +64,8 @@ type ConfigEntry struct {
|
||||||
IsBoolean bool
|
IsBoolean bool
|
||||||
}
|
}
|
||||||
|
|
||||||
var Protocols = map[string]ConfigSchema{}
|
var Protocols = map[string]Protocol{}
|
||||||
|
|
||||||
func Register(name string, schema ConfigSchema) {
|
func Register(name string, protocol Protocol) {
|
||||||
Protocols[name] = schema
|
Protocols[name] = protocol
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Register("irc", ConfigSchema{
|
Register("irc", Protocol{
|
||||||
|
NewConnector: func() Connector { return &IRC{} },
|
||||||
|
Schema: ConfigSchema{
|
||||||
&ConfigEntry{
|
&ConfigEntry{
|
||||||
Name: "nick",
|
Name: "nick",
|
||||||
Description: "Nickname",
|
Description: "Nickname",
|
||||||
|
@ -28,5 +30,6 @@ func init() {
|
||||||
IsBoolean: true,
|
IsBoolean: true,
|
||||||
Default: "false",
|
Default: "false",
|
||||||
},
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Register("mattermost", ConfigSchema{
|
Register("mattermost", Protocol{
|
||||||
|
NewConnector: func() Connector { return &Mattermost{} },
|
||||||
|
Schema: ConfigSchema{
|
||||||
&ConfigEntry{
|
&ConfigEntry{
|
||||||
Name: "server",
|
Name: "server",
|
||||||
Description: "Server",
|
Description: "Server",
|
||||||
|
@ -48,5 +50,6 @@ func init() {
|
||||||
IsNumeric: true,
|
IsNumeric: true,
|
||||||
Default: "100",
|
Default: "100",
|
||||||
},
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Register("xmpp", ConfigSchema{
|
Register("xmpp", Protocol{
|
||||||
|
NewConnector: func() Connector { return &XMPP{} },
|
||||||
|
Schema: ConfigSchema{
|
||||||
&ConfigEntry{
|
&ConfigEntry{
|
||||||
Name: "jid",
|
Name: "jid",
|
||||||
Description: "JID",
|
Description: "JID",
|
||||||
|
@ -34,5 +36,6 @@ func init() {
|
||||||
IsBoolean: true,
|
IsBoolean: true,
|
||||||
Default: "true",
|
Default: "true",
|
||||||
},
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
18
util.go
18
util.go
|
@ -11,9 +11,6 @@ import (
|
||||||
"golang.org/x/crypto/nacl/secretbox"
|
"golang.org/x/crypto/nacl/secretbox"
|
||||||
|
|
||||||
. "git.deuxfleurs.fr/Deuxfleurs/easybridge/connector"
|
. "git.deuxfleurs.fr/Deuxfleurs/easybridge/connector"
|
||||||
"git.deuxfleurs.fr/Deuxfleurs/easybridge/connector/irc"
|
|
||||||
"git.deuxfleurs.fr/Deuxfleurs/easybridge/connector/mattermost"
|
|
||||||
"git.deuxfleurs.fr/Deuxfleurs/easybridge/connector/xmpp"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const EASYBRIDGE_SYSTEM_PROTOCOL string = "✯◡✯"
|
const EASYBRIDGE_SYSTEM_PROTOCOL string = "✯◡✯"
|
||||||
|
@ -101,18 +98,3 @@ func decryptAccountConfig(data string, key *[32]byte) (map[string]string, error)
|
||||||
err = json.Unmarshal(decoded, &config)
|
err = json.Unmarshal(decoded, &config)
|
||||||
return config, err
|
return config, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----
|
|
||||||
|
|
||||||
func createConnector(protocol string) Connector {
|
|
||||||
switch protocol {
|
|
||||||
case "irc":
|
|
||||||
return &irc.IRC{}
|
|
||||||
case "xmpp":
|
|
||||||
return &xmpp.XMPP{}
|
|
||||||
case "mattermost":
|
|
||||||
return &mattermost.Mattermost{}
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
2
web.go
2
web.go
|
@ -237,7 +237,7 @@ func configForm(w http.ResponseWriter, r *http.Request,
|
||||||
Protocol: protocol,
|
Protocol: protocol,
|
||||||
Config: map[string]string{},
|
Config: map[string]string{},
|
||||||
Errors: map[string]string{},
|
Errors: map[string]string{},
|
||||||
Schema: connector.Protocols[protocol],
|
Schema: connector.Protocols[protocol].Schema,
|
||||||
}
|
}
|
||||||
for k, v := range prevConfig {
|
for k, v := range prevConfig {
|
||||||
data.Config[k] = v
|
data.Config[k] = v
|
||||||
|
|
Loading…
Reference in a new issue