For data regularry send by our suppliers we need an combination of FTP-Server and Webapplication. Users upload files and when the upload is finished, files will be automatically processed by our system. Users have different options for upload:
* FTP into a directory "to_hudora"
* HTTP Form based upload (authenticated)
* HTTP POST Based API using the "curl" command line tool (authenticated via OAuth and HTTP-Basic Auth. Use django-piston for it)
Users will be identified by a 13 digit number or a strink like "[url removed, login to view]". When a User is created he is assigned a 16 letter random password which is saved in cleartext and provisioned with the FTP server. this password is then mailed to the E-Mail address of the user. Do my understanding usernames contianing dots and dashes are problemetic with the default django [url removed, login to view] application.
All files uploaded should be saved as attatchmend in a CouchDB together with timestamp, coneccting user, sha256 checksum, IP address.
Users should be provided with an authenticated page where they can see a log file of the files uploaded by them. They should be also able to see a detailed FTP debug log of all acitivity in the last few hours seen from the IP adress from which their browser is currently connecting.
Superusers should be able to inspect the pages/information of all users. USers should be unable to gain any inforation on other users
We also need the opposite file transfer direction. A file and a user id is provided by us, saved in couchdb and then put into a user FTP directory "from_hudora". Besides FTP the users should be able to download and delete files via a web GUI or via a HTTP API.
Implement the Functionality above using external libraries and OpenSource technology to your liking.
* Files should be identified by unique IDs beeing created out of timestamp + sha256 of the file. I suggest [url removed, login to view]() to get a nice representation of the GUID. Use them e.g. as ID in couchdb.
* Use [url removed, login to view]
* call a dummy-function message_arrived(uuid, username, datastream) when a message arrived. E.g. message_arrived('234FDS234GFSD', '[url removed, login to view]', '). We will later swap theis function with code connecting to our internal software
* provide a function send_message(uuid, username, datastream) for us to call to put a file into the system.
* Add 100% Audit logging to the web-interface.
* Users should have following so far unused fields in theier data model: webhook_url, upload_url.
* Use plain white HTML pages without any additional web-Design
*Use SSL/TLS for FTP and HTTP. No unprotected communication. Use self signed certificates for testing.
Follow [url removed, login to view] - especially apply pep8 and pylint.
FreeBSD 7.2, Python 2.6, Django 1.0.x