npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cabrel-ftpd

v1.1.0

Published

Fork of alanszlosek/nodeftpd - a simple FTP server written in Node.JS

Downloads

2

Readme

nodeftpd - a simple FTP server written in Node.JS

Welcome

This is turning out to be quite a deviation from the original code. Figured that if there's a need for an ftp server written in node.js, one probably needs to tack on custom functionality, otherwise they'd just use vsftpd. So my goal is to lay the groundwork for a basic FTP server, with all the right hooks in place for customizing operations.

I assume you'll want to customize:

  • User authentication (user and pass commands)
  • Base folder for file operations
  • What happens when certain file commands are performed

For my specific needs (at work) we needed custom user authentication, to sandbox all the file operations, and to run special code when a file is uploaded.

Thanks, Alan

Status

To Do

  • Fire more events to allow customizations: directory changes, file uploads, etc

Known issues

  • None at the moment

These are known to work (or mostly work)

  • Passive data connection establishment
  • Non-passive data connection establishment
  • CWD - change working directory
  • DELE - delete file
  • LIST - had to construct the list format programmatically because output from ls -l wasn't being processed by FireFTP
  • MKD - make directory
  • RMD - remove directory (and contents)
  • STOR - upload
  • RETR - download

If a command is not listed, I probably haven't tested it yet.

How to use

See test.js for an example.

Then implement the following event callbacks with logic you need performed:

  • command:user - Same as command:pass above, but first parameter will be the username that was sent from the client.
  • command:pass - Sends three params. The first is the password. The second is a callback to be called if you determine the password is correct ... pass the username as the first parameter to this callback. Call the second if incorrect.

Also, don't run node as root just so you can get access to the FTP port. We run our node FTP server as an unprivileged user and perform port-forwarding with iptables. The following should work for you as well:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 21 -j REDIRECT --to-port 10000

17 April 2012

Added LICENSE.txt with MIT license. Original code base had none, my changes are a pretty big deviation, and people have been asking.

04 September 2011

Tested passive and non-passive data connections and found some issues, so I did some re-working.

Some things that might be nice:

  • Figure out how it should be run, maybe as root first but execs to another user
  • Fork new process when client connects and authenticates

Old Readme Follows ...

28 March 2010

Forked from http://github.com/billywhizz/nodeftpd Andrew Johnston - http://blog.beardsoft.com/node-ftp-server-initial-release

Andrew's initial release was tested about node.js 0.1.21 In the few short months since that release, node.js has changed quite a bit to where it is now, at time of writing 0.1.33

Changes made to nodeftp are as follows:

  1. POSIX module has now been moved to FS (0.1.29)
  2. File module has been removed (0.1.29)
  3. sys.exec callback system seems to have changed??
    • as such quite a lot of moving about and rehacking had to take place:
    • LIST/NLIST
    • DEL
    • STOR
    • RETR
    • RNTO
  4. tcp has changed function names and listeners
  5. Rewrote ftptest.js as well
  6. Changed ports to 7001/7002 so I can test without being root
  7. Finally. Reformatted for my Emacs and javascript-mode

Also, not tested in Passive mode yet, but I think it works??

One thing I had problems with was the root filesystem of the FTP server. Even though I was running the ftpd.js from /home/rob/workspace it changed it to "/". This meant that if I tried to get the SIZE of a file, eg: /home/rob/workspace/file.txt it tried to get the SIZE of /home/rob/workspace//home/rob/workspace/file.txt I narrowed this down to the dummyfs.js functionality, but then if I changed the dummyfs root there was repeating of the path names

TODO

  • Fix the repeating file paths problem
  • Add in non-anonymous logins
  • Implement non-implemented functionality (see ftpd.js TODO list)
  • Add in proper error checking
  • Test in passive mode

20 June 2010

Updated for node v0.1.98