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.

142 lines
2.6 KiB

  1. package Seeder
  2. import (
  3. "encoding/base64"
  4. "io"
  5. "os"
  6. "time"
  7. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database"
  8. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Models"
  9. )
  10. func seedFriend(userRequestTo, userRequestFrom Models.User, accepted bool) error {
  11. var (
  12. friendRequest Models.FriendRequest
  13. symKey aesKey
  14. encPublicKey []byte
  15. err error
  16. )
  17. symKey, err = generateAesKey()
  18. if err != nil {
  19. return err
  20. }
  21. encPublicKey, err = symKey.aesEncrypt([]byte(publicKey))
  22. if err != nil {
  23. return err
  24. }
  25. friendRequest = Models.FriendRequest{
  26. UserID: userRequestTo.ID,
  27. FriendID: base64.StdEncoding.EncodeToString(
  28. encryptWithPublicKey(
  29. []byte(userRequestFrom.ID.String()),
  30. decodedPublicKey,
  31. ),
  32. ),
  33. FriendUsername: base64.StdEncoding.EncodeToString(
  34. encryptWithPublicKey(
  35. []byte(userRequestFrom.Username),
  36. decodedPublicKey,
  37. ),
  38. ),
  39. FriendPublicAsymmetricKey: base64.StdEncoding.EncodeToString(
  40. encPublicKey,
  41. ),
  42. SymmetricKey: base64.StdEncoding.EncodeToString(
  43. encryptWithPublicKey(symKey.Key, decodedPublicKey),
  44. ),
  45. }
  46. if accepted {
  47. friendRequest.AcceptedAt.Time = time.Now()
  48. friendRequest.AcceptedAt.Valid = true
  49. }
  50. return Database.CreateFriendRequest(&friendRequest)
  51. }
  52. func copyProfileImage() error {
  53. var (
  54. srcFile *os.File
  55. dstFile *os.File
  56. err error
  57. )
  58. srcFile, err = os.Open("./Database/Seeder/profile_image_enc.dat")
  59. if err != nil {
  60. return err
  61. }
  62. dstFile, err = os.Create("./attachments/profile_image")
  63. if err != nil {
  64. return err
  65. }
  66. defer dstFile.Close()
  67. _, err = io.Copy(dstFile, srcFile)
  68. return err
  69. }
  70. // SeedFriends creates dummy friends for testing/development
  71. func SeedFriends() {
  72. var (
  73. primaryUser Models.User
  74. secondaryUser Models.User
  75. accepted bool
  76. i int
  77. err error
  78. )
  79. err = copyProfileImage()
  80. if err != nil {
  81. panic(err)
  82. }
  83. primaryUser, err = Database.GetUserByUsername("testUser")
  84. if err != nil {
  85. panic(err)
  86. }
  87. secondaryUser, err = Database.GetUserByUsername("ATestUser2")
  88. if err != nil {
  89. panic(err)
  90. }
  91. err = seedFriend(primaryUser, secondaryUser, true)
  92. if err != nil {
  93. panic(err)
  94. }
  95. err = seedFriend(secondaryUser, primaryUser, true)
  96. if err != nil {
  97. panic(err)
  98. }
  99. accepted = false
  100. for i = 0; i <= 5; i++ {
  101. secondaryUser, err = Database.GetUserByUsername(userNames[i])
  102. if err != nil {
  103. panic(err)
  104. }
  105. if i > 3 {
  106. accepted = true
  107. }
  108. err = seedFriend(primaryUser, secondaryUser, accepted)
  109. if err != nil {
  110. panic(err)
  111. }
  112. if accepted {
  113. err = seedFriend(secondaryUser, primaryUser, accepted)
  114. if err != nil {
  115. panic(err)
  116. }
  117. }
  118. }
  119. }