Commit Graph

491 Commits (d00e437b8d76bc32732643a92f0ea32fbe0b7901)

Author SHA1 Message Date
Javier Hernandez 869f15ecf0 Limit restore image to images of assigned repo
Allow to restore only to images that are in the repo the client
is assigned to.
2023-12-15 13:02:54 +01:00
Javier Hernandez 6cb7be03fd Add scope-management for non-admin users
Add scope-management menu with limited commands for non-admin users;
commands allowed are add/edit/edit/delete/import client(s)
2023-12-15 12:06:27 +01:00
Javier Hernandez a9d367e795 views: Preselect client's associated repo
Make the create-image menu preselect the repo of the selected client
2023-12-15 11:44:38 +01:00
Javier Hernandez 24aab951a8 Group images by repos
Make the sidebar from the images menu display the list of repos grouped
by repos
2023-12-14 12:35:01 +01:00
Javier Hernandez aa6061dad7 Limit allowed scopes to only centers
Modify the add/edit users menu to make the 'allowed
scopes' field only display centers
2023-12-13 13:28:02 +01:00
Javier Hernandez 131404dfd7 ogcp.js: Remove id part from client bubbles
Bubbles depicting clients were previously displaying in the format
<client_name>_<client_id>. This commit changes that to only display the
name
2023-12-13 13:25:29 +01:00
Javier Hernandez 609ff0e19e views: add select repo in import clients
Add, in import clients menu, a selector to select the repo to be
associated with the clients about to import

modify OG_CLIENT_DEFAULT_BOOT variable to be 'oglive'; 'pxe' is not a
valid boot mode, and ogserver would return an error
2023-12-13 11:39:08 +01:00
Javier Hernandez 069733b00e base: Increase column size for sidebar
Make the sidebar wider to improve readability of its content
2023-12-12 14:32:47 +01:00
Javier Hernandez 0f5ba31c09 views: Add 'description' field to image details
Add a 'description' field to the image-details form.
2023-12-12 11:42:43 +01:00
Javier Hernandez 84bcdb3cae Change Image-details' 'Datasize' unit to MiB
Change the Image details form to display the 'Datasize' field of the
image in MiB instead of GiB
2023-12-12 11:00:19 +01:00
Javier Hernandez c66871f3ce Fix bug at create and update image
Fix a bug that made the create and update images actions unusable.

The data sent to post was incomplete; partition's 'code' data was missing.
2023-12-12 11:00:17 +01:00
Javier Hernandez c1548fd219 views: Check form contain a cache partition
Make the partition and format form fail if the user has not added a
cache partition.

A cache partition is required to make the restoration of images work
2023-12-11 13:34:25 +01:00
Javier Hernandez cc5c0105db ogcp.js: Fix bug when adding a new partition
Fix a bug that made the 'add a new partition' button unusable if all
partitions (rows) were deleted.

The reason for this bug was that the AddPartition() function would add a
new partition by cloning an already present html row element. This would
fail if no more rows were present in the table.

The solution implemented checks, previous to delete a partition, if it
is the last partition. If it is, then, instead of removing the whole
row, it just empties it.

Html button element needs to contain 'type="button"' attribute for this to
work. Otherwise, default action for the button is submit and it would
redirect after clicking.
2023-12-11 11:43:42 +01:00
OpenGnSys Support Team ddfaae0ef6 templates: add missing delete/update repository templates
Add missing templates.

Fixes: 15dd4c2a8f ('views: add action to update repo')
Fixes: 152337b6bd ('views: add action to delete repo')
2023-12-11 09:25:21 +01:00
Javier Hernandez f76c0ed24d views: change repo add view to follow convention
combine repo_add_get and repo_add_post into one, action_repo_add. This
is to follow convention across all the views and to clarify that it is
an action.

rename repos_details template to repos_add. Now it is clear the purpose
of each action template; there is one for each: add, delete and update
2023-12-05 12:15:34 +01:00
Javier Hernandez 15dd4c2a8f views: add action to update repo
allow the user to update a repo by selecting one and pressing the update
button.
2023-12-05 11:38:26 +01:00
Javier Hernandez 152337b6bd views: add action to delete repo
allow the user to delete a repo by selecting one and pressing the delete
button. Previous to deletion, show the user a confirmation page (a form)
with the details of the repo to delete

the confirmation form is constructed with the fields of Repoform.
RepoForm is also used in template used to create a repo. To make both
templates work with RepoForm, RepoForm's field 'create' has been renamed to
'submit'

