
Security News
Risky Biz Podcast: Making Reachability Analysis Work in Real-World Codebases
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
adsf (A Dead Simple Fileserver) is a tiny static web server that you can launch instantly in any directory, like this:
▸ ls -l
total 0
drwxr-xr-x 2 ddfreyne staff 68 May 29 10:04 about
drwxr-xr-x 2 ddfreyne staff 68 May 29 10:04 contact
-rw-r--r-- 1 ddfreyne staff 0 May 29 10:04 index.html
drwxr-xr-x 2 ddfreyne staff 68 May 29 10:04 projects
▸ adsf
[2017-11-19 11:49:20] INFO WEBrick 1.3.1
[2017-11-19 11:49:20] INFO ruby 2.4.2 (2017-09-14) [x86_64-darwin17]
[2017-11-19 11:49:20] INFO WEBrick::HTTPServer#start: pid=95218 port=3000
… and now you can go to http://localhost:3000/ and start browsing.
See adsf --help
for details.
To use adsf --live-reload
, please install the separate adsf-live
gem. (The live-reload support is not part of adsf itself, because the dependencies of adsf-live
make it difficult to install under some circumstances.)
Adsf::Server
runs a web server programmatically. For example:
server = Adsf::Server.new(root: 'public')
%w[INT TERM].each do |s|
Signal.trap(s) { server.stop }
end
server.run
It takes the following options:
root
(required): the path to the web rootindex_filenames
(optional; defaults to ['index.html']
): (see below)auto_extensions
(optional; defaults to []
; can be a string or an array of strings): If present, the server will automatically append the given extensions when searching for files. For example, auto_extensions: ".html"
would cause a request for /foo
to serve /foo.html
if there is no file or directory named /foo
.host
(optional; defaults to '127.0.0.1'
): the address of the network interface to listen onport
(optional; defaults to 3000
): the port to listen onhandler
(optional): the Rack handler to useIf you are assembling your own Rack configuration, you can use adsf’s Adsf::Rack::IndexFileFinder
middleware to make Rack load an index file (e.g. index.html
) when requesting a directory. For example, the following runs a web server with the 'public' directory as its web root:
use Adsf::Rack::IndexFileFinder, root: 'public'
run Rack::Files.new('public')
It takes the following options:
root
(required): the path to the web root
index_filenames
(optional; defaults to ['index.html']
): contains the names of the index filenames that will be served when a directory containing an index file is requested. Usually, this will simply be ['index.html']
, but under different circumstances (when using IIS, for example), the array may have to be modified to include index filenames such as default.html
or index.xml
. Here’s an example middleware/application stack that uses custom index filenames:
use Adsf::Rack::IndexFileFinder,
root: 'public',
index_filenames: %w[index.html index.xhtml]
run Rack::Files.new('public')
Why not use Rack::Static
? Rack comes with Rack::Static
, whose purpose is similar to, but not the same as, Adsf::Rack::IndexFileFinder
. In particular:
Adsf::Rack::IndexFileFinder
does not serve files, unlike Rack::Static
. IndexFileFinder
only rewrites the incoming request and passes it on (usually to Rack::Files
).
Adsf::Rack::IndexFileFinder
supports multiple index files, while Rack::Static
only supports one (you could have multiple Rack::Static
middlewares, one for each index filenames, though).
Rack::Static
will report the wrong filename on 404 pages: when requesting a directory without an index file, it will e.g. report “File not found: /index.html” rather than “File not found: /”.
When requesting a directory without specifying the trailing slash, Adsf::Rack::IndexFileFinder
will redirect to the URL with a trailing slash, unlike Rack::Static
. This mimics the behavior of typical HTTP servers. For example, when requesting /foo
, when a foo
directory exists and it contains index.html
, IndexFileFinder
will redirect to /foo/
.
FAQs
Unknown package
We found that adsf demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.
Security News
CISA’s 2025 draft SBOM guidance adds new fields like hashes, licenses, and tool metadata to make software inventories more actionable.