mirror of
https://github.com/rclone/rclone.git
synced 2024-11-26 02:09:55 +08:00
93 lines
3.3 KiB
Markdown
93 lines
3.3 KiB
Markdown
|
# server
|
||
|
|
||
|
[![CircleCI](https://circleci.com/gh/goftp/server.svg?style=shield)](https://circleci.com/gh/goftp/server)
|
||
|
[![](https://goreportcard.com/badge/github.com/goftp/server)](https://goreportcard.com/report/github.com/goftp/server)
|
||
|
[![codecov](https://codecov.io/gh/goftp/server/branch/master/graph/badge.svg)](https://codecov.io/gh/goftp/server)
|
||
|
|
||
|
A FTP server framework forked from [github.com/yob/graval](http://github.com/yob/graval) and changed a lot.
|
||
|
|
||
|
Full documentation for the package is available on [godoc](http://godoc.org/github.com/goftp/server)
|
||
|
|
||
|
## Version
|
||
|
|
||
|
v0.2.3
|
||
|
|
||
|
## Installation
|
||
|
|
||
|
go get github.com/goftp/server
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
To boot a FTP server you will need to provide a driver that speaks to
|
||
|
your persistence layer - the required driver contract is in [the
|
||
|
documentation](http://godoc.org/github.com/goftp/server).
|
||
|
|
||
|
Look at the [file driver](https://github.com/goftp/file-driver) to see
|
||
|
an example of how to build a backend.
|
||
|
|
||
|
There is a [sample ftp server](/exampleftpd) as a demo. You can build it with this
|
||
|
command:
|
||
|
|
||
|
go install github.com/goftp/server/exampleftpd
|
||
|
|
||
|
Then run it if you have add $GOPATH to your $PATH:
|
||
|
|
||
|
exampleftpd -root /tmp
|
||
|
|
||
|
And finally, connect to the server with any FTP client and the following
|
||
|
details:
|
||
|
|
||
|
host: 127.0.0.1
|
||
|
port: 2121
|
||
|
username: admin
|
||
|
password: 123456
|
||
|
|
||
|
This uses the file driver mentioned above to serve files.
|
||
|
|
||
|
## Contributors
|
||
|
|
||
|
see [https://github.com/goftp/server/graphs/contributors](https://github.com/goftp/server/graphs/contributors)
|
||
|
|
||
|
## Warning
|
||
|
|
||
|
FTP is an incredibly insecure protocol. Be careful about forcing users to authenticate
|
||
|
with an username or password that are important.
|
||
|
|
||
|
## License
|
||
|
|
||
|
This library is distributed under the terms of the MIT License. See the included file for
|
||
|
more detail.
|
||
|
|
||
|
## Contributing
|
||
|
|
||
|
All suggestions and patches welcome, preferably via a git repository I can pull from.
|
||
|
If this library proves useful to you, please let me know.
|
||
|
|
||
|
## Further Reading
|
||
|
|
||
|
There are a range of RFCs that together specify the FTP protocol. In chronological
|
||
|
order, the more useful ones are:
|
||
|
|
||
|
* [http://tools.ietf.org/rfc/rfc959.txt](http://tools.ietf.org/rfc/rfc959.txt)
|
||
|
* [http://tools.ietf.org/rfc/rfc1123.txt](http://tools.ietf.org/rfc/rfc1123.txt)
|
||
|
* [http://tools.ietf.org/rfc/rfc2228.txt](http://tools.ietf.org/rfc/rfc2228.txt)
|
||
|
* [http://tools.ietf.org/rfc/rfc2389.txt](http://tools.ietf.org/rfc/rfc2389.txt)
|
||
|
* [http://tools.ietf.org/rfc/rfc2428.txt](http://tools.ietf.org/rfc/rfc2428.txt)
|
||
|
* [http://tools.ietf.org/rfc/rfc3659.txt](http://tools.ietf.org/rfc/rfc3659.txt)
|
||
|
* [http://tools.ietf.org/rfc/rfc4217.txt](http://tools.ietf.org/rfc/rfc4217.txt)
|
||
|
|
||
|
For an english summary that's somewhat more legible than the RFCs, and provides
|
||
|
some commentary on what features are actually useful or relevant 24 years after
|
||
|
RFC959 was published:
|
||
|
|
||
|
* [http://cr.yp.to/ftp.html](http://cr.yp.to/ftp.html)
|
||
|
|
||
|
For a history lesson, check out Appendix III of RCF959. It lists the preceding
|
||
|
(obsolete) RFC documents that relate to file transfers, including the ye old
|
||
|
RFC114 from 1971, "A File Transfer Protocol"
|
||
|
|
||
|
This library is heavily based on [em-ftpd](https://github.com/yob/em-ftpd), an FTPd
|
||
|
framework with similar design goals within the ruby and EventMachine ecosystems. It
|
||
|
worked well enough, but you know, callbacks and event loops make me something
|
||
|
something.
|