ogcp.js: add a function to make that, when the user selects a
repository, the server in which it is contained is automatically
checked. We need it checked so that action_repo_delete can know the
server to which it has to send the delete request. Use data-server in
repos_details.html to make this work

Validate, in action_delete_repo, that user has only selected one repo to
delete. In order to do that, action_delete_repo view needs to be able to
get a list of all selected repos. This is only possible if <input>
elements that are associated with repos info contain a different name
attribute per repo. In this case, template repos.html has been modified
to use name={repo name}-{repo_id}.  After this, parse_elements() will
work and parse a set containing all selected repos.

modify html input associated to repos server in order to follow same
convention as in other templates. For example, images uses image-server;
scopes, scope-server.
2023-12-05 10:21:09 +01:00
OpenGnSys Support Team 0718ccac75 cfg: add template file
this template configuration file is used by the installer.
2023-12-04 10:45:38 +01:00
OpenGnSys Support Team 2108d974bd init: missing import logging
Otherwise:

 NameError: name 'logging' is not defined

is reported.
2023-12-04 10:04:19 +01:00
Javier Hernandez 2858436341 src: add menu to manage repos
The menu includes a list of the repos of each server. The user can
select a server or a repo to make changes.

As of now, the only action possible is to add a repo to selected
server.

The work contained in this commit can be structured in:

1. Add the repos menu:
- Add a 'repos' button in the menus bar (base.html).
- Add repos.html template to create the management repos menu.
- In ogcp.js, add function to store in browser's local storage which
  elements of the sidebar are uncollapsed. This saves the sidebar state
  after a page refresh.
- Add manage_repos() in views.py

2. Allow to add a repo:
- Add template with form to add a repo (repos_details.html)
- Create RepoForm(FlaskForm) in action_forms.py
- Add repo_add_get() and repo_add_post() in views.py
2023-12-01 17:20:08 +01:00
OpenGnSys Support Team 215e3c2fc0 init: filter out GET /scopes/status requests
ogcp.js calls this endpoint very often, which send a request to the ogserver
through the REST API. This call is needed because javascript code cannot
directly talk to the ogserver since it does not know what the API_KEY is.
Add a filter to skip log GET /scopes/status requests.

Thanks to DaniGM for helping with this.
2023-12-01 12:42:41 +01:00
OpenGnSys Support Team 1a64f581ae views: set computer netmask to 0
This is never used by ogserver, instead the room netmask is always used.
2023-11-30 21:01:49 +01:00
Javier Hernandez 0340c17dc3 views: Add placeholder for mac field
Add a placeholder that shows the user an example of what a valid mac
address looks like.

By now, mac needs to be specified as AABBCCDDEEFF without : for historical
reasons.
2023-11-30 11:35:30 +01:00
Javier Hernandez 7f93221617 views: fix client details
- netmask is no accesible anymore, remove it.
- The form made reference to fields that do not exist anymore:
  netmask and netdriver (removed in a previous commit)
- make the repository field show the repo that is in use
2023-11-29 13:20:18 +01:00
Javier Hernandez 3b932fc6a8 views: fix repository list in update client
Make the repository list's first element be the current repo in use.
This is needed because, otherwise, an update could inadvertently
change the repo.

