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

import (
	"dfss"
5
	"dfss/dfssp/authority"
Caro Axel's avatar
Caro Axel committed
6
	"dfss/mgdb"
7 8 9 10 11 12
	"flag"
	"fmt"
	"runtime"
)

var (
Caro Axel's avatar
Caro Axel committed
13
	verbose bool
Caro Axel's avatar
Caro Axel committed
14
	// Private key and certificate
Caro Axel's avatar
Caro Axel committed
15 16
	path, country, org, unit, cn string
	keySize, validity            int
17
	pid                          *authority.PlatformID
Caro Axel's avatar
Caro Axel committed
18
	// MongoDB connection
19 20
	dbURI     string
	dbManager *mgdb.MongoManager
21 22 23 24 25 26
)

func init() {

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

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]")
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 70 71 72 73 74
		if err != nil {
			fmt.Println("An error occured during the initialization operation")
			fmt.Println(err)
			panic(err)
		}
	case "start":
75
		pid, err := authority.Start(path)
Caro Axel's avatar
Caro Axel committed
76
		if err != nil {
Caro Axel's avatar
Caro Axel committed
77
			fmt.Println("An error occured during the private key and root certificate retrieval")
Caro Axel's avatar
Caro Axel committed
78 79 80 81 82
			fmt.Println(err)
			panic(err)
		}
		// TODO: use pid
		_ = pid
Caro Axel's avatar
Caro Axel committed
83

84
		dbManager, err := mgdb.NewManager(dbURI)
Caro Axel's avatar
Caro Axel committed
85 86 87 88 89 90 91
		if err != nil {
			fmt.Println("An error occured during the connection to Mongo DB")
			fmt.Println(err)
			panic(err)
		}
		// TODO: use dbManager
		_ = dbManager
92 93 94 95
	default:
		flag.Usage()
	}
}