Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

file:///tmp/browser.1293014077.html ERR_FILE_NOT_FOUND #46

Open
guettli opened this issue Jun 23, 2022 · 3 comments
Open

file:///tmp/browser.1293014077.html ERR_FILE_NOT_FOUND #46

guettli opened this issue Jun 23, 2022 · 3 comments

Comments

@guettli
Copy link

guettli commented Jun 23, 2022

I use it like this:

	request, err := http.NewRequest("POST", login_url, strings.NewReader(formData.Encode()))
	if err != nil {
		return err
	}
	request.Header.Set("Referer", login_url)
	request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	response, err := client.Do(request)
	if err != nil {
		return err
	}
	fmt.Printf("status code POST: %d\n", response.StatusCode)
	browser.OpenReader(response.Body)

The file /tmp/browser.1293014077.html contains the html.

But the browser seems to not find the file.

I use Chromium on Ubuntu Linux

image

@KEINOS
Copy link

KEINOS commented Aug 21, 2022

The following example worked on macOS. If it worked for you too, you may have placed the files in an insecure directory.

package main

import (
	"log"
	"os"
	"path/filepath"

	"github.com/pkg/browser"
)

func main() {
	pathDirTmp, err := os.MkdirTemp(os.TempDir(), "sample_dir_*")
	if err != nil {
		log.Fatal(err)
	}

	pathFileTmp := filepath.Join(pathDirTmp, "sample_file.html")
	dummyContent := `<html><body>Hello World2</body></html>`

	// Create file under the temporary directory
	if err := os.WriteFile(pathFileTmp, []byte(dummyContent), 0644); err != nil {
		log.Fatal(err)
	}

	// Open the file in the browser
	// if err := browser.OpenURL(pathFileTmp); err != nil {
	// 	log.Fatal(err)
	// }

	// Open the file for reading
	osFile, err := os.Open(pathFileTmp)
	if err != nil {
		log.Fatal(err)
	}

	// Consume the contents and present the results in a browser
	if err := browser.OpenReader(osFile); err != nil {
		log.Fatal(err)
	}

	// Open the directory of the temporary file
	if err := browser.OpenURL(pathDirTmp); err != nil {
		log.Fatal(err)
	}
}
Env info
  • Google Chrome v104.0.5112.101
  • go version 1.18 and 1.19 (darwin/amd64)

@guettli
Copy link
Author

guettli commented Aug 24, 2022

You said "you may have placed the files in an insecure directory"

But I am using it like this:

browser.OpenReader(response.Body)

This means, that I am not explicitly putting the content into a directory....

I had a look at how this gets handled by Python, but that's a huge file: https://github.com/python/cpython/blob/3.10/Lib/webbrowser.py

Sorry, I need to leave now. Feel free to close this, if you don't have time and energy.

@KEINOS
Copy link

KEINOS commented Aug 25, 2022

@guettli

But I am using it like this:

browser.OpenReader(response.Body)

Yes yes, that's why the file pointer is passed like this.

osFile, err := os.Open(pathFileTmp)
** snip **

err := browser.OpenReader(osFile)
** snip **

My point was that "Where was the temp file created?"

The path "/tmp/browser.1293014077.html" seems to be insecure. For example, on macOS, temporary files are created in private/var/folders.

file:///private/var/folders/8c/lmckjks95fj4h_jqzw4v3k_w0000gn/T/browser.140875179.html

The /tmp/browser.1293014077.html contained the response.Body value, so it is assumed that the OS or the browser is blocking it for security reasons. Not sure.

Try using os.MkdirTemp() and os.TempDir() to store the value of response.Body in a temporary directory. Then open it and look at the difference in paths.

Feel free to close this, if you don't have time and energy.

Unfortunately, I'm only a passer-by to help and don't have the privilege to close this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants