summaryrefslogtreecommitdiff
path: root/conf/main.go
blob: dcd9737b6286fcfc82e97e5d5768b82251d4a898 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package main

import (
	"os"
	"fmt"
	"log"
	"flag"
	db "sanine.net/git/phlox/db"
)


var p *db.Phlox


type Params struct {
	DbFilename string
}
var params Params


type Command struct {
	Set bool
	Value int
	Flag string
	Usage string
	Invoke func()
}


func RegisterCommand(val int, cmd *Command) {
	cmd.Value = val
	flag.BoolVar(&(*cmd).Set, cmd.Flag, false, cmd.Usage)
}


func OpenDb() {
	err := p.Open(params.DbFilename)
	if err != nil { log.Fatal(err) }
}


func main() {
	p = &db.Phlox{}

	cmds := map[int]*Command{
		1: Create(),
		2: SchemaVersion(),

		3: CreateUser(),
		4: DeleteUser(),
		5: UpdatePassword(),
		6: ListUsers(),
	}

	for val, cmd := range cmds {
		RegisterCommand(val, cmd)
	}

	flag.StringVar(&params.DbFilename, "db", "phlox.conf", "select the db file to operate on")
	flag.Parse()

	for _, cmd := range cmds {
		if cmd.Set { cmd.Invoke(); os.Exit(0); }
	}

	log.Fatal("no command specified!")
}


func Create() *Command {
	return &Command{
		Flag: "create",
		Usage: "create a new database",
		Invoke: func() {
			err := p.Create(params.DbFilename)
			if err != nil {
				log.Fatal(err)
			}
			fmt.Printf("created database %v\n", params.DbFilename)
		},
	}
}


func SchemaVersion() *Command {
	return &Command{
		Flag: "schema-version",
		Usage: "get the schema version",
		Invoke: func() {
			err := p.Open(params.DbFilename)
			if err != nil { log.Fatal(err) }
			version, err := p.GetSchemaVersion()
			if err != nil { log.Fatal(err) }
			fmt.Printf("schema version: %v\n", version)
		},
	}
}