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.

67 lines
1.5 KiB

  1. package Auth
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database"
  6. )
  7. type signup struct {
  8. Username string `json:"username"`
  9. Password string `json:"password"`
  10. ConfirmPassword string `json:"confirm_password"`
  11. PublicKey string `json:"asymmetric_public_key"`
  12. PrivateKey string `json:"asymmetric_private_key"`
  13. SymmetricKey string `json:"symmetric_key"`
  14. }
  15. // Signup to the platform
  16. func Signup(w http.ResponseWriter, r *http.Request) {
  17. var (
  18. user Database.User
  19. err error
  20. )
  21. err = json.NewDecoder(r.Body).Decode(&user)
  22. if err != nil {
  23. http.Error(w, "Invalid Data", http.StatusUnprocessableEntity)
  24. return
  25. }
  26. if user.Username == "" ||
  27. user.Password == "" ||
  28. user.ConfirmPassword == "" ||
  29. len(user.AsymmetricPrivateKey) == 0 ||
  30. len(user.AsymmetricPublicKey) == 0 ||
  31. len(user.SymmetricKey) == 0 {
  32. http.Error(w, "Invalid Data", http.StatusUnprocessableEntity)
  33. return
  34. }
  35. if user.Password != user.ConfirmPassword {
  36. http.Error(w, "Invalid Data", http.StatusUnprocessableEntity)
  37. return
  38. }
  39. err = Database.CheckUniqueUsername(user.Username)
  40. if err != nil {
  41. http.Error(w, "Invalid Data", http.StatusUnprocessableEntity)
  42. return
  43. }
  44. user.Password, err = HashPassword(user.Password)
  45. if err != nil {
  46. http.Error(w, "Error", http.StatusInternalServerError)
  47. return
  48. }
  49. err = (&user).CreateUser()
  50. if err != nil {
  51. http.Error(w, "Error", http.StatusInternalServerError)
  52. return
  53. }
  54. w.WriteHeader(http.StatusNoContent)
  55. }