90 Commits

Author SHA1 Message Date
achalaramu
00bc55f762
Migrate bootstrap 4 from bootstrap 3
Closes: #1818. The new navbar collapse handles items better without a scrollbar.

- Switch dependency to newer bootstrap4 library.

- Bootstrap 4 has 5 grid levels instead of 4. Adjust all classes accordingly to
retain current semantics.

- Update for newer markup for dropdowns.

- Replace use for labels with badges. Labels have been removed. Use
badge-secondary instead of label-default.

- Replace use of btn-xs with btn-sm. Size is roughly the same.

- Accommodate removal of form-horizontal.

- .hidden* and .visible* classes have been removed. Use alternate utilities.

- Replace use of table-condensed with table-sm.

- Update progress bar background styling. .progress-bar-* have been replaced
with bg-*.

- Drop support for IE9 and below. Bootstrap 4 does not support those browsers.

- Use the new simplified markup for navs, navbar and navbar-toggler. Accommodate
removal of .navbar-fixed-top.

- Update the JSXC page too.

- Update all values that are using rem units. The base font size is now 1rem =
16px instead of 1rem = 10px. This the default for bootstrap 4.

- A button inside a dropdown menu is natively supported by bootstrap 4. Remove
custom styling done earlier.

- Drop use of removed class thumbnail.

- Override colors for buttons and warnings to keep the old style.

- Use new markup for close buttons inside alerts.

- Use .collapse.show instead of .collapse.in as per bootstrap 4 styling.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2020-12-19 11:26:32 +02:00
Veiko Aasa
dfaf009d3c
users: Require admin credentials when creating or editing a user
This change prevents the plinth user to become a superuser without
knowing an admin password.

