Commit Graph

543 Commits (655ffbc0bb78ea53259a5e792160c7818614ad8e)
 

Author SHA1 Message Date
Javier Sánchez Parra b0fb32d767 Extend scopes html
Otherwise, this actions pages lose the scopes tree and the scopes
buttons.
2022-03-03 12:25:31 +01:00
Javier Sánchez Parra 4005b019ee Extend scopes or commands in client details
Both "Add client" and "Client details" views use client_details.html
template. With this commit, "Add client" extends scopes.html and "Client
details" extend commands.hmlt.
2022-03-03 11:41:16 +01:00
Javier Sánchez Parra 3db3659499 Use pill style in confirmation pages
Draw selected clients from confirmation pages like selected clients from
scopes and commands pages.
2022-03-03 11:41:16 +01:00
Javier Sánchez Parra dc8759d2b9 Narrow client removal to scopes and commands pages
Otherwise, undesired removal of selected clients pills occurs.
2022-03-03 11:41:16 +01:00
Javier Sánchez Parra 30b3ef90b1 Add clients info to session's confirmation page
Show the number of clients and their IPs.
2022-03-03 11:41:09 +01:00
Javier Sánchez Parra 3271a4a08d Extend commands html
Otherwise, this actions pages lose the scopes tree and the commands
buttons.
2022-03-02 17:29:41 +01:00
Javier Sánchez Parra ed967216aa Show client state on pills
Color pills to represent their state, like scopes tree.
2022-02-25 13:53:47 +01:00
Javier Sánchez Parra 500d92007f Replace "." with "_" in HTML scopes IDs
Otherwise, scopes with dots in their names breaks the javascript code.

From
https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id:

---
Note: Technically, in HTML5, the value for an id attribute may contain
any character, except whitespace characters. However, to avoid
inadvertent errors, only ASCII letters, digits, '_', and '-' should be
used and the value for an id attribute should start with a letter. For
example, . has a special meaning in CSS (it acts as a class selector).
Unless you are careful to escape it in the CSS, it won't be recognized
as part of the value of an id attribute. It is easy to forget to do
this, resulting in bugs in your code that could be hard to detect.
---
2022-02-25 13:44:06 +01:00
Javier Sánchez Parra 23d9799e09 Limit max number of clients drawn in commands
Print large number of clients (hundreds) does not make sense, it is
unreadable.
2022-02-24 17:05:29 +01:00
Javier Sánchez Parra af4b07cecf Wrap selected clients list
Otherwise, the list overflows the screen when users select many clients.
2022-02-24 17:05:12 +01:00
Javier Sánchez Parra 42ba24c9f9 Refactor selected clients drawing in commands
Refactor duplicated code as a jinja macro.
2022-02-24 17:05:12 +01:00
Javier Sánchez Parra cc008a0e62 Remove unused code in image creation template
Remove code to draw selected clients. Image creation template do not use
it because only operates one client.
2022-02-24 17:05:12 +01:00
Jose M. Guisado ee2e7a86dd Improve software inventory command
Extend commands.html template to keep scope tree, and action buttons
state.

When in the software inventory view, there exists two options: 'update'
or 'view'. Do not print raw json response from ogserver about the software
inventory/profile.

When vieweing the software list, print a html table using the new
template: software_list.html.

Do not print blank pages with plain text html error codes when something
goes wrong. Instead, print an error message after redirecting to the
commands view.
2022-02-23 11:42:25 +01:00
Javier Sánchez Parra a940fb185b Remove "Tasks" and "Schedule" from the navbar
Remove them until we add their functionality.
2022-02-23 10:47:08 +01:00
Javier Sánchez Parra 886e6c7b67 Show selected clients in container block
On scopes and commands views, draw clients as users selects them in the
scopes tree.

Trigger client drawing on two events:

1."change" event, occurs when the user clicks a client checkbox. This
  event is standard [1].

2. "show-client" event, fires when ogcp get selected clients from
   localStorage and when an user checks a parent checkbox. This event is
   custom.

Dot characters (".") in clients names are replaced by underscore("_")
when used as id to avoid errors.

1. https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event
2022-02-23 10:47:08 +01:00
Jose M. Guisado 1d68e2619a Show error messages in action_image_restore
If something goes wrong, the application shows an error message after
redirecting to the commands view.

Do not show blank pages with plain text error codes.
2022-02-23 10:07:45 +01:00
Jose M. Guisado 5de191964a Show error message for invalid setup form
Do not show plain text '400 Bad Request'. Instead, show error message
and return to commands view.
2022-02-23 10:01:53 +01:00
Jose M. Guisado c5cb75eea3 Move 'Update' button up in hardware view 2022-02-23 09:58:30 +01:00
Jose M. Guisado ca00bd5e89 Redirect to commands view after hardware POST 2022-02-23 09:58:10 +01:00
Jose M. Guisado a326119937 Hardware inventory template extends from command.html
Extending from command.html is required for action views to mantain
the scope context on the left side column.

