-
Notifications
You must be signed in to change notification settings - Fork 0
/
user.go
128 lines (98 loc) · 2.38 KB
/
user.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"github.com/gorilla/mux"
"github.com/jinzhu/gorm"
"golang.org/x/crypto/bcrypt"
)
//User schema
type User struct {
gorm.Model
Username string `json:"username"`
Password string `json:"password"`
Email string `json:"email"`
HuntLists []HuntList `gorm:"many2many:user_lists;"`
}
// GetUsers selects * from users
func allUsers(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, http.StatusText(405), 405)
return
}
setupResponse(&w, r)
var users []User
var user User
db.Preload("HuntLists.HuntItems").Find(&users)
users = append(users, user)
json.NewEncoder(w).Encode(users)
}
// GetUser selects user by id
func getUser(w http.ResponseWriter, r *http.Request) {
setupResponse(&w, r)
vars := mux.Vars(r)
key := vars["id"]
var user User
db.Preload("HuntLists.HuntItems").Find(&user, key)
json.NewEncoder(w).Encode(user)
}
//NewUser creates a new user
func newUser(w http.ResponseWriter, r *http.Request) {
setupResponse(&w, r)
switch r.Method {
case "OPTIONS":
w.WriteHeader(http.StatusOK)
return
case "POST":
reqBody, _ := ioutil.ReadAll(r.Body)
var user User
json.Unmarshal(reqBody, &user)
hash, _ := bcrypt.GenerateFromPassword([]byte(user.Password), 12)
user = User{
Username: user.Username,
Password: string(hash),
Email: user.Email,
}
db.Create(&user)
db.Preload("HuntLists.HuntItems").First(&user)
validToken, err := generateJWT()
if err != nil {
fmt.Fprintf(w, err.Error())
}
Response := JWTTOKEN{
validToken,
user,
}
json.NewEncoder(w).Encode(Response)
default:
http.Error(w, http.StatusText(405), 405)
}
}
// DeleteUser removes a user by id
func DeleteUser(w http.ResponseWriter, r *http.Request) {
setupResponse(&w, r)
vars := mux.Vars(r)
key := vars["id"]
var user User
db.Table("users").Find(&user, key)
db.Delete(&user)
}
//UpdateUser updates a user by id
func UpdateUser(w http.ResponseWriter, r *http.Request) {
setupResponse(&w, r)
vars := mux.Vars(r)
key := vars["id"]
var user User
reqBody, _ := ioutil.ReadAll(r.Body)
var updateduser User
json.Unmarshal(reqBody, &updateduser)
db.Find(&user, key)
db.Model(&user).Updates(User{
Username: updateduser.Username,
Password: updateduser.Password,
Email: updateduser.Email,
HuntLists: updateduser.HuntLists,
})
}