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.

91 lines
1.8 KiB

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