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)) } }