-
Notifications
You must be signed in to change notification settings - Fork 18
/
gochan.go
executable file
·90 lines (83 loc) · 2.13 KB
/
gochan.go
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
package main
import (
"flag"
"fmt"
"os"
"os/signal"
"strings"
"syscall"
"time"
)
var versionStr string
var buildtimeString string // set with build command, format: YRMMDD.HHMM
func main() {
defer func() {
if db != nil {
println(0, "Cleaning up")
execSQL("DROP TABLE " + config.DBprefix + "sessions")
db.Close()
}
}()
initConfig()
initMinifier()
printf(0, "Starting gochan v%s.%s, using verbosity level %d\n", versionStr, buildtimeString, config.Verbosity)
connectToSQLServer()
parseCommandLine()
println(0, "Loading and parsing templates...")
if err := initTemplates("all"); err != nil {
handleError(0, customError(err))
os.Exit(2)
}
println(1, buildJS())
initCaptcha()
tempCleanerTicker = time.NewTicker(time.Minute * 5)
go tempCleaner()
sc := make(chan os.Signal, 1)
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt)
go func() {
initServer()
}()
<-sc
}
func parseCommandLine() {
var newstaff string
var delstaff string
var rank int
var err error
flag.StringVar(&newstaff, "newstaff", "", "<newusername>:<newpassword>")
flag.StringVar(&delstaff, "delstaff", "", "<username>")
flag.IntVar(&rank, "rank", 0, "New staff member rank, to be used with -newstaff or -delstaff")
flag.Parse()
if newstaff != "" {
arr := strings.Split(newstaff, ":")
if len(arr) < 2 || delstaff != "" {
flag.Usage()
os.Exit(2)
}
printf(0, "Creating new staff: '%s', with password: '%s' and rank: %d\n", arr[0], arr[1], rank)
if err = newStaff(arr[0], arr[1], rank); err != nil {
handleError(0, err.Error())
os.Exit(2)
}
os.Exit(0)
}
if delstaff != "" {
if newstaff != "" {
flag.Usage()
os.Exit(2)
}
printf(0, "Are you sure you want to delete the staff account '%s'?[y/N]: ", delstaff)
var answer string
fmt.Scanln(&answer)
answer = strings.ToLower(answer)
if answer == "y" || answer == "yes" {
if err = deleteStaff(delstaff); err != nil {
printf(0, "Error deleting '%s': %s\n", delstaff, err.Error())
os.Exit(2)
}
} else {
println(0, "Not deleting.")
}
os.Exit(0)
}
}