| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Remove print statement generating noise in the browser logs.
|
|
|
|
|
| |
Add check to test if a pill control has been found and don't try
to add mac data to non existent client pill controls.
|
|
|
|
|
|
|
| |
Show the partition id as a non editable label in each partition
of the Partition and Format form.
Assign sequential partition id from top to down and recalculate
every partition id when a partition is removed.
|
|
|
|
|
|
|
| |
Update all the name and id fields of the elements in the partition
form after a delete operation.
Inconsistent ids make form.validate() to always return False, this
causes all the form validation code to be skipped.
|
|
|
|
|
|
|
|
|
|
| |
Add support for adding computers to a folder.
It uses a js script that when selecting a folder in the html form, it
will also select the parent of the folder. For instance, if the user
were to select a folder that is contained inside a room, the room would
also get selected. This allows the view to know which parent contains
the folder.
|
|
|
|
|
| |
Make the sidebar from the images menu display the list of repos grouped
by repos
|
|
|
|
|
|
| |
Bubbles depicting clients were previously displaying in the format
<client_name>_<client_id>. This commit changes that to only display the
name
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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 70eb7389bb5d 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: 70eb7389bb5d ("Add ogServer parameter to imagesForm")
|
|
|
|
|
| |
Scopes tree shows clients booted in Linux and Windows with ogClient
installed. It also shows if the user logs in.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
Otherwise, retrieving do not work on clients inside folders.
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
| |
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")
|
|
|
|
|
| |
If link speed is greater than 1000 Mb/s, show it in Gb/s to improve
readability.
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
If the clients API response include link speed information, show it in
clients' pills.
|
|
|
|
| |
Retrieve and cache MACs one by one as users select clients.
|
|
|
|
|
| |
Creates "Add user" form with the following inputs: username, password,
password confirmation, role (administrator or regular), allowed scopes.
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
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).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
---
|
|
|
|
| |
Set the same width to all pills.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
Otherwise, undesired removal of selected clients pills occurs.
|
|
|
|
| |
Color pills to represent their state, like scopes tree.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
Otherwise, nested scopes are not checked and mislead users.
When a scope is checked, we search all its children and check them too.
|
|
|
|
|
| |
This function stores checksum status if is checked to browser local
storage. Otherwise, it removes checksum from the storage.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
This is used for multiple bootstrap components such as dropdown menus.
|
|
This adds base.html and nav.html templates as well as its dependencies
on Bootstrap and jQuery.
|