Remove a print statement that is no longer needed
2023-11-29 13:20:07 +01:00
Javier Hernandez 4a70bc174c views: populate repositories in client form
Make, in add and edit clients forms, the field repository show the list
with the actual repositories, not a harcoded value.
2023-11-29 10:43:02 +01:00
Javier Hernandez ad41a0dfbe image: rename and remove fields
- remove field image 'id'
- change size to display MiB instead of GiB
- replace 'Modified' with 'Last update'
2023-11-27 09:45:16 +01:00
Javier Hernandez 9fa90e0593 templates: translate shutdown state keys
Change key element 'Apagado' to its English form 'Shutdown'
2023-11-27 09:45:16 +01:00
Javier Hernandez bb66d9ed42 views: Make 'partition' field use same format
Make forms containing a 'Partition' field use all the same format (ie.
<Disk id> | <Partition id> | <Partion type> <Partition format>")

Signed-off-by: OpenGnSys Support Team <soporte-og@soleta.eu>
2023-11-27 09:45:16 +01:00
Javier Hernandez 4f565255af client: Remove 'netmask' in form
Remove unnecessary field 'netmask' from forms used to create and update
clients. Netmask is configured in rooms instead.
2023-11-27 09:44:47 +01:00
Javier Hernandez 3f27dd3ef1 views: allow to edit a client
Add a form to allow the user to update a client.

ip field is in read only mode because this is the primary key to
identify a client in db.

Fields corresponding to boot mode (ie. oglivedir and boot) are also in
read only for now; ogServer has to fix set boot mode functionality
before it can be added here.
2023-11-24 11:04:30 +01:00
Javier Hernandez 3a0cdbda5a src: Remove netdriver field in client form
Remove netdriver field from forms used to add or update a client.
At the time of creating (or updating) a client, ogCP uses a hardcoded
value for this field of the payload.

This field is not used by oglive in any way, remove it.
2023-11-23 10:21:22 +01:00
Javier Hernandez 739ac075dc views: add field 'gateway' in add-room form
Add the possibility to configure a gateway in a room.
2023-11-14 15:44:14 +01:00
Jose M. Guisado 0b210404d8 ogcp.js: fix images selector in "images" section
Any operation inside "Images" view fails with error message 'missing
"image-server" key'. Operations under images view section are loading
image info and "delete image".

Previously, a hidden checkbox entry was added to support multiple
ogServer images entries. This hidden checkbox value holds the
corresponding ogServer address of some image list. This hidden
'image-server' checkbox is checked or unchecked whenever some visible
image from this server is checked in the list by the user.

Commit 70eb7389bb introduces checkImageServer javascript function that
mainly attaches an onchange event to each image checkbox so that
checking or unchecking it updates the hidden 'image-server' checkboxes
holding the ogserver address associated with each ogserver entry list.

When loading "Images" view each configured ogServer entry is collapsed
(thus each image checkbox is hidden). The current selector is ignoring
hidden checkboxes and thus checkImageServer is unable to attach the
necessary onchange event to each image checkbox.

The hidden 'image-server' checkbox is always hidden and does not need
attaching any onchange event. Fix selector by not ignoring hidden
elements and omitting any checkbox with name 'image-server'.

Fixes: 70eb7389bb ("Add ogServer parameter to imagesForm")
2023-07-11 17:52:17 +02:00
Jose M. Guisado db68dcea46 ogcp: add backup boolean field in image update
User can use this boolean field to specify if an backup copy needs to be
created before updating an image.

This only applies when sending a request to a client (ogClient)
supporting this parameter.
2023-07-07 13:22:23 +02:00
Jose M. Guisado ae3f83b3c3 views: use \s to match whitespace in client import regex
Some programs substitute regular space characters (\u0020) by en spaces
(\u2002) when displaying monospace text. Others replace it by
non-breaking spaces.

Using a character set such as [ \t\n] to match any possible "space
related" character. Use \s to match any kind of whitespace related
character in the regex.

Pasted from python's documentation:

\s

    For Unicode (str) patterns:

	Matches Unicode whitespace characters (which includes
	[ \t\n\r\f\v], and also many other characters, for example the
	non-breaking spaces mandated by typography rules in many languages). If
	the ASCII flag is used, only [ \t\n\r\f\v] is matched.
	[...]

Fixes: d9f8c95618
('views: better dhcp conf parsing when importing clients')
2023-06-28 12:48:22 +02:00
Jose M. Guisado d9f8c95618 views: better dhcp conf parsing when importing clients
This new regex allows parsing of:

	- Irrelevant options that the user may paste from its config
	  file, eg. 'option host-name'.
	- Allows linebreaks.

Hosts still require to have 'hardware ethernet' first, and then
'fixed-address'.

For example this regex admits dhcp host declarations such as

	host pir36-22_78 {
	      hardware ethernet d8:5e:d3:25:28:9d;
	      fixed-address 10.1.36.78;
	      option host-name "pc_78";
	}

Summary of the regex:

(?: *host *)			# Match host keyword and spaces
([\w.-]*)     			# Match any word character (alphanum and underscore)
(?:[ \n\r]*{[ \n\r]*)  		# Match any space or newline, then match { and any following space or newline
(?:[ \t]*hardware *ethernet *)  # Match any space or tab character followed by 'hardware ethernet'
((?:[0-9A-Fa-f]{2}[:-]){5}(?:[0-9A-Fa-f]{2}))  # Match the mac address using ':' or '-' as separator
(?: *;)				# Match any space character before a ';'
(?:[ \t\n\r]*fixed-address *)	# Match any space, tab or newline followed by 'fixed address' and any following space
(\d+\.\d+\.\d+\.\d+)		# Match an ip address (no validity check)
(?: *;)(?:[ \r\n]*[^}]*})	# Match any space followed by ';', then match any character except '}'
2023-06-27 17:06:34 +02:00
Jose M. Guisado 9c91fb16b4 views: add placeholder text inside dhcp conf textarea
Help user by hinting the current expected format via a placeholder in
the textarea box.

