All Projects → autovance → Ftp Srv

autovance / Ftp Srv

Licence: mit
📮 Modern FTP Server

Programming Languages

javascript
184084 projects - #8 most used programming language

Labels

Projects that are alternatives of or similar to Ftp Srv

Unftp
A FTP(S) server with a couple of twists written in Rust. Follow and talk to us on https://t.me/unftp
Stars: ✭ 137 (-45.85%)
Mutual labels:  server, ftp
Davos
Web-based FTP automation for Linux servers.
Stars: ✭ 90 (-64.43%)
Mutual labels:  server, ftp
Hypertext
Any-way-you-want-it, type-safe HTML in Swift.
Stars: ✭ 236 (-6.72%)
Mutual labels:  server
Golf
⛳️ The Golf web framework
Stars: ✭ 248 (-1.98%)
Mutual labels:  server
Graphql Mongodb Server
A GraphQL MongoDB server.
Stars: ✭ 242 (-4.35%)
Mutual labels:  server
Stubby4node
A configurable server for mocking/stubbing external systems during development.
Stars: ✭ 237 (-6.32%)
Mutual labels:  server
Wait For Localhost
Wait for localhost to be ready
Stars: ✭ 245 (-3.16%)
Mutual labels:  server
Playmaker
Fdroid repository manager fetching apps from Play Store
Stars: ✭ 236 (-6.72%)
Mutual labels:  server
Autoarchive
一个基于Jenkins的iOS/Android自动构建系统,它实现了最大程度的自动化,让你的iOS自动打包,Android自动打包流程变得更加高效。此项目包含了各种实现细节的讲解说明,你能够使用它解决大多数跟客户端构建/分发相关的问题,并将这种能力进行开放,提高研发效率。
Stars: ✭ 248 (-1.98%)
Mutual labels:  ftp
Typo3 Docker Boilerplate
🍲 TYPO3 Docker Boilerplate project (NGINX, Apache HTTPd, PHP-FPM, MySQL, Solr, Elasticsearch, Redis, FTP)
Stars: ✭ 240 (-5.14%)
Mutual labels:  ftp
Waveline Server
Simple self-hosted music streaming server
Stars: ✭ 248 (-1.98%)
Mutual labels:  server
Harpoon
GitHub WebHook server written in Go
Stars: ✭ 240 (-5.14%)
Mutual labels:  server
Heimdall
As the name suggests Heimdall Application Dashboard is a dashboard for all your web applications. It doesn't need to be limited to applications though, you can add links to anything you like.
Stars: ✭ 3,501 (+1283.79%)
Mutual labels:  server
Swmp
A responsive, eye-pleasing Linux server statistics dashboard.
Stars: ✭ 245 (-3.16%)
Mutual labels:  server
Yivnet
Yivnet is a microservice game server base on go-kit
Stars: ✭ 237 (-6.32%)
Mutual labels:  server
Jreactive 8583
Java Client & Server for ISO8583 & Netty
Stars: ✭ 248 (-1.98%)
Mutual labels:  server
Mocknet
以极简的方式在 Android 本地创建服务器用来接口测试和接口开发(An excellent tool for creating local server on Android.)
Stars: ✭ 236 (-6.72%)
Mutual labels:  server
Iobroker.js Controller
ioBroker controller
Stars: ✭ 238 (-5.93%)
Mutual labels:  server
Flaresolverr
Proxy server to bypass Cloudflare protection
Stars: ✭ 241 (-4.74%)
Mutual labels:  server
Tmail
Golang SMTP server
Stars: ✭ 251 (-0.79%)
Mutual labels:  server

ftp-srv

Modern, extensible FTP Server

npm circleci


Overview

ftp-srv is a modern and extensible FTP server designed to be simple yet configurable.

Features

Install

npm install ftp-srv --save

Usage

// Quick start

const FtpSrv = require('ftp-srv');
const ftpServer = new FtpSrv({ options ... });

ftpServer.on('login', (data, resolve, reject) => { ... });
...

ftpServer.listen()
.then(() => { ... });

API

new FtpSrv({options})

url

URL string indicating the protocol, hostname, and port to listen on for connections. Supported protocols:

  • ftp Plain FTP
  • ftps Implicit FTP over TLS

Note: The hostname must be the external IP address to accept external connections. 0.0.0.0 will listen on any available hosts for server and passive connections.
Default: "ftp://127.0.0.1:21"

pasv_url

The hostname to provide a client when attempting a passive connection (PASV).
If not provided, clients can only connect using an Active connection.

pasv_min

The starting port to accept passive connections.
Default: 1024

pasv_max

The ending port to accept passive connections.
The range is then queried for an available port to use when required.
Default: 65535

greeting

A human readable array of lines or string to send when a client connects.
Default: null

tls

Node TLS secure context object used for implicit (ftps protocol) or explicit (AUTH TLS) connections.
Default: false

