0.2.1
This commit is contained in:
@@ -457,7 +457,7 @@ func shareHandler(s *activeShare) http.Handler {
|
||||
}
|
||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||
w.Header().Set("Cache-Control", "no-store")
|
||||
_, _ = w.Write(s.files[0].buf)
|
||||
_, _ = w.Write([]byte(mobilePreviewPage(s.files[0])))
|
||||
case "/file":
|
||||
fallthrough
|
||||
case "/file/0":
|
||||
@@ -481,7 +481,7 @@ func shareHandler(s *activeShare) http.Handler {
|
||||
if parts[0] == "view" {
|
||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||
w.Header().Set("Cache-Control", "no-store")
|
||||
_, _ = w.Write(file.buf)
|
||||
_, _ = w.Write([]byte(mobilePreviewPage(file)))
|
||||
return
|
||||
}
|
||||
safeName := safeFilename(file.filename)
|
||||
@@ -499,6 +499,35 @@ func shareHandler(s *activeShare) http.Handler {
|
||||
})
|
||||
}
|
||||
|
||||
func mobilePreviewPage(file sharedFile) string {
|
||||
playableJSON, _ := json.Marshal(string(file.buf))
|
||||
playableScriptValue := strings.ReplaceAll(string(playableJSON), "</script", "<\\/script")
|
||||
playableScriptValue = strings.ReplaceAll(playableScriptValue, "</SCRIPT", "<\\/SCRIPT")
|
||||
title := html.EscapeString(file.filename)
|
||||
return `<!DOCTYPE html>
|
||||
<html><head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||||
<title>` + title + `</title>
|
||||
<style>
|
||||
html, body { width: 100%; height: 100%; margin: 0; overflow: hidden; background: #000; }
|
||||
iframe { position: fixed; inset: 0; width: 100%; height: 100%; border: 0; background: #000; }
|
||||
.boot { position: fixed; inset: 0; display: grid; place-items: center; color: #777; font: 12px system-ui, sans-serif; }
|
||||
</style>
|
||||
</head><body>
|
||||
<div id="boot" class="boot">Loading preview...</div>
|
||||
<iframe id="playable" sandbox="allow-scripts allow-same-origin allow-pointer-lock allow-forms allow-popups allow-popups-to-escape-sandbox allow-top-navigation-by-user-activation"></iframe>
|
||||
<script>
|
||||
const playableHtml = ` + playableScriptValue + `;
|
||||
setTimeout(() => {
|
||||
const frame = document.getElementById('playable');
|
||||
document.getElementById('boot').style.display = 'none';
|
||||
frame.srcdoc = playableHtml;
|
||||
}, 750);
|
||||
</script>
|
||||
</body></html>`
|
||||
}
|
||||
|
||||
var unsafeFilenameRx = regexp.MustCompile(`[^A-Za-z0-9._-]`)
|
||||
|
||||
func safeFilename(s string) string { return unsafeFilenameRx.ReplaceAllString(s, "_") }
|
||||
|
||||
Reference in New Issue
Block a user