/
router.go
127 lines (103 loc) · 5.62 KB
/
router.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
package router
import (
"net/http"
"github.com/gorilla/mux"
"github.com/urfave/negroni"
"github.com/pass-wall/passwall-server/internal/api"
"github.com/pass-wall/passwall-server/internal/storage"
)
// Router ...
type Router struct {
router *mux.Router
store storage.Store
}
// New ...
func New(s storage.Store) *Router {
r := &Router{
router: mux.NewRouter(),
store: s,
}
r.initRoutes()
return r
}
// ServeHTTP ...
func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
r.router.ServeHTTP(w, req)
}
func (r *Router) initRoutes() {
// API Router Group
apiRouter := mux.NewRouter().PathPrefix("/api").Subrouter()
// Login endpoints
apiRouter.HandleFunc("/logins", api.FindAllLogins(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/logins", api.CreateLogin(r.store)).Methods(http.MethodPost)
apiRouter.HandleFunc("/logins/{id:[0-9]+}", api.FindLoginsByID(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/logins/{id:[0-9]+}", api.UpdateLogin(r.store)).Methods(http.MethodPut)
apiRouter.HandleFunc("/logins/{id:[0-9]+}", api.DeleteLogin(r.store)).Methods(http.MethodDelete)
// Bank Account endpoints
apiRouter.HandleFunc("/bank-accounts", api.FindAllBankAccounts(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/bank-accounts", api.CreateBankAccount(r.store)).Methods(http.MethodPost)
apiRouter.HandleFunc("/bank-accounts/{id:[0-9]+}", api.FindBankAccountByID(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/bank-accounts/{id:[0-9]+}", api.UpdateBankAccount(r.store)).Methods(http.MethodPut)
apiRouter.HandleFunc("/bank-accounts/{id:[0-9]+}", api.DeleteBankAccount(r.store)).Methods(http.MethodDelete)
// Credit Card endpoints
apiRouter.HandleFunc("/credit-cards", api.FindAllCreditCards(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/credit-cards", api.CreateCreditCard(r.store)).Methods(http.MethodPost)
apiRouter.HandleFunc("/credit-cards/{id:[0-9]+}", api.FindCreditCardByID(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/credit-cards/{id:[0-9]+}", api.UpdateCreditCard(r.store)).Methods(http.MethodPut)
apiRouter.HandleFunc("/credit-cards/{id:[0-9]+}", api.DeleteCreditCard(r.store)).Methods(http.MethodDelete)
// Note endpoints
apiRouter.HandleFunc("/notes", api.FindAllNotes(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/notes", api.CreateNote(r.store)).Methods(http.MethodPost)
apiRouter.HandleFunc("/notes/{id:[0-9]+}", api.FindNoteByID(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/notes/{id:[0-9]+}", api.UpdateNote(r.store)).Methods(http.MethodPut)
apiRouter.HandleFunc("/notes/{id:[0-9]+}", api.DeleteNote(r.store)).Methods(http.MethodDelete)
// Email endpoints
apiRouter.HandleFunc("/emails", api.FindAllEmails(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/emails", api.CreateEmail(r.store)).Methods(http.MethodPost)
apiRouter.HandleFunc("/emails/{id:[0-9]+}", api.FindEmailByID(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/emails/{id:[0-9]+}", api.UpdateEmail(r.store)).Methods(http.MethodPut)
apiRouter.HandleFunc("/emails/{id:[0-9]+}", api.DeleteEmail(r.store)).Methods(http.MethodDelete)
// User endpoints
apiRouter.HandleFunc("/users", api.FindAllUsers(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/users", api.CreateUser(r.store)).Methods(http.MethodPost)
apiRouter.HandleFunc("/users/{id:[0-9]+}", api.FindUserByID(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/users/{id:[0-9]+}", api.UpdateUser(r.store)).Methods(http.MethodPut)
apiRouter.HandleFunc("/users/{id:[0-9]+}", api.DeleteUser(r.store)).Methods(http.MethodDelete)
apiRouter.HandleFunc("/system/generate-password", api.GeneratePassword).Methods(http.MethodPost)
// These endpoints designed just for logins. Now we have extra types like bank accounts
// apiRouter.HandleFunc("/system/check-password", api.FindSamePassword(r.store)).Methods(http.MethodPost)
// apiRouter.HandleFunc("/system/backup", api.Backup(r.store)).Methods(http.MethodPost)
// apiRouter.HandleFunc("/system/backup", api.ListBackup).Methods(http.MethodGet)
// apiRouter.HandleFunc("/system/restore", api.Restore(r.store)).Methods(http.MethodPost)
// apiRouter.HandleFunc("/system/import", api.Import(r.store)).Methods(http.MethodPost)
// apiRouter.HandleFunc("/system/export", api.Export(r.store)).Methods(http.MethodPost)
apiRouter.HandleFunc("/system/languages", api.Languages(r.store)).Methods(http.MethodGet)
apiRouter.HandleFunc("/system/languages/{lang}", api.Language(r.store)).Methods(http.MethodGet)
// Auth endpoints
authRouter := mux.NewRouter().PathPrefix("/auth").Subrouter()
authRouter.HandleFunc("/signup", api.Signup(r.store)).Methods(http.MethodPost)
authRouter.HandleFunc("/signin", api.Signin(r.store)).Methods(http.MethodPost)
authRouter.HandleFunc("/refresh", api.RefreshToken(r.store)).Methods(http.MethodPost)
authRouter.HandleFunc("/check", api.CheckToken(r.store)).Methods(http.MethodPost)
// Check Updated
webRouter := mux.NewRouter().PathPrefix("/web").Subrouter()
webRouter.HandleFunc("/check-update/{product:[0-9]+}", api.CheckUpdate).Methods(http.MethodGet)
n := negroni.Classic()
n.Use(negroni.HandlerFunc(CORS))
n.Use(negroni.HandlerFunc(Secure))
r.router.PathPrefix("/web").Handler(n.With(
LimitHandler(),
negroni.Wrap(webRouter),
))
r.router.PathPrefix("/api").Handler(n.With(
Auth(r.store),
negroni.Wrap(apiRouter),
))
r.router.PathPrefix("/auth").Handler(n.With(
LimitHandler(),
negroni.Wrap(authRouter),
))
// Insecure endpoints
r.router.HandleFunc("/health", api.HealthCheck(r.store)).Methods(http.MethodGet)
// r.router.HandleFunc("/check-update/{product:[0-9]+}", api.CheckUpdate).Methods(http.MethodGet)
}