Encrypted messaging app
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.

204 lines
4.8 KiB

  1. package Messages_test
  2. import (
  3. "encoding/base64"
  4. "encoding/json"
  5. "io/ioutil"
  6. "net/http"
  7. "testing"
  8. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database"
  9. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database/Seeder"
  10. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Tests"
  11. )
  12. func Test_Messages(t *testing.T) {
  13. client, ts, err := Tests.InitTestEnv()
  14. if err != nil {
  15. t.Errorf("Expected nil, recieved %s", err.Error())
  16. return
  17. }
  18. u, err := Database.GetUserByUsername("test")
  19. userKey, err := Seeder.GenerateAesKey()
  20. if err != nil {
  21. t.Errorf("Expected nil, recieved %s", err.Error())
  22. return
  23. }
  24. key, err := Seeder.GenerateAesKey()
  25. if err != nil {
  26. t.Errorf("Expected nil, recieved %s", err.Error())
  27. return
  28. }
  29. dataCiphertext, err := key.AesEncrypt([]byte("Test message"))
  30. if err != nil {
  31. t.Errorf("Expected nil, recieved %s", err.Error())
  32. return
  33. }
  34. senderIDCiphertext, err := key.AesEncrypt([]byte(u.ID.String()))
  35. if err != nil {
  36. t.Errorf("Expected nil, recieved %s", err.Error())
  37. return
  38. }
  39. keyCiphertext, err := userKey.AesEncrypt(
  40. []byte(base64.StdEncoding.EncodeToString(key.Key)),
  41. )
  42. if err != nil {
  43. t.Errorf("Expected nil, recieved %s", err.Error())
  44. return
  45. }
  46. pubKey := Seeder.GetPubKey()
  47. message := Database.Message{
  48. MessageData: Database.MessageData{
  49. Data: base64.StdEncoding.EncodeToString(dataCiphertext),
  50. SenderID: base64.StdEncoding.EncodeToString(senderIDCiphertext),
  51. SymmetricKey: base64.StdEncoding.EncodeToString(keyCiphertext),
  52. },
  53. SymmetricKey: base64.StdEncoding.EncodeToString(
  54. Seeder.EncryptWithPublicKey(userKey.Key, pubKey),
  55. ),
  56. AssociationKey: "AssociationKey",
  57. }
  58. err = (&message).CreateMessage()
  59. if err != nil {
  60. t.Errorf("Expected nil, recieved %s", err.Error())
  61. return
  62. }
  63. resp, err := client.Get(ts.URL + "/api/v1/auth/messages/AssociationKey")
  64. if err != nil {
  65. t.Errorf("Expected user record, recieved %s", err.Error())
  66. return
  67. }
  68. if resp.StatusCode != http.StatusOK {
  69. t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
  70. return
  71. }
  72. requestBody, err := ioutil.ReadAll(resp.Body)
  73. if err != nil {
  74. t.Errorf("Expected nil, recieved %s", err.Error())
  75. return
  76. }
  77. var m Database.MessageList
  78. err = json.Unmarshal(requestBody, &m)
  79. if len(m) != 1 {
  80. t.Errorf("Expected %d, recieved %d", 1, len(m))
  81. }
  82. msg := m[0]
  83. decodedData, err := base64.StdEncoding.DecodeString(msg.MessageData.Data)
  84. if err != nil {
  85. t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
  86. return
  87. }
  88. decrypedData, err := key.AesDecrypt(decodedData)
  89. if err != nil {
  90. t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
  91. return
  92. }
  93. if string(decrypedData) != "Test message" {
  94. t.Errorf("Expected %s, recieved %s", "Test converation", string(decrypedData))
  95. }
  96. }
  97. func Test_MessagesPagination(t *testing.T) {
  98. client, ts, err := Tests.InitTestEnv()
  99. if err != nil {
  100. t.Errorf("Expected nil, recieved %s", err.Error())
  101. return
  102. }
  103. u, err := Database.GetUserByUsername("test")
  104. userKey, err := Seeder.GenerateAesKey()
  105. if err != nil {
  106. t.Errorf("Expected nil, recieved %s", err.Error())
  107. return
  108. }
  109. key, err := Seeder.GenerateAesKey()
  110. if err != nil {
  111. t.Errorf("Expected nil, recieved %s", err.Error())
  112. return
  113. }
  114. dataCiphertext, err := key.AesEncrypt([]byte("Test message"))
  115. if err != nil {
  116. t.Errorf("Expected nil, recieved %s", err.Error())
  117. return
  118. }
  119. senderIDCiphertext, err := key.AesEncrypt([]byte(u.ID.String()))
  120. if err != nil {
  121. t.Errorf("Expected nil, recieved %s", err.Error())
  122. return
  123. }
  124. keyCiphertext, err := userKey.AesEncrypt(
  125. []byte(base64.StdEncoding.EncodeToString(key.Key)),
  126. )
  127. if err != nil {
  128. t.Errorf("Expected nil, recieved %s", err.Error())
  129. return
  130. }
  131. pubKey := Seeder.GetPubKey()
  132. for i := 0; i < 50; i++ {
  133. message := Database.Message{
  134. MessageData: Database.MessageData{
  135. Data: base64.StdEncoding.EncodeToString(dataCiphertext),
  136. SenderID: base64.StdEncoding.EncodeToString(senderIDCiphertext),
  137. SymmetricKey: base64.StdEncoding.EncodeToString(keyCiphertext),
  138. },
  139. SymmetricKey: base64.StdEncoding.EncodeToString(
  140. Seeder.EncryptWithPublicKey(userKey.Key, pubKey),
  141. ),
  142. AssociationKey: "AssociationKey",
  143. }
  144. err = (&message).CreateMessage()
  145. if err != nil {
  146. t.Errorf("Expected nil, recieved %s", err.Error())
  147. return
  148. }
  149. }
  150. resp, err := client.Get(ts.URL + "/api/v1/auth/messages/AssociationKey")
  151. if err != nil {
  152. t.Errorf("Expected user record, recieved %s", err.Error())
  153. return
  154. }
  155. if resp.StatusCode != http.StatusOK {
  156. t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
  157. return
  158. }
  159. requestBody, err := ioutil.ReadAll(resp.Body)
  160. if err != nil {
  161. t.Errorf("Expected nil, recieved %s", err.Error())
  162. return
  163. }
  164. var m Database.MessageList
  165. err = json.Unmarshal(requestBody, &m)
  166. if len(m) != 20 {
  167. t.Errorf("Expected %d, recieved %d", 20, len(m))
  168. }
  169. }