ezserve


Nameezserve JSON
Version 0.2.0 PyPI version JSON
download
home_pageNone
SummaryA simple way to share files over HTTP without explaining FTP to the receiver.
upload_time2024-10-02 20:54:39
maintainerNone
docs_urlNone
authorNone
requires_python>=3.12
licenseThis is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to <https://unlicense.org>
keywords server serve easy http cli
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # EZserve
Simple (and hopefully secure enough) way to share files over HTTP. Inspired by [simple-http-server](https://github.com/TheWaWaR/simple-http-server).

## Usage

Running the package will serve the current working directory publicly on `0.0.0.0:53443`. Alternatively, you can pass one or more file/folder as a console argument to serve them as if they were in the same directory.

`py -m ezserve "Videos/Shared" "Videos/private/or_not.mp4"` will let your clients access any video in `$cwd/Videos/Shared` and its subfolders, as well as a single video from `$cwd/Videos/private`, but not other videos next to it.

## Security Concerns

Although I've attempted to prevent abuse by completely banning `..` from the paths, I can't guarantee that there's no way to access files you  

## Roadmap (in no particular order)

- [x] **Core:** Proof-of-concept: serve listed files and dirs
- [ ] **Core:** Figure out HTTPS
- [x] **Core:** Add global password protection
- [ ] **Core:** Add per-file password protection
- [ ] **QoL:** improve the web UI
- [ ] **QoL:** allow selecting multiple files and folders to download all of them in one ZIP file
- [ ] **QoL:** add CF tunnel support to make it easier for people without a public IP.
- [ ] **Maybe?** Run the server as a daemon, with a context-menu option to share a file. 

## Known Issues

* I use symlinks to simplify sharing multiple distinct folders as if they were next to each other. Windows, for some reason, is being really stingy about that. Enabling developer mode in settings seems to alleviate the issue; I'm not actively planning on fixing that, although it would be a nice thing to have.

* Large file downloads can sometimes hang the server, rendering it unresponsive to other clients. I'm looking into that one, but it seems mostly harmless in the general use case.

* I'm aware that inserting the password into the URL is insecure, but so is plain HTTP. Get over it.

## CLI Options

* `-H` `--host` - hostname to listen on. `0.0.0.0` by default, meaning your files are exposed to the internet. It can be a fully qualified domain name (FQDN) or the public IP address of the interface you intend to listen on.
* `-p` `--port` - port number to listen on. `53443` by default. Any unoccupied port works; your browser will automatically try port `80` for `http://` and port `443` for `https://`.
* `-e` `--expand-root` - when serving a single directory, the web UI will show its contents on the frontpage, instead of a list with only the root folder's name. Ignored if you serve a single file/anything more than just a single directory. At the time of writing this, it also prevents the creation of a temp folder with a symlink; this is an implementation detail and should not be relied on (although I doubt anyone will rely on it anyway).
* `-P` `--password` - sets a global password or generates a random one if `*` is passed as the value. Users must pass `password` as a query parameter to every request, otherwise they will face a 404 error. It's inserted into every hyperlink.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "ezserve",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.12",
    "maintainer_email": null,
    "keywords": "server, serve, easy, http, cli",
    "author": null,
    "author_email": "Farm-Art <github@farmart.tech>",
    "download_url": "https://files.pythonhosted.org/packages/22/cf/a7335d961d037a4a9387b33416573093a6afe92c3c0d19784df27671b9b8/ezserve-0.2.0.tar.gz",
    "platform": null,
    "description": "# EZserve\r\nSimple (and hopefully secure enough) way to share files over HTTP. Inspired by [simple-http-server](https://github.com/TheWaWaR/simple-http-server).\r\n\r\n## Usage\r\n\r\nRunning the package will serve the current working directory publicly on `0.0.0.0:53443`. Alternatively, you can pass one or more file/folder as a console argument to serve them as if they were in the same directory.\r\n\r\n`py -m ezserve \"Videos/Shared\" \"Videos/private/or_not.mp4\"` will let your clients access any video in `$cwd/Videos/Shared` and its subfolders, as well as a single video from `$cwd/Videos/private`, but not other videos next to it.\r\n\r\n## Security Concerns\r\n\r\nAlthough I've attempted to prevent abuse by completely banning `..` from the paths, I can't guarantee that there's no way to access files you  \r\n\r\n## Roadmap (in no particular order)\r\n\r\n- [x] **Core:** Proof-of-concept: serve listed files and dirs\r\n- [ ] **Core:** Figure out HTTPS\r\n- [x] **Core:** Add global password protection\r\n- [ ] **Core:** Add per-file password protection\r\n- [ ] **QoL:** improve the web UI\r\n- [ ] **QoL:** allow selecting multiple files and folders to download all of them in one ZIP file\r\n- [ ] **QoL:** add CF tunnel support to make it easier for people without a public IP.\r\n- [ ] **Maybe?** Run the server as a daemon, with a context-menu option to share a file. \r\n\r\n## Known Issues\r\n\r\n* I use symlinks to simplify sharing multiple distinct folders as if they were next to each other. Windows, for some reason, is being really stingy about that. Enabling developer mode in settings seems to alleviate the issue; I'm not actively planning on fixing that, although it would be a nice thing to have.\r\n\r\n* Large file downloads can sometimes hang the server, rendering it unresponsive to other clients. I'm looking into that one, but it seems mostly harmless in the general use case.\r\n\r\n* I'm aware that inserting the password into the URL is insecure, but so is plain HTTP. Get over it.\r\n\r\n## CLI Options\r\n\r\n* `-H` `--host` - hostname to listen on. `0.0.0.0` by default, meaning your files are exposed to the internet. It can be a fully qualified domain name (FQDN) or the public IP address of the interface you intend to listen on.\r\n* `-p` `--port` - port number to listen on. `53443` by default. Any unoccupied port works; your browser will automatically try port `80` for `http://` and port `443` for `https://`.\r\n* `-e` `--expand-root` - when serving a single directory, the web UI will show its contents on the frontpage, instead of a list with only the root folder's name. Ignored if you serve a single file/anything more than just a single directory. At the time of writing this, it also prevents the creation of a temp folder with a symlink; this is an implementation detail and should not be relied on (although I doubt anyone will rely on it anyway).\r\n* `-P` `--password` - sets a global password or generates a random one if `*` is passed as the value. Users must pass `password` as a query parameter to every request, otherwise they will face a 404 error. It's inserted into every hyperlink.\r\n",
    "bugtrack_url": null,
    "license": "This is free and unencumbered software released into the public domain.  Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.  In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  For more information, please refer to <https://unlicense.org> ",
    "summary": "A simple way to share files over HTTP without explaining FTP to the receiver.",
    "version": "0.2.0",
    "project_urls": {
        "Homepage": "https://github.com/Farm-Art/EZserve",
        "Issues": "https://github.com/Farm-Art/EZserve/issues"
    },
    "split_keywords": [
        "server",
        " serve",
        " easy",
        " http",
        " cli"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5691869cb7c1a7bc5202fad3743f90255cbe8795cb523047c481ee46338ef186",
                "md5": "2fa91daed83bd4f35061e4e7592143a2",
                "sha256": "c5081d56272fee5b9f39d083e0b779fcc66c7a5296dde6f36adf2822a905b0f0"
            },
            "downloads": -1,
            "filename": "ezserve-0.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2fa91daed83bd4f35061e4e7592143a2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.12",
            "size": 5995,
            "upload_time": "2024-10-02T20:54:38",
            "upload_time_iso_8601": "2024-10-02T20:54:38.115920Z",
            "url": "https://files.pythonhosted.org/packages/56/91/869cb7c1a7bc5202fad3743f90255cbe8795cb523047c481ee46338ef186/ezserve-0.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "22cfa7335d961d037a4a9387b33416573093a6afe92c3c0d19784df27671b9b8",
                "md5": "32f434a0564d09991d0c369b7afdb156",
                "sha256": "abc824ad308fed50cae2bcf52d05facb513cbdc326d883861a8d6cbac5a3275d"
            },
            "downloads": -1,
            "filename": "ezserve-0.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "32f434a0564d09991d0c369b7afdb156",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.12",
            "size": 5195,
            "upload_time": "2024-10-02T20:54:39",
            "upload_time_iso_8601": "2024-10-02T20:54:39.717946Z",
            "url": "https://files.pythonhosted.org/packages/22/cf/a7335d961d037a4a9387b33416573093a6afe92c3c0d19784df27671b9b8/ezserve-0.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-02 20:54:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Farm-Art",
    "github_project": "EZserve",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "ezserve"
}
        
Elapsed time: 0.54038s