{
"info": {
"author": "Laurent Meunier",
"author_email": "laurent@deltalima.net",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 4 - Beta",
"Environment :: Web Environment",
"Intended Audience :: System Administrators",
"License :: OSI Approved :: BSD License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Topic :: Communications :: File Sharing",
"Topic :: Internet",
"Topic :: Internet :: WWW/HTTP :: WSGI :: Application"
],
"description": "Flaskup! -- A simple Flask application to share files\n=====================================================\n\nOverview\n--------\n\nFlaskup! is a simple Flask application to share files with your friends. You\nupload files through an HTML form, and you get back a link to download the file.\nYou can do whatever you want with the link (copy it in an email or in your\nprefered chat app, it's up to you).\n\n\nRequirements\n------------\n\n- Python 2.7 (may work with other versions but not tested, feedbacks are welcome)\n- Flask\n- Flask-Babel\n- Flask-Mail\n- simplejson\n\n\nInstallation\n------------\n\n- Install from PyPI:\n\n ::\n\n pip install flaskup\n\n- or directly from the Git repository (to have latest features):\n\n ::\n\n git clone https://github.com/lmeunier/flaskup.git\n cd flaskup\n python setup.py install\n\n\nConfiguration\n-------------\n\nYou *MUST* set the environment variable FLASKUP_CONFIG that point to a valid\npython file. In this file you will be able to customize the configuration for\nFlaskup!, Flask and the Flask extensions.\n\nFlaskup!\n~~~~~~~~\n\n- `FLASKUP_TITLE`: personnalize the title of this webapp (default: 'Flaskup!')\n- `FLASKUP_UPLOAD_FOLDER`: the root folder where you want to store uploaded\n files (default: /tmp/flaskup).\n- `FLASKUP_MAX_DAYS`: the maximum number of days a file will be available, the\n file will be deleted after FLASKUP_MAX_DAYS days (default: 30).\n- `FLASKUP_MAX_CONTACTS`: limit contacts number, if the user gives more\n contacts, they will be silently discarded (default: 10 ; 0 means 'no\n contacts' and the textarea won't be displayed)\n- `FLASKUP_KEY_LENGTH`: the lenght of the generated key used to identify a file\n (default: 6 -- more than 2 billions keys)\n- `FLASKUP_DELETE_KEY_LENGTH`: the length of the generated key used to\n authenticate the owner of a file before deleting it (default: 4 -- more than\n 1 million keys)\n- `FLASKUP_ADMINS`: list with email address of the administrators of Flaskup!,\n this is currently used only to send mails when an error occurs (default: [],\n empty list)\n- `FLASKUP_NOTIFY`: list all actions that should send an email notification to\n the admins (default: [], no notification)\n\n - `add`: a new file has been uploaded\n - `delete`: a file has been deleted\n\n- `FLASKUP_NGINX_UPLOAD_MODULE_ENABLED`: indicate whether you want to enable\n support for the Nginx upload-module (default: `False`)\n- `FLASKUP_NGINX_UPLOAD_MODULE_STORE`: must be set to the `upload_store` of the\n Nginx upload-module (default: `None`)\n- `FLASKUP_UPLOAD_PASSWORDS`: a list of tuples, each tuple contains a password\n and an identifier (default: [], no password required)\n- `FLASKUP_UPLOAD_PASSWORDS_CHECK`: method to check a submitted password against\n passwords in `FLASKUP_UPLOAD_PASSWORDS` (default: use cleartext passwords)\n\nFlask\n~~~~~\n\nhttp://flask.pocoo.org/docs/config/#builtin-configuration-values\n\nYou must at least define the SECRET_KEY. To generate a good secret key, you can\nuse a cryptographic random generator:\n\n::\n\n >>> import os\n >>> os.urandom(24)\n '_\\x12\\xab\\x90D\\xc4\\xfd{\\xd9\\xe2\\xf3-\\xa8\\xd3\\x1d\\x1ej\\x8b\\x13x\\x8ce\\xc5\\xe0'\n\n\nI18N (Flask-Babel)\n~~~~~~~~~~~~~~~~~~\n\nhttps://pythonhosted.org/Flask-Babel/#configuration\n\nMail notification (Flask-Mail)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nhttps://pythonhosted.org/Flask-Mail/#configuring-flask-mail\n\nExample configuration file\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n # -*- coding: utf-8 -*-\n\n from passlib.hash import bcrypt\n\n DEBUG = True\n SECRET_KEY = '_\\x12\\xab\\x90D\\xc4\\xfd{\\xd9\\xe2\\xf3-\\xa8\\xd3\\x1d\\x1ej\\x8b\\x13x\\x8ce\\xc5\\xe0'\n FLASKUP_UPLOAD_FOLDER = '/srv/flaskup/data'\n FLASKUP_MAX_DAYS = 10\n FLASKUP_KEY_LENGTH = 4\n MAIL_DEFAULT_SENDER = 'flaskup@example.com'\n FLASKUP_ADMINS = ['admin@example.com', 'admin@example.org']\n FLASKUP_NOTIFY = ['add', 'delete']\n FLASKUP_UPLOAD_PASSWORDS = [\n ('$2a$12$oIWeziyq4wjF08gntfU4w.AQZfYbbQoK7y13ParN83G7ta.qtN2.e', 'pw1'),\n ('$2a$12$zQ/hzog/iYr49fbo0mitS.y9f.uHP.7IyqWgk5/S1Ict50HRl4XxW', 'pw2'),\n ]\n FLASKUP_UPLOAD_PASSWORDS_CHECK = bcrypt.verify\n\nRun Flaskup!\n------------\n\n- Use your favorite WSGI server to run Flaskup! (the WSGI application is\n **flaskup:app**). For example, to use Flaskup! with Gunicorn:\n\n ::\n\n gunicorn --bind=127.0.0.1:8001 flaskup:app\n\n- Alternatively, you can start Flaskup! with the builtin Flask webserver (for\n testing or developpement only).\n\n create a file `run-server.py`:\n\n ::\n\n from flaskup import app\n app.run()\n\n run it:\n\n ::\n\n python run-server.py\n\n\nDelete expired files\n--------------------\n\nFlaskup! comes with the command line tool ``flaskup``. This tool is a generic\npython script to call actions. Currently the only available action is `clean`.\n\n::\n\n . /path/to/env/bin/activate\n export FLASKUP_CONFIG=/path/to/my/flaskup_config.py\n flaskup clean\n\nPassword protection\n-------------------\n\nThe password protection in Flaskup! is a very simple mechanism to force users\nto submit a valid password when they upload a file.\n\nList of valid passwords\n~~~~~~~~~~~~~~~~~~~~~~~\n\nValid passwords are stored in a tuple (with a password identifier), those\ntuples are stored as a list in `FLASKUP_UPLOAD_PASSWORDS`. If\n`FLASKUP_UPLOAD_PASSWORDS` is empty, then no valid password are required and\nanybody can upload a file.\n\n::\n\n FLASKUP_UPLOAD_PASSWORDS = [\n ('password1', 'identifier for password 1'),\n ('secretpassword2', 'identifier for password 2'),\n ]\n\nThe password identifier is stored in the `*.data.json` file next to the\nuploaded file. This permits to identify which password was used to upload the\nfile.\n\nA password is never required to download files, only to upload them.\n\nUse hashed passwords\n~~~~~~~~~~~~~~~~~~~~\n\nBy default, Flaskup! will treat passwords from `FLASKUP_UPLOAD_PASSWORDS` as\ncleartext (not hashed). If you want to put hashed passwords in\n`FLASKUP_UPLOAD_PASSWORDS`, you must define `FLASKUP_UPLOAD_PASSWORDS_CHECK`.\n\n`FLASKUP_UPLOAD_PASSWORDS_CHECK` must be a reference to a method that accepts\ntwo arguments: the user submitted password and the hashed password (from\n`FLASKUP_UPLOAD_PASSWORDS`), and then returns `True` if passwords match, else\n`False`.\n\n::\n\n from passlib.hash import bcrypt\n\n FLASKUP_UPLOAD_PASSWORDS = [\n ('$2a$12$oIWeziyq4wjF08gntfU4w.AQZfYbbQoK7y13ParN83G7ta.qtN2.e', 'pw1'),\n ('$2a$12$zQ/hzog/iYr49fbo0mitS.y9f.uHP.7IyqWgk5/S1Ict50HRl4XxW', 'pw2'),\n ]\n FLASKUP_UPLOAD_PASSWORDS_CHECK = bcrypt.verify\n\nNginx Upload Module\n-------------------\n\nIf you are using `Nginx `_ with the `upload-module\n`_, you can configure it to efficiently\nupload files to Flaskup!. Using this module is recommended when you need to\ndeal with large files: the whole POST is not decoded in Python and the uploaded\nfile is moved just one time (with the normal file upload mechanism the file is\nre-sent from Nginx to your WSGI server, and then it is copied to the final\ndestination).\n\n\nConfigure Flaskup!\n~~~~~~~~~~~~~~~~~~\n\nYou must define the two following configuration values:\n\n- `FLASKUP_NGINX_UPLOAD_MODULE_ENABLED`: must be set to `True`\n- `FLASKUP_NGINX_UPLOAD_MODULE_STORE`: must be set to the `upload_store` of the\n upload-module\n\nExample configuration::\n\n FLASKUP_NGINX_UPLOAD_MODULE_ENABLED = True\n FLASKUP_NGINX_UPLOAD_MODULE_STORE = /tmp/nginx_upload_module\n\n\nConfigure Nginx\n~~~~~~~~~~~~~~~\n\n- be sure that you compiled Nginx with the upload-module\n- create a folder where uploaded files will be stored, preferably on the same\n disk or partition as `FLASKUP_UPLOAD_FOLDER` to avoid unnecessary I/O\n operations (this folder is named `upload_store` in your Nginx config)\n- check permissions on the `upload_store` folder: users running Nginx and\n Flaskup! must have read/write permissions\n- edit your configuration file (add the `/upload` location)\n\nExample configuration::\n\n server {\n listen [::]:80;\n server_name \"flaskup.example.com\";\n client_max_body_size 2g;\n\n access_log /var/log/nginx/flaskup_access.log combined;\n error_log /var/log/nginx/flaskup_error.log;\n\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header Host $http_host;\n\n location /static/ {\n alias /path/to/env/lib/python2.7/site-packages/flaskup/static/;\n }\n location = /upload {\n upload_pass @upstream;\n upload_store /tmp/nginx_upload_module;\n upload_store_access user:rw;\n\n upload_set_form_field $upload_field_name.name \"$upload_file_name\";\n upload_set_form_field $upload_field_name.path \"$upload_tmp_path\";\n\n upload_pass_form_field \"^myemail$|^mycontacts$\";\n upload_cleanup 400-599;\n }\n location / {\n proxy_pass http://127.0.0.1:8000;\n }\n location @upstream {\n proxy_pass http://127.0.0.1:8000;\n }\n }\n\n\nCredits\n-------\n\nFlaskup! is maintained by `Laurent Meunier `_.\n\n\nLicenses\n--------\n\nFlaskup! is Copyright (c) 2012 Laurent Meunier. It is free software, and may be\nredistributed under the terms specified in the LICENSE file (a 3-clause BSD\nLicense).\n\nFlaskup! uses `Bootstrap `_ (`Apache\nLicense v2.0 `_) and `jQuery\n`_ (`MIT or GPLv2 License `_).\n",
"description_content_type": null,
"docs_url": null,
"download_url": "http://git.deltalima.net/flaskup/snapshot/flaskup-0.3.2.tar.gz",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "http://git.deltalima.net/flaskup/",
"keywords": null,
"license": "BSD",
"maintainer": null,
"maintainer_email": null,
"name": "flaskup",
"package_url": "https://pypi.org/project/flaskup/",
"platform": "UNKNOWN",
"project_url": "https://pypi.org/project/flaskup/",
"project_urls": {
"Download": "http://git.deltalima.net/flaskup/snapshot/flaskup-0.3.2.tar.gz",
"Homepage": "http://git.deltalima.net/flaskup/"
},
"release_url": "https://pypi.org/project/flaskup/0.3.2/",
"requires_dist": null,
"requires_python": null,
"summary": "A simple Flask application to share files.",
"version": "0.3.2"
},
"last_serial": 1123822,
"releases": {
"0.1": [],
"0.1.1": [
{
"comment_text": "",
"digests": {
"md5": "e28f3dcf701b52c5bf611c1f00b60e37",
"sha256": "8ea95064816ac92b5acf88d05c8dca09d2e3ef33f3630cff00e36d9fbc33c839"
},
"downloads": -1,
"filename": "flaskup-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "e28f3dcf701b52c5bf611c1f00b60e37",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 101411,
"upload_time": "2012-12-22T17:01:13",
"url": "https://files.pythonhosted.org/packages/04/ef/c5e5934555371f1d671aa8f192f4d1c73bdde3f9ca2f710617cb874232c3/flaskup-0.1.1.tar.gz"
}
],
"0.2": [
{
"comment_text": "",
"digests": {
"md5": "7a0f9ebf83610829d8aa16b1c742ab0a",
"sha256": "ddb6a401f55de04e74c67c87fc2c71ca36a95a08468bf375ef4f6746b7331683"
},
"downloads": -1,
"filename": "flaskup-0.2.tar.gz",
"has_sig": false,
"md5_digest": "7a0f9ebf83610829d8aa16b1c742ab0a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 104676,
"upload_time": "2013-06-12T16:47:52",
"url": "https://files.pythonhosted.org/packages/0a/a5/5ae67ed0ea2a4d3ed2b21690b7ecad7e53a94db7651f0e4c6122938e04f4/flaskup-0.2.tar.gz"
}
],
"0.3": [
{
"comment_text": "",
"digests": {
"md5": "8b8c919ad08f308cdd14139462bb7bea",
"sha256": "ebeadcb3e9022cf3810764a512b7cb32f77e8dad131a36ab936a90b743266087"
},
"downloads": -1,
"filename": "flaskup-0.3.tar.gz",
"has_sig": false,
"md5_digest": "8b8c919ad08f308cdd14139462bb7bea",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 138460,
"upload_time": "2013-08-06T13:25:29",
"url": "https://files.pythonhosted.org/packages/01/a6/e3d2b6cb1bd9ed55cce0627b155d655e5296e0863d918705b2eb91094262/flaskup-0.3.tar.gz"
}
],
"0.3.1": [
{
"comment_text": "",
"digests": {
"md5": "bfa71430307e76aa10e710f6ddac634d",
"sha256": "f041ec2bb94d9ea0c7b5d2ddc8188e1c2a339eb1c5d5f85d9a6f5136ce70971e"
},
"downloads": -1,
"filename": "flaskup-0.3.1.tar.gz",
"has_sig": false,
"md5_digest": "bfa71430307e76aa10e710f6ddac634d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 107595,
"upload_time": "2013-08-07T17:15:31",
"url": "https://files.pythonhosted.org/packages/c7/14/134cb27d5c2083ba307221d2ecd0fb997df234fa4a01c9ee145cb451ca9e/flaskup-0.3.1.tar.gz"
}
],
"0.3.2": [
{
"comment_text": "",
"digests": {
"md5": "206baf1f3ed463f657861944ac92f771",
"sha256": "f8612d563752e9fb699bc16ddb66435cc7461b07b8785f03b57df811fdba153b"
},
"downloads": -1,
"filename": "flaskup-0.3.2.tar.gz",
"has_sig": false,
"md5_digest": "206baf1f3ed463f657861944ac92f771",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 108396,
"upload_time": "2014-06-13T12:01:56",
"url": "https://files.pythonhosted.org/packages/8a/23/cd951a3cef3877fa11cf79a6a9d23770c521fee9dbef4ac474bddeb46708/flaskup-0.3.2.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "206baf1f3ed463f657861944ac92f771",
"sha256": "f8612d563752e9fb699bc16ddb66435cc7461b07b8785f03b57df811fdba153b"
},
"downloads": -1,
"filename": "flaskup-0.3.2.tar.gz",
"has_sig": false,
"md5_digest": "206baf1f3ed463f657861944ac92f771",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 108396,
"upload_time": "2014-06-13T12:01:56",
"url": "https://files.pythonhosted.org/packages/8a/23/cd951a3cef3877fa11cf79a6a9d23770c521fee9dbef4ac474bddeb46708/flaskup-0.3.2.tar.gz"
}
]
}