This repository has been archived by the owner on Oct 18, 2021. It is now read-only.
/
main.go
127 lines (109 loc) · 3.08 KB
/
main.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
Copyright (C) 2019 Steven Mirabito (smirabito@csh.rit.edu)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package main
import (
"fmt"
"github.com/ComputerScienceHouse/gatekeeper/cmd/gkadm/tasks"
"github.com/ComputerScienceHouse/gatekeeper/device"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
"github.com/labstack/gommon/log"
"github.com/spf13/cobra"
"net/http"
"os"
"runtime"
)
var (
version = "devel"
buildDate string
commitHash string
)
func serve() {
e := echo.New()
// Configuration
e.Logger.SetLevel(log.INFO)
e.HideBanner = true
e.Logger.SetHeader("[${time_rfc3339}] [${level}]")
// Middleware
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
Format: "[${time_rfc3339}] ${method} ${uri} (${status})\n",
}))
e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
AllowOrigins: []string{
"https://gatekeeper.csh.rit.edu",
"http://localhost:3000",
},
AllowMethods: []string{
http.MethodGet,
http.MethodHead,
http.MethodPut,
http.MethodPatch,
http.MethodPost,
http.MethodDelete,
},
}))
/*
Routes
*/
e.GET("/", func(c echo.Context) error {
return c.HTML(http.StatusOK, "<h2>Gatekeeper Admin Helper</h2>\n<p>Please visit your instance's admin dashboard to interact with this application.</p>")
})
e.GET("/healthz", func(c echo.Context) error {
return c.String(http.StatusOK, "ok")
})
e.GET("/healthz/nfc", func(c echo.Context) error {
if device.NFCHealthz() {
return c.String(http.StatusOK, "ok")
} else {
return c.NoContent(http.StatusServiceUnavailable)
}
})
e.GET("/tasks", tasks.GetTasks)
e.GET("/tasks/:id", tasks.GetTask)
e.GET("/tasks/:id/log", tasks.GetTaskLog)
e.POST("/issue", tasks.CreateIssueTask)
e.POST("/verify", tasks.CreateVerifyTask)
// Start the server
e.Logger.Fatal(e.Start(":42069"))
}
func main() {
var rootCmd = &cobra.Command{
Use: "gkadm",
Short: "Gatekeeper Admin",
Long: `The Gatekeeper Admin Server`,
Run: func(cmd *cobra.Command, args []string) {
serve()
},
}
var versionCmd = &cobra.Command{
Use: "version",
Short: "Show version information",
Run: func(cmd *cobra.Command, args []string) {
fmt.Printf(`gkadm:
version : %s
build date : %s
git hash : %s
go version : %s
go compiler : %s
platform : %s/%s
`, version, buildDate, commitHash,
runtime.Version(), runtime.Compiler, runtime.GOOS, runtime.GOARCH)
},
}
rootCmd.AddCommand(versionCmd)
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}