Commit Graph

491 Commits (d00e437b8d76bc32732643a92f0ea32fbe0b7901)

Author SHA1 Message Date
Javier Sánchez Parra cc533aa3cc Set commands nav buttons as active
When loading any command view, its nav button becomes active.
2022-03-04 11:04:22 +01:00
Javier Sánchez Parra 16ef1ae7ac Extend images html in "image details" template
Otherwise, "image details" page lose the images tree and buttons.
2022-03-03 12:35:48 +01:00
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
Javier Sánchez Parra a5681a4b85 Add multi user support
It is inspired by the following example:
c760c0ef7c/README.md (usage)
2021-12-08 12:10:38 +01:00
Javier Sánchez Parra f70d90ba32 Ensure unique HTML ids for scope elements
Otherwise, undesired collapse/expand events may occur when users click
an element of the scope.

Old id format example: level3-2

New id format example: id_1-1_2-4_3-2

Explanation:

	* "id" -> Prefix needed because html ids must start with an
	  alphabetic character.

	* "_" -> Separator.

	* "1-1" -> Values pair separated by "-". The first value is the
	  level of the node. The second value is its position with
	  respect to its siblings. This is always 1-1 because is the
	  root node.

	* "_" -> Separator.

	* "2-4" -> Child node of the previous node. In this example,
	  this node its in level 2 and has the fourth position.

	* "_" -> Separator.

	* "3-2" -> Child of node "2-4" in level 3 and in the second
	  position. This is the final node in this example.

In other cases ogcp may draws deeper nodes, so it creates longer ids.
For example: id_1-1_2-1_3-2_4-1_5-1_6-1
2021-11-26 12:43:53 +01:00
Javier Sánchez Parra 792e4ed3dd Add legacy real-time log
Clients in ogLive offer a web page with lighttpd that shows a real-time
log. This commit links this log in ogcp.

Future patches will deprecate this log functionality in favour of more
robust solutions.
2021-11-08 11:42:59 +01:00
Javier Sánchez Parra 7faa607131 Set default value on partition data parsing
Otherwise, ogcp breaks when receiving an unknown disk table type,
partition type or file system.
2021-11-02 16:48:06 +01:00
Javier Sánchez Parra cbeafea273 Support partition of computers with several disks
Add a new select input and button to choose which disk you want to
partition.

TODO: Current argument parsing function returns a list with all the
arguments, except csrf_token. Future patches should add granular parsing
of different types of arguments.
2021-11-02 16:24:18 +01:00
Javier Sánchez Parra 20a94dbc3e Add legacy log
Future patches will deprecate this log functionality in favour of more
robust solutions.
2021-10-28 11:29:03 +02:00
Javier Sánchez Parra c493d24349 Set tiptorrent as unique restore image method
Soleta Networks only offers support of tiptorrent for restore image
transferences.
2021-10-20 11:54:28 +02:00
Jose M. Guisado 76d500fe2e Keep scopes collapsed by default
For large scopes, unfolding by default slows page loading. It also
takes lots of vertical space and the scroll bar gets smaller.
2021-10-15 12:14:53 +02:00
Javier Sánchez Parra 0b424aa34e Add partitions info to client details
Show a table with client's disks and partitions information.
2021-10-13 13:06:49 +02:00
Javier Sánchez Parra 3e7801e487 Add "Delete image" action
Adds a new button in the images view.

This action handles image deletion, one at a time for security. Users
must select an image using the images tree.
2021-09-29 17:12:15 +02:00
Javier Sánchez Parra f572643605 Fix cache partition creation
Partition & Format JSON cache fields always have the default values (no
cache) although users order to create a cache partition.

Set JSON cache fields with the values filled by the user.
2021-09-16 11:57:59 +02:00
Javier Sánchez Parra da9b2ea9c2 Add image details action
This action is used to visualize the specific details of an image, as
its ID, name, size, etc.
2021-09-03 14:51:15 +02:00
Javier Sánchez Parra d83e456daf Rename validate and parse IPs functions
These functions can work with any kind of strings and not only with IPs.

This is required by the "image details form" that a follow up patch
implements. "Image details form" validates and parses IDs instead of IPs
with these functions.

Rename validate and parse IPs functions to a generic name, so it makes
sense to use them with any kind of string.
2021-09-03 14:51:15 +02:00
Javier Sánchez Parra 27ea5016c4 Add images view
Images view manages all the images stored in the server.

