|
|
@ -0,0 +1,183 @@ |
|
|
|
package Messages_test |
|
|
|
|
|
|
|
import ( |
|
|
|
"bytes" |
|
|
|
"encoding/base64" |
|
|
|
"encoding/json" |
|
|
|
"net/http" |
|
|
|
"testing" |
|
|
|
|
|
|
|
"git.tovijaeschke.xyz/tovi/Capsule/Backend/Database" |
|
|
|
"git.tovijaeschke.xyz/tovi/Capsule/Backend/Database/Seeder" |
|
|
|
"git.tovijaeschke.xyz/tovi/Capsule/Backend/Models" |
|
|
|
"git.tovijaeschke.xyz/tovi/Capsule/Backend/Tests" |
|
|
|
) |
|
|
|
|
|
|
|
func createConversation(key Seeder.AesKey) (Models.ConversationDetail, Models.UserConversation, Models.ConversationDetailUser, error) { |
|
|
|
var ( |
|
|
|
cd Models.ConversationDetail |
|
|
|
uc Models.UserConversation |
|
|
|
cdu Models.ConversationDetailUser |
|
|
|
) |
|
|
|
|
|
|
|
u, err := Database.GetUserByUsername("test") |
|
|
|
|
|
|
|
nameCiphertext, err := key.AesEncrypt([]byte("Test conversation")) |
|
|
|
if err != nil { |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
twoUserCiphertext, err := key.AesEncrypt([]byte("false")) |
|
|
|
if err != nil { |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
cd = Models.ConversationDetail{ |
|
|
|
Name: base64.StdEncoding.EncodeToString(nameCiphertext), |
|
|
|
TwoUser: base64.StdEncoding.EncodeToString(twoUserCiphertext), |
|
|
|
} |
|
|
|
|
|
|
|
err = Database.CreateConversationDetail(&cd) |
|
|
|
if err != nil { |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
conversationDetailIDCiphertext, err := key.AesEncrypt([]byte(cd.ID.String())) |
|
|
|
if err != nil { |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
adminCiphertext, err := key.AesEncrypt([]byte("true")) |
|
|
|
if err != nil { |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
pubKey := Seeder.GetPubKey() |
|
|
|
|
|
|
|
uc = Models.UserConversation{ |
|
|
|
UserID: u.ID, |
|
|
|
ConversationDetailID: base64.StdEncoding.EncodeToString(conversationDetailIDCiphertext), |
|
|
|
Admin: base64.StdEncoding.EncodeToString(adminCiphertext), |
|
|
|
SymmetricKey: base64.StdEncoding.EncodeToString( |
|
|
|
Seeder.EncryptWithPublicKey(key.Key, pubKey), |
|
|
|
), |
|
|
|
} |
|
|
|
|
|
|
|
err = Database.CreateUserConversation(&uc) |
|
|
|
if err != nil { |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
userIDCiphertext, err := key.AesEncrypt([]byte(u.ID.String())) |
|
|
|
if err != nil { |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
usernameCiphertext, err := key.AesEncrypt([]byte(u.Username)) |
|
|
|
if err != nil { |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
adminCiphertext, err = key.AesEncrypt([]byte("true")) |
|
|
|
if err != nil { |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
associationKeyCiphertext, err := key.AesEncrypt([]byte("association")) |
|
|
|
if err != nil { |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
publicKeyCiphertext, err := key.AesEncrypt([]byte(u.AsymmetricPublicKey)) |
|
|
|
if err != nil { |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
cdu = Models.ConversationDetailUser{ |
|
|
|
ConversationDetailID: cd.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 = Database.CreateConversationDetailUser(&cdu) |
|
|
|
return cd, uc, cdu, err |
|
|
|
} |
|
|
|
|
|
|
|
func Test_UpdateConversation(t *testing.T) { |
|
|
|
client, ts, err := Tests.InitTestEnv() |
|
|
|
if err != nil { |
|
|
|
t.Errorf("Expected nil, recieved %s", err.Error()) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
// u, err := Database.GetUserByUsername("test")
|
|
|
|
|
|
|
|
key, err := Seeder.GenerateAesKey() |
|
|
|
if err != nil { |
|
|
|
t.Errorf("Expected nil, recieved %s", err.Error()) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
cd, uc, cdu, err := createConversation(key) |
|
|
|
|
|
|
|
nameCiphertext, err := key.AesEncrypt([]byte("Not test conversation")) |
|
|
|
if err != nil { |
|
|
|
t.Errorf("Expected nil, recieved %s", err.Error()) |
|
|
|
} |
|
|
|
|
|
|
|
d := struct { |
|
|
|
ID string `json:"id"` |
|
|
|
Name string `json:"name"` |
|
|
|
Users []Models.ConversationDetailUser |
|
|
|
UserConversations []Models.UserConversation |
|
|
|
}{ |
|
|
|
ID: cd.ID.String(), |
|
|
|
Name: base64.StdEncoding.EncodeToString(nameCiphertext), |
|
|
|
Users: []Models.ConversationDetailUser{ |
|
|
|
cdu, |
|
|
|
}, |
|
|
|
UserConversations: []Models.UserConversation{ |
|
|
|
uc, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
jsonStr, _ := json.Marshal(d) |
|
|
|
req, _ := http.NewRequest("PUT", ts.URL+"/api/v1/auth/conversations", bytes.NewBuffer(jsonStr)) |
|
|
|
req.Header.Set("Content-Type", "application/json") |
|
|
|
|
|
|
|
resp, err := client.Do(req) |
|
|
|
if err != nil { |
|
|
|
t.Errorf("Expected nil, recieved %s", err.Error()) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
if resp.StatusCode != http.StatusNoContent { |
|
|
|
t.Errorf("Expected %d, recieved %d", http.StatusNoContent, resp.StatusCode) |
|
|
|
} |
|
|
|
|
|
|
|
var ncd Models.ConversationDetail |
|
|
|
err = Database.DB.First(&ncd, "id = ?", cd.ID.String()).Error |
|
|
|
if err != nil { |
|
|
|
t.Errorf("Expected nil, recieved %s", err.Error()) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
decodedName, err := base64.StdEncoding.DecodeString(ncd.Name) |
|
|
|
if err != nil { |
|
|
|
t.Errorf("Expected nil, recieved %s", err.Error()) |
|
|
|
return |
|
|
|
} |
|
|
|
decrypedName, err := key.AesDecrypt(decodedName) |
|
|
|
if err != nil { |
|
|
|
t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
if string(decrypedName) != "Not test conversation" { |
|
|
|
t.Errorf("Expected %s, recieved %s", "Not test converation", string(decrypedName)) |
|
|
|
} |
|
|
|
|
|
|
|
} |