You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.2 KiB

7 years ago
7 years ago
7 years ago
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. "log"
  7. "math/rand"
  8. "net/http"
  9. "strconv"
  10. "strings"
  11. )
  12. //MatrixConfig stores the data from json matrixConfig.json file
  13. type MatrixConfig struct {
  14. RoomId string `json:"room_id"`
  15. User string `json:"user"`
  16. Password string `json:"password"`
  17. Server string `json:"server"`
  18. }
  19. //MatrixToken stores the token data from matrix
  20. type MatrixToken struct {
  21. AccessToken string `json:"access_token"`
  22. Server string `json:"server"`
  23. UserId string `json:"user_id"`
  24. DeviceId string `json:"device_id"`
  25. }
  26. var matrixConfig MatrixConfig
  27. var matrixToken MatrixToken
  28. func readMatrixConfig() {
  29. file, e := ioutil.ReadFile("matrixConfig.json")
  30. if e != nil {
  31. fmt.Println("error:", e)
  32. }
  33. content := string(file)
  34. json.Unmarshal([]byte(content), &matrixConfig)
  35. }
  36. func loginMatrix() {
  37. url := matrixConfig.Server + "/_matrix/client/r0/login"
  38. jsonStr := `{
  39. "type":"m.login.password",
  40. "user":"` + matrixConfig.User + `",
  41. "password":"` + matrixConfig.Password + `"
  42. }`
  43. b := strings.NewReader(jsonStr)
  44. req, _ := http.NewRequest("POST", url, b)
  45. req.Header.Set("Content-Type", "application/json")
  46. res, err := http.DefaultClient.Do(req)
  47. if err != nil {
  48. log.Println(err)
  49. }
  50. defer res.Body.Close()
  51. body, _ := ioutil.ReadAll(res.Body)
  52. json.Unmarshal([]byte(body), &matrixToken)
  53. }
  54. func matrixSendMsg(senderScreenName string, message string, createdAt string) {
  55. txnId := strconv.Itoa(rand.Int())
  56. c.Green(txnId)
  57. anonName := anonymousName(senderScreenName, createdAt)
  58. hour := dateToHour(createdAt)
  59. url := matrixConfig.Server + "/_matrix/client/r0/rooms/" + matrixConfig.RoomId + "/send/m.room.message/" + txnId + "?access_token=" + matrixToken.AccessToken
  60. jsonStr := `{
  61. "body":"[NEW DM] - at ` + hour + `h\n@` + anonName + `: ` + message + `",
  62. "msgtype":"m.notice"
  63. }`
  64. b := strings.NewReader(jsonStr)
  65. req, _ := http.NewRequest("PUT", url, b)
  66. req.Header.Set("Content-Type", "application/json")
  67. res, err := http.DefaultClient.Do(req)
  68. if err != nil {
  69. log.Println(err)
  70. }
  71. defer res.Body.Close()
  72. body, _ := ioutil.ReadAll(res.Body)
  73. fmt.Println(string(body))
  74. fmt.Println(createdAt)
  75. fmt.Print("received DM sent to Matrix: ")
  76. c.Green(message)
  77. }