Follow up patches adds actions to get and edit image details, and to
delete them.
2021-09-03 14:51:14 +02:00
Javier Sánchez Parra 37a0304575 Add most common partition codes and filesystems
To increase the compatibility of "Partition & format" (aka setup).
2021-08-24 13:35:42 +02:00
Daniel García Moreno 0bbae508f6 Fix setup form javascript
This patch fixes the javascript that adds/removes rows from the setup
form.

The AddPartition function now replaces the id `partitions-N-FIELDNAME`
using a regular expression. The hidden csrf input is also ignored to get
incremental numbers.

On deletion, all the ids are reassign from zero, in order, to get always
an ordered list with all numbers between the first and the last.
2021-08-23 17:16:04 +02:00
Javier Sánchez Parra a51fdd9d30 Add missing file from commit 9d98cf0 2021-08-23 17:13:02 +02:00
Javier Sánchez Parra 7b2d061f70 Add EFI, NTFS and LINUX GPT partition codes
Otherwise, ogcp fails to parse them when received.

Note: this commit write the codes in decimal notation, but the common
way is hexadecimal notation.
2021-07-30 15:00:34 +02:00
Javier Sánchez Parra 9d98cf0423 Add "Delete center" action
Creates "delete center" form with a select to choose a center to delete.

Adds a new button in the scopes view. Because scopes checkboxes values
maps to ips the only way to specify the center to delete is in the delete
center form itself, using a select input.
2021-07-30 13:01:38 +02:00
Javier Sánchez Parra 95c113f067 Fix scopes tree draw on empty centers/rooms
Otherwise, ogcp draws empty centers and rooms as computers, with the
state circle.
2021-07-30 13:01:36 +02:00
Javier Sánchez Parra df25ec62a8 Add "Delete client" action
Adds a new button in the scopes view.

This action handles clients deletion on one or multiple scopes. Users
must select clients using the scopes tree.
2021-07-29 16:44:14 +02:00
Javier Sánchez Parra 05bab71162 Add IPs validation to Poweroff and Setup form
Otherwise, users see an error page, instead of a float message asking to
select at least one computer.
2021-07-29 16:41:17 +02:00
Javier Sánchez Parra e64a33a3dd Fix submit command redirection
Current submit command behaviour redirects the user to scopes views.
This commit changes the behaviour when submitting a command forms to
redirect users to the general command view.
2021-07-29 16:40:22 +02:00
Javier Sánchez Parra 5dd2b5c6dc Add full scheme partitioning support
The initial "Partition & Format" (aka setup) form only allows to modify
one partition at a time. This commit updates it to allow to modify the
whole disk partition schema in one go, without pop-ups and transitions.

This is a remake of the previous form using FieldList de WTForms and
javascript to duplicate / remove FieldList adapted to the attributes
available in WTForms.
2021-07-28 17:19:51 +02:00
Javier Sánchez Parra 4b4edf4aee Add and restyle clients states
This patch adds new states: OPG for clients in ogLive, BSY for busy
clients, VDI for clients in OpenGnsys VDI and WOL_SENT for booting
clients.

It also removes state ON because do not exists.

ogCP currently uses the following colors:

* OPG -> Solid yellow
* BSY -> Solid red
* VDI -> Solid green
* WOL_SENT -> Solid brown
* OFF -> Hollow grey
2021-07-20 11:22:41 +02:00
Daniel García Moreno 4e519590af Update scopes tree dynamically
This patch adds a javascript function to update the scope tree (on/off)
state.

This javacript function is called every second, does a call to the
new backend endpoint `/scopes/status` and updates the tree classes
depending on the current data.

The new `/scopes/status` endpoint just returns the scopes tree as json.

This patch also adds an icon in the tree leafs, a filled green circle
when the state is `on`, and a empty red circle when the state is `off`.

There's also a new javascript function to unfold all collapses in the
scope tree.
2021-07-07 11:27:28 +02:00
Javier Sánchez Parra af938c3280 Fix configuration file template
ogcp fails to parse configuration file template because it misses a
comma.
2021-06-30 17:20:34 +02:00
Javier Sánchez Parra 1e7fce971a Create "Add Center" form and view
Creates "add center" form with "name" as required input and "comment" as
optional input.

