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.

68 lines
1.5 KiB

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