{ "info": { "author": "Louis Bettens", "author_email": "louis@bettens.info", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: zlib/libpng License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Communications :: File Sharing", "Topic :: Software Development :: Build Tools", "Topic :: Utilities" ], "description": "What's this?\n============\n\nAn easy-to-deploy file transfer tool. The only requirements are:\n\n* both devices must be connected on the same local network,\n\n* One has a Python interpreter,\n\n* The other has a web browser.\n\n.. figure:: https://raw.githubusercontent.com/lourkeur/httpshare-pypi/master/static/demo1.png\n :target: demo1_transcript_\n :alt:\n Screenshot of httpshare in a vanilla Ubuntu terminal.\n (follow link for transcript)\n\n httpshare displaying a QR code as it starts.\n\n\n.. figure:: https://raw.githubusercontent.com/lourkeur/httpshare-pypi/master/static/demo2.png\n :target: demo2_transcript_\n :alt:\n Screenshot of the homepage of httpshare's ephemeral site.\n (follow link for transcript)\n\n The resulting service in Firefox Mobile.\n\nUsage\n=====\nMake sure you have a Python interpreter set up.\nIt doesn't matter if it's 2.7 or 3+.\nThen, simply install httpshare the normal Python way using ``pip install httpshare`` on the command line.\nThen, you can call httpshare by simply typing ``httpshare`` on the command-line.\nAlso see ``httpshare --help``.\n\nWhen launched, unless a network address was specified on the command-line, httpshare learns its address by connecting to a widely available web site. (http://github.com/)\nThis is reasonably likely to be the correct setting in common scenarios since most networks nowadays are primarily meant to provide access to the internet.\nOnce this is done, it starts listening on an ephemeral port and prints an URL to help the other device (*the guest*) connect.\nThe URL is supplemented by an equivalent QR code.\nOnce it connects, the guest can control httpshare by interacting with the web pages that it serves.\nThis enables file transfer in both directions.\nWhen the guest performs a file upload, manual confirmation will be required on the host.\n\nLimitations\n===========\nhttpshare is not designed to protect any data against a hostile third party accessing the same local network.\nIt's perfectly possible that such an attacker could copy or alter the contents of the files being exchanged.\nIf available, use more robust file-sharing methods.\nAlso consider encrypting and/or authenticating data using separate tools.\nUsing httpshare ideally shouldn't open the host to remote code execution, but no formal guarantee is made.\n\nhttpshare is single-threaded and uses synchronous IO.\nThis renders it unable to serve multiple guests simultaneously.\nHowever, it's possible to run multiple instances in parallel and assign one to each guest.\n\nDistribution\n============\nReleases can be checked using PGP.\nPlease follow this link to `the signing key`_.\n\nNote that a self-contained variant of this program is also available.\nIt's reproductibly built, and it can distribute itself through its ephemeral web site.\nSee here__ for more information.\n\n__ https://github.com/lourkeur/httpshare\n\nhttpshare is `free software`_, released under the zlib/libpng License.\nIf you intend to distribute derivative version of this software, I would encourage using the ``PREFIX`` field in ``version.py`` to mark them as such.\n\n.. _the signing key: https://github.com/lourkeur/httpshare-pypi/blob/master/release_key.asc\n.. _free software: http://www.gnu.org/philosophy/free-sw.html\n\nTrivia\n======\nThe Python standard library module ``http.server`` (or ``SimpleHTTPServer`` in Python 2) offers similar functionality, but doesn't support uploading.\nThis project started with the goal of enhancing it, although it doesn't rely on code that's part of it.\n\n.. [#demo1_transcript]\n ::\n\n user@artfulhost:~$ httpshare --directory Pictures/\n httpshare version 1.0.3\n\n You can use the interrupt key (normally Control-C or Delete) to exit the program.\n\n [[QR code]]\n http://10.0.0.72:34575\n\n.. [#demo2_transcript]\n ::\n\n Welcome!\n\n You've reached an ephemeral file sharing service launched on a computer near you. You can click on directories to browse them, click on files to download them, or use the form at the bottom to upload files.\n\n This program: License(link) Copy(link) Development(link)\n\n ---\n\n (item) demo1.png(link)\n\n ---\n\n [[Browse] No file selected] [OK]", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lourkeur/httpshare-pypi", "keywords": "filetransfer", "license": "zlib", "maintainer": "", "maintainer_email": "", "name": "httpshare", "package_url": "https://pypi.org/project/httpshare/", "platform": "", "project_url": "https://pypi.org/project/httpshare/", "project_urls": { "Homepage": "https://github.com/lourkeur/httpshare-pypi" }, "release_url": "https://pypi.org/project/httpshare/1.0.7.post1/", "requires_dist": null, "requires_python": "", "summary": "Q&D file transfer utility using an ephemeral HTTP service", "version": "1.0.7.post1" }, "last_serial": 5629188, "releases": { "1.0.1": [ { "comment_text": "", "digests": { "md5": "6ffcec23748bab69ab10d624dac28808", "sha256": "1655702c7f0eb70cb884f7249c1e4a46318313cd3fcb59d595d687664384e320" }, "downloads": -1, "filename": "httpshare-1.0.1.tar.gz", "has_sig": true, "md5_digest": "6ffcec23748bab69ab10d624dac28808", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4407, "upload_time": "2017-11-26T18:52:28", "url": "https://files.pythonhosted.org/packages/fc/79/1babc2781552121d1ddbd681dd366ecf246e6207d98c0caaf2eb631abbac/httpshare-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "77e31389d357a130dc8e7d65f9aa55ee", "sha256": "072715eaf8d6ba3681817ad6f75ac6efa84a7881d7641cf69b5df2d3c3c03dd3" }, "downloads": -1, "filename": "httpshare-1.0.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "77e31389d357a130dc8e7d65f9aa55ee", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11089, "upload_time": "2018-01-21T17:20:27", "url": "https://files.pythonhosted.org/packages/c7/cf/a8c28708914091b97a13679ff5c21bc6af7741de3df1f929f194a2124074/httpshare-1.0.2-py2.py3-none-any.whl" } ], "1.0.2.post1": [ { "comment_text": "", "digests": { "md5": "29eb4e8290574acf66e3f92bf119d107", "sha256": "6e364d51d01b324825cfad25140746fbba266237b87c7409de99b0404254e828" }, "downloads": -1, "filename": "httpshare-1.0.2.post1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "29eb4e8290574acf66e3f92bf119d107", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12029, "upload_time": "2018-01-21T21:25:08", "url": "https://files.pythonhosted.org/packages/b7/ee/ae35dbcec80c14e8a150bc3c4c0ce9c7e93e67ada8d62e00c0ac0d3e6feb/httpshare-1.0.2.post1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "20b61342bbcf500769b42905c0c03571", "sha256": "07de2e2c6eea8a355b487b72c3adc82b7907398459b8bf61accb387701ed0f0d" }, "downloads": -1, "filename": "httpshare-1.0.2.post1.tar.gz", "has_sig": true, "md5_digest": "20b61342bbcf500769b42905c0c03571", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6589, "upload_time": "2018-01-21T21:27:08", "url": "https://files.pythonhosted.org/packages/78/81/39c48ffd3977adaa030b5827510956212ee7eb1c2203f34c3c67a9c60f8a/httpshare-1.0.2.post1.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "67586026930d9376f24d521c31346559", "sha256": "666137086f53ba1dc1714b8b91d6c879ac6f17f94ae9f6d7ef46a78874096f8f" }, "downloads": -1, "filename": "httpshare-1.0.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "67586026930d9376f24d521c31346559", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12998, "upload_time": "2018-01-24T19:33:06", "url": "https://files.pythonhosted.org/packages/d6/93/06d3ec82126df1a42b6ecdff10f53ccaa17d697feb596d9c15e16adfa3ea/httpshare-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36fdaafa2704b7db8fd9d7f230a8486f", "sha256": "1a276286d9e45212bed140cc063e51473a2eb6d2f74eba39fcaf99cd0e0195cd" }, "downloads": -1, "filename": "httpshare-1.0.3.tar.gz", "has_sig": true, "md5_digest": "36fdaafa2704b7db8fd9d7f230a8486f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6610, "upload_time": "2018-01-24T19:33:18", "url": "https://files.pythonhosted.org/packages/77/b3/31a424a97599747190ffa36f392c87783d48ecbf34e7420a9d56c1740c92/httpshare-1.0.3.tar.gz" } ], "1.0.3.post1": [ { "comment_text": "", "digests": { "md5": "3db9a1a9b2534299f476bf7ea4863fb6", "sha256": "9a5eabbdab007878b58009128695efce47aec49797474e7b9c939c198dbfbb1d" }, "downloads": -1, "filename": "httpshare-1.0.3.post1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "3db9a1a9b2534299f476bf7ea4863fb6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13145, "upload_time": "2018-01-24T19:39:50", "url": "https://files.pythonhosted.org/packages/85/4e/41ab585efa764098fb4987848f4f63b259571dbdba9595cd7880d329c2ec/httpshare-1.0.3.post1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "54fe837406e6b37d0ac40c7b6001583a", "sha256": "1294043fac2578477358c3388ef6f9f51e84f7696f28234111b5c5b7f0bb5199" }, "downloads": -1, "filename": "httpshare-1.0.3.post1.tar.gz", "has_sig": true, "md5_digest": "54fe837406e6b37d0ac40c7b6001583a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6643, "upload_time": "2018-01-24T19:39:59", "url": "https://files.pythonhosted.org/packages/b6/9d/10ddb3d3e7884d772e337db90bbf980c520f3b717e9476c7064b4f61171f/httpshare-1.0.3.post1.tar.gz" } ], "1.0.3.post2": [ { "comment_text": "", "digests": { "md5": "307fcd6f97162322a7c80d5e683a1cc9", "sha256": "4d6d6aaf25813f471c18d465fb5a84710fe825665f91ae9c49587f71513e3b11" }, "downloads": -1, "filename": "httpshare-1.0.3.post2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "307fcd6f97162322a7c80d5e683a1cc9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13906, "upload_time": "2018-01-27T22:08:42", "url": "https://files.pythonhosted.org/packages/ce/54/c59723e892c4180274b30c912b3551ce9aff80e53cf99773d7780c9842f7/httpshare-1.0.3.post2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4af8aeaefee028abad133e0ff05abb39", "sha256": "744854aa1a9b8e0361f43501a0ec188b52982b5fa745d739b1fd87534ed37fde" }, "downloads": -1, "filename": "httpshare-1.0.3.post2.tar.gz", "has_sig": true, "md5_digest": "4af8aeaefee028abad133e0ff05abb39", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6981, "upload_time": "2018-01-27T22:09:03", "url": "https://files.pythonhosted.org/packages/e1/75/260894c74c038a91b6cbe668edf00badd1c5a26abbf53bdb0543065da008/httpshare-1.0.3.post2.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "891831e43bf7d3dca02330c43772263b", "sha256": "0a9a62175dc682227a207a5f02bd63615a31e39881c13967c5ca20553aded75a" }, "downloads": -1, "filename": "httpshare-1.0.4-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "891831e43bf7d3dca02330c43772263b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13781, "upload_time": "2018-03-23T19:50:54", "url": "https://files.pythonhosted.org/packages/81/df/bcbd5f29631d535667e9846fa30a433514785d3a031524945b86e33e29dd/httpshare-1.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27da1c5b30028eab509cf69eced8066a", "sha256": "e554368fb1306ec56bfbcab1545816ceb538f639fd13927dbe82cc410ab81a81" }, "downloads": -1, "filename": "httpshare-1.0.4.tar.gz", "has_sig": true, "md5_digest": "27da1c5b30028eab509cf69eced8066a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7009, "upload_time": "2018-03-23T19:51:07", "url": "https://files.pythonhosted.org/packages/5c/4b/38a48854817da32d6ab8ee53877131eff3ed9be27b0edc60ef01ba5047ea/httpshare-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "6f8715132a4e792cf9e1092554c965ff", "sha256": "aae5d663bc66858705f1d964ec95d10fb40a4ccf1cf209d972c6ea76d3663d49" }, "downloads": -1, "filename": "httpshare-1.0.5-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "6f8715132a4e792cf9e1092554c965ff", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9845, "upload_time": "2018-04-30T16:34:46", "url": "https://files.pythonhosted.org/packages/76/a5/855c7ec62bb1daf3f049c532b3a038f988b929a5093e05a8096b06db64ad/httpshare-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1b1898c5d40c13bd9cd543d8ee0e7f75", "sha256": "357ed7d5b037abbf883ae6a5d229a84fcfff302425995eed6ccf0ac7c6450afb" }, "downloads": -1, "filename": "httpshare-1.0.5.tar.gz", "has_sig": true, "md5_digest": "1b1898c5d40c13bd9cd543d8ee0e7f75", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7053, "upload_time": "2018-04-30T16:35:05", "url": "https://files.pythonhosted.org/packages/a3/f9/294710dd7457818bdacfa3e7bf6da79edc1c6c00e364d5dfa842f206574f/httpshare-1.0.5.tar.gz" } ], "1.0.5.post1": [ { "comment_text": "", "digests": { "md5": "009a2ea52696cafe17f72fe7508b444a", "sha256": "5bef196aa5e8f18f8d104c4fcb79e9c4980e747c6bf4096a193e3cf427f5f2fe" }, "downloads": -1, "filename": "httpshare-1.0.5.post1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "009a2ea52696cafe17f72fe7508b444a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9938, "upload_time": "2018-11-28T21:29:34", "url": "https://files.pythonhosted.org/packages/89/65/13fb566c3c93a07e7faa55ac3229c3e8113ec0e29007145bf0883a5fd990/httpshare-1.0.5.post1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab4565c445b1b4a6e39d97521f64d8c3", "sha256": "1cd5abb9b2e4ada5d712f9fe0e250838a8a9c38954722aa273d958a2388e9e38" }, "downloads": -1, "filename": "httpshare-1.0.5.post1.tar.gz", "has_sig": true, "md5_digest": "ab4565c445b1b4a6e39d97521f64d8c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6999, "upload_time": "2018-11-28T21:29:39", "url": "https://files.pythonhosted.org/packages/5a/ac/d1159650943f72690ae6a942598f4b948ad02094db207e26089677184413/httpshare-1.0.5.post1.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "1952d6612153e0da51203af41b0ba055", "sha256": "0ea0c803ce6245f7201f281f40723ebc00110e49c909f69329fbb765a2061b6e" }, "downloads": -1, "filename": "httpshare-1.0.6-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "1952d6612153e0da51203af41b0ba055", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9832, "upload_time": "2018-12-23T21:25:25", "url": "https://files.pythonhosted.org/packages/5e/a3/5c1c92340c52640a932f6f2d7672df4cd3431734152fabc9529ba6c97715/httpshare-1.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d42ca1ad6d980b0a3b4a43a5db0f08b", "sha256": "ed3dfc72c4957f2a79c89bf08328328a204dc1ea08372783e446e47b5b120873" }, "downloads": -1, "filename": "httpshare-1.0.6.tar.gz", "has_sig": true, "md5_digest": "5d42ca1ad6d980b0a3b4a43a5db0f08b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6997, "upload_time": "2018-12-23T21:25:29", "url": "https://files.pythonhosted.org/packages/1d/12/f64b6fc059635404c7b2cc7a85d533efff15525d91f0c1d2667c28599800/httpshare-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "95a89d270ae3c4db41103bee377ebf28", "sha256": "4f9260057badda03ba7d7df927a05961997c339cc227b042d80c3605eb83afda" }, "downloads": -1, "filename": "httpshare-1.0.7.tar.gz", "has_sig": false, "md5_digest": "95a89d270ae3c4db41103bee377ebf28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7205, "upload_time": "2019-07-03T21:02:02", "url": "https://files.pythonhosted.org/packages/63/fb/8dc00f98dde44b6d1856ff2d83dfb846f85d3ed8d603f154881080086426/httpshare-1.0.7.tar.gz" } ], "1.0.7.post1": [ { "comment_text": "", "digests": { "md5": "ae85cea9bfbb0080208708023a58f834", "sha256": "1c24873d3c854725f503e30c7736a85828205447569e440543404a92a9ce1526" }, "downloads": -1, "filename": "httpshare-1.0.7.post1.tar.gz", "has_sig": false, "md5_digest": "ae85cea9bfbb0080208708023a58f834", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7840, "upload_time": "2019-08-03T21:23:57", "url": "https://files.pythonhosted.org/packages/5e/ea/35fc517cbe30a7bf43c8c64fb37adb953c8b32ca42308ffc12694027ae93/httpshare-1.0.7.post1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ae85cea9bfbb0080208708023a58f834", "sha256": "1c24873d3c854725f503e30c7736a85828205447569e440543404a92a9ce1526" }, "downloads": -1, "filename": "httpshare-1.0.7.post1.tar.gz", "has_sig": false, "md5_digest": "ae85cea9bfbb0080208708023a58f834", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7840, "upload_time": "2019-08-03T21:23:57", "url": "https://files.pythonhosted.org/packages/5e/ea/35fc517cbe30a7bf43c8c64fb37adb953c8b32ca42308ffc12694027ae93/httpshare-1.0.7.post1.tar.gz" } ] }