blockchainIDsystem/serverCA/userRESTFunctions.go
serverCA/userRESTFunctions.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 Email string `json:"email"`
14 Password string `json:"password"`
15 Token string `json:"token"`
16}
17
18func Signup(w http.ResponseWriter, r *http.Request) {
19 //ipFilter(w, r)
20
21 decoder := json.NewDecoder(r.Body)
22 var user User
23 err := decoder.Decode(&user)
24 if err != nil {
25 panic(err)
26 }
27 defer r.Body.Close()
28
29 fmt.Print("user signup: ")
30 fmt.Println(user)
31
32 //save the new project to mongodb
33 rUser := User{}
34 err = userCollection.Find(bson.M{"email": user.Email}).One(&rUser)
35 if err != nil {
36 //user not exists
37 err = userCollection.Insert(user) //TODO find a way to get the object result when inserting in one line, without need of the two mgo petitions
38 err = userCollection.Find(bson.M{"email": user.Email}).One(&user)
39 } else {
40 //user exists
41 fmt.Fprintln(w, "User already registered")
42 return
43 }
44
45 jResp, err := json.Marshal(user)
46 if err != nil {
47 panic(err)
48 }
49 fmt.Fprintln(w, string(jResp))
50}
51
52func Login(w http.ResponseWriter, r *http.Request) {
53 //ipFilter(w, r)
54
55 decoder := json.NewDecoder(r.Body)
56 var user User
57 err := decoder.Decode(&user)
58 if err != nil {
59 panic(err)
60 }
61 defer r.Body.Close()
62
63 fmt.Print("user login: ")
64 fmt.Println(user)
65 token, err := newToken()
66 check(err)
67 user.Token = token
68
69 //save the new project to mongodb
70 rUser := User{}
71 err = userCollection.Find(bson.M{"email": user.Email}).One(&rUser)
72 if err != nil {
73 } else {
74 //user exists, update with the token
75 err = userCollection.Update(bson.M{"_id": rUser.Id}, user)
76 check(err)
77 }
78 //generate the token
79 //add the token to the user
80 //save the user with the new token
81
82 jResp, err := json.Marshal(user)
83 if err != nil {
84 panic(err)
85 }
86 fmt.Fprintln(w, string(jResp))
87}
88
89type Sign struct {
90 M string `json:"m"`
91 C string `json:"c"`
92}
93
94func BlindSign(w http.ResponseWriter, r *http.Request) {
95 //ipFilter(w, r)
96
97 decoder := json.NewDecoder(r.Body)
98 var user User
99 err := decoder.Decode(&user)
100 if err != nil {
101 panic(err)
102 }
103 defer r.Body.Close()
104
105 jResp, err := json.Marshal(user)
106 if err != nil {
107 panic(err)
108 }
109 fmt.Fprintln(w, string(jResp))
110}
111func VerifySign(w http.ResponseWriter, r *http.Request) {
112 //ipFilter(w, r)
113
114 decoder := json.NewDecoder(r.Body)
115 var user User
116 err := decoder.Decode(&user)
117 if err != nil {
118 panic(err)
119 }
120 defer r.Body.Close()
121
122 jResp, err := json.Marshal(user)
123 if err != nil {
124 panic(err)
125 }
126 fmt.Fprintln(w, string(jResp))
127}