-
Notifications
You must be signed in to change notification settings - Fork 2
/
register.go
63 lines (55 loc) · 1.43 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
package controllers
import (
"log"
"encoding/hex"
"github.com/astaxie/beegae"
"github.com/golang/crypto/bcrypt"
"github.com/jackgris/optima/models"
"math/rand"
)
type RegisterAuth struct {
beegae.Controller
}
func (this *RegisterAuth) Post() {
user, err := DecodeUserData(this.Ctx.Input.Request.Body)
if err != nil {
log.Println("RegisterAuth: Error decode user data on register", err)
this.Data["json"] = &models.Token{}
return
}
token, _ := models.GenerateToken(user.Email)
user.Token = token
exist, err := models.CheckExist(user, this.AppEngineCtx)
if err != nil {
log.Println("RegisterAuth: Error at verify user", err)
this.Data["json"] = &models.Token{}
return
}
if exist {
log.Println("RegisterAuth: The user already exist")
this.Data["json"] = &models.Token{}
return
} else {
cost := rand.Intn(27) + 4 //cost min 4 and max 31
hashHex, err := bcrypt.GenerateFromPassword([]byte(user.Pass), cost)
hashString := hex.EncodeToString(hashHex)
user.Pass = hashString
if err != nil {
log.Println("bcrypt broke")
return
}
models.AddUser(user, this.AppEngineCtx)
}
// It's all ok, return the user data on json format
this.Data["json"] = &user.Token
}
func (this *RegisterAuth) Get() {
// not implemmented
}
func (this *RegisterAuth) Render() error {
if _, ok := this.Data["json"].(error); ok {
this.AppEngineCtx.Errorf("register auth error: %v", this.Data["json"])
}
this.ServeJson()
return nil
}