In the future, the CenterForm can be used to display center information
once such functionality lands in the ogserver.
2021-06-30 17:20:17 +02:00
Daniel García Moreno 42dc44323e Add new partition button in setup action
This patch adds a way to add a new partition to the setup.html template.
This button opens a modal dialog with a new form and calls a new
endpoint to create the new partition (this endpoint does nothing, it's
needed to be implemented in the future).

I've followed the initial design for this template, with one form per
each partition, so every button will call a function and reload the
page.

It's possible to do all actions at once, but that will require a rework
of this, to do that we can just define an unique form in the whole html,
remove all the "Modify" buttons and add just one "Apply" button at the
end. But maybe that option is a lot complex in the backend because will
require to validate all the changes at once.

This patch also improves the setup.html form without using
flask-bootstrap and rendering the form in the template directly with the
bootstrap4 classes.
2021-06-30 17:19:55 +02:00
Jose M. Guisado Gomez 288654722d Add scopes_tree_collapse macro
Being able to collapse the scopes tree allows to fit a bigger scopes
tree.

A new macro is introduced to generate the HTML code for the scope tree
in such a way that each non-leaf level (center, room) are collapsible.

	macros.scopes_tree_collapse(scopes)

As of now, the state of the scope tree is not saved when changing nav
sections.
2021-06-30 17:19:17 +02:00
Daniel García Moreno f121d591e5 Keep the selection in the sidebar for mode & setup 2021-06-17 16:42:50 +02:00
Jose M. Guisado f8e27fb149 Don't show sidebar in login view
Commit 22dcea19 introduced sidebar, which is not shown in
index view. Disable sidebar in the login view too.
2021-06-17 09:58:42 +02:00
Jose M. Guisado 3667db8662 Add commands view and macros.html
Commands view has a scope sidebar with the content block filled with
command buttons (poweroff, wol, etc.)

This commit leaves scope create/delete/update buttons in the /scopes
view, which serves that purpose.

To avoid duplicating scope tree creation macro, an external macros.html
is created, this template can be imported. Future macros needed can be
written in there.
2021-06-17 09:58:11 +02:00
Daniel García Moreno 514fb84a56 Add chart to dashboard
This patch adds an example chart using chartjs to the dashboard to show
the disk usage.

https://www.chartjs.org/docs/latest/getting-started/
2021-06-08 12:36:55 +02:00
Daniel García Moreno 22dcea19ff Add sidebar and command bar to base template
Modify the base template to add the sidebar and command bar, implemented
just in the scopes view.

This patch also modifies the "actions/mode.html" template to be shown in
the scopes page. Any other action that should be inside the scopes
should do the same, add the scopes and clients to the template context
and use the "scopes.html" as base in those actions.

The notification has been also changed to use a toast notification
instead of the usual alert to avoid changing the layout on error.
2021-06-08 11:46:40 +02:00
Daniel García Moreno db29b306aa Restyle login.html template
Update the login template based on the AdminLTE extra page:
https://adminlte.io/themes/v3/pages/examples/login.html

This patch also adds a font-awesome icon to the login page, we've
font-awesome from the AdminLTE plugins so we can use this icons in the
interface.
2021-06-01 18:25:56 +02:00
Daniel García Moreno d4150080e3 Use AdminLTE in base.html
This patch adds the css and js sources from the AdminLTE template to the
base template so it can be used in all templates.

There's also some flexbox bootstrap classes [1] to place the footer at
the bootom always, even when there's no content to fill the page.

[1] https://getbootstrap.com/docs/4.6/utilities/flex/
2021-06-01 18:25:49 +02:00
Daniel García Moreno 3cfdfa3b12 Redirect to login page by default
This patch redirects to the login page instead of showing an empty page
when the user is not logged in.
2021-06-01 18:25:41 +02:00
Daniel García Moreno b2a0e96fbd Add initial AdminLTE template files
Add the open source AdminLTE bootstrap dashboard template to the static
folder, and some plugins that we'll use in the following changes to the
templates.

Plugins:

 * jquery
 * bootstrap
 * font-awesome

https://adminlte.io/
2021-06-01 18:25:29 +02:00
OpenGnSys Support Team d84933f88e ogcp is AGPLv3+
Update license header in files.
2021-05-20 18:45:38 +02:00
Javier Sánchez Parra 29480012e4 Add "Delete Room" form and view
Creates "delete room" form with a select to choose a room to delete.

