107 Commits

Author SHA1 Message Date
Nikolas Nyby
f81b1751ce
Fix typos in module init docs
Intialize -> Initialize

Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2019-07-24 14:55:22 -07:00
Nikolas Nyby
ace339eabf
Introduce flake8 checking - #58
This introduces flake8 and fixes a bunch of flake8 errors.

flake8 is run with: ./venv/bin/flake8 plinth
if you're using a python3 venv.

We can eventually further integrate this with gitlab ci.

https://salsa.debian.org/freedombox-team/plinth/issues/58

Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2019-07-24 14:01:54 -07:00
Sunil Mohan Adapa
0f807bcd48
sso: Use new features of axes, log axes messages
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2019-07-21 09:05:58 -04:00
Sunil Mohan Adapa
e4351b6b97
Introduce daemon component to handle systemd units
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2019-06-13 20:18:02 -04:00
Sunil Mohan Adapa
ca2c7dbeb0
Introduce firewall component for opening/closing ports
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2019-06-13 20:17:45 -04:00
Sunil Mohan Adapa
a036a9f2f6
main: Show service version in logs
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2019-03-12 17:39:36 -04:00
Sunil Mohan Adapa
2df02b059c
dbus: Add new module for D-Bus services
- Implement listening for CacheUpdated notification.

- Configuration to allow only root to trigger the notification.

- Trigger the notification from an apt update hook.

- Retrieve the list of packages available for upgrade and print them to log.

- Add dependency on libglib2.0-bin for the gdbus command line tool.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2019-02-26 06:24:05 -05:00
Sunil Mohan Adapa
94255806cf
web_server: Move shutdown handling to main
This will keep web server de-coupled with service that want to shutdown on exit.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2019-02-26 06:24:02 -05:00
Sunil Mohan Adapa
201b256fe5 main: Separate out CherryPy code into a separate module
This will help with modularizing the code as well as abstracting out CherryPy
for potential later replacement.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2019-01-09 14:52:02 +05:30
Sunil Mohan Adapa
40ecce554f main: Separate out Django setup into a separate module
This has less to do with abstraction than to do with modularization.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2019-01-09 14:52:02 +05:30
Sunil Mohan Adapa
bc55edd186
logging: Separate logging init logic into a module
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-12-23 17:18:21 -05:00
Sunil Mohan Adapa
f36753fcb8
logging: Log to systemd journal directly
While capturing stdout and stderr and automatically logging that to system
logging daemon provides basic information, a lot of information lost in the
process.

This change logs to systemd journal directly so that rich information such as
code file, code function, code line, etc, can be captured in a structured way.
To avoid double logging, discard stdout and stderr in the systemd unit file.

Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-12-23 17:18:13 -05:00
Sunil Mohan Adapa
dc7bd96ed7
logging: Don't log to a log file
Instead log only to the console and let daemon wrapper (systemd in Debian) take
the logs from the console and log them to system log. There are many advantages
for logging to system log instead of handling files on our own:

- No need to handle log file rotation. This can be configured in many ways and
  we don't have to support that. System's log daemon handles this. Closes #1353.

- Remaining system logs such as sudo and audit logs can be along with FreedomBox
  logs for better debugging.

- It is possible to do remote logging based on system logger.

- It is possible to make the logs tamper resistant based on system logger
  configuration.

Since timestamp is automatically logged by system log daemon, remove timestamps
from log format. When running on console, timestamps are not very useful.

Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-12-23 17:18:04 -05:00
Sunil Mohan Adapa
a541ea06b7
logging: Make cherrypy log to the main log
- Access log is not populated by cherrpy anymore.

- CherrPy does not log WSGI handler requests at all. So the request for HTML
  pages actually is never logged. Only static file requests which are hardly
  useful are logged.

Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-12-23 17:17:56 -05:00
Sunil Mohan Adapa
8a7c849fbf
logging: Don't log static file requests
They are rarely useful. Refactor setup of static file serving to a method to
avoid repetition.

Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-12-23 17:17:45 -05:00
Michael Pimmer
dccb4a1bb7
Cherrypy: Do not limit maximum upload size
The default upload limit (request size) of cherrypy is 100MB.
When uploading backup archives we need larger files too.

Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-11-17 18:11:56 -05:00
Michael Pimmer
1f9bb624e8
Backups: Stream archive downloads/exports
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-11-17 09:00:13 -05:00
Michael Pimmer
51b0950ec4
Backups: uploading and import with temporarily stored file
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-11-17 08:59:24 -05:00
Joseph Nuthalapati
faf5f5bc6c
customization: Don't install files in /var/www
- Use the directory for service custom static files only if it exists.
- This fixes issue with lintian complaining of installing files in /var/www.

