mirror of
https://github.com/arnaucube/blockchainIDsystem.git
synced 2026-02-07 11:06:41 +01:00
added serverIDsigner. At this moment performs: signup, login, blindsign
This commit is contained in:
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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"}'
|
||||
@@ -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.")
|
||||
}
|
||||
}
|
||||
@@ -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))
|
||||
}
|
||||
Reference in New Issue
Block a user