blockchainIDsystem/serverCA/main.go
serverCA/main.goRaw
1package main
2
3import (
4 "log"
5 "net"
6 "net/http"
7 "time"
8
9 mgo "gopkg.in/mgo.v2"
10
11 "github.com/fatih/color"
12 "github.com/gorilla/handlers"
13)
14
15type Peer struct {
16 ID string `json:"id"` //in the future, this will be the peer hash
17 IP string `json:"ip"`
18 Port string `json:"port"`
19 RESTPort string `json:"restport"`
20 Role string `json:"role"` //client or server
21 Conn net.Conn `json:"conn"`
22}
23type PeersList struct {
24 PeerID string
25 Peers []Peer `json:"peerslist"`
26 Date time.Time `json:"date"`
27}
28
29var peersList PeersList
30
31var userCollection *mgo.Collection
32
33func main() {
34 color.Blue("Starting CA")
35
36 //read configuration file
37 readConfig("config.json")
38 reconstructBlockchainFromBlock("http://"+config.IP+":"+config.ServerRESTPort, "")
39
40 initializeToken()
41
42 //mongodb
43 session, err := getSession()
44 check(err)
45 userCollection = getCollection(session, "users")
46
47 //run thw webserver
48 go webserver()
49
50 //run API
51 log.Println("api server running")
52 log.Print("port: ")
53 log.Println(config.Port)
54 router := NewRouter()
55 headersOk := handlers.AllowedHeaders([]string{"X-Requested-With", "Access-Control-Allow-Origin"})
56 originsOk := handlers.AllowedOrigins([]string{"*"})
57 methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
58 log.Fatal(http.ListenAndServe(":"+config.Port, handlers.CORS(originsOk, headersOk, methodsOk)(router)))
59}
60
61func webserver() {
62 log.Println("webserver in port " + config.WebServerPort)
63 http.Handle("/", http.FileServer(http.Dir("./webapp")))
64 http.ListenAndServe(":"+config.WebServerPort, nil)
65}