@ -0,0 +1,87 @@ | |||
package Friends | |||
import ( | |||
"encoding/json" | |||
"io/ioutil" | |||
"net/http" | |||
"time" | |||
"git.tovijaeschke.xyz/tovi/Capsule/Backend/Database" | |||
"git.tovijaeschke.xyz/tovi/Capsule/Backend/Models" | |||
) | |||
// CreateFriendRequest creates a FriendRequest from post data | |||
func CreateFriendRequest(w http.ResponseWriter, r *http.Request) { | |||
var ( | |||
friendRequest Models.FriendRequest | |||
requestBody []byte | |||
returnJSON []byte | |||
err error | |||
) | |||
requestBody, err = ioutil.ReadAll(r.Body) | |||
if err != nil { | |||
http.Error(w, "Error", http.StatusInternalServerError) | |||
return | |||
} | |||
err = json.Unmarshal(requestBody, &friendRequest) | |||
if err != nil { | |||
http.Error(w, "Error", http.StatusInternalServerError) | |||
return | |||
} | |||
friendRequest.AcceptedAt.Scan(nil) | |||
err = Database.CreateFriendRequest(&friendRequest) | |||
if err != nil { | |||
http.Error(w, "Error", http.StatusInternalServerError) | |||
return | |||
} | |||
returnJSON, err = json.MarshalIndent(friendRequest, "", " ") | |||
if err != nil { | |||
http.Error(w, "Error", http.StatusInternalServerError) | |||
return | |||
} | |||
// Return updated json | |||
w.WriteHeader(http.StatusOK) | |||
w.Write(returnJSON) | |||
} | |||
// CreateFriendRequestQrCode creates a FriendRequest from post data from qr code scan | |||
func CreateFriendRequestQrCode(w http.ResponseWriter, r *http.Request) { | |||
var ( | |||
friendRequests []Models.FriendRequest | |||
requestBody []byte | |||
i int | |||
err error | |||
) | |||
requestBody, err = ioutil.ReadAll(r.Body) | |||
if err != nil { | |||
http.Error(w, "Error", http.StatusInternalServerError) | |||
return | |||
} | |||
err = json.Unmarshal(requestBody, &friendRequests) | |||
if err != nil { | |||
http.Error(w, "Error", http.StatusInternalServerError) | |||
return | |||
} | |||
for i = range friendRequests { | |||
friendRequests[i].AcceptedAt.Time = time.Now() | |||
friendRequests[i].AcceptedAt.Valid = true | |||
} | |||
err = Database.CreateFriendRequests(&friendRequests) | |||
if err != nil { | |||
http.Error(w, "Error", http.StatusInternalServerError) | |||
return | |||
} | |||
// Return updated json | |||
w.WriteHeader(http.StatusOK) | |||
} |
@ -1,41 +0,0 @@ | |||
package Friends | |||
import ( | |||
"encoding/json" | |||
"net/http" | |||
"git.tovijaeschke.xyz/tovi/Capsule/Backend/Api/Auth" | |||
"git.tovijaeschke.xyz/tovi/Capsule/Backend/Database" | |||
"git.tovijaeschke.xyz/tovi/Capsule/Backend/Models" | |||
) | |||
// FriendRequestList gets friend request list | |||
func FriendRequestList(w http.ResponseWriter, r *http.Request) { | |||
var ( | |||
userSession Models.Session | |||
friends []Models.FriendRequest | |||
returnJSON []byte | |||
err error | |||
) | |||
userSession, err = Auth.CheckCookie(r) | |||
if err != nil { | |||
http.Error(w, "Forbidden", http.StatusUnauthorized) | |||
return | |||
} | |||
friends, err = Database.GetFriendRequestsByUserID(userSession.UserID.String()) | |||
if err != nil { | |||
http.Error(w, "Error", http.StatusInternalServerError) | |||
return | |||
} | |||
returnJSON, err = json.MarshalIndent(friends, "", " ") | |||
if err != nil { | |||
http.Error(w, "Error", http.StatusInternalServerError) | |||
return | |||
} | |||
w.WriteHeader(http.StatusOK) | |||
w.Write(returnJSON) | |||
} |
@ -0,0 +1,124 @@ | |||
package Friends_test | |||
import ( | |||
"encoding/base64" | |||
"encoding/json" | |||
"fmt" | |||
"io/ioutil" | |||
"net/http" | |||
"testing" | |||
"time" | |||
"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 Test_FriendRequestList(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") | |||
if err != nil { | |||
t.Errorf("Expected nil, recieved %s", err.Error()) | |||
return | |||
} | |||
for i := 0; i < 30; i++ { | |||
u2, err := Tests.InitTestCreateUser(fmt.Sprintf("test%d", i)) | |||
decodedPublicKey := Seeder.GetPubKey() | |||
key, err := Seeder.GenerateAesKey() | |||
if err != nil { | |||
t.Errorf("Expected nil, recieved %s", err.Error()) | |||
return | |||
} | |||
encPublicKey, err := key.AesEncrypt([]byte(Seeder.PublicKey)) | |||
if err != nil { | |||
t.Errorf("Expected nil, recieved %s", err.Error()) | |||
return | |||
} | |||
friendReq := Models.FriendRequest{ | |||
UserID: u.ID, | |||
FriendID: base64.StdEncoding.EncodeToString( | |||
Seeder.EncryptWithPublicKey( | |||
[]byte(u2.ID.String()), | |||
decodedPublicKey, | |||
), | |||
), | |||
FriendUsername: base64.StdEncoding.EncodeToString( | |||
Seeder.EncryptWithPublicKey( | |||
[]byte(u2.Username), | |||
decodedPublicKey, | |||
), | |||
), | |||
FriendPublicAsymmetricKey: base64.StdEncoding.EncodeToString( | |||
encPublicKey, | |||
), | |||
SymmetricKey: base64.StdEncoding.EncodeToString( | |||
Seeder.EncryptWithPublicKey(key.Key, decodedPublicKey), | |||
), | |||
} | |||
if i > 20 { | |||
friendReq.AcceptedAt.Time = time.Now() | |||
friendReq.AcceptedAt.Valid = true | |||
} | |||
err = Database.CreateFriendRequest(&friendReq) | |||
if err != nil { | |||
t.Errorf("Expected nil, recieved %s", err.Error()) | |||
return | |||
} | |||
} | |||
req, _ := http.NewRequest("GET", ts.URL+"/api/v1/auth/friend_requests", nil) | |||
resp, err := client.Do(req) | |||
if err != nil { | |||
t.Errorf("Expected nil, recieved %s", err.Error()) | |||
return | |||
} | |||
if resp.StatusCode != http.StatusOK { | |||
t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode) | |||
return | |||
} | |||
requestBody, err := ioutil.ReadAll(resp.Body) | |||
if err != nil { | |||
t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode) | |||
return | |||
} | |||
var users []Models.FriendRequest | |||
json.Unmarshal(requestBody, &users) | |||
if len(users) != 20 { | |||
t.Errorf("Expected %d, recieved %d", 1, len(users)) | |||
return | |||
} | |||
for i := 0; i < 20; i++ { | |||
eq := true | |||
if i > 8 { | |||
eq = false | |||
} | |||
if users[i].AcceptedAt.Valid != eq { | |||
t.Errorf( | |||
"Expected %v, recieved %v, on user %d", | |||
eq, users[i].AcceptedAt.Valid, | |||
i, | |||
) | |||
return | |||
} | |||
} | |||
} |
@ -0,0 +1,106 @@ | |||
package Users_test | |||
import ( | |||
"encoding/json" | |||
"fmt" | |||
"io/ioutil" | |||
"net/http" | |||
"testing" | |||
"git.tovijaeschke.xyz/tovi/Capsule/Backend/Models" | |||
"git.tovijaeschke.xyz/tovi/Capsule/Backend/Tests" | |||
) | |||
func Test_SearchUsers(t *testing.T) { | |||
client, ts, err := Tests.InitTestEnv() | |||
if err != nil { | |||
t.Errorf("Expected nil, recieved %s", err.Error()) | |||
return | |||
} | |||
u2, err := Tests.InitTestCreateUser("abcd") | |||
req, _ := http.NewRequest( | |||
"GET", | |||
fmt.Sprintf("%s/api/v1/auth/users?username=%s", ts.URL, u2.Username), | |||
nil, | |||
) | |||
resp, err := client.Do(req) | |||
if err != nil { | |||
t.Errorf("Expected nil, recieved %s", err.Error()) | |||
return | |||
} | |||
if resp.StatusCode != http.StatusOK { | |||
t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode) | |||
return | |||
} | |||
requestBody, err := ioutil.ReadAll(resp.Body) | |||
if err != nil { | |||
t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode) | |||
return | |||
} | |||
var user Models.User | |||
json.Unmarshal(requestBody, &user) | |||
if user.Username != "abcd" { | |||
t.Errorf("Expected abcd, recieved %s", user.Username) | |||
return | |||
} | |||
if user.Password != "" { | |||
t.Errorf("Expected \"\", recieved %s", user.Password) | |||
return | |||
} | |||
if user.AsymmetricPrivateKey != "" { | |||
t.Errorf("Expected \"\", recieved %s", user.AsymmetricPrivateKey) | |||
return | |||
} | |||
} | |||
func Test_SearchUsersPartialMatchFails(t *testing.T) { | |||
client, ts, err := Tests.InitTestEnv() | |||
if err != nil { | |||
t.Errorf("Expected nil, recieved %s", err.Error()) | |||
return | |||
} | |||
_, err = Tests.InitTestCreateUser("abcd") | |||
req, _ := http.NewRequest( | |||
"GET", | |||
fmt.Sprintf("%s/api/v1/auth/users?username=%s", ts.URL, "abc"), | |||
nil, | |||
) | |||
resp, err := client.Do(req) | |||
if err != nil { | |||
t.Errorf("Expected nil, recieved %s", err.Error()) | |||
return | |||
} | |||
if resp.StatusCode != http.StatusNotFound { | |||
t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode) | |||
return | |||
} | |||
requestBody, err := ioutil.ReadAll(resp.Body) | |||
if err != nil { | |||
t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode) | |||
return | |||
} | |||
var user interface{} | |||
json.Unmarshal(requestBody, &user) | |||
if user != nil { | |||
t.Errorf("Expected nil, recieved %+v", user) | |||
return | |||
} | |||
} |