Enables setting dropdown button and action button as active when loading
the hardware inventory view.
2022-02-22 17:01:27 +01:00
Jose M. Guisado ba5063871c Update Spanish translations 2022-02-22 16:58:04 +01:00
Jose M. Guisado 93f7fa17c5 Rename "Log" action to "System Log" 2022-02-22 16:51:29 +01:00
Jose M. Guisado 8e6fa1b1be Group command buttons into dropdowns
Group related actions in the "commands" section inside a
dropdown button.

Declutters the panel in which the buttons are displayed.

Dropdown button jinja block name is used as prefix for the block names
of inside buttons. For example, for the image dropwdown button:

<button class="...{% block nav_image %}{% endblock %}...">
    {{ _('Image') }}
</button>

Actions such as restore and create will show a jinja block inside class
attr like:

<input class="... dropdown-item{% block nav_image_restore %}{% endblock %}" ...
<input class="... dropdown-item{% block nav_image_create %}{% endblock %}" ...
2022-02-22 16:28:16 +01:00
Jose M. Guisado d2e8131ffa Setup view sets nav button as active
When loading the setup view, it's nav button becomes active.
2022-02-22 13:03:11 +01:00
Jose M. Guisado 17e13ad6a8 Add nav blocks to commands template
Adds empty jinja blocks for the class attribute of all action buttons.

Child templates from command (actions) can set their nav button as
active overriding the corresponding {% block %}.

Currently, not all action templates extends the commands.html template.
This is not a problem, as the blocks are just empty.

This is a preparation for changes on each action template to extend
commands.html template.
2022-02-22 12:57:20 +01:00
Jose M. Guisado ea4ee6662f Highlight active nav items
Use bold font for active nav items.
2022-02-22 12:40:26 +01:00
Jose M. Guisado 07b69dab90 Merge nav into base template
{% block %} defined in nav template cannot be overriden by child
templates from base. This is a limitation in jinja.

Merge nav into base template so jinja blocks so no {% include %} is used
and these blocks can be overriden by child templates (commands, images,
dashboard...)

Avoid using request.endpoint to determine active nav item, decoupling
endpoint names from navigation. Instead use child templates to override
jinja blocks.

[1] https://stackoverflow.com/q/40537752
    https://stackoverflow.com/a/40562662
    https://github.com/pallets/jinja/issues/243
2022-02-22 12:34:03 +01:00
Javier Sánchez Parra 5d9ad78ed3 Check scopes checkboxes recursively
Otherwise, nested scopes are not checked and mislead users.

When a scope is checked, we search all its children and check them too.
2022-01-31 16:28:53 +01:00
Javier Sánchez Parra 9a6508c686 Add helper function to store checksum status
This function stores checksum status if is checked to browser local
storage. Otherwise, it removes checksum from the storage.
2022-01-31 16:28:53 +01:00
Jose M. Guisado ed294050f1 Group log commands buttons into dropdown
Compacts Commands view with a single "Logs" dropdown button. Dropdown
shows current log commands.
2022-01-31 16:02:35 +01:00
Javier Sánchez Parra a9e6340517 Keep selected clients in the scopes tree
Otherwise, users have to click clients checkboxes every time they
switch view.

This commit adds one hook to capture when clients checkboxes changes.
When they are checked, ogcp (front-end) stores them in browser's local
storage. When they are unchecked, ogcp removes them from local storage.

Every time users load a page with the scopes tree, ogcp checks local
storage to restore selected clients.
2022-01-28 12:51:07 +01:00
Javier Sánchez Parra b7e4f47f5c Keep scopes tree state
Otherwise, users have to expand the scopes tree every time they switch
view.

This commit adds two hooks to capture when an element of the tree is
shown or is hidden[1]. When they are shown, ogcp (front-end) stores them
in browser's local storage[2]. When they are hidden, ogcp removes them
from local storage.

Every time users load a page with the scopes tree, ogcp checks local
storage to restore the scopes tree state.

Store and remove functions use stopPropagation() to prevent ancestors of
clicked elements to also be stored or removed from local storage.[3]

1. https://getbootstrap.com/docs/4.1/components/collapse/#events
2. https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API
3. https://javascript.info/bubbling-and-capturing
2022-01-28 08:23:43 +01:00
Javier Sánchez Parra 5fbcff64f2 Remove dead code in macro.html
scopes_tree_collapse() replaces this dead code.
2022-01-28 08:23:43 +01:00
Jose M. Guisado 31b1e92077 Add confirmation page when deleting image
User can confirm when deleting an image by double checking the
information displayed on this page.

Adds a new optional field in GenericForm: 'ids'. Used when dealing with
ids instead of ips.
2022-01-27 16:51:35 +01:00
Javier Sánchez Parra b566528012 Adds confirmation page to reboot clients
This commit adds an extra view to ensure users do not reboot clients
accidentally.

ogcp GET /reboot returns the confirmation page and POST /reboot
builds and sends the request to ogServer.

It also includes Spanish translation of the new strings.
2022-01-20 15:20:38 +01:00
Javier Sánchez Parra ddd4629571 Adds confirmation page to power off clients
This commit adds an extra view to ensure users do not power off clients
accidentally.

