{"id":16317037,"url":"https://github.com/simatwa/tdwnsv3","last_synced_at":"2025-03-09T01:31:59.679Z","repository":{"id":88458603,"uuid":"589252894","full_name":"Simatwa/tdwnsv3","owner":"Simatwa","description":"Simple local-files server with security on top.","archived":false,"fork":false,"pushed_at":"2023-12-22T10:45:16.000Z","size":1309,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-26T16:47:25.240Z","etag":null,"topics":["browsefile","file-browser","file-hosting","filemanagement","filemanager","files-server","fileserver","filesystem","hosting","localhost","localstorage","server"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Simatwa.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-15T15:29:01.000Z","updated_at":"2024-08-03T13:50:25.000Z","dependencies_parsed_at":"2024-10-23T00:30:29.521Z","dependency_job_id":null,"html_url":"https://github.com/Simatwa/tdwnsv3","commit_stats":{"total_commits":73,"total_committers":2,"mean_commits":36.5,"dds":0.06849315068493156,"last_synced_commit":"fbd3f6a6f0f71a37bec13069180e9af3fefd4966"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Simatwa%2Ftdwnsv3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Simatwa%2Ftdwnsv3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Simatwa%2Ftdwnsv3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Simatwa%2Ftdwnsv3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Simatwa","download_url":"https://codeload.github.com/Simatwa/tdwnsv3/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242631139,"owners_count":20160830,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browsefile","file-browser","file-hosting","filemanagement","filemanager","files-server","fileserver","filesystem","hosting","localhost","localstorage","server"],"created_at":"2024-10-10T22:06:25.885Z","updated_at":"2025-03-09T01:31:59.264Z","avatar_url":"https://github.com/Simatwa.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003etdwnsv3\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/Simatwa/tdwnsv3\"\u003e\u003cimg src=\"https://img.shields.io/static/v1?label=Github\u0026message=Passing\u0026logo=github\u0026color=green\" alt=\"Github\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/tdwnsv3\"\u003e\u003cimg src=\"https://img.shields.io/static/v1?label=Pypi\u0026message=v1.9.5\u0026color=yellow\u0026logo=pypi\" alt=\"pypi\"/\u003e\u003c/a\u003e\n\u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/static/v1?label=Coverage\u0026message=80%\u0026color=lime\u0026logo=Coverage\" alt=\"Coverage\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://wakatime.com/badge/github/Simatwa/svinf3\"\u003e\u003cimg src=\"https://wakatime.com/badge/github/Simatwa/svinf3.svg\" alt=\"wakatime\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://pepy.tech/project/tdwnsv3\"\u003e\u003cimg src=\"https://static.pepy.tech/badge/tdwnsv3\" alt=\"Downloads\"/\u003e\u003c/a\u003e\n\u003ca href=\"#\"\u003e\u003cimg src=\"https://visitor-badge.glitch.me/badge?page_id=Simatwa.tdwnsv3\u0026left_color=red\u0026right_color=lime\u0026left_text=Counts\" alt=\"Visitors\"/\u003e\u003c/a\u003e\n\u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/static/v1?label=Code Style\u0026message=Black\u0026color=black\u0026logo=Black\" alt=\"Code-style\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e Access your files on the web.\n\n![Web interface sample](https://github.com/Simatwa/tdwnsv3/raw/main/assets/web_interface_example.gif)\n\n## [Independencies](https://github.com/Simatwa/tdwnsv3/raw/main/requirements.txt)\n\n* Flask\n* cryptography\n* appdirs\n\n## Features\n\n- Simple commandline interface\n- Web interface with multiple themes\n- Serve as static files server - index.html\n- Highly immune against variety of attacks\n- Compatible with multiple devices and browsers\n- Fully customizable web interface - css\n- Upload and download files\n- Delete multiple files with a click\n\n## Installation \n\n- Choose your suit from the following ways:\n\n1. From pip \n  \n  ```sh\n  $ pip install tdwnsv3\n  ```\n\n2. From source\n\n ```sh\n $ pip install git+https://github.com/Simatwa/tdwnsv3.git\n ```\n\n 3. Cloning repo and install\n\n  ```sh\n  git clone https://github.com/Simatwa/tdwnsv3.git\n  cd tdwnsv3\n  sudo bash install.sh\n  ```\n\n\n## Usage ##\n\nEither of the following ways will get you ready at the terminal environment\n\n1. Package level\n```\n$ python -m tdwnsv3\n```\n2. `$ tdwnsv3`\n\n\u003cp align=\"center\"\u003eBy default, the server fires up with the following configurations:\u003c/p\u003e\n\n\u003ctable align='center'\u003e\n\u003cthead\u003e\n\u003ctr\u003e\u003cth\u003eCommand  \u003c/th\u003e\u003cth style=\"text-align: right;\"\u003e  Default\u003c/th\u003e\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\u003ctd\u003ehost     \u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e    False\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eport     \u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e     8000\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eno-sort     \u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e   False\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003etheme    \u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e        3\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eupload   \u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e    False\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eencrypt  \u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e    False\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003esession  \u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e    False\u003c/td\u003e\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003e **Note** This is just a shallow display of the default configurations.\n\n## wsgi \n\nSince Flask server runs at development environment, you may need to run the program on a server such as [Nginx](https://nginx.org) for efficiency.\n\n```py\nfrom tdwnsv3.tdwnsv3 import app\n\nif __name__ == \"__main__\":\n    app.run()\n```\n\nThe [wsgi.py](https://github.com/Simatwa/tdwnsv3/raw/main/wsgi.py) script can be interfaced with **wsgi** such as **uwsgi** to run behind a *server* .\n * For  instance intergrating with `uwsgi` as stated in [docs](https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html) :\n \n ```\n\n$ uwsgi --http=0.0.0.0:8080 -w wsgi:app\n\n```\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\n\n- Run  ```tdwnsv3 -h``` to view more configuration info as shown.\n\n\u003c/summary\u003e\n\n```\n\nusage: tdwnsv3 [-h] [-v] [-d DIR] [-a ALLOW] [-r RESTRICT] [-w WHITELIST]\n               [-b BLACKLIST] [-t SPLIT] [-s 1 to 10] [-l 1 to 5] [-o LOG]\n               [-ho HOME] [-st STATIC] [-up RECEIVE] [-se SESSION] [-th [1-3]]\n               [-cs CSS] [-upp UPLOAD_PATH] [-upe UPLOAD_EXTENSION]\n               [-ups UPLOAD_SIZE] [-upl upload_limit] [--upload-multiple]\n               [--disable-aggressive] [--display-hidden] [--host] [--no-sort]\n               [--view] [--strict] [--preload] [--upload] [--save-css]\n               [--no-cache] [--encrypt] [--debug] [--index]\n               [port]\n\nSimple local-files server with security on top!\n\npositional arguments:\n  port                  Port to be used for hosting files\n\noptions:\n  -h, --help            show this help message and exit\n  -v, --version         show program's version number and exit\n  -d DIR, --dir DIR     Directory to be hosted\n  -a ALLOW, --allow ALLOW\n                        Host only certain entries\n  -r RESTRICT, --restrict RESTRICT\n                        Hide entries from being viewed\n  -w WHITELIST, --whitelist WHITELIST\n                        IP(s) to be excluded from restrictions - default :\n                        None\n  -b BLACKLIST, --brownlist BLACKLIST\n                        IP(s) to be imposed the restrictions - default : all\n  -t SPLIT, --split SPLIT\n                        Separator for the entries allowed/restricted - default\n                        [,]\n  -s 1 to 10, --secure 1 to 10\n                        Level of security on contents\n  -l 1 to 5, --level 1 to 5\n                        Logging level\n  -o LOG, --log LOG     Filepath to log to\n  -ho HOME, --home HOME\n                        Home host subdomain path\n  -st STATIC, --static STATIC\n                        Static host subdomain path\n  -up RECEIVE, --receive RECEIVE\n                        Upload host subdomain path\n  -se SESSION, --session SESSION\n                        Maximum session time per user - (mins)\n  -th [1-3], --theme [1-3]\n                        Theme for displaying contents\n  -cs CSS, --css CSS    Customize webpage with the CSS in path\n  -upp UPLOAD_PATH, --upload-path UPLOAD_PATH\n                        Path for saving uploaded files\n  -upe UPLOAD_EXTENSION, --upload-extension UPLOAD_EXTENSION\n                        Extensions of files to be uploaded\n  -ups UPLOAD_SIZE, --upload-size UPLOAD_SIZE\n                        Maximum file size to be uploaded - [MB]\n  -upl upload_limit, --upload-limit-person upload_limit\n                        Maximum files to be uploaded per IP\n  --upload-multiple     Allow users to upload more than one file at a time.\n  --disable-aggressive  Not to - Filter all entries with the restricted\n                        keywords +\n  --display-hidden      Show hidden files and directories\n  --host                Host the files on the LAN\n  --no-sort             Disable prettifying the display of contents\n  --view                Files can be seen but can't be downloaded\n  --strict              Only allow whitelisted \u0026 brownlisted IPs to access\n                        server!\n  --preload             Load videos before clicked\n  --upload              Allow users to upload files\n  --save-css            Saves the css data in path for future use\n  --no-cache            Use currently passed parameters not previously saved;\n                        content-caching disabled\n  --encrypt             Encrypt URIs on the webpage\n  --debug               Debug the web application in UI mode\n  --index               Serve from index.html file\n\n```\n\n\u003c/details\u003e\n\n- Review [CHANGELOG](CHANGELOG.md)\n\n## Acknowledgements\n\n* [x] [Flask](https://github.com/pallets/flask) \n* [x] [Python](https://python.org)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimatwa%2Ftdwnsv3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimatwa%2Ftdwnsv3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimatwa%2Ftdwnsv3/lists"}