Initial Commit of Matrix Handler
This commit is contained in:
96
pkg/matrix/matrix.go
Normal file
96
pkg/matrix/matrix.go
Normal file
@ -0,0 +1,96 @@
|
||||
package matrix
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
|
||||
"git.linuxrocker.com/mattburchett/matrix-handler/pkg/config"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
// GetToken will get the access token from Matrix to perform communications.
|
||||
func GetToken(cfg config.Config, vars map[string]string) string {
|
||||
matrixConfig := struct {
|
||||
Type string `json:"type"`
|
||||
Username string `json:"user"`
|
||||
Password string `json:"password"`
|
||||
}{
|
||||
Type: "m.login.password",
|
||||
Username: vars["matrixUser"],
|
||||
Password: vars["matrixPassword"],
|
||||
}
|
||||
|
||||
reqBody, err := json.Marshal(matrixConfig)
|
||||
if err != nil {
|
||||
log.Fatal().Err(err).Msg(err.Error())
|
||||
}
|
||||
s := fmt.Sprintf("%v:%v/_matrix/client/r0/login", cfg.Matrix.Homeserver, cfg.Matrix.Port)
|
||||
|
||||
req, err := http.NewRequest(http.MethodPost, s, bytes.NewBuffer(reqBody))
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("matrix.GetToken.req" + err.Error())
|
||||
}
|
||||
|
||||
client := &http.Client{}
|
||||
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("matrix.GetToken.resp" + err.Error())
|
||||
}
|
||||
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("matrix.GetToken.body" + err.Error())
|
||||
}
|
||||
|
||||
respBody := struct {
|
||||
AccessToken string `json:"access_token"`
|
||||
}{}
|
||||
|
||||
err = json.Unmarshal(body, &respBody)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("matrix.GetToken.respBody" + err.Error())
|
||||
}
|
||||
|
||||
return respBody.AccessToken
|
||||
}
|
||||
|
||||
// PublishText will publish the data to Matrix using the specified vars.
|
||||
func PublishText(cfg config.Config, vars map[string]string, data []byte, token string) {
|
||||
matrixPublish := struct {
|
||||
MsgType string `json:"msgtype"`
|
||||
Body string `json:"body"`
|
||||
}{
|
||||
MsgType: "m.text",
|
||||
Body: string(data),
|
||||
}
|
||||
|
||||
reqBody, err := json.Marshal(matrixPublish)
|
||||
if err != nil {
|
||||
log.Fatal().Err(err).Msg(err.Error())
|
||||
}
|
||||
s := fmt.Sprintf("%v:%v/_matrix/client/r0/rooms/%v/send/m.room.message?access_token=%v", cfg.Matrix.Homeserver, cfg.Matrix.Port, vars["matrixRoom"], token)
|
||||
|
||||
req, err := http.NewRequest(http.MethodPost, s, bytes.NewBuffer(reqBody))
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("matrix.PublishText.req" + err.Error())
|
||||
}
|
||||
|
||||
client := &http.Client{}
|
||||
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("matrix.PublishText.resp" + err.Error())
|
||||
}
|
||||
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
fmt.Println(string(body))
|
||||
|
||||
defer resp.Body.Close()
|
||||
|
||||
}
|
Reference in New Issue
Block a user