ogcp GET /poweroff returns the confirmation page and POST /poweroff
builds and sends the request to ogServer.

It also includes Spanish translation of the new strings.
2022-01-20 12:54:57 +01:00
Javier Sánchez Parra 20a89ce965 Rename to "Partition Table Type"
Otherwise, "Partition Table" is ambiguous.
2022-01-20 09:41:57 +01:00
Javier Sánchez Parra e11125ef9e Rename MSDOS to MBR
This commit rename partition table type MSDOS to MBR in the front-end.

At the back-end ogCP still uses MSDOS string because ogClient scripts
(aka cloning engine) expects it.
2022-01-20 09:25:18 +01:00
Javier Sánchez Parra 302a776c5f Show disk and partition size in mebibytes
This commit converts disk and partition size from kibibytes to mebibytes
to improve usability. Disk and partition size are used in "Client
details" and "Partition & format" forms.

It also returns size to kibibytes when creating /setup API
payload as required by ogServer.
2022-01-19 17:08:16 +01:00
Javier Sánchez Parra 813b9e28d1 Fix typo in the dashboard 2022-01-19 15:48:39 +01:00
Javier Sánchez Parra 73963a0273 Ask twice to delete clients
This commit adds an extra view to ensure users do not clients
accidentally.

It also includes Spanish translation of the new strings.
2022-01-19 15:36:58 +01:00
Javier Sánchez Parra 96d2797ec3 Fix "Add client" form redirection
Otherwise, ogcp redirects to a blank page instead of the scopes view.
2022-01-14 09:08:04 +01:00
Javier Sánchez Parra c34da1e098 Add language configuration and Spanish translation
This commits configures and sets up flask-babel and adds Spanish po
file. Flask-babel is already a dependency so this commits no needs to
add it.

Users can edit ogcp.json to choose between English or Spanish. After
changing the language in the configuration file, users must restart ogcp
service.

Instructions to generate translation files, inspired by
https://flask-babel.tkte.ch/:

1. Download ogcp source code.

   git clone git://git.soleta.eu/ogCP /path/to/ogcp

2. Create a python virtual environment.

   python3 -m venv /path/to/new/venv

3. Activate the virtual environment.

   source /path/to/new/venv/bin/activate

4. Install dependencies to the virtual environment.

   cd /path/to/ogcp
   pip3 install -r requirements.txt

5. Extract ogcp strings.

   cd /path/to/ogcp/ogcp
   pybabel extract -F babel.cfg -k _l -o messages.pot .

   NOTE: "-k _l" is needed to extract strings which use lazy
   translations.

6. Create or update translation files.

   a. Create translation file. This example creates a french translation
   file.

      pybabel init -i messages.pot -d translations -l fr

   b. Update translation files. You need to do this when ogcp strings
   change and want to update current supported languages.

      pybabel update -i messages.pot -d translations

7. Edit the translations .po file as needed. Example route:
   /path/to/ogcp/ogcp/translations/fr/LC_MESSAGES/messages.po.

8. Compile translations.

   pybabel compile -d translations

9. Launch ogcp and check the translations.

   cd /path/to/ogcp
   pip3 install -r requirements.txt

10. Commit and push .po files with translation changes.
2022-01-13 11:36:46 +01:00
Javier Sánchez Parra 4777fcaee6 Add gettext to dashboard strings
Otherwise, this texts could not be translated.
2022-01-13 11:36:46 +01:00
Javier Sánchez Parra 09498a8887 Use lazy translation in classes
From flask babel documentation:
---
Additionally if you want to use constant strings somewhere in your
application and define them outside of a request, you can use a lazy
strings. Lazy strings will not be evaluated until they are actually
used. To use such a lazy string, use the lazy_gettext() function.
---

_() and _l() functions are aliases of gettext() and lazy_gettext()
respectively. Both functions belong to flask babel library.
2022-01-13 11:36:46 +01:00
Javier Sánchez Parra 91f3567d09 Change some f-strings to format()
python-babel is not compatible with f-strings.

See also: https://github.com/python-babel/babel/issues/594
2022-01-13 11:36:41 +01:00
Javier Sánchez Parra a8e16a3388 Check images list content in client details view
Otherwise, client image assignation fails if "images" variable is empty.
2021-12-20 12:21:08 +01:00
Javier Sánchez Parra d12b401d30 Add available ogLives to client details
Otherwise, ogLive field always shows the default value.
2021-12-17 13:24:00 +01:00
Javier Sánchez Parra e07c8afcce Add set ogLive to commands
This action is related to /oglive in ogServer's API. Allows changing the
ogLive for a set of given clients, previously selected in the /commands
view.
2021-12-16 17:17:07 +01:00
Javier Sánchez Parra 695c19f86e Add scope permission support
ogCP limits which scopes can use each user.

Configuration file stores allowed scopes by their names. Leave scope
list empty to give a user permissions on all scopes.
2021-12-10 13:06:18 +01:00