aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--appservice/account.go7
-rw-r--r--appservice/db.go32
-rw-r--r--appservice/matrix.go58
-rw-r--r--appservice/server.go11
-rw-r--r--connector/connector.go11
-rw-r--r--connector/irc/irc.go38
-rw-r--r--main.go62
-rw-r--r--mxlib/api.go45
-rw-r--r--mxlib/registration.go20
9 files changed, 141 insertions, 143 deletions
diff --git a/appservice/account.go b/appservice/account.go
index 8430cc1..d8bf8cf 100644
--- a/appservice/account.go
+++ b/appservice/account.go
@@ -10,10 +10,10 @@ import (
)
type Account struct {
- MatrixUser string
+ MatrixUser string
AccountName string
- Protocol string
- Conn Connector
+ Protocol string
+ Conn Connector
JoinedRooms map[RoomID]bool
}
@@ -240,4 +240,3 @@ func (a *Account) eventInternal(event *Event) error {
return mxSendMessageAs(mx_room_id, typ, event.Text, mx_user_id)
}
}
-
diff --git a/appservice/db.go b/appservice/db.go
index 6c215d4..512e7b5 100644
--- a/appservice/db.go
+++ b/appservice/db.go
@@ -3,14 +3,14 @@ package appservice
import (
"fmt"
- log "github.com/sirupsen/logrus"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
_ "github.com/jinzhu/gorm/dialects/postgres"
_ "github.com/jinzhu/gorm/dialects/sqlite"
+ log "github.com/sirupsen/logrus"
- "git.deuxfleurs.fr/Deuxfleurs/easybridge/mxlib"
"git.deuxfleurs.fr/Deuxfleurs/easybridge/connector"
+ "git.deuxfleurs.fr/Deuxfleurs/easybridge/mxlib"
)
var db *gorm.DB
@@ -40,7 +40,7 @@ type DbUserMap struct {
gorm.Model
Protocol string
- UserID connector.UserID
+ UserID connector.UserID
MxUserID string `gorm:"index:mxuserid"`
}
@@ -63,8 +63,8 @@ type DbPmRoomMap struct {
gorm.Model
// User id and account name of the local end viewed on Matrix
- MxUserID string
- Protocol string
+ MxUserID string
+ Protocol string
AccountName string
// User id to reach them
@@ -83,7 +83,7 @@ func dbGetMxRoom(protocol string, roomId connector.RoomID) (string, error) {
// If not create it
must_create := db.First(&room, DbRoomMap{
Protocol: protocol,
- RoomID: roomId,
+ RoomID: roomId,
}).RecordNotFound()
if must_create {
alias := roomAlias(protocol, roomId)
@@ -103,7 +103,7 @@ func dbGetMxRoom(protocol string, roomId connector.RoomID) (string, error) {
room = DbRoomMap{
Protocol: protocol,
- RoomID: roomId,
+ RoomID: roomId,
MxRoomID: mx_room_id,
}
db.Create(&room)
@@ -117,10 +117,10 @@ func dbGetMxPmRoom(protocol string, them connector.UserID, themMxId string, usMx
var room DbPmRoomMap
must_create := db.First(&room, DbPmRoomMap{
- MxUserID: usMxId,
- Protocol: protocol,
+ MxUserID: usMxId,
+ Protocol: protocol,
AccountName: usAccount,
- UserID: them,
+ UserID: them,
}).RecordNotFound()
if must_create {
name := fmt.Sprintf("%s (%s)", them, protocol)
@@ -138,11 +138,11 @@ func dbGetMxPmRoom(protocol string, them connector.UserID, themMxId string, usMx
}
room = DbPmRoomMap{
- MxUserID: usMxId,
- Protocol: protocol,
+ MxUserID: usMxId,
+ Protocol: protocol,
AccountName: usAccount,
- UserID: them,
- MxRoomID: mx_room_id,
+ UserID: them,
+ MxRoomID: mx_room_id,
}
db.Create(&room)
}
@@ -156,7 +156,7 @@ func dbGetMxUser(protocol string, userId connector.UserID) (string, error) {
must_create := db.First(&user, DbUserMap{
Protocol: protocol,
- UserID: userId,
+ UserID: userId,
}).RecordNotFound()
if must_create {
username := userMxId(protocol, userId)
@@ -174,7 +174,7 @@ func dbGetMxUser(protocol string, userId connector.UserID) (string, error) {
user = DbUserMap{
Protocol: protocol,
- UserID: userId,
+ UserID: userId,
MxUserID: mxid,
}
db.Create(&user)
diff --git a/appservice/matrix.go b/appservice/matrix.go
index 2c4562e..550e5a5 100644
--- a/appservice/matrix.go
+++ b/appservice/matrix.go
@@ -1,12 +1,12 @@
package appservice
import (
+ "bytes"
+ "encoding/json"
"fmt"
- "net/url"
"net/http"
+ "net/url"
"time"
- "bytes"
- "encoding/json"
log "github.com/sirupsen/logrus"
@@ -33,7 +33,7 @@ func init() {
func mxGetApiCall(endpoint string, response interface{}) error {
log.Debugf("Matrix GET request: %s\n", endpoint)
- req, err := http.NewRequest("GET", config.Server + endpoint, nil)
+ req, err := http.NewRequest("GET", config.Server+endpoint, nil)
if err != nil {
return err
}
@@ -49,7 +49,7 @@ func mxPutApiCall(endpoint string, data interface{}, response interface{}) error
log.Debugf("Matrix PUT request: %s %s\n", endpoint, string(body))
- req, err := http.NewRequest("PUT", config.Server + endpoint, bytes.NewBuffer(body))
+ req, err := http.NewRequest("PUT", config.Server+endpoint, bytes.NewBuffer(body))
if err != nil {
return err
}
@@ -66,7 +66,7 @@ func mxPostApiCall(endpoint string, data interface{}, response interface{}) erro
log.Debugf("Matrix POST request: %s %s\n", endpoint, string(body))
- req, err := http.NewRequest("POST", config.Server + endpoint, bytes.NewBuffer(body))
+ req, err := http.NewRequest("POST", config.Server+endpoint, bytes.NewBuffer(body))
if err != nil {
return err
}
@@ -76,7 +76,7 @@ func mxPostApiCall(endpoint string, data interface{}, response interface{}) erro
}
func mxDoAndParse(req *http.Request, response interface{}) error {
- req.Header.Add("Authorization", "Bearer " + registration.AsToken)
+ req.Header.Add("Authorization", "Bearer "+registration.AsToken)
resp, err := httpClient.Do(req)
if err != nil {
@@ -125,7 +125,7 @@ func mxProfileDisplayname(userid string, displayname string) error {
func mxDirectoryRoom(alias string) (string, error) {
var rep DirectoryRoomResponse
- err := mxGetApiCall("/_matrix/client/r0/directory/room/" + url.QueryEscape(alias), &rep)
+ err := mxGetApiCall("/_matrix/client/r0/directory/room/"+url.QueryEscape(alias), &rep)
if err != nil {
return "", err
}
@@ -134,18 +134,18 @@ func mxDirectoryRoom(alias string) (string, error) {
func mxCreateRoom(name string, alias string, invite []string) (string, error) {
rq := CreateRoomRequest{
- Preset: "private_chat",
+ Preset: "private_chat",
RoomAliasName: alias,
- Name: name,
- Topic: "",
- Invite: invite,
- CreationContent: map[string]interface{} {
+ Name: name,
+ Topic: "",
+ Invite: invite,
+ CreationContent: map[string]interface{}{
"m.federate": false,
},
- PowerLevels: map[string]interface{} {
+ PowerLevels: map[string]interface{}{
"invite": 100,
- "events": map[string]interface{} {
- "m.room.topic": 0,
+ "events": map[string]interface{}{
+ "m.room.topic": 0,
"m.room.avatar": 0,
},
},
@@ -161,19 +161,19 @@ func mxCreateRoom(name string, alias string, invite []string) (string, error) {
func mxCreateDirectRoomAs(name string, invite []string, as_user string) (string, error) {
rq := CreateRoomNoAliasRequest{
Preset: "private_chat",
- Name: name,
- Topic: "",
+ Name: name,
+ Topic: "",
Invite: invite,
- CreationContent: map[string]interface{} {
+ CreationContent: map[string]interface{}{
"m.federate": false,
},
- PowerLevels: map[string]interface{} {
+ PowerLevels: map[string]interface{}{
"invite": 100,
},
IsDirect: true,
}
var rep CreateRoomResponse
- err := mxPostApiCall("/_matrix/client/r0/createRoom?user_id=" + url.QueryEscape(as_user), &rq, &rep)
+ err := mxPostApiCall("/_matrix/client/r0/createRoom?user_id="+url.QueryEscape(as_user), &rq, &rep)
if err != nil {
return "", err
}
@@ -185,7 +185,7 @@ func mxRoomInvite(room string, user string) error {
UserId: user,
}
var rep struct{}
- err := mxPostApiCall("/_matrix/client/r0/rooms/" + url.QueryEscape(room) + "/invite", &rq, &rep)
+ err := mxPostApiCall("/_matrix/client/r0/rooms/"+url.QueryEscape(room)+"/invite", &rq, &rep)
return err
}
@@ -195,21 +195,21 @@ func mxRoomKick(room string, user string, reason string) error {
Reason: reason,
}
var rep struct{}
- err := mxPostApiCall("/_matrix/client/r0/rooms/" + url.QueryEscape(room) + "/kick", &rq, &rep)
+ err := mxPostApiCall("/_matrix/client/r0/rooms/"+url.QueryEscape(room)+"/kick", &rq, &rep)
return err
}
func mxRoomJoinAs(room string, user string) error {
rq := struct{}{}
var rep RoomJoinResponse
- err := mxPostApiCall("/_matrix/client/r0/rooms/" + url.QueryEscape(room) + "/join?user_id=" + url.QueryEscape(user), &rq, &rep)
+ err := mxPostApiCall("/_matrix/client/r0/rooms/"+url.QueryEscape(room)+"/join?user_id="+url.QueryEscape(user), &rq, &rep)
return err
}
func mxRoomLeaveAs(room string, user string) error {
rq := struct{}{}
var rep struct{}
- err := mxPostApiCall("/_matrix/client/r0/rooms/" + url.QueryEscape(room) + "/leave?user_id=" + url.QueryEscape(user), &rq, &rep)
+ err := mxPostApiCall("/_matrix/client/r0/rooms/"+url.QueryEscape(room)+"/leave?user_id="+url.QueryEscape(user), &rq, &rep)
return err
}
@@ -224,9 +224,9 @@ func mxSendAs(room string, event_type string, content map[string]interface{}, us
}
func mxSendMessageAs(room string, typ string, body string, user string) error {
- content := map[string]interface{} {
+ content := map[string]interface{}{
"msgtype": typ,
- "body": body,
+ "body": body,
}
return mxSendAs(room, "m.room.message", content, user)
}
@@ -241,14 +241,14 @@ func mxPutStateAs(room string, event_type string, key string, content map[string
}
func mxRoomNameAs(room string, name string, as_user string) error {
- content := map[string]interface{} {
+ content := map[string]interface{}{
"name": name,
}
return mxPutStateAs(room, "m.room.name", "", content, as_user)
}
func mxRoomTopicAs(room string, topic string, as_user string) error {
- content := map[string]interface{} {
+ content := map[string]interface{}{
"topic": topic,
}
return mxPutStateAs(room, "m.room.topic", "", content, as_user)
diff --git a/appservice/server.go b/appservice/server.go
index 580d1f1..f207eb4 100644
--- a/appservice/server.go
+++ b/appservice/server.go
@@ -3,25 +3,24 @@ package appservice
import (
"encoding/json"
"fmt"
- "strings"
"net/http"
+ "strings"
"github.com/gorilla/mux"
log "github.com/sirupsen/logrus"
- "git.deuxfleurs.fr/Deuxfleurs/easybridge/mxlib"
"git.deuxfleurs.fr/Deuxfleurs/easybridge/connector"
+ "git.deuxfleurs.fr/Deuxfleurs/easybridge/mxlib"
)
type Config struct {
HttpBindAddr string
- Server string
- DbType string
- DbPath string
+ Server string
+ DbType string
+ DbPath string
MatrixDomain string
}
-
var registration *mxlib.Registration
var config *Config
diff --git a/connector/connector.go b/connector/connector.go
index 9ff5d49..2b54258 100644
--- a/connector/connector.go
+++ b/connector/connector.go
@@ -8,11 +8,11 @@ package connector
- A connector represents a connection to an outgoing service (IRC, XMPP, etc)
It satisfies a generic interface representing the actions that can be called
(send messages, join room, etc)
-
+
- A handler represents a consumer of events happening on a connection
It satisfies a generic interface representing the events that can happend
(message received, rooms autojoined, etc)
-
+
- A connector implements a given protocol that has an identifier
Each protocol identifier determines a namespace for user identifiers
and room identifiers which are globally unique for all connections using
@@ -82,6 +82,7 @@ type Handler interface {
}
type EventType int
+
const (
EVENT_JOIN EventType = iota
EVENT_LEAVE
@@ -114,12 +115,12 @@ type Event struct {
type UserInfo struct {
DisplayName string
- Avatar MediaObject
+ Avatar MediaObject
}
type RoomInfo struct {
- Name string
- Topic string
+ Name string
+ Topic string
Picture MediaObject
}
diff --git a/connector/irc/irc.go b/connector/irc/irc.go
index ccbd803..318c663 100644
--- a/connector/irc/irc.go
+++ b/connector/irc/irc.go
@@ -1,10 +1,10 @@
package irc
import (
- "time"
+ "fmt"
_ "os"
"strings"
- "fmt"
+ "time"
"github.com/lrstanley/girc"
@@ -19,19 +19,19 @@ type IRC struct {
handler Handler
connected bool
- timeout int
+ timeout int
- nick string
- name string
+ nick string
+ name string
server string
- conn *girc.Client
+ conn *girc.Client
}
func (irc *IRC) SetHandler(h Handler) {
irc.handler = h
}
-func(irc *IRC) Protocol() string {
+func (irc *IRC) Protocol() string {
return "irc"
}
@@ -64,9 +64,9 @@ func (irc *IRC) Configure(c Configuration) error {
client := girc.New(girc.Config{
Server: irc.server,
- Port: port,
- Nick: irc.nick,
- User: irc.nick,
+ Port: port,
+ Nick: irc.nick,
+ User: irc.nick,
//Out: os.Stderr,
SSL: ssl,
})
@@ -85,7 +85,7 @@ func (irc *IRC) Configure(c Configuration) error {
go irc.connectLoop(client)
for i := 0; i < 42; i++ {
- time.Sleep(time.Duration(1)*time.Second)
+ time.Sleep(time.Duration(1) * time.Second)
if irc.conn != client {
break
}
@@ -245,9 +245,9 @@ func (irc *IRC) ircConnected(c *girc.Client, e girc.Event) {
func (irc *IRC) ircPrivmsg(c *girc.Client, e girc.Event) {
ev := &Event{
- Type: EVENT_MESSAGE,
+ Type: EVENT_MESSAGE,
Author: UserID(e.Source.Name + "@" + irc.server),
- Text: e.Last(),
+ Text: e.Last(),
}
if e.IsFromChannel() {
ev.Room = RoomID(e.Params[0] + "@" + irc.server)
@@ -265,9 +265,9 @@ func (irc *IRC) ircJoin(c *girc.Client, e girc.Event) {
} else {
user := UserID(e.Source.Name + "@" + irc.server)
ev := &Event{
- Type: EVENT_JOIN,
+ Type: EVENT_JOIN,
Author: user,
- Room: room,
+ Room: room,
}
irc.handler.Event(ev)
irc.handler.UserInfoUpdated(user, &UserInfo{
@@ -283,9 +283,9 @@ func (irc *IRC) ircPart(c *girc.Client, e girc.Event) {
} else {
user := UserID(e.Source.Name + "@" + irc.server)
ev := &Event{
- Type: EVENT_LEAVE,
+ Type: EVENT_LEAVE,
Author: user,
- Room: room,
+ Room: room,
}
irc.handler.Event(ev)
irc.handler.UserInfoUpdated(user, &UserInfo{
@@ -304,9 +304,9 @@ func (irc *IRC) ircNamreply(c *girc.Client, e girc.Event) {
src := girc.ParseSource(name)
if src.Name != irc.nick {
irc.handler.Event(&Event{
- Type: EVENT_JOIN,
+ Type: EVENT_JOIN,
Author: UserID(src.Name + "@" + irc.server),
- Room: room,
+ Room: room,
})
}
}
diff --git a/main.go b/main.go
index 14ec229..e451ae1 100644
--- a/main.go
+++ b/main.go
@@ -1,41 +1,41 @@
package main
import (
- "fmt"
"crypto/rand"
"encoding/hex"
+ "encoding/json"
"flag"
+ "fmt"
+ _ "fmt"
"io/ioutil"
"os"
- _"strings"
+ _ "strings"
_ "time"
- _ "fmt"
- "encoding/json"
log "github.com/sirupsen/logrus"
"gopkg.in/yaml.v2"
- "git.deuxfleurs.fr/Deuxfleurs/easybridge/mxlib"
"git.deuxfleurs.fr/Deuxfleurs/easybridge/appservice"
"git.deuxfleurs.fr/Deuxfleurs/easybridge/connector"
"git.deuxfleurs.fr/Deuxfleurs/easybridge/connector/irc"
"git.deuxfleurs.fr/Deuxfleurs/easybridge/connector/xmpp"
+ "git.deuxfleurs.fr/Deuxfleurs/easybridge/mxlib"
)
type ConfigAccount struct {
- Protocol string `json:"protocol"`
- Rooms []string `json:"rooms"`
- Config map[string]string `json:"config"`
+ Protocol string `json:"protocol"`
+ Rooms []string `json:"rooms"`
+ Config map[string]string `json:"config"`
}
type ConfigFile struct {
- HttpBindAddr string`json:"http_bind_addr"`
- Registration string `json:"registration"`
- Server string `json:"homeserver_url"`
- DbType string `json:"db_type"`
- DbPath string `json:"db_path"`
- MatrixDomain string `json:"matrix_domain"`
- Accounts map[string]map[string]ConfigAccount `json:"accounts"`
+ HttpBindAddr string `json:"http_bind_addr"`
+ Registration string `json:"registration"`
+ Server string `json:"homeserver_url"`
+ DbType string `json:"db_type"`
+ DbPath string `json:"db_path"`
+ MatrixDomain string `json:"matrix_domain"`
+ Accounts map[string]map[string]ConfigAccount `json:"accounts"`
}
var configFlag = flag.String("config", "./config.json", "Configuration file path")
@@ -47,10 +47,10 @@ func readConfig() ConfigFile {
config_file := ConfigFile{
HttpBindAddr: "0.0.0.0:8321",
Registration: "./registration.yaml",
- Server: "http://localhost:8008",
- DbType: "sqlite3",
- DbPath: "easybridge.db",
- Accounts: map[string]map[string]ConfigAccount{},
+ Server: "http://localhost:8008",
+ DbType: "sqlite3",
+ DbPath: "easybridge.db",
+ Accounts: map[string]map[string]ConfigAccount{},
}
_, err := os.Stat(*configFlag)
@@ -96,22 +96,22 @@ func readRegistration(file string) mxlib.Registration {
}
reg := mxlib.Registration{
- Id: "Easybridge",
- Url: "http://localhost:8321",
- AsToken: hex.EncodeToString(rnd[:32]),
- HsToken: hex.EncodeToString(rnd[32:]),
+ Id: "Easybridge",
+ Url: "http://localhost:8321",
+ AsToken: hex.EncodeToString(rnd[:32]),
+ HsToken: hex.EncodeToString(rnd[32:]),
SenderLocalpart: "_ezbr_",
Namespaces: mxlib.RegistrationNamespaceSet{
Users: []mxlib.RegistrationNamespace{
mxlib.RegistrationNamespace{
Exclusive: true,
- Regex: "@_ezbr_.*",
+ Regex: "@_ezbr_.*",
},
},
Aliases: []mxlib.RegistrationNamespace{
mxlib.RegistrationNamespace{
Exclusive: true,
- Regex: "#_ezbr_.*",
+ Regex: "#_ezbr_.*",
},
},
Rooms: []mxlib.RegistrationNamespace{},
@@ -166,9 +166,9 @@ func main() {
as_config := &appservice.Config{
HttpBindAddr: config.HttpBindAddr,
- Server: config.Server,
- DbType: config.DbType,
- DbPath: config.DbPath,
+ Server: config.Server,
+ DbType: config.DbType,
+ DbPath: config.DbPath,
MatrixDomain: config.MatrixDomain,
}
@@ -189,10 +189,10 @@ func main() {
log.Fatalf("Invalid protocol %s", params.Protocol)
}
account := &appservice.Account{
- MatrixUser: fmt.Sprintf("@%s:%s", user, config.MatrixDomain),
+ MatrixUser: fmt.Sprintf("@%s:%s", user, config.MatrixDomain),
AccountName: name,
- Protocol: params.Protocol,
- Conn: conn,
+ Protocol: params.Protocol,
+ Conn: conn,
JoinedRooms: map[connector.RoomID]bool{},
}
conn.SetHandler(account)
diff --git a/mxlib/api.go b/mxlib/api.go
index de5b424..c7061b3 100644
--- a/mxlib/api.go
+++ b/mxlib/api.go
@@ -6,7 +6,7 @@ import (
type MxError struct {
ErrCode string `json:"errcode"`
- ErrMsg string `json:"error"`
+ ErrMsg string `json:"error"`
}
func (e *MxError) Error() string {
@@ -18,12 +18,12 @@ type Transaction struct {
}
type Event struct {
- Content map[string]interface{} `json:"content"`
- Type string `json:"type"`
- EventId string `json:"event_id"`
- RoomId string `json:"room_id"`
- Sender string `json:"sender"`
- OriginServerTs int `json:"origin_server_ts"`
+ Content map[string]interface{} `json:"content"`
+ Type string `json:"type"`
+ EventId string `json:"event_id"`
+ RoomId string `json:"room_id"`
+ Sender string `json:"sender"`
+ OriginServerTs int `json:"origin_server_ts"`
}
type RegisterRequest struct {
@@ -31,9 +31,9 @@ type RegisterRequest struct {
}
type RegisterResponse struct {
- UserId string `json:"user_id"`
+ UserId string `json:"user_id"`
AccessToken string `json:"access_token"`
- DeviceId string `json:"device_id"`
+ DeviceId string `json:"device_id"`
}
type ProfileDisplaynameRequest struct {
@@ -41,23 +41,23 @@ type ProfileDisplaynameRequest struct {
}
type CreateRoomRequest struct {
- Preset string `json:"preset"`
- RoomAliasName string `json:"room_alias_name"`
- Name string `json:"name"`
- Topic string `json:"topic"`
- Invite []string `json:"invite"`
+ Preset string `json:"preset"`
+ RoomAliasName string `json:"room_alias_name"`
+ Name string `json:"name"`
+ Topic string `json:"topic"`
+ Invite []string `json:"invite"`
CreationContent map[string]interface{} `json:"creation_content"`
- PowerLevels map[string]interface{} `json:"power_level_content_override"`
+ PowerLevels map[string]interface{} `json:"power_level_content_override"`
}
type CreateRoomNoAliasRequest struct {
- Preset string `json:"preset"`
- Name string `json:"name"`
- Topic string `json:"topic"`
- Invite []string `json:"invite"`
+ Preset string `json:"preset"`
+ Name string `json:"name"`
+ Topic string `json:"topic"`
+ Invite []string `json:"invite"`
CreationContent map[string]interface{} `json:"creation_content"`
- PowerLevels map[string]interface{} `json:"power_level_content_override"`
- IsDirect bool `json:"is_direct"`
+ PowerLevels map[string]interface{} `json:"power_level_content_override"`
+ IsDirect bool `json:"is_direct"`
}
type CreateRoomResponse struct {
@@ -65,7 +65,7 @@ type CreateRoomResponse struct {
}
type DirectoryRoomResponse struct {
- RoomId string `json:"room_id"`
+ RoomId string `json:"room_id"`
Servers []string `json:"string"`
}
@@ -84,4 +84,3 @@ type RoomJoinResponse struct {
type RoomSendResponse struct {
EventId string `json:"event_id"`
}
-
diff --git a/mxlib/registration.go b/mxlib/registration.go
index d4b18dc..cae3f29 100644
--- a/mxlib/registration.go
+++ b/mxlib/registration.go
@@ -5,21 +5,21 @@ import (
)
type Registration struct {
- Id string `yaml:"id"`
- Url string `yaml:"url"`
- AsToken string `yaml:"as_token"`
- HsToken string `yaml:"hs_token"`
- SenderLocalpart string `yaml:"sender_localpart"`
- Namespaces RegistrationNamespaceSet `yaml:"namespaces"`
+ Id string `yaml:"id"`
+ Url string `yaml:"url"`
+ AsToken string `yaml:"as_token"`
+ HsToken string `yaml:"hs_token"`
+ SenderLocalpart string `yaml:"sender_localpart"`
+ Namespaces RegistrationNamespaceSet `yaml:"namespaces"`
}
type RegistrationNamespaceSet struct {
- Users []RegistrationNamespace `yaml:"users"`
+ Users []RegistrationNamespace `yaml:"users"`
Aliases []RegistrationNamespace `yaml:"aliases"`
- Rooms []RegistrationNamespace `yaml:"rooms"`
+ Rooms []RegistrationNamespace `yaml:"rooms"`
}
type RegistrationNamespace struct {
- Exclusive bool `yaml:"exclusive"`
- Regex string `yaml:"regex"`
+ Exclusive bool `yaml:"exclusive"`
+ Regex string `yaml:"regex"`
}