ref: 90df0ec3e9f20610f08332bc08f8df9d1cfdf090
parent: 2943c008d441d85701adc3e7c17b3b2ade061711
author: Philip Silva <philip.silva@protonmail.com>
date: Sat Sep 10 08:28:28 EDT 2022
url file, check cors header in response
--- a/browser/experimental_test.go
+++ b/browser/experimental_test.go
@@ -71,7 +71,7 @@
`throw 'fail';`,
}
fs.SetDOM(nt)
- fs.Update(h, nil, scripts)
+ fs.Update("", h, nil, scripts)js.Start()
h, _, err = processJS2()
if err != nil {--- a/browser/fs/fs.go
+++ b/browser/fs/fs.go
@@ -23,9 +23,10 @@
oFS *fs.FS
un string
gn string
+ url string
+ htm string
cssDir *fs.StaticDir
jsDir *fs.StaticDir
- htm string
rt *Node
Client *http.Client
Fetcher opossum.Fetcher
@@ -46,24 +47,40 @@
rt.nt = d
}
+func userGroup() (un, gn string, err error) {+ u, err := user.Current()
+ if err != nil {+ return "", "", fmt.Errorf("current user: %w", err)+ }
+ un = u.Username
+ gn, err = opossum.Group(u)
+ if err != nil {+ return "", "", fmt.Errorf("group: %v", err)+ }
+ return
+}
+
func Srv9p() {c.L.Lock()
var root *fs.StaticDir
- u, err := user.Current()
+ un, gn, err := userGroup()
if err != nil { log.Errorf("get user: %v", err)c.L.Unlock()
return
}
- un = u.Username
- gn, err = opossum.Group(u)
- if err != nil {- log.Errorf("get group: %v", err)- c.L.Unlock()
- return
- }
oFS, root = fs.NewFS(un, gn, 0500)
+ u := fs.NewDynamicFile(
+ oFS.NewStat("url", un, gn, 0400),+ func() []byte {+ mu.RLock()
+ defer mu.RUnlock()
+
+ return []byte(url)
+ },
+ )
+ root.AddChild(u)
h := fs.NewDynamicFile(
oFS.NewStat("html", un, gn, 0400), func() []byte {@@ -179,9 +196,6 @@
url.Host = req.Host
if h := url.Host; h == "" {url.Host = Fetcher.Origin().Host
- } else if !allowed(req.Header, h, Fetcher.Origin().Host) {- log.Errorf("no cross-origin request: %v", h)- return
}
url.Scheme = "https"
proxyReq, err := http.NewRequest(req.Method, url.String(), req.Body)
@@ -200,6 +214,10 @@
log.Errorf("do request: %v", err)return
}
+ if h := url.Host; !allowed(resp.Header, h, Fetcher.Origin().Host) {+ log.Errorf("no cross-origin request: %v", h)+ return
+ }
if err := resp.Write(conn); err != nil { log.Errorf("write response: %v", err)return
@@ -206,7 +224,7 @@
}
}
-func Update(html string, css []string, js []string) {+func Update(uri, html string, css []string, js []string) {c.L.Lock()
defer c.L.Unlock()
@@ -214,6 +232,7 @@
c.Wait()
}
+ url = uri
htm = html
if cssDir != nil { for name := range cssDir.Children() {--- a/browser/website.go
+++ b/browser/website.go
@@ -100,7 +100,7 @@
downloads[src] = string(buf)
}
scripts = js.Scripts(nt, downloads)
- fs.Update(htm, csss, scripts)
+ fs.Update(f.Origin().String(), htm, csss, scripts)
fs.SetDOM(nt)
log.Infof("JS pipeline start")js.Stop()
@@ -157,7 +157,7 @@
w.UI = scroller
}
- fs.Update(htm, csss, scripts)
+ fs.Update(f.Origin().String(), htm, csss, scripts)
fs.SetDOM(nt)
}
--- a/js/js_test.go
+++ b/js/js_test.go
@@ -71,7 +71,7 @@
}
nt := nodes.NewNodeTree(doc, style.Map{}, make(map[*html.Node]style.Map), nil)fs.SetDOM(nt)
- fs.Update(simpleHTML, nil, []string{string(buf), script})+ fs.Update("", simpleHTML, nil, []string{string(buf), script})resHtm, changed, err := Start(string(buf), script)
if err != nil {--
⑨