main.go 2.52 KB
Newer Older
1 2 3 4
package main

import (
	"dfss"
5
	"dfss/dfssp/authority"
6
	"dfss/dfssp/server"
7
	"dfss/net"
8 9
	"flag"
	"fmt"
10
	"os"
11 12 13 14
	"runtime"
)

var (
15 16 17
	verbose                                            bool
	path, country, org, unit, cn, port, address, dbURI string
	keySize, validity                                  int
18 19 20 21 22 23
)

func init() {

	flag.BoolVar(&verbose, "v", false, "Print verbose messages")

24 25 26
	flag.StringVar(&port, "p", "9000", "Default port listening")
	flag.StringVar(&address, "a", "0.0.0.0", "Default address to bind for listening")

27
	flag.StringVar(&path, "path", authority.GetHomeDir(), "Path for the platform's private key and root certificate")
Caro Axel's avatar
Caro Axel committed
28 29 30 31 32 33 34 35
	flag.StringVar(&country, "country", "France", "Country for the root certificate")
	flag.StringVar(&org, "org", "DFSS", "Organization for the root certificate")
	flag.StringVar(&unit, "unit", "INSA Rennes", "Organizational unit for the root certificate")
	flag.StringVar(&cn, "cn", "dfssp", "Common name for the root certificate")

	flag.IntVar(&keySize, "keySize", 512, "Encoding size for the private key")
	flag.IntVar(&validity, "validity", 21, "Root certificate's validity duration (days)")

36
	flag.StringVar(&dbURI, "db", "mongodb://localhost/dfss", "Name of the environment variable containing the server url in standard MongoDB format")
Caro Axel's avatar
Caro Axel committed
37

38 39 40 41 42
	flag.Usage = func() {
		fmt.Println("DFSS platform v" + dfss.Version)
		fmt.Println("Users and contracts manager")

		fmt.Println("\nUsage:")
43
		fmt.Println("  dfssp [flags] command")
44 45

		fmt.Println("\nThe commands are:")
Caro Axel's avatar
Caro Axel committed
46 47
		fmt.Println("  init     [cn, country, keySize, org, path, unit, validity]")
		fmt.Println("           create and save the platform's private key and root certificate")
48
		fmt.Println("  start    [path, db, a, p]")
Caro Axel's avatar
Caro Axel committed
49
		fmt.Println("           start the platform after loading its private key and root certificate")
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
		fmt.Println("  help     print this help")
		fmt.Println("  version  print dfss client version")

		fmt.Println("\nFlags:")
		flag.PrintDefaults()

		fmt.Println()
	}
}

func main() {
	flag.Parse()
	command := flag.Arg(0)

	switch command {
	case "version":
		fmt.Println("v"+dfss.Version, runtime.GOOS, runtime.GOARCH)
Caro Axel's avatar
Caro Axel committed
67
	case "init":
68
		err := authority.Initialize(keySize, validity, country, org, unit, cn, path)
Caro Axel's avatar
Caro Axel committed
69
		if err != nil {
70 71
			fmt.Println("An error occured during the initialization operation:", err)
			os.Exit(1)
Caro Axel's avatar
Caro Axel committed
72 73
		}
	case "start":
74
		srv := server.GetServer(path, dbURI, verbose)
75
		fmt.Println("Listening on " + address + ":" + port)
76
		err := net.Listen(address+":"+port, srv)
77
		if err != nil {
Caro Axel's avatar
Caro Axel committed
78 79
			fmt.Println(err)
		}
80 81 82 83
	default:
		flag.Usage()
	}
}