Skip to content

Commit 723dd97

Browse files
committed
[v3, assetServer] Use middlewares for runtime, caps and falgs instead of having the implementation in the assetserver
1 parent 65251cd commit 723dd97

File tree

4 files changed

+33
-45
lines changed

4 files changed

+33
-45
lines changed

v3/internal/assetserver/assetserver.go

+1-20
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ import (
1313
)
1414

1515
const (
16-
runtimePath = "/wails/runtime"
17-
capabilitiesPath = "/wails/capabilities"
18-
flagsPath = "/wails/flags"
19-
2016
webViewRequestHeaderWindowId = "x-wails-window-id"
2117
webViewRequestHeaderWindowName = "x-wails-window-name"
2218
)
@@ -107,35 +103,20 @@ func (a *AssetServer) serveHTTP(rw http.ResponseWriter, req *http.Request, userH
107103

108104
default:
109105
rw.WriteHeader(recorder.Code)
110-
111106
}
112-
return
113-
114-
case capabilitiesPath:
115-
var data = a.options.GetCapabilities()
116-
a.writeBlob(rw, path, data)
117-
118-
case flagsPath:
119-
var data = a.options.GetFlags()
120-
a.writeBlob(rw, path, data)
121-
122-
case runtimePath:
123-
a.options.RuntimeHandler.ServeHTTP(rw, req)
124-
return
125107

126108
default:
127109
// Check if this is a plugin script
128110
if script, ok := a.pluginScripts[path]; ok {
129111
a.writeBlob(rw, path, []byte(script))
130112
} else {
131113
userHandler.ServeHTTP(rw, req)
132-
return
133114
}
134115
}
135116
}
136117

137118
func (a *AssetServer) writeBlob(rw http.ResponseWriter, filename string, blob []byte) {
138-
err := serveFile(rw, filename, blob)
119+
err := ServeFile(rw, filename, blob)
139120
if err != nil {
140121
a.serveError(rw, err, "Unable to write content %s", filename)
141122
}

v3/internal/assetserver/common.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ var (
2626
assetServerLogger = struct{}{}
2727
)
2828

29-
func serveFile(rw http.ResponseWriter, filename string, blob []byte) error {
29+
func ServeFile(rw http.ResponseWriter, filename string, blob []byte) error {
3030
header := rw.Header()
3131
header.Set(HeaderContentLength, fmt.Sprintf("%d", len(blob)))
3232
if mimeType := header.Get(HeaderContentType); mimeType == "" {

v3/internal/assetserver/options.go

-9
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,6 @@ type Options struct {
2626

2727
// Logger is the logger used by the AssetServer. If not defined, no logging will be done.
2828
Logger *slog.Logger
29-
30-
// RuntimeHandler is the handler used for the runtime calls.
31-
RuntimeHandler http.Handler
32-
33-
// GetCapabilities returns the capabilities of the runtime
34-
GetCapabilities func() []byte
35-
36-
// GetFlags returns the application flags
37-
GetFlags func() []byte
3829
}
3930

4031
// Validate the options

v3/pkg/application/application.go

+31-15
Original file line numberDiff line numberDiff line change
@@ -76,22 +76,38 @@ func New(appOptions Options) *App {
7676

7777
result.Events = NewWailsEventProcessor(result.dispatchEventToWindows)
7878

79+
messageProc := NewMessageProcessor(result.Logger)
7980
opts := &assetserver.Options{
80-
Handler: appOptions.Assets.Handler,
81-
Middleware: assetserver.Middleware(appOptions.Assets.Middleware),
82-
Logger: result.Logger,
83-
RuntimeHandler: NewMessageProcessor(result.Logger),
84-
GetCapabilities: func() []byte {
85-
return globalApplication.capabilities.AsBytes()
86-
},
87-
GetFlags: func() []byte {
88-
updatedOptions := result.impl.GetFlags(appOptions)
89-
flags, err := json.Marshal(updatedOptions)
90-
if err != nil {
91-
log.Fatal("Invalid flags provided to application: ", err.Error())
92-
}
93-
return flags
94-
},
81+
Handler: appOptions.Assets.Handler,
82+
Middleware: assetserver.ChainMiddleware(
83+
func(next http.Handler) http.Handler {
84+
if m := appOptions.Assets.Middleware; m != nil {
85+
return m(next)
86+
}
87+
return next
88+
},
89+
func(next http.Handler) http.Handler {
90+
return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
91+
path := req.URL.Path
92+
switch path {
93+
case "/wails/runtime":
94+
messageProc.ServeHTTP(rw, req)
95+
case "/wails/capabilities":
96+
assetserver.ServeFile(rw, path, globalApplication.capabilities.AsBytes())
97+
case "/wails/flags":
98+
updatedOptions := result.impl.GetFlags(appOptions)
99+
flags, err := json.Marshal(updatedOptions)
100+
if err != nil {
101+
log.Fatal("Invalid flags provided to application: ", err.Error())
102+
}
103+
assetserver.ServeFile(rw, path, flags)
104+
default:
105+
next.ServeHTTP(rw, req)
106+
}
107+
})
108+
},
109+
),
110+
Logger: result.Logger,
95111
}
96112

97113
if appOptions.Assets.DisableLogging {

0 commit comments

Comments
 (0)