1
1
package http
2
2
3
3
import (
4
+ "compress/flate"
4
5
"io/fs"
5
- "net/http"
6
6
7
7
"github.com/ItsNotGoodName/smtpbridge/internal/core"
8
+ "github.com/ItsNotGoodName/smtpbridge/pkg/chiext"
8
9
"github.com/ItsNotGoodName/smtpbridge/web"
9
10
"github.com/ItsNotGoodName/smtpbridge/web/pages"
10
11
"github.com/ItsNotGoodName/smtpbridge/web/routes"
11
- "github.com/ItsNotGoodName/smtpbridge/web/sessions "
12
+ "github.com/ItsNotGoodName/smtpbridge/web/session "
12
13
"github.com/go-chi/chi/v5"
13
14
"github.com/go-chi/chi/v5/middleware"
14
15
"github.com/gorilla/csrf"
16
+ "github.com/gorilla/sessions"
15
17
)
16
18
17
19
const paramID = "{id}"
@@ -25,20 +27,27 @@ func NewRouter(ct pages.Controller, app core.App, fileFS fs.FS, csrfSecret []byt
25
27
r .Use (middleware .Recoverer )
26
28
r .Use (csrf .Protect (csrfSecret , csrf .Secure (false ), csrf .Path ("/" )))
27
29
28
- mountWebFS (r , web .FS )
30
+ r .Group (func (r chi.Router ) {
31
+ r .Use (web .CacheControl )
32
+ r .Use (middleware .NewCompressor (flate .DefaultCompression , "application/javascript" , "text/css" ).Handler )
33
+
34
+ chiext .MountFS (r , web .FS )
35
+ })
29
36
30
- // Login
37
+ // Unauthorized
31
38
r .Group (func (r chi.Router ) {
32
- r .Use (sessions .AuthRestrict (app , ss ))
39
+ r .Use (session .AuthRestrict (app , ss ))
33
40
41
+ // Login
34
42
r .Get (routes .Login ().String (),
35
43
pages .LoginView (ct , app ))
36
44
r .Post (routes .Login ().String (),
37
45
pages .Login (ct , app , ss ))
38
46
})
39
47
48
+ // Authorized
40
49
r .Group (func (r chi.Router ) {
41
- r .Use (sessions .AuthRequire (app , ss ))
50
+ r .Use (session .AuthRequire (app , ss ))
42
51
43
52
// Logout
44
53
r .Delete (routes .Logout ().String (),
@@ -134,37 +143,3 @@ func NewRouter(ct pages.Controller, app core.App, fileFS fs.FS, csrfSecret []byt
134
143
135
144
return r
136
145
}
137
-
138
- func mountWebFS (r chi.Router , f fs.FS ) error {
139
- fsHandler := http .StripPrefix ("/" , http .FileServer (http .FS (f )))
140
-
141
- normalFS := func (w http.ResponseWriter , r * http.Request ) {
142
- w .Header ().Set ("Cache-Control" , "max-age=3600" )
143
- fsHandler .ServeHTTP (w , r )
144
- }
145
-
146
- // Files in assets have a hash
147
- assetsFS := func (w http.ResponseWriter , r * http.Request ) {
148
- w .Header ().Set ("Cache-Control" , "max-age=31536000,immutable" )
149
- fsHandler .ServeHTTP (w , r )
150
- }
151
-
152
- if files , err := fs .ReadDir (f , "." ); err == nil {
153
- for _ , f := range files {
154
- name := f .Name ()
155
- if f .IsDir () {
156
- if name == "assets" {
157
- r .Get ("/" + name + "/*" , assetsFS )
158
- } else {
159
- r .Get ("/" + name + "/*" , normalFS )
160
- }
161
- } else {
162
- r .Get ("/" + name , normalFS )
163
- }
164
- }
165
- } else if err != fs .ErrNotExist {
166
- return err
167
- }
168
-
169
- return nil
170
- }
0 commit comments