Current regex has its limitations when parsing dhcpd host declarations.
It does not support multi line host declarations or different options
outside "hardware ethernet ..." and "fixed-address ...".
2023-06-27 08:56:49 +02:00
Javier Sánchez Parra d029df8e84 Show warning when formatting clients without disks
If an administrator selects a client without disks and goes to
"Partition & Format", ogCP redirects it again to "Commands" and shows a
floating message indicating that the client has no disks.
2022-11-17 17:36:15 +01:00
Javier Sánchez Parra fc02d891cd Fix typo in save_user() function 2022-11-17 17:36:15 +01:00
Javier Sánchez Parra eeda698f40 Open real time log in a new tab 2022-11-17 17:36:15 +01:00
Javier Sánchez Parra 93758f3831 Disable scopes tree and add Back button in log view
All views from Commands section have this two attributes.
2022-11-17 17:36:15 +01:00
Javier Sánchez Parra 6aad8535f0 Update Spanish translations 2022-11-17 17:36:15 +01:00
Javier Sánchez Parra 46682c3ff9 Rename "Scopes" section to "Scopes management" 2022-11-17 17:36:15 +01:00
Javier Sánchez Parra 5d265aa532 Show scopes section only to administrators 2022-11-17 17:36:15 +01:00
Javier Sánchez Parra e1908c2543 Show servers section only to administrators 2022-11-17 17:36:15 +01:00
Javier Sánchez Parra 42bf42f580 Add clients in Linux and Windows mode
Scopes tree shows clients booted in Linux and Windows with ogClient
installed. It also shows if the user logs in.
2022-11-17 17:36:15 +01:00
Javier Sánchez Parra 693f5255b1 Assign servers to users
Instead of give permissions on all centers of a server selecting each one
of them, you can select the server that contains all this centers.
2022-11-07 12:58:27 +01:00
Javier Sánchez Parra 0f6641d92f Set server variable on GET /action/image/update
Otherwise, ogCP crashes on image update.

Fixes: 8726ade ("Adapt commands to work with several ogServers")
2022-11-07 12:58:27 +01:00
Javier Sánchez Parra f834253a80 Remove unused variable "g.server"
Since ogCP multi ogServer support, g.server is not used anymore. The
list of available servers is stored in the global variable "servers" at
og_server.py
2022-09-29 13:01:28 +02:00
Javier Sánchez Parra cb2f534f64 Get available scopes from all the servers
When creating o editing a user, you can select in which scopes from all
servers the user has permission.
2022-09-29 13:01:28 +02:00
Javier Sánchez Parra 4f3c66f04a Fix ogServer deletion from the configuration file
Otherwise, users can not remove from the web a server declared in the
deprecated way.
2022-09-29 13:01:28 +02:00
Javier Sánchez Parra 328ead9168 Create servers list if do not exists
Otherwise, if the configuration file do not have 'SERVERS' array, ogCP
crashes trying to append a new server.
2022-09-29 13:01:28 +02:00
Javier Sánchez Parra 178f253092 Always try to load servers list from config file
Otherwise, servers list is not loaded if the configuration file also
have an ogServer declared in the deprecated way.
2022-09-29 13:01:28 +02:00
Javier Sánchez Parra 30d27c8951 Adapt aux function to work with several ogServers
Otherwise, get_repositories() and get_repository() functions only get
the repositories of the first ogServer of the list.
2022-09-29 13:01:28 +02:00
Javier Sánchez Parra 6142a171fd Fix repositories retrieving
Commit X wrongly changed the URI to retrieve the repositories of an
ogServer.

Fixes: cf02e0c ("Add Servers section")
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra a010f11224 Set server variable on GET /action/image/restore
Otherwise, ogCP crashes on image restore.

Fixes: 8726ade ("Adapt commands to work with several ogServers")
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra 9961c4bc8d Improve scopes tree from Commands
Commit 648a1a315e1d35f67c5301833bddd3753cc51793 changes do not work well
with large scopes trees. It takes several minutes to check a scope.

Improve javascript code to speed up scope selection.
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra 58f295fb1c Fix client room retrieving
Otherwise, retrieving do not work on clients inside folders.
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra 49db9dc779 Replace parentheses in pills ids
From MDN:
Technically, 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.

