SHA-256 from URL
Tuesday, September 12, 2023
Álvaro Ramírez wrote a blog post about generating a SHA-256 hash from URL, the easy way where they describe wanting to download a file and generate a SHA-256 hash of the contents easily. Their solution involves copying a URL and then having some Emacs Lisp be able to read the clipboard, download the file, then generate and return the hash on the clipboard.
I thought I’d show how this can be done in Factor, by breaking the problem into smaller parts.
USING: checksums checksums.sha http.client io.directories io.files.temp kernel math.parser namespaces sequences ui.clipboards ;
The first step is downloading a file to a temporary file, returning the path of the downloaded file:
: download-to-temp ( url -- path ) dup download-name temp-file [ [ ?delete-file ] [ download-to ] bi ] keep ;
The next step is to build a word that applies a checksum to the downloaded file contents:
: checksum-url ( url checksum -- value ) [ download-to-temp ] [ checksum-file ] bi* ;
The last step is to use the
to access the URL that was copied – checking minimally that it looks like an
https URL – and then putting the checksum value back onto the
: checksum-clipboard ( checksum -- ) clipboard get clipboard-contents dup "http" head? [ throw ] unless swap checksum-url bytes>hex-string clipboard get set-clipboard-contents ;
This could be improved with better error checking, and maybe cleaning up the temporary file that was downloaded after running the checksum.
Give it a try!
IN: scratchpad sha-256 checksum-clipboard