package Seeder
|
|
|
|
import (
|
|
"encoding/base64"
|
|
|
|
"git.tovijaeschke.xyz/tovi/Envelope/Backend/Database"
|
|
|
|
"github.com/gofrs/uuid"
|
|
)
|
|
|
|
func seedMessage(
|
|
primaryUser, secondaryUser Database.User,
|
|
primaryUserAssociationKey, secondaryUserAssociationKey string,
|
|
i int,
|
|
) error {
|
|
var (
|
|
message Database.Message
|
|
messageData Database.MessageData
|
|
key, userKey AesKey
|
|
keyCiphertext []byte
|
|
plaintext string
|
|
dataCiphertext []byte
|
|
senderIDCiphertext []byte
|
|
err error
|
|
)
|
|
|
|
plaintext = "Test Message"
|
|
|
|
userKey, err = GenerateAesKey()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
key, err = GenerateAesKey()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
dataCiphertext, err = key.AesEncrypt([]byte(plaintext))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
senderIDCiphertext, err = key.AesEncrypt([]byte(primaryUser.ID.String()))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if i%2 == 0 {
|
|
senderIDCiphertext, err = key.AesEncrypt([]byte(secondaryUser.ID.String()))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
keyCiphertext, err = userKey.AesEncrypt(
|
|
[]byte(base64.StdEncoding.EncodeToString(key.Key)),
|
|
)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
messageData = Database.MessageData{
|
|
Data: base64.StdEncoding.EncodeToString(dataCiphertext),
|
|
SenderID: base64.StdEncoding.EncodeToString(senderIDCiphertext),
|
|
SymmetricKey: base64.StdEncoding.EncodeToString(keyCiphertext),
|
|
}
|
|
|
|
message = Database.Message{
|
|
MessageData: messageData,
|
|
SymmetricKey: base64.StdEncoding.EncodeToString(
|
|
EncryptWithPublicKey(userKey.Key, decodedPublicKey),
|
|
),
|
|
AssociationKey: primaryUserAssociationKey,
|
|
}
|
|
|
|
err = (&message).CreateMessage()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
message = Database.Message{
|
|
MessageData: messageData,
|
|
SymmetricKey: base64.StdEncoding.EncodeToString(
|
|
EncryptWithPublicKey(userKey.Key, decodedPublicKey),
|
|
),
|
|
AssociationKey: secondaryUserAssociationKey,
|
|
}
|
|
|
|
return (&message).CreateMessage()
|
|
}
|
|
|
|
func seedConversationDetail(key AesKey) (Database.ConversationDetail, error) {
|
|
var (
|
|
conversationDetail Database.ConversationDetail
|
|
name string
|
|
nameCiphertext []byte
|
|
falseCiphertext []byte
|
|
trueCiphertext []byte
|
|
err error
|
|
)
|
|
|
|
name = "Test Conversation"
|
|
|
|
nameCiphertext, err = key.AesEncrypt([]byte(name))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
falseCiphertext, err = key.AesEncrypt([]byte("false"))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
trueCiphertext, err = key.AesEncrypt([]byte("true"))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
conversationDetail = Database.ConversationDetail{
|
|
Name: base64.StdEncoding.EncodeToString(nameCiphertext),
|
|
TwoUser: base64.StdEncoding.EncodeToString(falseCiphertext),
|
|
AdminAddMembers: base64.StdEncoding.EncodeToString(trueCiphertext),
|
|
AdminEditInfo: base64.StdEncoding.EncodeToString(trueCiphertext),
|
|
AdminSendMessages: base64.StdEncoding.EncodeToString(falseCiphertext),
|
|
}
|
|
|
|
err = (&conversationDetail).CreateConversationDetail()
|
|
return conversationDetail, err
|
|
}
|
|
|
|
func seedUserConversation(
|
|
user Database.User,
|
|
threadID uuid.UUID,
|
|
key AesKey,
|
|
) (Database.UserConversation, error) {
|
|
var (
|
|
messageThreadUser Database.UserConversation
|
|
conversationDetailIDCiphertext []byte
|
|
adminCiphertext []byte
|
|
err error
|
|
)
|
|
|
|
conversationDetailIDCiphertext, err = key.AesEncrypt([]byte(threadID.String()))
|
|
if err != nil {
|
|
return messageThreadUser, err
|
|
}
|
|
|
|
adminCiphertext, err = key.AesEncrypt([]byte("true"))
|
|
if err != nil {
|
|
return messageThreadUser, err
|
|
}
|
|
|
|
messageThreadUser = Database.UserConversation{
|
|
UserID: user.ID,
|
|
ConversationDetailID: base64.StdEncoding.EncodeToString(conversationDetailIDCiphertext),
|
|
Admin: base64.StdEncoding.EncodeToString(adminCiphertext),
|
|
SymmetricKey: base64.StdEncoding.EncodeToString(
|
|
EncryptWithPublicKey(key.Key, decodedPublicKey),
|
|
),
|
|
}
|
|
|
|
err = (&messageThreadUser).CreateUserConversation()
|
|
return messageThreadUser, err
|
|
}
|
|
|
|
func seedConversationDetailUser(
|
|
user Database.User,
|
|
conversationDetail Database.ConversationDetail,
|
|
associationKey uuid.UUID,
|
|
admin bool,
|
|
key AesKey,
|
|
) (Database.ConversationDetailUser, error) {
|
|
var (
|
|
conversationDetailUser Database.ConversationDetailUser
|
|
|
|
userIDCiphertext []byte
|
|
usernameCiphertext []byte
|
|
adminCiphertext []byte
|
|
associationKeyCiphertext []byte
|
|
publicKeyCiphertext []byte
|
|
|
|
adminString = "false"
|
|
|
|
err error
|
|
)
|
|
|
|
if admin {
|
|
adminString = "true"
|
|
}
|
|
|
|
userIDCiphertext, err = key.AesEncrypt([]byte(user.ID.String()))
|
|
if err != nil {
|
|
return conversationDetailUser, err
|
|
}
|
|
|
|
usernameCiphertext, err = key.AesEncrypt([]byte(user.Username))
|
|
if err != nil {
|
|
return conversationDetailUser, err
|
|
}
|
|
|
|
adminCiphertext, err = key.AesEncrypt([]byte(adminString))
|
|
if err != nil {
|
|
return conversationDetailUser, err
|
|
}
|
|
|
|
associationKeyCiphertext, err = key.AesEncrypt([]byte(associationKey.String()))
|
|
if err != nil {
|
|
return conversationDetailUser, err
|
|
}
|
|
|
|
publicKeyCiphertext, err = key.AesEncrypt([]byte(user.AsymmetricPublicKey))
|
|
if err != nil {
|
|
return conversationDetailUser, err
|
|
}
|
|
|
|
conversationDetailUser = Database.ConversationDetailUser{
|
|
ConversationDetailID: conversationDetail.ID,
|
|
UserID: base64.StdEncoding.EncodeToString(userIDCiphertext),
|
|
Username: base64.StdEncoding.EncodeToString(usernameCiphertext),
|
|
Admin: base64.StdEncoding.EncodeToString(adminCiphertext),
|
|
AssociationKey: base64.StdEncoding.EncodeToString(associationKeyCiphertext),
|
|
PublicKey: base64.StdEncoding.EncodeToString(publicKeyCiphertext),
|
|
}
|
|
|
|
err = (&conversationDetailUser).CreateConversationDetailUser()
|
|
|
|
return conversationDetailUser, err
|
|
}
|
|
|
|
// SeedMessages seeds messages & conversations for testing
|
|
func SeedMessages() {
|
|
var (
|
|
conversationDetail Database.ConversationDetail
|
|
key AesKey
|
|
primaryUser Database.User
|
|
primaryUserAssociationKey uuid.UUID
|
|
secondaryUser Database.User
|
|
secondaryUserAssociationKey uuid.UUID
|
|
i int
|
|
err error
|
|
)
|
|
|
|
key, err = GenerateAesKey()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
conversationDetail, err = seedConversationDetail(key)
|
|
|
|
primaryUserAssociationKey, err = uuid.NewV4()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
secondaryUserAssociationKey, err = uuid.NewV4()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
primaryUser, err = Database.GetUserByUsername("testUser")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
_, err = seedUserConversation(
|
|
primaryUser,
|
|
conversationDetail.ID,
|
|
key,
|
|
)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
secondaryUser, err = Database.GetUserByUsername("ATestUser2")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
_, err = seedUserConversation(
|
|
secondaryUser,
|
|
conversationDetail.ID,
|
|
key,
|
|
)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
_, err = seedConversationDetailUser(
|
|
primaryUser,
|
|
conversationDetail,
|
|
primaryUserAssociationKey,
|
|
true,
|
|
key,
|
|
)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
_, err = seedConversationDetailUser(
|
|
secondaryUser,
|
|
conversationDetail,
|
|
secondaryUserAssociationKey,
|
|
false,
|
|
key,
|
|
)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
for i = 0; i <= 100; i++ {
|
|
err = seedMessage(
|
|
primaryUser,
|
|
secondaryUser,
|
|
primaryUserAssociationKey.String(),
|
|
secondaryUserAssociationKey.String(),
|
|
i,
|
|
)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|