https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra 5af589a94d Collapse servers images
Users can collapse images list by clicking on the server.
2022-09-27 09:48:36 +02:00
Daniel García Moreno 0c66443db8 Add multiple servers to the dashboard view 2022-09-27 09:48:36 +02:00
Daniel García Moreno ea18207998 Implement single room selection for commands view 2022-09-27 09:48:36 +02:00
Daniel García Moreno efe9731753 Add different selection mode for the tree view 2022-09-27 09:48:36 +02:00
Javier Sánchez Parra 1db12230f9 Adapt Delete clients to work with several ogServers
This commit makes Delete clients view to use "get_server_from_clients()"
function to send the deletion request to the correct ogServer.
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra d74ad9336e Ignore unreachable ogServers
Otherwise, ogCP crashes trying to connect to unreachable ogServers.
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra 3459de36f3 Add Servers section
In Servers section/view, users can add or delete ogServers from ogCP
configuration file.

Replaces Repositories views and recycle some of its code.
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra 07c5cb25d2 Store configuration file path on a global variable
Otherwise, users may change the file path on one place of the code and
forget to change the other places.
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra 083cb7af7f Adapt MAC retrieving to support several ogServers
Clients pills show MACs regardless of the ogServer they belong to. Flask
GET /client/mac API uses "get_server_from_clients()" function to send
the command to the correct ogServer.
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra 083caf00c6 Adapt Delete image to work with several ogServers
This commit makes Delete image view to use ogServer field from
imagesForm to send the deletion request to the correct ogServer.
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra 70eb7389bb Add ogServer parameter to imagesForm
When users select an image, its ogServer is sent too. Then, the back-end
(flask) processes the form to obtain this ogServer and send it the
pertinent requests.

It also makes "Image details" view use this new parameter, and adds
javascript code to ensure that users can only work with several images
at the same time if they belong to the same ogServer.
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra c543ba25a6 Adapt images tree to work with several ogServers
Images view fetch images from all ogServers configured and show them in
the left tree as a nested list. ogServers are represented as the parents
of their images.
2022-09-27 09:48:36 +02:00
Javier Sánchez Parra 873bee30aa Adapt Delete center to work with several ogServers
This commit makes Delete center view to use ogServer field from
scopesForm to send the command to the correct ogServer.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 43d2df0e7d Delete center using the scopes tree
With this commit users can select a center from the scopes tree, and
then delete it.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 9ca010a981 Adapt Add center to work with several ogServers
This commit adds a new select input with all available ogServers to "Add
center" view. The ogCP creates the center in the ogServer selected by
the user.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 3d42c2c66c Adapt Delete room to work with several ogServers
This commit makes Delete room view to use ogServer field from scopesForm
to send the command to the correct ogServer.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra f009a188b1 Delete room using the scopes tree
With this commit users can select a room from the scopes tree, and then
delete it.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra bf4192a5d4 Adapt Add room to work with several ogServers
This commit makes Add room view to use ogServer field from
scopesForm to send the command to the correct ogServer.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 0cc65a057d Add a room to a center using the scopes tree
With this commit users can select a center from the scopes tree, and then
add a room to that center.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 0db56d5eee Adapt Import Clients to work with several ogServers
This commit makes Import Clients view to use ogServer field from
scopesForm to send the command to the correct ogServer.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra f16b1a0347 Import clients to a room using the scopes tree
With this commit users can select a room from the scopes tree, and then
import clients to that room.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 028f810a47 Fix selection of scopes with empty IPs list
This commit prevents ogcp from always mark as selected/checked scopes
that have an empty IP list.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 229ad311be Add current ogServer to scopesForm
With this commit when users select a scope, the ogServer to
which it belongs is also sent. Then when processing the form we obtain
this ogServer and we can send it the pertinent requests.

This commit also makes action "Add client" to use the ogServer sent in
the form.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 2614c9304e Add a client to a room using the scopes tree
With this commit users can select a room from the scopes tree, and then
add a client to that room.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 75dc842284 Adapt commands to work with several ogServers
This commit makes commands views to use "get_server_from_clients()"
function to send the command to the correct ogServer.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra b4c0bd5c5e Fix ogServer names on the scopes tree
This commit adapt how "get_scopes()" accesses the name of the ogServer
because commit eae64dd changes how "multi_request()" returns it.