Closes #1399

Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
2018-10-09 11:30:30 +05:30
Joseph Nuthalapati
1307e474da
customization: Show custom shortcuts on frontpage
Closes #1379

Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-10-08 20:30:29 -04:00
Joseph Nuthalapati
9721eeac2b
customization: Serve static files from customization directory
- Static files are directly served by the CherryPy web server.
- .gitignore file placed as a placeholder to be able to commit the directory

Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-10-08 20:30:14 -04:00
Michael Pimmer
00ac068133
Merge ./run --debug into --develop option
Signed-off-by: Michael Pimmer <info@fonfon.at>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-06-18 19:27:38 -04:00
Michael Pimmer
425f7fbd92
Adapt test and documentation to changes of '--develop' option
And re-activate cfg.get_config_paths() for easier testing

Signed-off-by: Michael Pimmer <info@fonfon.at>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-06-18 19:27:31 -04:00
Michael Pimmer
cab5b694cf
Add ./run --develop option to use relative config/file paths
Signed-off-by: Michael Pimmer <info@fonfon.at>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-06-18 19:27:23 -04:00
Sunil Mohan Adapa
c6bccaaac0
Workaround security issues in django-axes
Newer versions of Django axes have newly way to get the IP address of a client
using ipware library. This has multiple security issues
https://github.com/jazzband/django-axes/issues/286 . Workaround them by
controlling the X-FORWARDED-FOR header sent from Apache to FreedomBox and by
limiting the headers that ipware uses.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-03-22 19:09:38 -04:00
Sunil Mohan Adapa
1da594c32d
Support Django 2.0
This is the final change required for Django 2.0 support. Instead of using
MIDDLEWARE_CLASSES use MIDDLEWARE setting. Support for new style middleware was
provided in version 0.3.0, so depend on that version. Django built-in middleware
already supports new style and plinth middleware will now support new style.

The actual semantics of the middleware don't need changes. See:
https://docs.djangoproject.com/en/2.0/topics/http/middleware/#upgrading-pre-django-1-10-style-middleware

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-03-12 17:27:26 -04:00
Sunil Mohan Adapa
6bf5109108
Rename Plinth to FreedomBox in code messages
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-02-16 20:10:51 -05:00
Sunil Mohan Adapa
dea4af17fb
Rename Plinth to FreedomBox in license headers
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-02-16 20:10:09 -05:00
Joseph Nuthalapati
fc9ce8e6dd
Override monkey-patched LoginView from django-axes 3.0.3
- Fixes #1154
- Fixes #1138

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2017-11-30 20:22:01 -05:00
Johannes Keyser
5fb68b459c
Enable django SecurityMiddleware, mitigates issue #1111.
Signed-off-by: Johannes Keyser <johanneskeyser@posteo.de>
Reviewed-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
2017-11-06 11:38:57 +05:30
Joseph Nuthalpati
ab235be2fc
captcha: fix tests failing to start
Signed-off-by: Joseph Nuthalpati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2017-10-17 22:08:17 -04:00
Joseph Nuthalpati
03e1006dc3
sso: utility to fetch client ip address
(django-axes + django-simple-captcha) with sso is working at this point.

Signed-off-by: Joseph Nuthalpati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2017-10-17 22:08:07 -04:00
Joseph Nuthalpati
f330d09ec9
sso: Add captcha validation on 3 failed attempts
- clearing ip address correctly is not implemented yet
- currently clearing all ip addresses

Signed-off-by: Joseph Nuthalpati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2017-10-17 22:07:57 -04:00
Joseph Nuthalpati
31cd97e71e
sso: Add django-axes to project
Signed-off-by: Joseph Nuthalpati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2017-10-17 22:07:48 -04:00
Joseph Nuthalpati
d3c428d58b
captcha: Add flite tts for accessibility
Signed-off-by: Joseph Nuthalpati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2017-10-17 22:07:30 -04:00
Joseph Nuthalpati
6e26c92441
captcha: Fix issue with captcha path when captcha entered is wrong
Signed-off-by: Joseph Nuthalpati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2017-10-17 22:07:22 -04:00
Joseph Nuthalpati
62f26433e8
Add django-simple-captcha in the login page
User will be shown captcha in the second attempt to login if login
fails in the first attempt.

