added serverIDsigner. At this moment performs: signup, login, blindsign

This commit is contained in:
arnaucode
2017-12-27 16:28:54 +01:00
parent 08e3915994
commit 92462dc3db
24 changed files with 553 additions and 83 deletions

View File

@@ -4,9 +4,5 @@
"serverip": "127.0.0.1",
"serverport": "3000",
"serverrestport": "3002",
"webserverport": "3080",
"mongodb": {
"ip": "127.0.0.1:27017",
"database": "serverCA"
}
"webserverport": "3080"
}

View File

@@ -6,8 +6,6 @@ import (
"net/http"
"time"
mgo "gopkg.in/mgo.v2"
"github.com/fatih/color"
"github.com/gorilla/handlers"
)
@@ -28,8 +26,6 @@ type PeersList struct {
var peersList PeersList
var userCollection *mgo.Collection
func main() {
color.Blue("Starting CA")
@@ -37,13 +33,6 @@ func main() {
readConfig("config.json")
reconstructBlockchainFromBlock("http://"+config.IP+":"+config.ServerRESTPort, "")
initializeToken()
//mongodb
session, err := getSession()
check(err)
userCollection = getCollection(session, "users")
//run thw webserver
go webserver()

View File

@@ -1,26 +0,0 @@
package main
import (
mgo "gopkg.in/mgo.v2"
)
func getSession() (*mgo.Session, error) {
session, err := mgo.Dial("mongodb://" + config.Mongodb.IP)
if err != nil {
panic(err)
}
//defer session.Close()
// Optional. Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)
// Optional. Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)
return session, err
}
func getCollection(session *mgo.Session, collection string) *mgo.Collection {
c := session.DB(config.Mongodb.Database).C(collection)
return c
}

View File

@@ -7,17 +7,12 @@ import (
//Config reads the config
type Config struct {
IP string `json:"ip"`
Port string `json:"port"`
ServerIP string `json:"serverip"`
ServerPort string `json:"serverport"`
ServerRESTPort string `json:"serverrestport"`
WebServerPort string `json:"webserverport"`
Mongodb MongoConfig `json:"mongodb"`
}
type MongoConfig struct {
IP string `json:"ip"`
Database string `json:"database"`
IP string `json:"ip"`
Port string `json:"port"`
ServerIP string `json:"serverip"`
ServerPort string `json:"serverport"`
ServerRESTPort string `json:"serverrestport"`
WebServerPort string `json:"webserverport"`
}
var config Config

View File

@@ -21,35 +21,4 @@ var routes = Routes{
"/blockchain",
GetBlockchain,
},
/*
POST /signup
POST /loginuser
POST /blindsign
POST /verifysign
*/
Route{
"Signup",
"POST",
"/signup",
Signup,
},
Route{
"Login",
"POST",
"/login",
Login,
},
Route{
"BlindSign",
"POST",
"/blindsign",
BlindSign,
},
Route{
"VerifySign",
"POST",
"/verifysign",
VerifySign,
},
}

View File

@@ -1,3 +0,0 @@
curl -X POST http://127.0.0.1:3030/signup -d '{"email": "user1@e.com", "password": "user1"}'
curl -X POST http://127.0.0.1:3030/login -d '{"email": "user1@e.com", "password": "user1"}'

View File

@@ -1,49 +0,0 @@
package main
import (
"fmt"
"time"
jwt "github.com/dgrijalva/jwt-go"
)
const (
signingKey = "this is the secret signing key"
)
var createdToken string
func initializeToken() {
var err error
createdToken, err = newToken()
if err != nil {
fmt.Println("Creating token failed")
}
}
func newToken() (string, error) {
signingKeyB := []byte(signingKey)
// Create the token
token := jwt.New(jwt.SigningMethodHS256)
// Set some claims
claims := make(jwt.MapClaims)
claims["foo"] = "bar"
claims["exp"] = time.Now().Add(time.Hour * 72).Unix()
token.Claims = claims
// Sign and get the complete encoded token as a string
tokenString, err := token.SignedString(signingKeyB)
return tokenString, err
}
func parseToken(myToken string, myKey string) {
token, err := jwt.Parse(myToken, func(token *jwt.Token) (interface{}, error) {
return []byte(myKey), nil
})
if err == nil && token.Valid {
fmt.Println("Your token is valid. I like your style.")
} else {
fmt.Println("This token is terrible! I cannot accept this.")
}
}

View File

@@ -1,127 +0,0 @@
package main
import (
"encoding/json"
"fmt"
"net/http"
"gopkg.in/mgo.v2/bson"
)
type User struct {
Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
Email string `json:"email"`
Password string `json:"password"`
Token string `json:"token"`
}
func Signup(w http.ResponseWriter, r *http.Request) {
//ipFilter(w, r)
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)
//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) //TODO find a way to get the object result when inserting in one line, without need of the two mgo petitions
err = userCollection.Find(bson.M{"email": user.Email}).One(&user)
} else {
//user exists
fmt.Fprintln(w, "User already registered")
return
}
jResp, err := json.Marshal(user)
if err != nil {
panic(err)
}
fmt.Fprintln(w, string(jResp))
}
func Login(w http.ResponseWriter, r *http.Request) {
//ipFilter(w, r)
decoder := json.NewDecoder(r.Body)
var user User
err := decoder.Decode(&user)
if err != nil {
panic(err)
}
defer r.Body.Close()
fmt.Print("user login: ")
fmt.Println(user)
token, err := newToken()
check(err)
user.Token = token
//save the new project to mongodb
rUser := User{}
err = userCollection.Find(bson.M{"email": user.Email}).One(&rUser)
if err != nil {
} else {
//user exists, update with the token
err = userCollection.Update(bson.M{"_id": rUser.Id}, user)
check(err)
}
//generate the token
//add the token to the user
//save the user with the new token
jResp, err := json.Marshal(user)
if err != nil {
panic(err)
}
fmt.Fprintln(w, string(jResp))
}
type Sign struct {
M string `json:"m"`
C string `json:"c"`
}
func BlindSign(w http.ResponseWriter, r *http.Request) {
//ipFilter(w, r)
decoder := json.NewDecoder(r.Body)
var user User
err := decoder.Decode(&user)
if err != nil {
panic(err)
}
defer r.Body.Close()
jResp, err := json.Marshal(user)
if err != nil {
panic(err)
}
fmt.Fprintln(w, string(jResp))
}
func VerifySign(w http.ResponseWriter, r *http.Request) {
//ipFilter(w, r)
decoder := json.NewDecoder(r.Body)
var user User
err := decoder.Decode(&user)
if err != nil {
panic(err)
}
defer r.Body.Close()
jResp, err := json.Marshal(user)
if err != nil {
panic(err)
}
fmt.Fprintln(w, string(jResp))
}