summaryrefslogtreecommitdiffstats
path: root/ogcp
Commit message (Collapse)AuthorAgeFilesLines
...
* Show selected clients in container blockJavier Sánchez Parra2022-02-234-0/+42
| | | | | | | | | | | | | | | | | | | 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
* Show error messages in action_image_restoreJose M. Guisado2022-02-231-3/+6
| | | | | | | 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.
* Show error message for invalid setup formJose M. Guisado2022-02-231-1/+2
| | | | | Do not show plain text '400 Bad Request'. Instead, show error message and return to commands view.
* Move 'Update' button up in hardware viewJose M. Guisado2022-02-231-5/+7
|
* Redirect to commands view after hardware POSTJose M. Guisado2022-02-231-2/+4
|
* Hardware inventory template extends from command.htmlJose M. Guisado2022-02-222-2/+5
| | | | | | | | 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.
* Update Spanish translationsJose M. Guisado2022-02-221-80/+100
|
* Rename "Log" action to "System Log"Jose M. Guisado2022-02-221-1/+1
|
* Group command buttons into dropdownsJose M. Guisado2022-02-222-26/+68
| | | | | | | | | | | | | | | | | | | | 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 %}" ...
* Setup view sets nav button as activeJose M. Guisado2022-02-221-0/+1
| | | | When loading the setup view, it's nav button becomes active.
* Add nav blocks to commands templateJose M. Guisado2022-02-221-16/+16
| | | | | | | | | | | | | 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.
* Highlight active nav itemsJose M. Guisado2022-02-221-0/+3
| | | | Use bold font for active nav items.
* Merge nav into base templateJose M. Guisado2022-02-224-50/+50
| | | | | | | | | | | | | | | | | {% 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
* Check scopes checkboxes recursivelyJavier Sánchez Parra2022-01-312-0/+14
| | | | | | Otherwise, nested scopes are not checked and mislead users. When a scope is checked, we search all its children and check them too.
* Add helper function to store checksum statusJavier Sánchez Parra2022-01-311-4/+8
| | | | | This function stores checksum status if is checked to browser local storage. Otherwise, it removes checksum from the storage.
* Group log commands buttons into dropdownJose M. Guisado2022-01-311-4/+11
| | | | | Compacts Commands view with a single "Logs" dropdown button. Dropdown shows current log commands.
* Keep selected clients in the scopes treeJavier Sánchez Parra2022-01-282-0/+18
| | | | | | | | | | | | 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.
* Keep scopes tree stateJavier Sánchez Parra2022-01-282-0/+20
| | | | | | | | | | | | | | | | | | | | 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
* Remove dead code in macro.htmlJavier Sánchez Parra2022-01-281-20/+0
| | | | scopes_tree_collapse() replaces this dead code.
* Add confirmation page when deleting imageJose M. Guisado2022-01-275-63/+106
| | | | | | | | 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.
* Adds confirmation page to reboot clientsJavier Sánchez Parra2022-01-204-23/+75
| | | | | | | | | | 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.
* Adds confirmation page to power off clientsJavier Sánchez Parra2022-01-204-32/+89
| | | | | | | | | | 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.
* Rename to "Partition Table Type"Javier Sánchez Parra2022-01-201-1/+1
| | | | Otherwise, "Partition Table" is ambiguous.
* Rename MSDOS to MBRJavier Sánchez Parra2022-01-202-1/+3
| | | | | | | 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.
* Show disk and partition size in mebibytesJavier Sánchez Parra2022-01-193-8/+8
| | | | | | | | | 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.
* Fix typo in the dashboardJavier Sánchez Parra2022-01-191-1/+1
|
* Ask twice to delete clientsJavier Sánchez Parra2022-01-195-90/+149
| | | | | | | This commit adds an extra view to ensure users do not clients accidentally. It also includes Spanish translation of the new strings.
* Fix "Add client" form redirectionv0.9Javier Sánchez Parra2022-01-142-19/+30
| | | | Otherwise, ogcp redirects to a blank page instead of the scopes view.
* Add language configuration and Spanish translationJavier Sánchez Parra2022-01-134-0/+522
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Add gettext to dashboard stringsJavier Sánchez Parra2022-01-131-9/+9
| | | | Otherwise, this texts could not be translated.
* Use lazy translation in classesJavier Sánchez Parra2022-01-132-61/+63
| | | | | | | | | | | | | 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.
* Change some f-strings to format()Javier Sánchez Parra2022-01-131-5/+5
| | | | | | python-babel is not compatible with f-strings. See also: https://github.com/python-babel/babel/issues/594
* Check images list content in client details viewJavier Sánchez Parra2021-12-201-1/+1
| | | | Otherwise, client image assignation fails if "images" variable is empty.
* Add available ogLives to client detailsJavier Sánchez Parra2021-12-171-0/+6
| | | | Otherwise, ogLive field always shows the default value.
* Add set ogLive to commandsJavier Sánchez Parra2021-12-164-1/+67
| | | | | | 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.
* Add scope permission supportJavier Sánchez Parra2021-12-103-6/+23
| | | | | | | 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.
* Add multi user supportJavier Sánchez Parra2021-12-083-14/+38
| | | | | It is inspired by the following example: https://github.com/maxcountryman/flask-login/blob/c760c0ef7ccc95d49b4693200245a4f2b148d41b/README.md#usage
* Ensure unique HTML ids for scope elementsJavier Sánchez Parra2021-11-261-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Add legacy real-time logJavier Sánchez Parra2021-11-082-0/+14
| | | | | | | | 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.
* Set default value on partition data parsingJavier Sánchez Parra2021-11-021-3/+3
| | | | | Otherwise, ogcp breaks when receiving an unknown disk table type, partition type or file system.
* Support partition of computers with several disksJavier Sánchez Parra2021-11-022-10/+33
| | | | | | | | | 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.
* Add legacy logJavier Sánchez Parra2021-10-283-0/+28
| | | | | Future patches will deprecate this log functionality in favour of more robust solutions.
* Set tiptorrent as unique restore image methodJavier Sánchez Parra2021-10-201-2/+1
| | | | | Soleta Networks only offers support of tiptorrent for restore image transferences.
* Keep scopes collapsed by defaultJose M. Guisado2021-10-151-1/+0
| | | | | For large scopes, unfolding by default slows page loading. It also takes lots of vertical space and the scroll bar gets smaller.
* Add partitions info to client detailsJavier Sánchez Parra2021-10-132-1/+39
| | | | Show a table with client's disks and partitions information.
* Add "Delete image" actionJavier Sánchez Parra2021-09-292-0/+19
| | | | | | | 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.
* Fix cache partition creationJavier Sánchez Parra2021-09-161-0/+3
| | | | | | | 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.
* Add image details actionJavier Sánchez Parra2021-09-034-2/+50
| | | | | This action is used to visualize the specific details of an image, as its ID, name, size, etc.
* Rename validate and parse IPs functionsJavier Sánchez Parra2021-09-031-36/+36
| | | | | | | | | | | 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.
* Add images viewJavier Sánchez Parra2021-09-033-1/+37
| | | | | | | 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.