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.

92 lines
1.9 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. package Tests
  2. import (
  3. "encoding/base64"
  4. "io/ioutil"
  5. "log"
  6. "net/http"
  7. "net/http/cookiejar"
  8. "net/http/httptest"
  9. "net/url"
  10. "time"
  11. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Api"
  12. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Api/Auth"
  13. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database"
  14. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database/Seeder"
  15. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Models"
  16. "github.com/gorilla/mux"
  17. )
  18. func InitTestCreateUser(username string) (Models.User, error) {
  19. userKey, err := Seeder.GenerateAesKey()
  20. if err != nil {
  21. return Models.User{}, err
  22. }
  23. pubKey := Seeder.GetPubKey()
  24. p, _ := Auth.HashPassword("password")
  25. u := Models.User{
  26. Username: username,
  27. Password: p,
  28. AsymmetricPublicKey: Seeder.PublicKey,
  29. AsymmetricPrivateKey: Seeder.EncryptedPrivateKey,
  30. SymmetricKey: base64.StdEncoding.EncodeToString(
  31. Seeder.EncryptWithPublicKey(userKey.Key, pubKey),
  32. ),
  33. }
  34. err = Database.CreateUser(&u)
  35. return u, err
  36. }
  37. // InitTestEnv initializes the test environment
  38. // client is used for making authenticated requests
  39. // ts is the testing server
  40. // err, in case it fails ¯\_(ツ)_/¯
  41. func InitTestEnv() (*http.Client, *httptest.Server, error) {
  42. log.SetOutput(ioutil.Discard)
  43. Database.InitTest()
  44. r := mux.NewRouter()
  45. Api.InitAPIEndpoints(r)
  46. ts := httptest.NewServer(r)
  47. u, err := InitTestCreateUser("test")
  48. if err != nil {
  49. return http.DefaultClient, ts, err
  50. }
  51. session := Models.Session{
  52. UserID: u.ID,
  53. Expiry: time.Now().Add(12 * time.Hour),
  54. }
  55. err = Database.CreateSession(&session)
  56. if err != nil {
  57. return http.DefaultClient, ts, err
  58. }
  59. jar, err := cookiejar.New(nil)
  60. url, _ := url.Parse(ts.URL)
  61. jar.SetCookies(
  62. url,
  63. []*http.Cookie{
  64. {
  65. Name: "session_token",
  66. Value: session.ID.String(),
  67. MaxAge: 300,
  68. },
  69. },
  70. )
  71. client := &http.Client{
  72. Jar: jar,
  73. }
  74. return client, ts, err
  75. }