{"id":16237841,"url":"https://github.com/marcus67/little_brother","last_synced_at":"2025-08-23T00:26:21.281Z","repository":{"id":34508421,"uuid":"173456745","full_name":"marcus67/little_brother","owner":"marcus67","description":"Parental Control Application implemented in Python 3 packaged for Debian and Ubuntu to monitor and limit kids' play time on Linux hosts","archived":false,"fork":false,"pushed_at":"2025-01-14T21:23:32.000Z","size":11113,"stargazers_count":69,"open_issues_count":48,"forks_count":9,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-04T14:31:16.565Z","etag":null,"topics":["access-control","angular","bootstrap5","client-server","debian","debian-package","flask","kindersicherung","linux","linux-application","monitoring","mysql","package","parental-control","postgres","python","python3","sqlalchemy","sqlite"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcus67.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null}},"created_at":"2019-03-02T14:19:14.000Z","updated_at":"2025-06-15T11:37:23.000Z","dependencies_parsed_at":"2023-12-10T18:24:23.007Z","dependency_job_id":"e31d21ae-72c9-4ed6-b517-277eb5558c73","html_url":"https://github.com/marcus67/little_brother","commit_stats":{"total_commits":427,"total_committers":4,"mean_commits":106.75,"dds":"0.030444964871194413","last_synced_commit":"b5ad6f762fe1a5e10e44d4e8173dad8f2b11826b"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/marcus67/little_brother","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcus67%2Flittle_brother","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcus67%2Flittle_brother/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcus67%2Flittle_brother/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcus67%2Flittle_brother/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcus67","download_url":"https://codeload.github.com/marcus67/little_brother/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcus67%2Flittle_brother/sbom","scorecard":{"id":618524,"data":{"date":"2025-08-11","repo":{"name":"github.com/marcus67/little_brother","commit":"5c6302d26f510040c0a541415576a6b46dfd57e6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.8,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during GetBranch(release): error during branchesHandler.query: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: docker/debian-package-build-tool/Dockerfile:1: pin your Docker image by updating bitnami/minideb:buster to bitnami/minideb:buster@sha256:837cf5cdc9fdb8c6cc144b41e3626b28384697f661862dc29a6c95e9e521e118","Warn: containerImage not pinned by hash: docker/little-brother-alpine-client/Dockerfile:19: pin your Docker image by updating alpine:3.18.2 to alpine:3.18.2@sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1","Warn: containerImage not pinned by hash: docker/little-brother-alpine-server/Dockerfile:19: pin your Docker image by updating alpine:3.18.2 to alpine:3.18.2@sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1","Warn: containerImage not pinned by hash: docker/little-brother-arch-linux-base/Dockerfile:23: pin your Docker image by updating archlinux:base to archlinux:base@sha256:104d24b4464e89a16566d3e68ce0e2707aa15258c690ee9bef755930e8bc1c2d","Warn: containerImage not pinned by hash: docker/little-brother-arch-linux-client/Dockerfile:21","Warn: containerImage not pinned by hash: docker/little-brother-base/Dockerfile:19: pin your Docker image by updating marcusrickert/docker-minipython:3.11.9 to marcusrickert/docker-minipython:3.11.9@sha256:9b4ec0b1b061f7d870a20004e9577d56e8de669bcebd4b2b6768e7410a528602","Warn: containerImage not pinned by hash: docker/little-brother-client/Dockerfile:20","Warn: containerImage not pinned by hash: docker/little-brother-master/Dockerfile:2","Warn: containerImage not pinned by hash: docker/little-brother-ubuntu-base/Dockerfile:18: pin your Docker image by updating marcusrickert/docker-ubuntu-minipython:release-24.04 to marcusrickert/docker-ubuntu-minipython:release-24.04@sha256:f7c0debd715093884a692c90fabb529ee0007612954f6aaf281cb5ba74fa43bd","Warn: containerImage not pinned by hash: docker/little-brother-ubuntu-client/Dockerfile:20","Warn: pipCommand not pinned by hash: docker/little-brother-alpine-client/Dockerfile:27-54","Warn: pipCommand not pinned by hash: docker/little-brother-alpine-server/Dockerfile:27-54","Warn: npmCommand not pinned by hash: bin/build_angular_app.sh:46","Info:   0 out of  10 containerImage dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":0,"reason":"47 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-q9mw-68c2-j6m5","Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-4www-5p9h-95mh","Warn: Project is vulnerable to: GHSA-9gqv-wp59-fq42","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-25hc-qcg6-38wj","Warn: Project is vulnerable to: GHSA-cqmj-92xf-r6r9","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-8jhw-289h-jh2g","Warn: Project is vulnerable to: GHSA-64vr-g452-qvp3","Warn: Project is vulnerable to: GHSA-9cwx-2883-4wfx","Warn: Project is vulnerable to: GHSA-vg6x-rcgg-rjx6","Warn: Project is vulnerable to: GHSA-x574-m823-4x7w","Warn: Project is vulnerable to: GHSA-4r4m-qw57-chr8","Warn: Project is vulnerable to: GHSA-xcj6-pq6g-qj4x","Warn: Project is vulnerable to: GHSA-356w-63v5-8wf4","Warn: Project is vulnerable to: GHSA-859w-5945-r5v3","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: GHSA-v9hf-5j83-6xpp","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: GHSA-48p4-8xcf-vxj5","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T04:37:09.868Z","repository_id":34508421,"created_at":"2025-08-21T04:37:09.868Z","updated_at":"2025-08-21T04:37:09.868Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271722880,"owners_count":24809669,"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","status":"online","status_checked_at":"2025-08-22T02:00:08.480Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["access-control","angular","bootstrap5","client-server","debian","debian-package","flask","kindersicherung","linux","linux-application","monitoring","mysql","package","parental-control","postgres","python","python3","sqlalchemy","sqlite"],"created_at":"2024-10-10T13:37:40.758Z","updated_at":"2025-08-23T00:26:21.269Z","avatar_url":"https://github.com/marcus67.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![LittleBrother-Logo](little_brother/static/icons/icon-baby-panda-128x128.png)\n\n# Parental Control Application `LittleBrother`\n\n## Overview\n\n`LittleBrother` is a simple parental control application monitoring specific processes (read \"games\") on Linux hosts\nto monitor and limit the play time of (young) children. It is designed as a client server application running\non several hosts and combining playing time spent across these hosts, but it also works on a standalone host.\n\nWhen the application determines that a user has exceeded her play time, it will terminate the running \nprocess. Usually, the user will get several spoken notifications (using the \n[LittleBrotherTaskbar](https://github.com/marcus67/little_brother_taskbar)) before she is actually kicked out so \nthat she can log out gracefully in time.\n\n## What's New?\n\nThe latest major feature changes are:\n\n| Version | Feature/Fix                                                                    | (Issue) Link                                                         |\n|---------|--------------------------------------------------------------------------------|----------------------------------------------------------------------|\n| 0.5.6   | *New*: Provide an Alpine server image                                          | [Issue 209](https://github.com/marcus67/little_brother/issues/209)   |\n| 0.5.4   | *Bug Fix*: Proper deletion of table histories                                  | [Issue 203](https://github.com/marcus67/little_brother/issues/203)   |\n| 0.5.2   | *Bug Fix*: Installation problems due to unsupported `playsound`                | [Issue 205](https://github.com/marcus67/little_brother/issues/205)   |\n| 0.5.1   | New feature: Provide the first rudimentary version of the Angular web frontend | [Issue 191](https://github.com/marcus67/little_brother/issues/191)   |\n| 0.4.33  | Support partial persistence of basic user settings on clients                  | [Issue 190](https://github.com/marcus67/little_brother/issues/190)   |\n| 0.4.28  | *Bug Fix*: Remove incompatibility with Python 3.8                              | [Issue 180](https://github.com/marcus67/little_brother/issues/180)   |\n| 0.4.23  | Optionally use `iptables` to restrict network access                           | [Issue 169](https://github.com/marcus67/little_brother/issues/169)   |\n| 0.4.20  | *Bug Fix*: Use Python virtual environment again                                | [Issue 170](https://github.com/marcus67/little_brother/issues/170)   |\n| 0.4.17  | *Bug Fix*: Remove incompatibility with new `alembic` version                   | [Issue 166](https://github.com/marcus67/little_brother/issues/166)   |\n| 0.4.16  | *Bug Fix*: Ignore invalid hosts during ping                                    | [Issue 165](https://github.com/marcus67/little_brother/issues/165)   |\n| 0.4.15  | *Bug Fix*: Do not fail on Debian package upgrades                              | [Issue 158](https://github.com/marcus67/little_brother/issues/158)   |\n| 0.4.14  | *Bug Fix*: Correct detection of users in master-only setups                    | [Issue 163](https://github.com/marcus67/little_brother/issues/163)   |\n| 0.4.12  | *New*: Client process available as snap                                        | [Snapcraft Support](https://github.com/marcus67/snap-little-brother) |\n| 0.4.9   | *New*: Automatic check for new versions of `LittleBrother`                     | [Issue 150](https://github.com/marcus67/little_brother/issues/150)   |\n|         | *Improvement*: Separate LDAP search DN for groups and users                    | [Issue 144](https://github.com/marcus67/little_brother/issues/144)   |\n|         | *Improvement*: Cache timeout for LDAP data                                     | [Issue 138](https://github.com/marcus67/little_brother/issues/138)   |\n| 0.4.8   | *New*: Full support for requesting optional time by users                      | [Issue 130](https://github.com/marcus67/little_brother/issues/130)   |\n| 0.4.4   | *New*: Use user specific patterns to prohibit applications                     | [Issue 129](https://github.com/marcus67/little_brother/issues/129)   |\n\n## Contact\n\nVisit the project at [Facebook](https://www.facebook.com/littlebrotherdebian) or write comments \nto little-brother(at)web.de.\n\n## Screenshots\n\nThe following screenshots show the web frontend of `LittleBrother`. Click on the thumbnails to enlarge. \n\n\u003cA HREF=\"doc/screenshot_status.png\"\u003e![Screenshot Status](doc/screenshot_status.thumb.png)\u003c/A\u003e \n\u003cA HREF=\"doc/screenshot_login.png\"\u003e![Screenshot Status](doc/screenshot_login.thumb.png)\u003c/A\u003e \n\u003cA HREF=\"doc/screenshot_admin.png\"\u003e![Screenshot Status](doc/screenshot_admin.thumb.png)\u003c/A\u003e \n\u003cA HREF=\"doc/screenshot_users.png\"\u003e![Screenshot Status](doc/screenshot_users.thumb.png)\u003c/A\u003e \n\u003cA HREF=\"doc/screenshot_devices.png\"\u003e![Screenshot Status](doc/screenshot_devices.thumb.png)\u003c/A\u003e \n\u003cA HREF=\"doc/screenshot_topology.png\"\u003e![Screenshot Status](doc/screenshot_topology.thumb.png)\u003c/A\u003e\n\u003cA HREF=\"doc/screenshot_about.png\"\u003e![Screenshot Status](doc/screenshot_about.thumb.png)\u003c/A\u003e\n\n## Change History \n\nSee [here](CHANGES.md)\n\n## GitHub Status\n\n\u003cA HREF=\"https://github.com/marcus67/little_brother\"\u003e\n\u003cIMG SRC=\"https://img.shields.io/github/forks/marcus67/little_brother.svg?label=forks\"\u003e\u003c/A\u003e \n\u003cA HREF=\"https://github.com/marcus67/little_brother/stargazers\"\u003e\n\u003cIMG SRC=\"https://img.shields.io/github/stars/marcus67/little_brother.svg?label=stars\"\u003e\u003c/A\u003e \n\u003cA HREF=\"https://github.com/marcus67/little_brother/watchers\"\u003e\n\u003cIMG SRC=\"https://img.shields.io/github/watchers/marcus67/little_brother.svg?label=watchers\"\u003e\u003c/A\u003e \n\u003cA HREF=\"https://github.com/marcus67/little_brother/issues\"\u003e\n\u003cIMG SRC=\"https://img.shields.io/github/issues/marcus67/little_brother.svg\"\u003e\u003c/A\u003e \n\u003cA HREF=\"https://github.com/marcus67/little_brother/pulls\"\u003e\n\u003cIMG SRC=\"https://img.shields.io/github/issues-pr/marcus67/little_brother.svg\"\u003e\u003c/A\u003e\n\n## SourceForge Download Status\n\n\u003ca href=\"https://sourceforge.net/projects/little-brother/files/latest/download\"\u003e\n\u003cimg alt=\"Download little-brother\" src=\"https://img.shields.io/sourceforge/dm/little-brother.svg\"\u003e\u003c/a\u003e\n\n## Continuous Integration Status Overview\n\n| Status              | Master                                                                                                                                                                                                                                                                                                                                                       | Release                                                                                                                                                                                                                                                                                                                                                              |\n|:--------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| CircleCI            | \u003cA HREF=\"https://circleci.com/gh/marcus67/little_brother/tree/master\"\u003e\u003cIMG SRC=\"https://img.shields.io/circleci/project/github/marcus67/little_brother/master.svg?label=master\"\u003e\u003c/A\u003e                                                                                                                                                                         | \u003cA HREF=\"https://circleci.com/gh/marcus67/little_brother/tree/release\"\u003e\u003cIMG SRC=\"https://img.shields.io/circleci/project/github/marcus67/little_brother/release.svg?label=release\"\u003e\u003c/A\u003e                                                                                                                                                                              |\n| Test Coverage       | \u003cA HREF=\"https://codecov.io/gh/marcus67/little_brother/branch/master\"\u003e\u003cIMG SRC=\"https://img.shields.io/codecov/c/github/marcus67/little_brother.svg?label=master\"\u003e\u003c/A\u003e                                                                                                                                                                                       | \u003cA HREF=\"https://codecov.io/gh/marcus67/little_brother/branch/release\"\u003e\u003cIMG SRC=\"https://img.shields.io/codecov/c/github/marcus67/little_brother/release.svg?label=release\"\u003e\u003c/A\u003e                                                                                                                                                                                     |\n| Codacy Code Quality | \u003cA href=\"https://www.codacy.com/app/marcus67/little_brother?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=marcus67/little_brother\u0026amp;utm_campaign=Badge_Grade\"\u003e\u003cimg src=\"https://api.codacy.com/project/badge/Grade/3e3130c1c450404db9b16e10ab8af7fd\"/\u003e\u003c/a\u003e                                                                                 | \u003cA href=\"https://www.codacy.com/app/marcus67/little_brother?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=marcus67/little_brother\u0026amp;utm_campaign=Badge_Grade\"\u003e\u003cimg src=\"https://api.codacy.com/project/badge/Grade/3e3130c1c450404db9b16e10ab8af7fd?branch=release\"/\u003e\u003c/a\u003e                                                                          |\n| Code Climate        | \u003ca href=\"https://codeclimate.com/github/marcus67/little_brother/maintainability\"\u003e\u003cimg src=\"https://api.codeclimate.com/v1/badges/c42e65d566d1e10f1402/maintainability\" /\u003e\u003c/a\u003e                                                                                                                                                                                | not available                                                                                                                                                                                                                                                                                                                                                        |\n| Snyk Vulnerability  | \u003cA href=\"https://snyk.io/test/github/marcus67/little_brother?targetFile=requirements.txt\"\u003e\u003cimg src=\"https://snyk.io/test/github/marcus67/little_brother/badge.svg?targetFile=requirements.txt\" alt=\"Known Vulnerabilities\" data-canonical-src=\"https://snyk.io/test/github/marcus67/little_brother?targetFile=requirements.txt\" style=\"max-width:100%;\"\u003e\u003c/a\u003e | \u003cA href=\"https://snyk.io/test/github/marcus67/little_brother?targetFile=requirements.txt\"\u003e\u003cimg src=\"https://snyk.io/test/github/marcus67/little_brother/release/badge.svg?targetFile=requirements.txt\" alt=\"Known Vulnerabilities\" data-canonical-src=\"https://snyk.io/test/github/marcus67/little_brother?targetFile=requirements.txt\" style=\"max-width:100%;\"\u003e\u003c/a\u003e |\n| Snyk Package Health | not available                                                                                                                                                                                                                                                                                                                                                | [![little-brother](https://snyk.io/advisor/python/little-brother/badge.svg)](https://snyk.io/advisor/python/little-brother)                                                                                                                                                                                                                                          |\n\nNote: The vulnerability status is derived from the Python PIP packages found in `requirements.txt`.\n\n## Features\n\n`LittleBrother` has the following features:\n\n*   Any number of users can be monitored.\n\n*   Each user can have a specific set of rules defining the permitted playtime.\n\n*   Rules can be adapted to \"contexts\", such as the day of the week and/or a vacation schedule (currently only \nthe German schedules are supported).\n\n*   Play time can be restricted to a time window (from, to).\n\n*   A maximum play time per day can be defined.\n\n*   Users can be forced to take a break after a certain maximum session time.\n\n*   Users can be forced to wait for a minimum break time after their activity.\n\n*   Any number of Linux client hosts can be monitored.\n\n*   There is a master host with a history of the activities of all users. This master host checks the rule sets and\nprompts the client hosts to terminate processes if required.\n\n*   The master host offers a simple web interface for viewing the user activity over a configured history length\n(e.g. 7 days) and an administration page to dynamically define rule exceptions for a configured number of\ndays into the future.\n\n*   The web application can be run behind a proxy so that it will be accessible from away allowing remote \nadministration after receiving calls from young users begging for more play time.\n\n*   There is a helper application ([LittleBrotherTaskbar](https://github.com/marcus67/little_brother_taskbar)) to \ndisplay the remaining playtime of a monitored user and speak the notifications.\n\n*   The application has international language support. Currently English, Italian and German translations are provided.\nUsers are invited to provide translations for other languages.\n\n*   Downtime of a server during playtime (e.g. due to hibernation) is automatically subtracted from the play time.\n\n*   In addition to the time spent on Linux hosts the application can also monitor activity time on other devices \nsuch as smartphones or tables. It takes advantage of the fact that most modern operating systems put devices\nin some kind of power saving mode while they are not being used. This way, the network response (by `pinging`) can\nbe used to determine the activity on those devices. In contrast to the Linux hosts, the application\nwill not be able to terminate the activity. The play time, however, will be added to the overall playtime and\nhence will have an impact on the time allowed and also on the break time rules on the Linux hosts.\n\n*   As of version 0.3.12 `LittleBrother` is able to use [ProxyPing](https://github.com/marcus67/proxy_ping) to ping\ndevices behind firewalls provided the tool can be deployed on a Debian server behind the firewall.\n\n*   As of version 0.3.13 `LittleBrother` clients will terminate local user sessions if they cannot reach the master\nprocess for a certain time (defaults to 50 seconds). This ensures users cannot suppress being logged out by \n*pulling the plug*.\n\n*   As of version 0.4.0 `LittleBrother` provides an administration feature to easily extend the current computer time \nor grant computer when the usage would normally be prohibited. This is called a time extension. During an active \nextension all other restrictions (maximum time per session, time of day, and maximum time per day) are deactivated.\nTime extension can even extend into the next day making long night session possible. However, any computer time\nactually spent during a time extension will contribute to the overall time played in the course of a day.   \n\n*   There is a Docker image available (currently for the client only) which makes it really easy to run a client on a \nLinux host with a Docker daemon available.\n\n*   The application uses voice generation to inform the user over impending logouts. Also, these spoken\nmessages are internationalized. Optionally, users can be notified using four different popup tools. Note that this\nfunctionality of the `LittleBrother` application has been replaced by the `LittleBrotherTaskbar.` \n\n## Architecture\n\nThe [page](ARCHITECTURE.md) gives a detailed description of the architecture of the application.    \n\n## Tested Distributions\n\nSo far, `LittleBrother` has only been released as a Debian package. For other non-Debian based distributions \nthere is some basic support using a generic installation script. \nSee [this page](NON-DEBIAN-INSTALLATION.md) for details.\n\n| Distribution | Version       | Architecture | Comments                                                                                                                                                    | Most Recent Test |\n|--------------|---------------|--------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|\n| Ubuntu       | 24.04         | amd64        | This version is used as base image for the [Ubuntu Docker image](https://hub.docker.com/repository/docker/marcusrickert/little-brother-ubuntu-client)       | 22.DEC.2024      |\n| Debian       | 11 (bullseye) | amd64        | Feedback from a user as regular install using Mate desktop                                                                                                  | 06.MAR.2022      |\n| Ubuntu       | 18.10         | amd64        | See [pip3 issue](https://github.com/marcus67/little_brother/issues/53)                                                                                      | 03.JUN.2019      |\n| Debian       | buster        | amd64        | The version `buster-slim` is used as base image for the [Debian Docker image](https://hub.docker.com/repository/docker/marcusrickert/little-brother-client) | 01.JAN.2020      |\n| Debian       | 10.3 (buster) | amd64        | Feedback from a user as regular install with Mate desktop                                                                                                   | 05.MAR.2020      |\n| Mint         | 19            | amd64        |                                                                                                                                                             | 03.JAN.2020      |\n| Arch Linux   |               | amd64        | See https://aur.archlinux.org/packages/little-brother                                                                                                       | 06.MAR.2022      |\n| Debian       | stretch       | armv6l       |                                                                                                                                                             | 23.MAY.2020      |\n| Alpine       | v3.13         | amd64        | This distribution is used as base image for the [Alpine Docker Image](https://hub.docker.com/repository/docker/marcusrickert/little-brother-alpine-client)  | 06.MAR.2022      |\n\n## Quick Install (Snap)\n\nThere is a snap available for the client process. See [snap-little-brother](https://github.com/marcus67/snap-little-brother) for details. \n\n[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/little-brother-slave)\n\n## Quick Install (Debian Package)\n\nThis guide will take you through the steps required to install, configure, and run the `LittleBrother` application \non your system. This guide works both for master and client setups. For setting up a client there is a second option\nusing Docker. See the [Docker](DOCKER.md) page for more details.\n\n### YouTube Videos\n\n| Thumbnail and Link to Video                                                                                                                                                  | Duration | Content                                                                                     | Related Versions                          |\n|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|---------------------------------------------------------------------------------------------|-------------------------------------------|\n| \u003cA HREF=\"https://www.youtube.com/watch?v=gOxUBlfKZyM\"\u003e![little-brother-0_3_1](doc/youtube-presentations/2020-07-30_LittleBrother_YouTube_Presentation.thumb.png) \u003c/A\u003e        | 16 min   | Install LittleBrother Debian package, edit configuration file, add user, test functionality | LittleBrother 0.3.1 on Ubuntu 19.3        |\n| \u003cA HREF=\"https://www.youtube.com/watch?v=vLqho7oRNi4\"\u003e![little-brother-0_3_1](doc/youtube-presentations/2020-08-07_LittleBrotherTaskbar_YouTube_Presentation.thumb.png) \u003c/A\u003e | 14 min   | Install LittleBrotherTaskbar pip3 package, register desktop service, test functionality     | LittleBrotherTaskbar 0.1.9 on Ubuntu 19.3 |\n\n### Download the Software\n\nThe application is available as a Debian package \nfrom the [`release`](https://sourceforge.net/projects/little-brother/files/release/) directory at SourceForge. \nThe latest build is available from the [`master`](https://sourceforge.net/projects/little-brother/files/master/) \ndirectory. Install it as you would install any other Debian package with\n\n    dpkg -i PACKAGE.deb\n    apt-get install -f\n\nNote that the second command is required to install missing dependencies since `dpkg` does not run a dependency check.\nInstead, it will return with an error which will then be \"fixed\" by `apt-get`. \n\nAfter installation use\n\n    systemctl start little-brother\n\nto start the application right away. The application will \nsuccessfully start up provided that the default port 5555 is available on the host. You can check the success by trying \nto log into the [web frontend](http://localhost:5555/).\n\n### Configuring the Application (Mostly Optional)\n\nThe default setup will fit most first-time users (except for the password). The following table contains \nvarious additional aspects that may require additional configuration.\n\n| Aspect                      | Default Setting                                                            | Alternatives                                                    | Reference                                                |\n|-----------------------------|----------------------------------------------------------------------------|-----------------------------------------------------------------|----------------------------------------------------------|\n| Admin Password              | User `admin` with password `test123`                                       | Use LDAP for authentication and authorization                   | See \"Setting Admin Password\" below                       | \n| Database backend            | File oriented database [sqlite](https://www.sqlite.org/index.html)         | Full fledged database such as MySQL dor MariaDB                 | See [Advanced Configuration](ADVANCED_TOPICS.md)         |\n| Web frontend port           | `5555`                                                                     | Any other available port                                        | See [Advanced Configuration](ADVANCED_TOPICS.md)         |\n| Web frontend base URL       | `/`                                                                        | Any other path                                                  | See [Advanced Configuration](ADVANCED_TOPICS.md)         |\n| User registry               | `/etc/passwd`                                                              | Predefined users and UIDs or LDAP registry                      | See [Advanced Configuration](ADVANCED_TOPICS.md)         |\n| Master client setup         | Use only a master host                                                     | Use any number of client hosts                                  | See [Advanced Configuration](ADVANCED_TOPICS.md)         |\n| Mapping UIDs                | UIDs are synchronized across all hosts                                     | Each host (group) can have different UIDs                       | See [Advanced Configuration](ADVANCED_TOPICS.md)         |\n| Scanning Interval           | Every 5 seconds                                                            | Any other interval                                              | See [Advanced Configuration](ADVANCED_TOPICS.md)         |\n| Reverse proxy setup         | No reverse proxy                                                           | Run little-brother behind a reverse proxy (e.g. `nginx`)        | See [Advanced Configuration](ADVANCED_TOPICS.md)         |\n| Docker Support              | Client is installed as Debian package                                      | Client is run as Docker container                               | See [Docker](DOCKER.md).                                 |\n| Prometheus Support          | Not activated                                                              | Activate Prometheus server port and provide run time statistics | See [Operational Monitoring](OPERATIONAL_MONITORING.md). |\n| Network Tempering Detection | Automatic logout of monitored users after a network downtime of 50 seconds | Set a different time out                                        | See [Advanced Configuration](ADVANCED_TOPICS.md)         |\n| Firewall support            | Do not restrict network access of client hosts                             | Configure targets IP addresses to be blocked                    | See [Advanced Configuration](ADVANCED_TOPICS.md)         |\n| Frontends                   | Only activate the classic frontend                                         | Configure the new Angular frontend                              | See [Advanced Configuration](ADVANCED_TOPICS.md)         |\n\n### Setting the Admin Password\n\nFor the time being setting the admin password is the only standard configuration that still requires using an editor.\nSee this [issue](https://github.com/marcus67/little_brother/issues/92).\nYou have to be `root` to follow these steps (e.g. use `sudo`):\n \n*   Use your favorite editor to edit the file `/etc/little-brother/little-brother.conf`.\n\n*   Find the setting `admin_password` in the section `[UnixUserHandler]`.\n\n*   Change the password.\n\n*   Save the file.\n\n*   Restart the application by issuing: \n\n        systemctl restart little-brother \n\nFrom now on the new password will have to be used to access the administration pages.\n\n### Using the Web-Frontend\n\nYou are all set now. It's time to set up users to be monitored and optionally devices. See the \n[Web Frontend Manual](WEB_FRONTEND_MANUAL.md). \n\nTo get a glimpse of the new Angular frontend see [here](ANGULAR_WEB_FRONTEND_MANUAL.md).\n\n### Troubleshooting\n\nSo, you went through all the above but LittleBrother does not seem to work? Maybe this \n[troubleshooting page](TROUBLESHOOTING.md) can help you.\n\n## Caveats\n\nThe application `LittleBrother` is far from perfect. Some major caveats are listed here and/or in the \nissue list on GitHub (see [here](../issues)).\n\n*   Every once in a while processes fail to terminate even though they have been killed by `LittleBrother`. \nIn these cases the user will still be regarded as logged in although he/she is not. Usually this can only be\nsolved by trying to kill the processes again using the master user. Database eloquent users may try to \ndelete/correct the incorrect process time entries.\n\n*   The web server only responds to HTTP requests. This is probably always OK for communication between the\nclients and the master in local area network. If the master host is to be accessible from the internet, it should\nbe put behind a reverse proxy handling the HTTPS termination (see below). \n\n## Internationalization\n\nThe application uses the PIP package `Flask-Babel` to provide internationalization for the web frontend. Currently, \nthe following languages are supported or in preparation (in the order they were made available):\n\n| Flag                                                       | Language   | Locale | Status         | Translation provided by   |\n|------------------------------------------------------------|------------|--------|----------------|---------------------------|\n| ![Flag USA](doc/united-states-of-america-flag-icon-32.png) | English    | en     | Up-to-date     | Marcus Rickert            |\n| ![Flag Germany](doc/germany-flag-icon-32.png)              | German     | de     | Up-to-date     | Marcus Rickert            |\n| ![Flag Italy](doc/italy-flag-icon-32.png)                  | Italian    | it     | Revision 116   | Albano Battistella        |\n| ![Flag Netherlands](doc/netherlands-flag-icon-32.png)      | Dutch      | nl     | Revision 63    | Simone \u0026 Lex              |\n| ![Flag Finland](doc/finland-flag-icon-32.png)              | Finnish    | fi     | Revision 63    | Isakkii Kosonen           |\n| ![Flag France](doc/france-flag-icon-32.png)                | French     | fr     | Revision 86    | Albano Battistella        |\n| ![Flag Turkey](doc/turkey-flag-icon-32.png)                | Turkish    | tr     | Revision 63    | Selay Dogan               |\n| ![Flag Russia](doc/russia-flag-icon-32.png)                | Russian    | ru     | Revision 63    | J. Moldawski              |\n| ![Flag Japan](doc/japan-flag-icon-32.png)                  | Japanese   | ja     | Revision 63    | Arik M.                   |\n| ![Flag Bangladesh](doc/bangladesh-flag-icon-32.png)        | Bangla     | bn     | Revision 63    | Rownak Jyoti Zaman        |\n| ![Flag Thailand](doc/thailand-flag-icon-32.png)            | Thai       | th     | Revision 63    | Busaba Kramer             |\n| ![Flag Denmark](doc/denmark-flag-icon-32.png)              | Danish     | da     | Revision 63    | Erik Husmark              |\n| ![Flag Spain](doc/spain-flag-icon-32.png)                  | Spanish    | es     | Revision 63    | Ruth Wucherpfennig-Krömer |\n| ![Flag Croatia](doc/croatia-flag-icon-32.png)              | Croatian   | hr     | Revision 63    | Incognito                 |\n| ![Flag Lithuania](doc/lithuania-flag-icon-32.png)          | Lithuanian | lt     | In preparation | N.N.                      |\n\nA revision number in the status column denotes that all texts up to that revision have been localized.\n \nYour help with translations is greatly appreciated. Please, contact the author if you are interested in providing\na translation. You do not necessarily have to clone this repository or be familiar with Python to do so.\n\n## Credits\n\n*   Thanks to all the people maintaining the wonderful script language [Python](https://www.python.org/) \n    and the libraries on [PyPi](https://pypi.org/).\n\n*   The country flags were taken from [www.countryflags.com](https://www.countryflags.com/).\n\n*   See the section about on internationalization for credits regarding the translations.\n\n*   The site [www.mehr-schulferien.de](https://www.mehr-schulferien.de) maintains the vacation metadata for\n    Germany.\n    \n*   The icons are provided by [fontawesome.com](https://fontawesome.com).\n\n*   People contributing by providing pull requests:\n\n    * [Bas Hulsken](https://github.com/bhulsken)\n      * See [issue 120](https://github.com/marcus67/little_brother/issues/120)\n      * See [issue 166](https://github.com/marcus67/little_brother/issues/166)\n    * [Albano Battistella](https://github.com/albanobattistella) for providing Italian and French translations \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcus67%2Flittle_brother","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcus67%2Flittle_brother","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcus67%2Flittle_brother/lists"}