Users module and action script:
- User credentials are now required for the subcommands: create-user,
  set-user-password, add-user-to-group (if the group is admin),
  remove-user-from-group (if the group is admin), set-user-status,
  remove-user (if the removed user is the last admin user.
  Note: the web UI doesn't allow to delete last admin user).
- subcommand remove-users requires authentication if the user is last
  admin user. Password must be provided through standard input.
- subcommand remove-group: do not allow to remove group 'admin'
- User credentials must be provided using the argument
  --auth-user and a passsword must be provided through standard input.
- If there are no users in the admin group, no admin password is
  required and if the --auth-user argument is required, it can be an
  empty string.

Users web UI:
- An admin needs to enter current password to create and edit a user
  and to change user's password.
- Show more detailed error text on exceptions when submitting forms.
- Show page title on the edit and create user pages.

Users unit and functional tests:
- Added a configuration parameters to the pytest configuration file
  to set current admin user/password.
- Added a configuration parameter 'ssh_port' to the functional tests.
  You can overwrite this with the FREEDOMBOX_SSH_PORT environment
  variable. Modified HACKING.md accordingly.
- Added an unit test:
     - test changing the password as a non-admin user.
     - test invalid admin password input.
     - test that removing the admin group fails.
- Capture stdout and stderr in the unit tests when calling an action
  script to be able to see more info on exceptions.
- Added functional tests for setting ssh keys and changing passwords
  for admin and non-admin users.
- Added a functional test for setting a user as active/inactive.

Changes during review [sunil]:
- Move uncommon functional step definitions to users module from global. This is
  keep the common functional step definitions to minimal level and promote when
  needed.
- Minor styling changes, flake8 fixes.
- Don't require pampy module when running non-admin tests. This allows tests to
  be run from outside the container on the host machine without python3-pam
  installed.
- Call the confirm password field 'Authorization Password'. This avoid confusion
  with a very common field 'Confirm Password' which essentially means retype
  your password to ensure you didn't get it wrong. Add label explaining why the
  field exists.
- Don't hard-code /tmp path in test_actions.py. Use tmp_path_factory fixture
  provided by pytest.
- Remove unused _get_password_hash() from actions/users.
- Undo splitting ldapgid output before parsing. It does not seem correct and
  could introduce problems when field values contain spaces.

Tests performed:
- No failed unit tests (run with and without sudo).
- All 'users' functional tests pass.
- Creating an admin user during the first boot wizard succeeds.
- Creating a user using the web UI with an empty or wrong admin
  password fails and with the correct admin password succeeds.
- Editing a user using the web UI with an empty or wrong admin
  password fails and with the correct admin password succeeds.
- Changing user's password using the web UI with an empty or wrong
  admin password fails and with the correct admin password succeeds.
- Above mentioned user action script commands can't be run without
  correct credentials.
- Adding the daemon user to the freedombox-share group succeeds when
  installing certain apps (deluge, mldonkey, syncthing, transmission).

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
[sunil: Move uncommon functional step definitions to users module from global]
[sunil: Minor styling changes, flake8 fixes]
[sunil: Don't require pampy module when running non-admin tests]
[sunil: Call the confirm password field 'Authorization Password']
[sunil: Don't hard-code /tmp path in test_actions.py]
[sunil: Remove unused _get_password_hash() from actions/users]
[sunil: Undo splitting ldapgid output before parsing]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2020-10-05 00:05:44 -07:00
Sunil Mohan Adapa
3efff2fa42
js: Simplify auto-refresh page logic
- Implement ability to refresh page at the framework level so that every page
does not need to handle it.

- Refresh after number of seconds specified in context of the view.

Tests performed:

- Trigger the following functions and ensure that page reload after 3 seconds
during the running operation while it does refresh before and after the
operation.
  - Diagnostics tests from the module.
  - Gitweb repository cloning.
  - Monkeysphere publish key to server.
  - OpenVPN setup.
  - Tor configuration update.
  - Manual software update.
  - App installation.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2020-06-29 10:09:04 +03:00
Sunil Mohan Adapa
ff84d3f97e
templates: Disable button and show spinner on submit for all forms
Tests performed:

- Submit a form and notice that button has a spinner soon after click.

- Select a from like Gitweb repository creation form and submit it. After submit
go back to previous form using back button. Notice that button has been restored
to proper state.

- Without filling valid information the form, press submit. Notice that the
button does not change to a spinner.

- Check installing an app, snapshots management, network forms, wireguard forms,
etc.

- Test on Firefox and Chromium.

- Test with LibreJS that the script is accepted as valid free software license.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2020-06-29 10:08:23 +03:00
Sunil Mohan Adapa
ac103d7132
*: Remove use of Turbolinks library
See #1841 for discussion on why Turbolinks needs to be removed.

Closes: #1841.
Closes: #1804.

Tests performed:

- There are no more references to 'turbolinks' in source code other than .po(t)
  files and the manual.

- When loading a page, turbolinks.js is no longer loaded.

- The following links don't have data-turbolinks attribute and work well when
  clicked.a
  - Gitweb repository links
  - Download manual links (en, es)
  - Ikiwiki wiki links
  - Sharing app web share links
  - TT-RSS mobile app link
  - 'Launch web client' button
  - 'Launch' button in web section of clients table
  - Active and regular front page shortcut

- Roundcube does not have a link to /roundcube in description.

- turblinks not present in /static/jslicense.html . LibreJs accepts all scripts.

Reported-by: Veiko Aasa <veiko17@disroot.org>
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Tested-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2020-06-03 10:29:19 +03:00
Sunil Mohan Adapa
673bd367b0
css: cosmetic: Rename plinth.css to main.css
Tests performed:

- Visit an app page, install page and home page.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2020-03-06 13:09:02 +02:00
Sunil Mohan Adapa
b51ccff743
css: Merge responsive.css into main style file
- Eliminate issue with collapsed navbar's drop-down menu text color when the
width is exactly 768px or less than 320px.

- Remove redundant footer's position: relative rule.

Tests performed:

- Change the browser width to 768px, the navbar is not collapsed and drop down
menu text color is black on white background.

- Change the browser width to 767px, the navbar is collapsed and drop down menu
text color is white on blue background.

- Change the browser width to less than 320px, the navbar is collapsed and drop
down menu text color is white on blue background.

- Footer on the main page and remaining pages is unchanged at <320px, =767px and
>= 768px.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2020-03-06 13:08:53 +02:00
Sunil Mohan Adapa
e89e2b4a2a
*.html: Use SPDX license identifier
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2020-02-19 14:39:19 +02:00
Sunil Mohan Adapa
8529022f63
notification: Show a drop down from main navbar for notifications
Closes: #1042.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2020-02-10 18:13:28 -05:00
Sunil Mohan Adapa
83815ff31b
templates: Remove unused invocation of subsubmenu
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2019-10-05 13:26:03 -04:00
Sunil Mohan Adapa
dbb3558aab
firstboot: Hide left menu during first boot as intended
This seems to be a regression from earlier behavior.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2019-09-22 08:41:59 +02:00
Joseph Nuthalapati
7cbaec3e26
firstboot: Add new help menu to firstboot navbar
- Refactor the help menu into a django template include.

- Show help menu if user is logged in, instead of after completing firstboot.

Closes: #1517

Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
[sunil@medhas.org Rename help-menu.inc to help-menu.inc]
[sunil@medhas.org Use user.is_authenticated instead of another variable]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2019-09-17 19:45:48 -07:00
Joseph Nuthalapati
7409ea5daa
help: Convert help icon in the navbar to dropdown
- Tested with JavaScript disabled
- Tested on mobile

Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
[sunil@medhas.org Add some missing accessibility attributes]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2019-09-06 12:43:51 -07:00
Sunil Mohan Adapa
72c1c7349f
js: Remove javascript license link from footer
The link is hidden but not removed. librejs will still parse it. Ideally we
would want to do this from <link data-jslicense='1' href=''> but that seems to
cause problems for librejs.

Librejs users can still find out about the license of Javscript script file
using Librejs menu.

We already have a link to FreedomBox source code in the home page.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
2019-01-29 22:19:34 +05:30
Sunil Mohan Adapa
4c65d34741
ui: Hide restart/shutdown items when navbar is collapsed
- Keep unimportant items hidden on small screens.

- Remove dividers that cause confusion.

- Avoid a scrollbar inside the menu when user menu is expanded. Bootstrap
  intended to show exactly 8 menu items.

Fixes #1431.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
2019-01-18 11:47:57 +05:30
Sunil Mohan Adapa
d767e64703
ui: Show help nav item text when navbar is collapsed
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
2019-01-18 11:47:46 +05:30
Sunil Mohan Adapa
bacb0c056a
ui: Underline the logo along with 'Home' text when active
- This works properly in mobile sizes by underlining only the logo.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
2019-01-18 11:47:03 +05:30
Sunil Mohan Adapa
7279db3f2c
ui: Fix top margin for content containers
Currently, when a message is shown at the top or in users and groups page, The
top margin is too short. Increase it to 25px from 5px. Also:

- Don't use the .thumbnail class for containers as this does not match the
  semantics. Create and use class .contain-container.

- Also create class .card-container for all container containing cards. Unused
  for now.

- Indentation fixes.

- Remove duplicated rule.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
2019-01-18 11:46:23 +05:30
Sunil Mohan Adapa
d89011cc01
Fix i18n for menu strings
- There should not be a space in front of the text. This is a styling issue.

- Remove the CSS rule causing issues with spacing.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2019-01-14 17:38:04 -08:00
Prachi Srivastava
5d68f6bf52
Replace glyphicons with forkawesome icons
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2019-01-14 17:37:58 -08:00
Robert Martinez
966b2cb36a
Add white Card
This puts pages on white cards.
This lets the footer float underneath content instead of bottom of the page.
This should fix issues with MR !1335

Reviewed-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
2018-11-21 17:54:11 +05:30
Joseph Nuthalapati
93f7c2fa2c
Fix typo in the description meta tag
Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
2018-09-11 10:47:03 +05:30
Joseph Nuthalapati
948a222380
turbolinks: Disable caching on application visits
Using the "no-preview" directive disables caching on application visits but
shows cached pages on restoration visits.

Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-07-29 12:23:05 -04:00
Joseph Nuthalapati
daef528576
turbolinks: Replace style elements in head with blocks in body
Turbolinks cannot replace the styles in the head of the HTML document. Moved
them to the body by making the class of the body an overridable Django template
block.

Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-07-29 12:22:57 -04:00
Joseph Nuthalapati
f762f57d1c
Add turbolinks
- Load scripts in the head with `defer` instead of at the end of the body
- Disable turbolinks for application shortcuts and manual download

Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-07-29 12:22:52 -04:00
Sunil Mohan Adapa
15e02b8f52
Resize all main content
- Needed as the submenu on the left is gone. There is too much space available
  for the main content.

Signed-off-by: Manish Tripathy <manisht@thougtworks.com>
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2018-06-18 20:19:16 +05:30
Manish Tripathy
0932a07785
Apply new card based design
Signed-off-by: Manish Tripathy <manisht@thougtworks.com>
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2018-06-18 20:18:37 +05:30
Sunil Mohan Adapa
e644e5c86a
locale: Refactor language selection form
- Use properly base class overrides

- Implement feature to go back to the page user was on before language
  selection.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-02-21 21:07:39 +01:00
Sai Kiran Naragam
5cff5629d8
locale: Anonymous users can set preferred language
Logged-in user flow is pending.

Check [How django discovers language preference]:
https://docs.djangoproject.com/en/1.10/topics/i18n/translation/#how-django-discovers-language-preference

Signed-off-by: Sai Kiran Naragam <saikiran.rguiiit@gmail.com>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2018-02-21 21:06:07 +01:00
Sunil Mohan Adapa
0134aed78e
Rename Plinth to FreedomBox in templates
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2018-02-16 20:10:58 -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
Aakanksha Saini
18a476b034
navigation bar: change label 'Configuration' to 'System'
Signed-off-by: Aakanksha Saini <aakanksa@thoughtworks.com>
Reviewed-by: Johannes Keyser <johanneskeyser@posteo.de>
2018-01-03 11:01:59 +01:00
James Valleroy
f745ef42f1
Also fix user name in urls for UpdateUser
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2017-10-19 20:50:52 -04:00
Joseph Nuthalapati
d755d42a76
Handle both admin and non-admin user names in update user template
When an admin user goes to the UpdateUser view of a different user, the template
gets only one username which is of the user being updated. This causes the admin
user's name being overwritten in the header section thus making it appear that
the user is modifying themselves and not the admin. This can cause confusion to
the admin user.

Explicitly getting the name of the user that made the request ensures that we
always get the correct username.

Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2017-10-19 20:48:37 -04:00
Joseph Nuthalapati
3b3dafe893
power: Merge power merge into the user dropdown
Closes #1074.

Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2017-10-18 17:43:24 +05:30
Joseph Nuthalpati
f069f663d0
UI: Make apps and configure pages responsive on small screens
- Hide the listing of apps and configuration options on small screens,
  so that the user doesn't have to navigate to the bottom of the page.
- Closes #921

Reviewed-by: Johannes Keyser <johanneskeyser@posteo.de>
2017-08-09 18:20:44 +02:00
Johannes Keyser
217995a237
navbar: moved logout to user drop-down and added a new power drop-down 2017-06-12 19:29:05 -04:00
Johannes Keyser
8ae6fbbd4c
help: only show help pages if user is logged in 2017-06-07 22:22:08 -04:00
pycat
0e80bb9b02
Fix footer overlap #848
- Added footer responsive layout for tablets too
- Fixed footer ovelap on Laptop media screen
2017-05-18 21:24:28 -04:00
pycat
88272f766e
Plinth footer fixes - UI #840
- Pined footer to the bottom of the viewport
- Introduced a new stylesheet to hold custom responsive css
- Footer bottom fix exluded for smaller viewports
2017-05-11 20:00:37 -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
Rahul De
3248c2573d
Hide apps and sys icons if user is not an admin 2017-03-29 19:12:11 +05:30
Sunil Mohan Adapa
018324a6fc
Update to implementation of new footer
- Internationalize all the strings.

- Fix indentation.

- Use bootstrap row/columns better for footer links.

- Minimize CSS.

- Restore some of the FreedomBox statements until futher discussion.
2017-03-29 17:39:09 +05:30
Soumya97
b44efb939a
Change footer of home page according to new design 2017-03-29 17:38:58 +05:30
Sunil Mohan Adapa
9c65f69e89
Minor fixes to topbar changes
- Move the apps and configuration items outside of navbar header and
  into left navbar group so that it collapses properly for mobile
  view.

- Change link titles to reflect label text.

- Indent properly, remove blank lines.

- Remove need to tweak font size of items.
2017-03-29 11:55:33 +05:30
Soumya97
384327af71
Implement new topbar according to new card based UI 2017-03-29 11:53:01 +05:30
James Valleroy
9b2c7f2d48
Fix link to jsxc-plinth.js in JS license information
Minor updates to html formatting
2016-12-20 17:36:05 -05:00
Swapnil Gupta
d1f5544ae0
Fixed license and its position in base.html 2016-12-20 17:35:52 -05:00
Swapnil Gupta
5c8cbe6c6f
update base.html 2016-12-20 17:35:49 -05:00
Swapnil Gupta
807255a40c
Added license for libreJS to identify 2016-12-20 17:35:44 -05:00