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.

87 lines
1.8 KiB

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. // InitTestEnv initializes the test environment
  19. // client is used for making authenticated requests
  20. // ts is the testing server
  21. // err, in case it fails ¯\_(ツ)_/¯
  22. func InitTestEnv() (*http.Client, *httptest.Server, error) {
  23. log.SetOutput(ioutil.Discard)
  24. Database.InitTest()
  25. r := mux.NewRouter()
  26. Api.InitAPIEndpoints(r)
  27. ts := httptest.NewServer(r)
  28. userKey, err := Seeder.GenerateAesKey()
  29. if err != nil {
  30. return http.DefaultClient, ts, err
  31. }
  32. pubKey := Seeder.GetPubKey()
  33. p, _ := Auth.HashPassword("password")
  34. u := Models.User{
  35. Username: "test",
  36. Password: p,
  37. AsymmetricPublicKey: Seeder.PublicKey,
  38. AsymmetricPrivateKey: Seeder.EncryptedPrivateKey,
  39. SymmetricKey: base64.StdEncoding.EncodeToString(
  40. Seeder.EncryptWithPublicKey(userKey.Key, pubKey),
  41. ),
  42. }
  43. err = Database.CreateUser(&u)
  44. if err != nil {
  45. return http.DefaultClient, ts, err
  46. }
  47. session := Models.Session{
  48. UserID: u.ID,
  49. Expiry: time.Now().Add(12 * time.Hour),
  50. }
  51. err = Database.CreateSession(&session)
  52. if err != nil {
  53. return http.DefaultClient, ts, err
  54. }
  55. jar, err := cookiejar.New(nil)
  56. url, _ := url.Parse(ts.URL)
  57. jar.SetCookies(
  58. url,
  59. []*http.Cookie{
  60. {
  61. Name: "session_token",
  62. Value: session.ID.String(),
  63. MaxAge: 300,
  64. },
  65. },
  66. )
  67. client := &http.Client{
  68. Jar: jar,
  69. }
  70. return client, ts, err
  71. }