decentralized-blogging-platform/RESTfunctions.go
RESTfunctions.goRaw
1package main
2
3import (
4 "encoding/json"
5 "fmt"
6 "net/http"
7
8 "gopkg.in/mgo.v2/bson"
9)
10
11type User struct {
12 Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
13 Username string `json:"username"`
14 Email string `json:"email"`
15 Password string `json:"password"`
16 Token string `json:"token"`
17}
18
19func Index(w http.ResponseWriter, r *http.Request) {
20 fmt.Fprintln(w, "clientApp")
21}
22
23func Signup(w http.ResponseWriter, r *http.Request) {
24 decoder := json.NewDecoder(r.Body)
25 var user User
26 err := decoder.Decode(&user)
27 if err != nil {
28 panic(err)
29 }
30 defer r.Body.Close()
31
32 fmt.Print("user signup: ")
33 fmt.Println(user.Username)
34
35 //save the new project to mongodb
36 rUser := User{}
37 err = userCollection.Find(bson.M{"email": user.Email}).One(&rUser)
38 if err != nil {
39 //user not exists
40 err = userCollection.Insert(user)
41 err = userCollection.Find(bson.M{"email": user.Email}).One(&user)
42 } else {
43 //user exists
44 http.Error(w, "user already registered", http.StatusConflict)
45 return
46 }
47
48 fmt.Println(user.Username)
49 jResp, err := json.Marshal(user)
50 if err != nil {
51 panic(err)
52 }
53 fmt.Fprintln(w, string(jResp))
54}
55
56func Login(w http.ResponseWriter, r *http.Request) {
57
58 decoder := json.NewDecoder(r.Body)
59 var user User
60 err := decoder.Decode(&user)
61 if err != nil {
62 panic(err)
63 }
64 defer r.Body.Close()
65 //TODO check if the user password exists in the database
66
67 fmt.Print("user login: ")
68 fmt.Println(user)
69
70 //save the new project to mongodb
71 rUser := User{}
72 err = userCollection.Find(bson.M{"email": user.Email}).One(&rUser)
73 if err != nil {
74 http.Error(w, "error login, email not foun", http.StatusConflict)
75 return
76 }
77 //user exists, check password
78 if user.Password != rUser.Password {
79 http.Error(w, "error login, password not match", http.StatusConflict)
80 return
81 }
82
83 token, err := newToken()
84 check(err)
85 rUser.Token = token
86
87 //update with the token
88 err = userCollection.Update(bson.M{"_id": rUser.Id}, rUser)
89 check(err)
90
91 jResp, err := json.Marshal(rUser)
92 if err != nil {
93 panic(err)
94 }
95 fmt.Fprintln(w, string(jResp))
96}