Fixes: eae64dd ("Initial support of ogServer requests routing")
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 74e9ff9907 Initial support of ogServer requests "routing"
This commit adds a helper function ("get_server_from_clients()") to get
the adequate ogServer according to the targeted clients.

It also makes "Client details" command use this function.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra ddea404c5b Add status of all clients to the scopes tree
Fetch clients status using 'get_clients()'.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 279184df5f Fetch clients from all ogServers in the dashboard
With this commit, ogcp fetch all clients lists an join them.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra af0a3255b4 Add helper function to send requests to all ogServers
'multi_request()' function make requests to ogServers defined in the
configuration and aggregates it responses.

This commit also makes 'get_scopes()' use it.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra 2cbe6b774c Retreive scopes from several ogServers
Update the configuration file format to support several ogServers and
retrieve scopes from those ogServers.

The old config file format is still supported.
2022-09-27 09:48:35 +02:00
Javier Sánchez Parra c4aa1f2f54 Update Catalan translations 2022-07-06 10:24:27 +02:00
Javier Sánchez Parra 7896f21303 Update Spanish translations 2022-07-06 10:24:27 +02:00
Javier Sánchez Parra 9e386e5454 Add "Delete Repository"
In "Repositories" view, users select a repository from the list on the
left and press "Delete repository".
2022-07-04 15:34:03 +02:00
Javier Sánchez Parra c068bd2144 Create "Add Repository" form and view
Creates "Add repository" form with the required inputs: name and IP.
2022-07-04 15:34:02 +02:00
Javier Sánchez Parra 9a6981d289 Add Repositories section
In Repositories section/view, users can manage task related to
repositories. For example: list, add, delete and edit them.
2022-07-04 15:34:02 +02:00
Javier Sánchez Parra eb61229b29 Use repository id on image creation
On image creation use the id to identify repositories instead of the IP.

ogServer related commit:
  * 52a38d3 ("#915 Use the repository id on image creation")
2022-06-30 10:24:02 +02:00
Javier Sánchez Parra 61bd6bc4ba Move password hashing to the backend
This patch moves login password hashing from the frontend/javascript to
the backend/flask.

This patch moves password hashing of login and user management forms.

Related commits:
  * c7b0024 ("Add password hashing")
  * 661254b ("Add 'Add user' to Users section")
2022-06-30 09:26:18 +02:00
Javier Sánchez Parra 06bcbe40a3 Increase textarea size from "Import clients"
Improve usability increasing the textarea used to copy the DHCPd
configuration.
2022-06-07 17:12:24 +02:00
Javier Sánchez Parra 6b07e83f03 Rename field "OS" from "Create image"
Rename "OS" to "Partition" to improve clarity.

This field represent which partition is used to create the image.
2022-06-07 16:16:13 +02:00
Javier Sánchez Parra 1d133dd53f Show link speed in Gb/s
If link speed is greater than 1000 Mb/s, show it in Gb/s to improve
readability.
2022-05-27 12:02:28 +02:00
Javier Sánchez Parra 85be1258e1 Use assigned repository on images transfers
Otherwise, update/restore fails on images not saved in the same machine
which runs ogServer.
2022-05-24 09:28:51 +02:00
Javier Sánchez Parra d9d3d2ad5f Add repository field to "Create image" form
Let users choose which repository want to use to save the image.
2022-05-24 09:28:51 +02:00
Javier Sánchez Parra b74820a84c Improve MAC formatting
Add ":" separator between each byte in hexadecimal and transform chars
to uppercase.
2022-05-18 11:35:35 +02:00
Javier Sánchez Parra d9fe4dfa41 Add color legend of the client states
Add an explanatory list of the colors used to represent the different
client states.
2022-05-17 11:05:14 +02:00
Javier Sánchez Parra 4c6e3a90f1 Show last command result for clients in ogLive
If the last command sent to a client/s finishes with errors, their icons
in the scopes tree change to a yellow circle with an times sign inside.
2022-05-13 11:34:44 +02:00
Javier Sánchez Parra 08cae4b6ca Add link speed to pills
If the clients API response include link speed information, show it in
clients' pills.
2022-05-11 17:37:00 +02:00
Javier Sánchez Parra ce651453c4 Add MAC to pills
Retrieve and cache MACs one by one as users select clients.
2022-05-06 09:55:58 +02:00
Javier Sánchez Parra 72c10e1529 Add 'Delete user' to Users section
Creates "Delete user" form. The user to be deleted is selected from the
sidebar in Users section.
2022-04-27 17:34:36 +02:00
Javier Sánchez Parra eb8ddd236a Add 'Edit user' to Users section
Creates "Edit user" form with the following inputs: password, password
confirmation, role (administrator or regular), allowed scopes. It does
no allow to change/edit the username.
2022-04-27 17:34:26 +02:00
Javier Sánchez Parra 661254b76e Add 'Add user' to Users section
Creates "Add user" form with the following inputs: username, password,
password confirmation, role (administrator or regular), allowed scopes.
2022-04-27 17:27:50 +02:00
Javier Sánchez Parra d8bac16a98 Add Users section
In Users section/view, administrator accounts can manage all task
related to users. For example: add, delete and edit users.
2022-04-27 17:26:40 +02:00
Javier Sánchez Parra 57da4f4efa Add user role administrator
ogCP now have to types of users, regular and administrator users.