Adds a new button inside the button group in the scopes view. Because
scopes checkboxes values maps to ips the only way to specify the room to
delete is in the delete room form itself, using a select input.
2021-05-20 18:45:34 +02:00
Jose M. Guisado f303240c55 Create "Add Room" form and view
Creates "add room" form with required inputs only: center, name and
netmask.

Adds a new button inside the button group in the scopes view. Because
scopes checkboxes values maps to ips the only way to specify the center
in which to add the room is in the add room form itself, using a select
input.

In the future, the RoomForm can be used to display room information once
such functionality lands in the ogserver.
2021-05-20 18:44:40 +02:00
Javier Sánchez Parra 5e46157060 Add ogLive list to the dashboard
Add list with ogLives installed in the server and highlight the default
ogLive.
2021-05-20 18:44:37 +02:00
Javier Sánchez Parra 8441d844d1 Add disk stats to the dashboard
Add the following disk stats to the dashboard:

* Disk size: shows the amount of total disk size in Gibibytes.

* used: shows the amount of used disk size in Gibibytes.

* available: shows the amount of free disk size in Gibibytes.

* use(%): shows the amount of used disk size in percentage.
2021-05-20 18:44:30 +02:00
Javier Sánchez Parra 7f0d1ab287 Add latest images to the dashboard
Users want to know latest created/modified images to manage new images
or changes made on existing images.

This commit adds a list with the 10 latest created or modified images.
2021-05-20 18:44:23 +02:00
Javier Sánchez Parra 411189e6ec Add number of images to the dashboard
Users want to easily know the number of images an ogServer has.
2021-05-20 18:44:15 +02:00
Javier Sánchez Parra 543b12aca8 Change login redirection to "Home"
When the user logs into ogcp, the web page redirects him to "Scopes".

In the future ogcp will have a dashboard showing multiple stats and
details. This dashboard will be in "Home" path and we want the user to
see it when he logs in.

Change login redirection from "Scopes" to "Home".
2021-05-20 18:44:07 +02:00
Jose M. Guisado 2ad382b5ed Add cosmetic improvements
* Adds label for each action page.
* Adds a colored state for opengnsys connected clients
* Fix nav active item
* Rename some actions
* Adds DISK to partition and format form
2021-03-24 14:32:16 +01:00
Jose M. Guisado 9ee0565ac4 Add login
Ogcp requires a simple login page in order to avoid exposure of the
ogServer API to anyone trying to access the web page.

Because the main authorization mechanism in ogServer is the api token
the login implemented for the ogcp does not include registration process
but a single user and password specified in the ogcp.json.

 	"USER": "user",
 	"PASS": "pass"

Adds two new views: /login and /logout. They are used to login the user so
that the rest of views regarding ogServer functionality can be accessed
in a "login required" fashion. Index view (/) is an exception, it can be
accessed logged in or not so different data can be displayed.

Templates can now access a variable "current_user" to get information
about login status. This is a Flask-Login feature.

- Templates regarding login can be found in templates/auth/
- Login form is defined in forms/auth.py to separate it from
  action_forms.py
- Adds Flask-Login module to requirements.txt
- Adds default user and pass in ogcp.json
2021-03-05 11:47:27 +01:00
Jose M. Guisado 149dfdcbfd Make partition forms inline in setup/
quick_form macro from Flask-Bootstrap creates vertical forms by
default, this rendered each partition spanning too much vertical space.

Use form_type='inline' from quick_form macro to compact the whole setup
form.
2021-03-05 11:43:05 +01:00
Jose M. Guisado 45af740c1f Cosmetic enhacements
* Use validate_ips and flashed messages for some more actions.
* Use extra_classes in quick_form macro to add bootstrap classes to
  rendered forms
2021-03-05 11:43:05 +01:00
Jose M. Guisado 2b76106475 Add multiple ip handling to image restore form
This patch enables a set of ips to be specified as a target of an image
restore action.

The set of selected computers must have the same partition setup in
order for the form to be rendered sucessfully, if different partition
setups are detected a redirection is made and an error flash message
is shown.
2021-02-22 14:25:29 +01:00
Jose M. Guisado 20f88065bb Add boot mode to actions
This action is related to /mode in ogServer API.  Allows changing
the netboot template for a set of given clients, previously selected
in the /scopes view.
2021-02-17 13:40:06 +00:00
Jose M. Guisado e68eb7a3da Add example image creation WTForms validator
Adds in a declarative way the validation of the image name form control
when creating a partition image.

