{"id":17709403,"url":"https://github.com/0snap/wg-tools","last_synced_at":"2025-03-31T07:42:29.628Z","repository":{"id":78799393,"uuid":"46072182","full_name":"0snap/wg-tools","owner":"0snap","description":"https://wg-tools.de","archived":false,"fork":false,"pushed_at":"2017-11-01T18:47:08.000Z","size":16468,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-06T12:15:53.908Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/0snap.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"2015-11-12T18:27:12.000Z","updated_at":"2017-02-06T14:36:16.000Z","dependencies_parsed_at":"2023-07-17T05:48:59.179Z","dependency_job_id":null,"html_url":"https://github.com/0snap/wg-tools","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0snap%2Fwg-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0snap%2Fwg-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0snap%2Fwg-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0snap%2Fwg-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0snap","download_url":"https://codeload.github.com/0snap/wg-tools/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246436052,"owners_count":20776960,"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":[],"created_at":"2024-10-25T04:03:55.315Z","updated_at":"2025-03-31T07:42:29.605Z","avatar_url":"https://github.com/0snap.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WG-Tools\n\nThis project is currently on hold. I do not need the software any longer (at least for now). If you somehow stumbled upon this, please feel free to carry on and improve it!\n\nThe hosted version is not longer available, but you can get the whole application containerized for self hosting at [dockerhub](https://hub.docker.com/r/fixel/wg-tools/).\n\n### Build\n[![Build Status](https://travis-ci.org/0ortmann/wg-tools.svg?branch=master)](https://travis-ci.org/0ortmann/wg-tools)\n\n### Docker Layer\nFrontend:\n[![](https://badge.imagelayers.io/fixel/wg-tools:backend.svg)](https://imagelayers.io/?images=fixel/wg-tools:frontend 'Get your own badge on imagelayers.io')\n\nBackend:\n[![](https://badge.imagelayers.io/fixel/wg-tools:backend.svg)](https://imagelayers.io/?images=fixel/wg-tools:backend 'Get your own badge on imagelayers.io')\n\nMongo-Container:\n[![](https://badge.imagelayers.io/fixel/wg-tools:mongo.svg)](https://imagelayers.io/?images=fixel/wg-tools:mongo 'Get your own badge on imagelayers.io')\n\n## Purpose\n\nIf you are living in a flat share and have to manage expenses or other stuff and you want some just-working tool for that purpose, then you are at the right place here. This applicaiton is meant for diy hosting and development. Feel free to contribute!\n\n\n### Behavior\n\nYou can create a 'WG' (flat share) with a login, then actually login with that. The app stores expenses and calculates the mean among all participants. It offers a human-usable interface for non-tech people. Currently under development, so basically anything may change from now to then!\n\n### Planning\nThe next most necessary step is exhaustive testing for frontend-side reducer and action creator logic. Then comes a user feature for custom settings and I want to work out some concept for automated security testing. Then all the things that are not already checkmarked below in this readme.\n\n\n## Usage\n\nYou may simply use the app for free or self host everything, compile sources or just run containers.\n\n### Plain Usage\n\nSimply use the hosted application here (registration does not require anything except a flatshare-name): [wg-tools.de](https://wg-tools.de)\n\n### DIY Hosting\n\nYou need a mongodb, python and nodejs.\nEverything is setup for development; start the frontend with ```npm run dev``` and the python server with ```script/devServer.sh```. Your mongodb should be running on localhost.\n\nThe python API expects a folder named ```secrets``` in the python-backend directory, containing two files: ```salt``` and ```secret```. These files should each contain a long random string sequence, used as basis for salting user entered passwords and JWT secret key. The app will not start without those files.\n\nTo start everything inside a container install docker-compose and start everything via 'up'.\n\n\n## Todos\n\n### Expenses Header:\n    [x] List header, select with dropdown \n    [x] Create lists\n    [x] Delete lists\n    [x] make list uneditable\n    [x] mobile header\n\n### List behavior:\n    [] automatically create new list per week/month?\n    [] make monthly/weekly lists uneditable on next month/week\n    [x] no editform on uneditable lists\n    [x] set new list as active after creation\n\n### General panels:\n    [x] Graph for expenses\n    [] Graph for depts\n\n### Direct depts:\n\t[] Graph for direct borrows\n    [] List-types?\n\n### Dispenses:\n\t[x] db: store dispenses\n\t[x] calculator: concept of dispense + calc\n\t[x] fe: intuitive concept!\n\t[x] fe: styling\n\t[] UX: change element positioning\n\n### Group notes:\n\t[] have some note panel\n\t[] easy counter for stuff (eg. for series)\n\n### Header \u0026 Static Pages:\n\t[x] static pages (faq, about, etc)\n\t[x] navigation in header\n\t[] 'custom space with settings'-button\n\t[x] mobile header ==\u003e hamburger\n\n### Custom space for configuring WG settings\n\t[] store wg settings (data model etc)\n\t[] graph granularity\n\t[] list clipping interval (requires list clipping in general)\n\t[] colortheme?\n\n### flux -\u003e redux \n\t[x] refactor 'old' concepts to match top level state-tree idea of redux \n\t[x] adjust test\n\t[x] actionCreators\n\t[x] reducers\n\t[x] remove old flux code, deps, everything\n\t[x] switch to redux\n\t[x] distinguish dev + prod\n\t[x] redux + react-router\n\t[x] redux call opt\n\t[] use middleware (avoid double requests due to inaccurate state-change evaluation inside the components!)\n\n### General behavior:\n\t[x] Confirm delete of items\n\t[x] Confirm delete of lists\n\t[x] Login\n\t[x] Token in cookie\n\t[x] Logout\n\t[x] URL-Schema\n\t[x] React-Router\n\t[x] Create WG\n\t[x] Header logout\n\t[x] Tunnel FE --\u003e BE (Container Setup)\n\t[x] Tunnel expenses actions\n\t[x] Tunnel login actions \n\t[x] python cgi for production\n\t[x] container setup\n\t[x] configurable endpoints for py-backend and mongo\n\t[x] message about backend-calls (eg. register already in use etc)\n\t[x] Comments on items\n\t[x] ssl on server (caddy)\n\t[x] navigation, faq/about pages \u0026 link to github \u0026 homepage\n\t[x] dont submit empty forms\n\t[] general 'backend (un)reachable' error for frontend \n\t[] server side rendering\n\t[] field length restrictions everywhere\n\t[] always two digits for amounts\n\t[] routing: 404 page\n\n### Security:\n\n\t[x] CSRF protection\n\t[x] dont leak headers + hostname from FE-BE communication\n\t[x] remove user enumeration endpoint\n\t[] API Keys\n\t[] clear react component states after logout (logout -- login -- old state visible)\n\t[x] IDOR vulnerable, dont leak mongo IDs\n\t[] generate random salt / user\n\n### Tests:\n\n\t[x] Test setup BE\n\t[x] Test setup FE\n    [x] FE - render \n    [x] BE - calculator\n    [] BE - API\n    [] storage\n    [] FE reducer + action creator (finally decide for an architecture...)\n    [] automated security tests (XSS, CSRF, IDOR etc) --\u003e concept!\n    \n\n### Cool third party stuff\n\n\t[x] docker hub (fixel/wg-tools)\n\t[x] layers.io in README\n\t[x] travis ci\n\t[x] build status in README","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0snap%2Fwg-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0snap%2Fwg-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0snap%2Fwg-tools/lists"}