anonymous

If true, will allow clients to authenticate using the username anonymous, not requiring a password from the user.
Can also set as a string which allows users to authenticate using the username provided.
The login event is then sent with the provided username and @anonymous as the password.
Default: false

blacklist

Array of commands that are not allowed.
Response code 502 is sent to clients sending one of these commands.
Example: ['RMD', 'RNFR', 'RNTO'] will not allow users to delete directories or rename any files.
Default: []

whitelist

Array of commands that are only allowed.
Response code 502 is sent to clients sending any other command.
Default: []

file_format

Sets the format to use for file stat queries such as LIST.
Default: "ls"
Allowable values:

log

A bunyan logger instance. Created by default.

timeout

Sets the timeout (in ms) after that an idle connection is closed by the server
Default: 0

CLI

ftp-srv also comes with a builtin CLI.

$ ftp-srv [url] [options]
$ ftp-srv ftp://0.0.0.0:9876 --root ~/Documents

url

Set the listening URL.

Defaults to ftp://127.0.0.1:21

--pasv_url

The hostname to provide a client when attempting a passive connection (PASV).
If not provided, clients can only connect using an Active connection.

--pasv_min

The starting port to accept passive connections.
Default: 1024

--pasv_max

The ending port to accept passive connections.
The range is then queried for an available port to use when required.
Default: 65535

--root / -r

Set the default root directory for users.

Defaults to the current directory.

--credentials / -c

Set the path to a json credentials file.

Format:

[
  {
    "username": "...",
    "password": "...",
    "root": "..." // Root directory
  },
  ...
]

--username

Set the username for the only user. Do not provide an argument to allow anonymous login.

--password

Set the password for the given username.

--read-only

Disable write actions such as upload, delete, etc.

Events

The FtpSrv class extends the node net.Server. Some custom events can be resolved or rejected, such as login.

login

ftpServer.on('login', ({connection, username, password}, resolve, reject) => { ... });

Occurs when a client is attempting to login. Here you can resolve the login request by username and password.

connection client class object
username string of username from USER command
password string of password from PASS command
resolve takes an object of arguments:

  • fs
    • Set a custom file system class for this connection to use.
    • See File System for implementation details.
  • root
    • If fs is not provided, this will set the root directory for the connection.
    • The user cannot traverse lower than this directory.
  • cwd
    • If fs is not provided, will set the starting directory for the connection
    • This is relative to the root directory.
  • blacklist
    • Commands that are forbidden for only this connection
  • whitelist
    • If set, this connection will only be able to use the provided commands

reject takes an error object

client-error

ftpServer.on('client-error', ({connection, context, error}) => { ... });

Occurs when an error arises in the client connection.

connection client class object
context string of where the error occurred
error error object

RETR

connection.on('RETR', (error, filePath) => { ... });

Occurs when a file is downloaded.

error if successful, will be null
filePath location to which file was downloaded

STOR

connection.on('STOR', (error, fileName) => { ... });

Occurs when a file is uploaded.

error if successful, will be null
fileName name of the file that was uploaded

RNTO

connection.on('RNTO', (error, fileName) => { ... });

Occurs when a file is renamed.

error if successful, will be null
fileName name of the file that was renamed

Supported Commands

See the command registry for a list of all implemented FTP commands.

File System

The default file system can be overwritten to use your own implementation.
This can allow for virtual file systems, and more.
Each connection can set it's own file system based on the user.

The default file system is exported and can be extended as needed:

const {FtpSrv, FileSystem} = require('ftp-srv');

class MyFileSystem extends FileSystem {
  constructor() {
    super(...arguments);
  }

  get(fileName) {
    ...
  }
}

Custom file systems can implement the following variables depending on the developers needs:

Methods

currentDirectory()

Returns a string of the current working directory
Used in: PWD

get(fileName)

Returns a file stat object of file or directory
Used in: LIST, NLST, STAT, SIZE, RNFR, MDTM

list(path)

Returns array of file and directory stat objects
Used in: LIST, NLST, STAT

chdir(path)

Returns new directory relative to current directory
Used in: CWD, CDUP

mkdir(path)

Returns a path to a newly created directory
Used in: MKD

write(fileName, {append, start})

Returns a writable stream
Options:
append if true, append to existing file
start if set, specifies the byte offset to write to
Used in: STOR, APPE

read(fileName, {start})

Returns a readable stream
Options:
start if set, specifies the byte offset to read from
Used in: RETR

delete(path)

Delete a file or directory
Used in: DELE

rename(from, to)

Renames a file or directory
Used in: RNFR, RNTO

chmod(path)

Modifies a file or directory's permissions
Used in: SITE CHMOD

getUniqueName()

Returns a unique file name to write to
Used in: STOU

Contributing

See CONTRIBUTING.md.

Contributors

License

This software is licensed under the MIT Licence. See LICENSE.

References

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].