arnaucube
arnaucube/blockchainIDsystemPublic Self-hosted repository
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}