ogCP configuration file defines users roles with the boolean field
"ADMIN".
2022-04-27 17:24:08 +02:00
Javier Sánchez Parra c7b0024d24 Add password hashing
The front-end now hashes passwords before sending them to the back-end.
It uses SHA-512.

This commit adds a hidden input which sends the password hash to not
interfere with browsers' save password functionality.

Also change passwords of the template configuration file for their
hashed/digested versions.
2022-04-22 13:02:30 +02:00
Javier Sánchez Parra 1f9a3d3b41 Rename "submit" to "submit_btn"
Otherwise, wtforms use "submit" as id of the <input> tag, shadowing
javascript function ".submit()".
2022-04-22 09:11:48 +02:00
Javier Sánchez Parra 09884080c3 Add import clients action
Add import clients form with required inputs: room and dhcpd.conf.

This permits users to rapidly add large amounts of clients to a room
using dhcpd.conf's syntax. Users can copy full dhcpd.conf files to the
text area and the parser only matches lines with the following format as
clients:

host dummy {hardware ethernet 12:34:56:78:90:ab; fixed-address 192.168.1.55; }
2022-04-19 16:03:41 +02:00
Javier Sánchez Parra 87270dc8df Increase toast auto hide delay to 30 seconds 2022-04-12 11:04:07 +02:00
Javier Sánchez Parra 974b74649a Handle ogServer connection error on login
On connection error show a (toast) message warning the user. Otherwise,
users see Werkzeug debug page.
2022-04-11 17:37:26 +02:00
Javier Sánchez Parra 37bb49d703 Rearrange image dropdown 2022-04-08 09:06:28 +02:00
Javier Sánchez Parra fcbaf7d66d Add Update image to commands
Allows updating the image file for an existing image.

This action is related to /image/create in ogServer API. If ogServer
receives an POST /image/create without the parameter "description", it
does not create a new image and only updates.
2022-04-08 08:03:32 +02:00
Javier Sánchez Parra d2fef8e85d Move search_image() outside action_image_restore() 2022-04-08 08:03:10 +02:00
Javier Sánchez Parra 4c9c3b48db Add indeterminate checkboxes to scopes tree
Each checkbox may have child checkboxes. If all those children are
checked, it be checked. If none are checked, it is unchecked. If some of
them are checked, then it’s in an indeterminate state (in this case
symbolically meaning “partially” checked).
2022-04-08 08:03:10 +02:00
Javier Sánchez Parra 1120b31e38 Simplify scope identifiers
Old id format example: id_1-1_2-4_3-2

New id format example: scope-1-4-2

It represents the node and its ancestors' position with respect to
theirs siblings. The rightmost value is the current node position.

Commit f70d90ba32 introduces the old format.
2022-04-08 08:03:10 +02:00
Javier Sánchez Parra e5087d2cfd Move toasts messages to the bottom right
Also, increase its duration from 5 to 10 seconds.
2022-04-08 08:01:48 +02:00
Javier Sánchez Parra 1869ad6eb4 Submit disk form on change of dropdown list
Also remove send button as it not necessary anymore.
2022-04-04 10:13:04 +02:00
Javier Sánchez Parra f86eaffefe Add form for disk selection
Disk selection uses "scopesForm" to submit the change, but setup/show
view receives new parameters not provided by this form.

Commit 17757baa4727 adds those parameters.

This commit gives disk selection its own form with all the required
parameters.
2022-04-04 09:28:49 +02:00
Javier Sánchez Parra 69b127a4f7 Move setup's disk selector
Move disk selector from the bottom of the page to the first table,
nearby "Partition Table Type" and "Total Disk Size".
2022-04-04 09:28:41 +02:00
Javier Sánchez Parra a2a5e4ed78 Submit IPs when scopes tree is read only
Otherwise, users can not switch between actions without going back to
the parent view.

