-
Notifications
You must be signed in to change notification settings - Fork 1
/
register.go
75 lines (65 loc) · 1.75 KB
/
register.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package endpoint
import (
"errors"
"net/http"
)
// RegisterEndpoint .
type RegisterEndpoint struct {
Core
}
// SetupRegister .
func SetupRegister(core Core) {
p := new(RegisterEndpoint)
p.Core = core
p.Router.Post("/api/v1/register", p.Register)
}
// Register .
// swagger:route POST /api/v1/register authentication UserRegister
//
// Register a user.
//
// Responses:
// 201: CreatedResponse
// 400: BadRequestResponse
// 500: InternalServerErrorResponse
func (p *RegisterEndpoint) Register(w http.ResponseWriter, r *http.Request) (int, error) {
// swagger:parameters UserRegister
type request struct {
// in: body
Body struct {
// Required: true
FirstName string `json:"first_name" validate:"required"`
// Required: true
LastName string `json:"last_name" validate:"required"`
// Required: true
Email string `json:"email" validate:"required,email"`
// Required: true
Password string `json:"password" validate:"required"`
}
}
// Request validation.
req := new(request)
if err := p.Bind.UnmarshalAndValidate(req, r); err != nil {
return http.StatusBadRequest, err
}
// Determine if the user already exists.
user := p.Store.User.New()
found, _, err := p.Store.User.ExistsByField(&user, "email", req.Body.Email)
if err != nil {
return http.StatusInternalServerError, err
} else if found {
return http.StatusBadRequest, errors.New("user already exists")
}
// Encrypt the password.
password, err := p.Password.Hash(req.Body.Password)
if err != nil {
return http.StatusInternalServerError, err
}
// Create the user.
ID, err := p.Store.User.Create(req.Body.FirstName,
req.Body.LastName, req.Body.Email, password)
if err != nil {
return http.StatusInternalServerError, err
}
return p.Response.Created(w, ID)
}