This commit serves as an example of adding a predefined validator of the
WTForms module. Custom validator may be added by creating a given
function and appending it to the list of validators.

See https://wtforms.readthedocs.io/en/2.3.x/validators/#custom-validators
2021-02-16 13:30:28 +00:00
Jose M. Guisado 622f0bacbc Add ips field validation and better redirections
Add a function to validate that the ips received from the /scopes form
is valid (no more, no less).

Also redirects to the /scopes when any final request to the ogServer is
responded by a "200 OK"
2021-02-16 13:27:40 +00:00
Jose M. Guisado 2ec14a0061 Add FAT32 to FS_CODES dict
An error was produced when rendering the setup form of a computer
with any FAT32 partition. It was missing from the mapping of codes
received in a response to a given filesystem.
2021-02-16 13:25:10 +00:00
Jose M. Guisado 55d923431d Add some minor cosmetic changes
This commit may serve for future reference as to how some cosmetic
changes have been applied to the web.

Primarily using bootstrap classes in order to adjust margin or padding,
there are mechanisms that allow modifying the class of an
underlying html element in WTForms. Bootstrap classes are written
directly in html templates for Flask.

Also add a Soleta branded footer.
2021-02-16 13:21:24 +00:00
Jose M. Guisado 199854f1e9 Start using Flask flash messages
These are used to store a message string that can be later accessed. We
can use Flask flash messages to alert about any error or providing info
when processing a request.
2021-02-16 13:18:38 +00:00
Jose M. Guisado 989dc5bd36 Add image create template
Image creation action was lacking a template to render the form. This
patch adds said template.

Also redirects to /scopes when the request was processed by the ogserver
successfully.
2021-02-10 11:58:46 +00:00
Jose M. Guisado 3eda3fa684 Add UNICAST-DIRECT method to image restore
Previously the only method (in the form select) was "UNICAST". This
patch enables specifying a correct parameter for the underlying script
to fetch the image to be restored.

UNICAST-DIRECT makes the administrator transfer the image through the
network. UNICAST-CACHE indicates the taget pc to search for the image in
its cache partition.

Also redirects to the /scopes when ogserver responds with 200 OK.
2021-02-10 11:46:06 +00:00
Jose M. Guisado 95b28c9403 Add setup modif part scheme param and autofill partition_setup
A new parameter for the setup/ was added: type. Regarding the disk
partition scheme. It must be either "MSDOS" or "GPT".

ogServer expects a 4 partition setup in order to succesfully execute a
setup/ command. Ogcp is currently getting the partition to modify
one partition at a time. This patch enables ogcp to "autofill" with
empty partitions the partition_setup payload parameter.

TODO: In the future, the setup/ logic should not need to query the
database once again in order to create the 'partition_setup' payload
parameter with the form modifications.
2021-02-10 10:48:01 +00:00
Jose M. Guisado b8ac0b7963 config: rename config file to ogcp.json
Do not use the same name as ogserver config file.
2020-11-06 09:32:27 +00:00
Jose M. Guisado b708047d28 config: use from_json to read ogserver config
This patch introduces the usage of Flask.Config class so the config can
be read at startup (__init__) only once. Config keys must be uppercase
so that from_json method does take it into account.

 dormousehole.readthedocs.io/en/stable/api.html#flask.Config.from_json

Prior to this patch each request required opening and closing the
ogserver.json file via load_config in views.py.

In the future the decorated load_config function inside views.py
may be removed to avoid creating multiple instances of the OGServer
class.
2020-11-06 09:27:03 +00:00
Jose M. Guisado c08aca9219 Add software action
This action lists every piece of software installed in an OS from a
client.

