You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

96 lines
2.0 KiB

package main
import (
"encoding/json"
"fmt"
"net/http"
"gopkg.in/mgo.v2/bson"
)
type User struct {
Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
Username string `json:"username"`
Email string `json:"email"`
Password string `json:"password"`
Token string `json:"token"`
}
func Index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "clientApp")
}
func Signup(w http.ResponseWriter, r *http.Request) {
decoder := json.NewDecoder(r.Body)
var user User
err := decoder.Decode(&user)
if err != nil {
panic(err)
}
defer r.Body.Close()
fmt.Print("user signup: ")
fmt.Println(user.Username)
//save the new project to mongodb
rUser := User{}
err = userCollection.Find(bson.M{"email": user.Email}).One(&rUser)
if err != nil {
//user not exists
err = userCollection.Insert(user)
err = userCollection.Find(bson.M{"email": user.Email}).One(&user)
} else {
//user exists
http.Error(w, "user already registered", http.StatusConflict)
return
}
fmt.Println(user.Username)
jResp, err := json.Marshal(user)
if err != nil {
panic(err)
}
fmt.Fprintln(w, string(jResp))
}
func Login(w http.ResponseWriter, r *http.Request) {
decoder := json.NewDecoder(r.Body)
var user User
err := decoder.Decode(&user)
if err != nil {
panic(err)
}
defer r.Body.Close()
//TODO check if the user password exists in the database
fmt.Print("user login: ")
fmt.Println(user)
//save the new project to mongodb
rUser := User{}
err = userCollection.Find(bson.M{"email": user.Email}).One(&rUser)
if err != nil {
http.Error(w, "error login, email not foun", http.StatusConflict)
return
}
//user exists, check password
if user.Password != rUser.Password {
http.Error(w, "error login, password not match", http.StatusConflict)
return
}
token, err := newToken()
check(err)
rUser.Token = token
//update with the token
err = userCollection.Update(bson.M{"_id": rUser.Id}, rUser)
check(err)
jResp, err := json.Marshal(rUser)
if err != nil {
panic(err)
}
fmt.Fprintln(w, string(jResp))
}