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.

74 lines
1.7 KiB

  1. package Auth
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "log"
  6. "net/http"
  7. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Api/JsonSerialization"
  8. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database"
  9. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Models"
  10. )
  11. func Signup(w http.ResponseWriter, r *http.Request) {
  12. var (
  13. userData Models.User
  14. requestBody []byte
  15. returnJson []byte
  16. err error
  17. )
  18. requestBody, err = ioutil.ReadAll(r.Body)
  19. if err != nil {
  20. log.Printf("Error encountered reading POST body: %s\n", err.Error())
  21. http.Error(w, "Error", http.StatusInternalServerError)
  22. return
  23. }
  24. userData, err = JsonSerialization.DeserializeUser(requestBody, []string{
  25. "id",
  26. }, false)
  27. if err != nil {
  28. log.Printf("Invalid data provided to Signup: %s\n", err.Error())
  29. http.Error(w, "Invalid Data", http.StatusUnprocessableEntity)
  30. return
  31. }
  32. if userData.Username == "" ||
  33. userData.Password == "" ||
  34. userData.ConfirmPassword == "" ||
  35. len(userData.AsymmetricPrivateKey) == 0 ||
  36. len(userData.AsymmetricPublicKey) == 0 {
  37. http.Error(w, "Invalid Data", http.StatusUnprocessableEntity)
  38. return
  39. }
  40. err = Database.CheckUniqueUsername(userData.Username)
  41. if err != nil {
  42. http.Error(w, "Invalid Data", http.StatusUnprocessableEntity)
  43. return
  44. }
  45. userData.Password, err = HashPassword(userData.Password)
  46. if err != nil {
  47. http.Error(w, "Error", http.StatusInternalServerError)
  48. return
  49. }
  50. err = Database.CreateUser(&userData)
  51. if err != nil {
  52. http.Error(w, "Error", http.StatusInternalServerError)
  53. return
  54. }
  55. returnJson, err = json.MarshalIndent(userData, "", " ")
  56. if err != nil {
  57. http.Error(w, "Error", http.StatusInternalServerError)
  58. return
  59. }
  60. // Return updated json
  61. w.WriteHeader(http.StatusOK)
  62. w.Write(returnJson)
  63. }