aboutsummaryrefslogtreecommitdiff
path: root/appservice
diff options
context:
space:
mode:
Diffstat (limited to 'appservice')
-rw-r--r--appservice/account.go32
-rw-r--r--appservice/db.go21
-rw-r--r--appservice/server.go72
3 files changed, 125 insertions, 0 deletions
diff --git a/appservice/account.go b/appservice/account.go
new file mode 100644
index 0000000..533e01e
--- /dev/null
+++ b/appservice/account.go
@@ -0,0 +1,32 @@
+package appservice
+
+import (
+ . "git.deuxfleurs.fr/Deuxfleurs/easybridge/connector"
+)
+
+type Account struct {
+ MatrixUser string
+ AccountName string
+ Protocol string
+ Conn Connector
+}
+
+func (a *Account) Joined(roomId RoomID) {
+ // TODO
+}
+
+func (a *Account) Left(roomId RoomID) {
+ // TODO
+}
+
+func (a *Account) UserInfoUpdated(user UserID, info *UserInfo) {
+ // TODO
+}
+
+func (a *Account) RoomInfoUpdated(roomId RoomID, info *RoomInfo) {
+ // TODO
+}
+
+func (a *Account) Event(event *Event) {
+ // TODO
+}
diff --git a/appservice/db.go b/appservice/db.go
new file mode 100644
index 0000000..2c71312
--- /dev/null
+++ b/appservice/db.go
@@ -0,0 +1,21 @@
+package appservice
+
+import (
+ "github.com/jinzhu/gorm"
+ _ "github.com/jinzhu/gorm/dialects/mysql"
+ _ "github.com/jinzhu/gorm/dialects/postgres"
+ _ "github.com/jinzhu/gorm/dialects/sqlite"
+)
+
+var db *gorm.DB
+
+func InitDb() error {
+ var err error
+
+ db, err = gorm.Open(config.DbType, config.DbPath)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/appservice/server.go b/appservice/server.go
new file mode 100644
index 0000000..395d383
--- /dev/null
+++ b/appservice/server.go
@@ -0,0 +1,72 @@
+package appservice
+
+import (
+ "encoding/json"
+ "fmt"
+ "strings"
+ "log"
+ "net/http"
+
+ "git.deuxfleurs.fr/Deuxfleurs/easybridge/mxlib"
+ "github.com/gorilla/mux"
+)
+
+type Config struct {
+ HttpBindAddr string
+ Server string
+ DbType string
+ DbPath string
+}
+
+
+var registration *mxlib.Registration
+var config *Config
+
+func Start(r *mxlib.Registration, c *Config) (chan error, error) {
+ registration = r
+ config = c
+
+ err := InitDb()
+ if err != nil {
+ return nil, err
+ }
+
+ router := mux.NewRouter()
+ router.HandleFunc("/_matrix/app/v1/transactions/{txnId}", handleTxn)
+
+ errch := make(chan error)
+ go func() {
+ log.Printf("Starting HTTP server on %s", config.HttpBindAddr)
+ err := http.ListenAndServe(config.HttpBindAddr, checkTokenAndLog(router))
+ if err != nil {
+ errch <- err
+ }
+ }()
+
+ return errch, nil
+}
+
+func checkTokenAndLog(handler http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ r.ParseForm()
+ if strings.Join(r.Form["access_token"], "") != registration.HsToken {
+ http.Error(w, "Wrong or no token provided", http.StatusUnauthorized)
+ return
+ }
+
+ log.Printf("%s %s %s\n", r.RemoteAddr, r.Method, r.URL)
+ handler.ServeHTTP(w, r)
+ })
+}
+
+func handleTxn(w http.ResponseWriter, r *http.Request) {
+ var txn mxlib.Transaction
+ err := json.NewDecoder(r.Body).Decode(&txn)
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ }
+
+ log.Printf("Got transaction %#v\n", txn)
+
+ fmt.Fprintf(w, "{}")
+}