This action can handle listing the software from the DB as well as
updating that DB with the latest client information.
2020-10-29 15:03:35 +01:00
Roberto Hueso Gómez a8d7494ab9 Add image create action
This action handles the creation of the image in the DB as well as the
'.img' file.
2020-10-29 14:43:23 +01:00
Roberto Hueso Gómez 282984d0ac Add templates for clients, hardware, restore, session and setup
These templates were not added in previous commits.
2020-10-27 11:15:19 +01:00
Roberto Hueso Gómez 904989b175 Add image restore action
This action provides the image restoring functionality on a specific
client.
2020-10-23 15:10:29 +02:00
Roberto Hueso Gómez c5a4ccff55 Add session action
This action provides the functionality to run one of the installed OSs
in a client.
2020-10-22 11:04:57 +02:00
Roberto Hueso Gómez e978c30b9f Add client hardware action
This action lists all the hardware items in a client.
2020-10-21 14:38:44 +02:00
Roberto Hueso Gómez 93ffa115fe Add create client action
This action provides the functionality to add a new client to an
ogServer.
2020-09-28 15:04:00 +02:00
Roberto Hueso Gómez 664d032884 Add client details action
This action is used to visualize the specific details of a client, such
as its IP, Name, MAC, etc.
2020-09-28 15:02:16 +02:00
Roberto Hueso Gómez ea5b22c35e Add delete partition view
This view deletes and formats a partition from the selected machine.
2020-09-15 13:42:28 +02:00
Roberto Hueso Gómez 1ce9c8a95b Fix setup partitions filesystem codes to string
Partition filesystem are encoded with integers in the DB. We need to
send the type string instead of the encoded integer, so this patch
parses the encoded integer to string.
2020-09-15 13:39:05 +02:00
Roberto Hueso Gómez 7815d1fac7 Add partitions setup forms
This provides a menu to setup the internal partitions setup of each
machine. Delete partitions is still just a placeholder.
2020-09-14 10:56:58 +02:00
Roberto Hueso Gómez 9df3c538f3 Fix parse_ips(...) function to avoid parsing CSFR
This avoids trying to parse CSFT token as an IP.
2020-09-14 10:54:46 +02:00
Roberto Hueso Gómez 19be0f87de Fix internal server error code 2020-09-14 10:54:01 +02:00
Roberto Hueso Gómez b7e980f946 Add 500 default error handler
This handles HTTP 500 internal server errors.
2020-09-04 13:21:36 +02:00
Roberto Hueso Gómez 31d2808a43 Add 404 default error handler.
This handles HTTP 404 page does not exist errors.
2020-09-04 13:20:11 +02:00
Roberto Hueso Gómez bb7e201991 Add refresh action
This action can be applied on single or multiple scopes.
2020-09-04 13:18:26 +02:00
Roberto Hueso Gómez d5eaf699a7 Add WoL action
This action can be applied on one or multiple scopes. This
implementation use Flask-WTF as a way to build and valdiate forms. As a
side effect, this adds CSRF protection to all forms.
2020-09-04 11:09:44 +02:00
Roberto Hueso Gómez 73a6e07b83 Add reboot action
This action handles reboot on one or multiple scopes.
2020-09-03 11:50:58 +02:00
Roberto Hueso Gómez ef609cf52a Rename add_state_to_scopes() function
This function is renamed to add_state_and_ips() which is more accurate.
2020-09-02 14:50:52 +02:00
Roberto Hueso Gómez c12ff832c7 Add action_poweroff() view function
This function handles a poweroff request to one or multiple scopes.
2020-09-02 14:46:20 +02:00
Roberto Hueso Gómez 30c5173aea Implement scopes() view function
This function provides the data needed to render the scopes.html
template.
2020-09-02 14:45:02 +02:00
Roberto Hueso Gómez 46b88fff0b Add requests functionality to the OGServer class
These functions will be used to make HTTP GET and POST requests to the
OGServer.
2020-09-02 14:42:10 +02:00
Roberto Hueso Gómez a4957f2284 Add scopes.html template
This template shows information about scopes and its states as well as a
tool to apply actions on them. Style improvements are still necessary.
2020-09-02 14:37:56 +02:00
Roberto Hueso Gómez 3fe6ad6ac6 Add bootstrap bundle
This is used for multiple bootstrap components such as dropdown menus.
2020-09-02 14:35:30 +02:00
Roberto Hueso Gómez 01efd71022 Add frontend basic structure
This adds base.html and nav.html templates as well as its dependencies
on Bootstrap and jQuery.
2020-08-31 11:58:38 +02:00
Roberto Hueso Gómez df2e425b34 Add basic backend structure
This adds views functions and ogServer config loading.
2020-08-31 11:58:27 +02:00