Signed-off-by: Joseph Nuthalpati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2017-10-17 22:07:12 -04:00
Sunil Mohan Adapa
1247f2ef93
setup: Prioritize FirstSetupMiddle over some others
- Minor PEP8 fixes.
- Add doc strings.
- Make a few methods private.
- Remove unused global declarations.
- Remove unused imports.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2017-10-11 18:13:14 +05:30
Joseph Nuthalpati
7ce56864e9
setup: Fix Plinth startup issues
- Selectively run setup for modules
- Middleware pending

Fixes #1024

Signed-off-by: Joseph Nuthalpati <njoseph@thoughtworks.com>
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2017-10-11 18:12:45 +05:30
Joseph Nuthalpati
2e73d442e9
password: add Django password validators
Added all default Django password validators.

Not enforcing special characters.
https://blog.codinghorror.com/password-rules-are-bullshit/

Signed-off-by: Joseph Nuthalpati <njoseph@thoughtworks.com>

Reviewed-by: Johannes Keyser <johanneskeyser@posteo.de>
2017-09-09 11:34:45 +02:00
Joseph Nuthalpati
bb5571b7ab
first-run: Skip installation of essential modules from Plinth
- Essential modules would be installed by apt as they are already
dependencies of plinth.
- Plinth trying to trigger an installation is unnecessary.
- Plinth installing deb packages might also cause problems with plinth
startup if automatic upgrades are running.
- Added back the --setup option
- setup doesn't run when something else like diagnostics is invoked

Signed-off-by: Joseph Nuthalpati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2017-09-01 20:38:54 -04:00
Sunil Mohan Adapa
c2cf591e1b
Capture and log all Python warnings
- Capture all Python warnings so that they can shown as part of logging system
  on console and in log file.

- Also capture deprecation warnings into logging system if debug mode is
  enabled. Current versions of Python disable deprecation warnings by default.
  Django 1.11 also follows this approach now.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>

Reviewed-by: Johannes Keyser <johanneskeyser@posteo.de>
2017-09-01 13:32:14 +02:00
Joseph Nuthalpati
5403d00e85
SSO: Generate keys during plinth startup
- Removed key generation for mod_auth_pubtkt from first boot.
- Running setup every time plinth starts so that new essential modules
can be setup properly.

Partially fixes #875
2017-06-24 14:59:03 -04:00
Sunil Mohan Adapa
ee7cc98fee
apps, system: Remove modules and merge into main
- Remove apps and system modules and merge their views into main views.

- Move main_menu from cfg into menu.py.

- Remove dependencies of other modules on apps and system modules.

- Update tests.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2017-05-05 22:31:45 -04:00
Sunil Mohan Adapa
dd196c504d
module_loader: Split the URLs inclusion step
This is useful if we need to perform URL reversing operations before loading
modules.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2017-05-05 22:31:32 -04:00
Sunil Mohan Adapa
2a3381415e
Prioritize stronghold over admin require middlerware
Not logged-in users accessing restricted URLs will be required to
login page instead of being show access denied page.
2017-02-15 21:08:00 +05:30
Sunil Mohan Adapa
dd5ab7612e
Minor refactoring and lint fixes
- Rename AdminMiddleware to AdminRequiredMiddleware to be consistent
  with stronghold/Django terminology

- Simplify .gitignore pattern

- Format single line docstrings as per PEP8.

- Add missing docstrings.

- Restrict lines to 79 characters.
2017-02-15 21:07:27 +05:30
Sunil Mohan Adapa
4699b201a9
Remove use of stronghold whitelisting
This is no longer necessary as both the URLs have been explicitly
marked as public views.
2017-02-15 21:07:19 +05:30
lispyclouds
3e0f7a007e
Update default page after login
- This fixes the redirect to the index page instead of apps:index post
  login
2017-02-15 20:58:05 +05:30
lispyclouds
3b23f78bdc
Implement middleware for admin views
- Add AdminMiddleware to deny non admin users
- Add decorator to mark views as "non admin"
2017-02-15 20:57:52 +05:30