This makes "scopesForm" work again in all views and not only in
scopes.html and commands.html.

Commit feed135554 introduces this regression.
2022-04-01 15:07:05 +02:00
Javier Sánchez Parra 02836444a9 Fix typo in scopes template
Otherwise, scopes' actions do not set the scopes tree read only.

Commit feed135554 introduces this typo.
2022-04-01 15:07:05 +02:00
Javier Sánchez Parra 52a06822b2 Ask for reference when partitioning several clients
Allow the user to choose a computer as reference to display the
partition scheme form.
2022-04-01 15:07:05 +02:00
Javier Sánchez Parra bb39f67a46 Change get_client_setup to receive a string
get_client_setup() takes an IP address that identify the client,
instead of passing an iterator with one single IP address, pass
directly such IP address.
2022-03-31 13:54:20 +02:00
Javier Sánchez Parra ce10f04b97 Remove unused variable db_partitions 2022-03-29 12:37:52 +02:00
Javier Sánchez Parra 1356145026 Add ogServer uptime to the dashboard
ogServer GET /stats returns ogServer uptime in seconds.

Transform seconds to days, hours and minutes and print them in the
dashboard.
2022-03-28 08:37:53 +02:00
Javier Sánchez Parra 6b617bd448 Check swap size is not zero
If the server do not have swap, show a warning.
2022-03-25 13:09:50 +01:00
Javier Sánchez Parra d4e7a9f05b Replace " " with "_" in HTML scopes IDs
Otherwise, scopes with whitespaces 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-03-25 12:08:39 +01:00
Javier Sánchez Parra 4f33ab1128 Add Catalan translations 2022-03-22 12:36:09 +01:00
Javier Sánchez Parra dcb79b1096 Update Spanish translations 2022-03-22 11:19:36 +01:00
Javier Sánchez Parra 62feecad1f Add missing gettext functions
Otherwise, this strings are not translatable.
2022-03-22 11:19:36 +01:00
Javier Sánchez Parra ee6880a9f2 Use lazy translation on intervals' strings
Constant strings outside of a request must use lazy strings. See
flask-babel documentation for more information.
2022-03-22 11:19:26 +01:00
Javier Sánchez Parra c8cf49bf6c Summarize dashboard information
* Rename "ogLives" to "ogLive images".

* Move "Number of images" table to take less space.

* Show storage data as "Storage size | Used (%) | Available (%)".

* Move "Latest images" an "ogLive images" to the bottom.
2022-03-17 11:43:47 +01:00
Javier Sánchez Parra 3283843d56 Add /stats data to the dashboard
Add certain statistics on memory and swap usage, as well as the uptime.
2022-03-16 17:33:34 +01:00
Javier Sánchez Parra 57ab7c11a9 Add back button to all actions
Add a back button to facilitate users to return to the previous page.
2022-03-14 17:24:23 +01:00
Javier Sánchez Parra feed135554 Disable scopes tree's checkboxes in action views
Now users can select clients only in scopes and command views, in any
other view we set the scopes tree read only.
2022-03-10 11:03:40 +01:00
Javier Sánchez Parra 406f578597 Highlight active navbar link
Change background color and round borders of active/current navbar
link to highlight it.
2022-03-09 17:08:33 +01:00
Javier Sánchez Parra 7dfeb3e44e Set pills width
Set the same width to all pills.
2022-03-09 17:08:33 +01:00
Javier Sánchez Parra d7b19c6aa0 Remove common css classes from pills status update
Some css classes are common to all pills statuses, so we do not need to
add or delete those classes on status change.

It also remove "badge-info" class because is never used.
2022-03-09 17:08:33 +01:00
Javier Sánchez Parra 6b3b37e2f3 Remove "form" from scopes views' headings 2022-03-09 17:06:42 +01:00
Javier Sánchez Parra 45d1d56ed9 Set scopes nav buttons as active
When loading any scopes view, its nav button becomes active.
2022-03-07 16:39:12 +01:00
Javier Sánchez Parra 2afbb1e208 Group scopes buttons into dropdowns
Group related actions in the "scopes" section inside a dropdown button.

Declutters the panel in which the buttons are displayed.
2022-03-07 16:39:12 +01:00
Javier Sánchez Parra 632bb3d578 Add separator and heading to selected clients 2022-03-07 16:39:12 +01:00
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