user.go 927 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package main
  2. import (
  3. "github.com/ant0ine/go-json-rest/rest"
  4. "github.com/tv42/zbase32"
  5. "golang.org/x/crypto/bcrypt"
  6. "net/http"
  7. )
  8. type User struct {
  9. Login string
  10. Password string
  11. }
  12. func regHandler() http.Handler {
  13. api := rest.NewApi()
  14. api.Use(rest.DefaultDevStack...)
  15. router, _ := rest.MakeRouter(rest.Post("/user", func(resp rest.ResponseWriter, req *rest.Request) {
  16. user := &User{}
  17. if err := req.DecodeJsonPayload(user); err == nil {
  18. if user.Login != "" && user.Password != "" {
  19. if _, err := KV.Read(user.Login); err != nil {
  20. pwd, _ := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost)
  21. KV.Write(zbase32.EncodeToString([]byte(user.Login)), pwd)
  22. } else {
  23. rest.Error(resp, "wrong user", 400)
  24. }
  25. } else {
  26. rest.Error(resp, "empty data", 400)
  27. }
  28. } else {
  29. rest.Error(resp, "wrong data", 400)
  30. }
  31. }))
  32. api.SetApp(router)
  33. return api.MakeHandler()
  34. }