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.7 KiB

2 years ago
  1. package Friends_test
  2. import (
  3. "bytes"
  4. "encoding/base64"
  5. "encoding/json"
  6. "net/http"
  7. "testing"
  8. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database"
  9. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database/Seeder"
  10. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Models"
  11. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Tests"
  12. )
  13. func Test_CreateFriendRequest(t *testing.T) {
  14. client, ts, err := Tests.InitTestEnv()
  15. if err != nil {
  16. t.Errorf("Expected nil, recieved %s", err.Error())
  17. return
  18. }
  19. u, err := Database.GetUserByUsername("test")
  20. if err != nil {
  21. t.Errorf("Expected nil, recieved %s", err.Error())
  22. return
  23. }
  24. u2, err := Tests.InitTestCreateUser("test2")
  25. if err != nil {
  26. t.Errorf("Expected nil, recieved %s", err.Error())
  27. return
  28. }
  29. key, err := Seeder.GenerateAesKey()
  30. if err != nil {
  31. t.Errorf("Expected nil, recieved %s", err.Error())
  32. return
  33. }
  34. decodedPublicKey := Seeder.GetPubKey()
  35. encPublicKey, err := key.AesEncrypt([]byte(Seeder.PublicKey))
  36. if err != nil {
  37. t.Errorf("Expected nil, recieved %s", err.Error())
  38. return
  39. }
  40. friendReq := Models.FriendRequest{
  41. UserID: u.ID,
  42. FriendID: base64.StdEncoding.EncodeToString(
  43. Seeder.EncryptWithPublicKey(
  44. []byte(u2.ID.String()),
  45. decodedPublicKey,
  46. ),
  47. ),
  48. FriendUsername: base64.StdEncoding.EncodeToString(
  49. Seeder.EncryptWithPublicKey(
  50. []byte(u2.Username),
  51. decodedPublicKey,
  52. ),
  53. ),
  54. FriendPublicAsymmetricKey: base64.StdEncoding.EncodeToString(
  55. encPublicKey,
  56. ),
  57. SymmetricKey: base64.StdEncoding.EncodeToString(
  58. Seeder.EncryptWithPublicKey(key.Key, decodedPublicKey),
  59. ),
  60. }
  61. jsonStr, _ := json.Marshal(friendReq)
  62. req, _ := http.NewRequest("POST", ts.URL+"/api/v1/auth/friend_request", bytes.NewBuffer(jsonStr))
  63. req.Header.Set("Content-Type", "application/json")
  64. resp, err := client.Do(req)
  65. if err != nil {
  66. t.Errorf("Expected nil, recieved %s", err.Error())
  67. return
  68. }
  69. if resp.StatusCode != http.StatusOK {
  70. t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
  71. return
  72. }
  73. var r Models.FriendRequest
  74. err = Database.DB.First(&r).Error
  75. if err != nil {
  76. t.Errorf("Expected nil, recieved %s", err.Error())
  77. return
  78. }
  79. if r.AcceptedAt.Valid == true {
  80. t.Errorf("Expected false, recieved true")
  81. return
  82. }
  83. }
  84. func Test_CreateFriendRequestQrCode(t *testing.T) {
  85. client, ts, err := Tests.InitTestEnv()
  86. if err != nil {
  87. t.Errorf("Expected nil, recieved %s", err.Error())
  88. return
  89. }
  90. u, err := Database.GetUserByUsername("test")
  91. if err != nil {
  92. t.Errorf("Expected nil, recieved %s", err.Error())
  93. return
  94. }
  95. u2, err := Tests.InitTestCreateUser("test2")
  96. if err != nil {
  97. t.Errorf("Expected nil, recieved %s", err.Error())
  98. return
  99. }
  100. key, err := Seeder.GenerateAesKey()
  101. if err != nil {
  102. t.Errorf("Expected nil, recieved %s", err.Error())
  103. return
  104. }
  105. decodedPublicKey := Seeder.GetPubKey()
  106. encPublicKey, err := key.AesEncrypt([]byte(Seeder.PublicKey))
  107. if err != nil {
  108. t.Errorf("Expected nil, recieved %s", err.Error())
  109. return
  110. }
  111. friendReq := Models.FriendRequest{
  112. UserID: u.ID,
  113. FriendID: base64.StdEncoding.EncodeToString(
  114. Seeder.EncryptWithPublicKey(
  115. []byte(u2.ID.String()),
  116. decodedPublicKey,
  117. ),
  118. ),
  119. FriendUsername: base64.StdEncoding.EncodeToString(
  120. Seeder.EncryptWithPublicKey(
  121. []byte(u2.Username),
  122. decodedPublicKey,
  123. ),
  124. ),
  125. FriendPublicAsymmetricKey: base64.StdEncoding.EncodeToString(
  126. encPublicKey,
  127. ),
  128. SymmetricKey: base64.StdEncoding.EncodeToString(
  129. Seeder.EncryptWithPublicKey(key.Key, decodedPublicKey),
  130. ),
  131. }
  132. friendReq2 := Models.FriendRequest{
  133. UserID: u2.ID,
  134. FriendID: base64.StdEncoding.EncodeToString(
  135. Seeder.EncryptWithPublicKey(
  136. []byte(u.ID.String()),
  137. decodedPublicKey,
  138. ),
  139. ),
  140. FriendUsername: base64.StdEncoding.EncodeToString(
  141. Seeder.EncryptWithPublicKey(
  142. []byte(u.Username),
  143. decodedPublicKey,
  144. ),
  145. ),
  146. FriendPublicAsymmetricKey: base64.StdEncoding.EncodeToString(
  147. encPublicKey,
  148. ),
  149. SymmetricKey: base64.StdEncoding.EncodeToString(
  150. Seeder.EncryptWithPublicKey(key.Key, decodedPublicKey),
  151. ),
  152. }
  153. jsonStr, _ := json.Marshal([]Models.FriendRequest{friendReq, friendReq2})
  154. req, _ := http.NewRequest("POST", ts.URL+"/api/v1/auth/friend_request/qr_code", bytes.NewBuffer(jsonStr))
  155. req.Header.Set("Content-Type", "application/json")
  156. resp, err := client.Do(req)
  157. if err != nil {
  158. t.Errorf("Expected nil, recieved %s", err.Error())
  159. return
  160. }
  161. if resp.StatusCode != http.StatusOK {
  162. t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
  163. return
  164. }
  165. var r Models.FriendRequest
  166. err = Database.DB.First(&r).Error
  167. if err != nil {
  168. t.Errorf("Expected nil, recieved %s", err.Error())
  169. return
  170. }
  171. if r.AcceptedAt.Valid == false {
  172. t.Errorf("Expected true, recieved false")
  173. return
  174. }
  175. }