* EE-319: backup endpoint (#193)
* feat(backup):
* add an orbiter to block writes while backup
* add backup handler
* add an ability to tar.gz a dir
* add aes encryption support
* EE-320: restore endpoint (#196)
* feat(backup):
* add restore handler
* re-init system state after restore
* feat(backup): Update server to respect readonly lock (#199)
* feat(backup): EE-322 Add backup and restore screen (#198)
Co-authored-by: Simon Meng <simon.meng@portainer.io>
* name archive as portainer-backup_yyyy-mm-dd_hh-mm-ss
* backup custom templates and edge jobs
* restart http and proxy servers after restore to re-init internal state
* feat(backup): EE-322 hide password field if password protect toggle is off
* feat(backup): EE-322 add tooltip for password field of restore backup
* feat(backup): EE-322 wait for backend restart after restoring
* Shutdown background go-routines
* changed restore err message when cannot extract
* fix: symlinks are ignored from backups
* replace single admin check with a restartable monitor (#238)
* clean log
Co-authored-by: Maxime Bajeux <max.bajeux@gmail.com>
Co-authored-by: cong meng <mcpacino@gmail.com>
Co-authored-by: Simon Meng <simon.meng@portainer.io>
* fix(license): Fix license expiration inconsistency with displayed date
* Fix inconsistent expiration
* Use liblicense expiration compute
* wip
* Use db for expiresAt in license detailed view
* Fix date differences
* fix(licenses): prevent removal of last valid license
* * add back the logic that prevent the last license been removed, whether valid or not.
* Revert "* add back the logic that prevent the last license been removed, whether valid or not."
This reverts commit 389b5f8985bf543821cab02ad3252d75ef46ccee.
Co-authored-by: yi-portainer <yi.chen@portainer.io>
* feat(license): add liblicense dep
* feat(license): add bolt license service
* feat(license): introduce license service
* feat(license): validate license before adding
* feat(license): aggregate info after changing of licenses
* feat(http): implement http handlers
* feat(license-management): introduce license service
* feat(licenses): introduce empty view
* feat(license-management): add datatable
* feat(licenses): show license info
* fix(license): inject services
* feat(licenses): add buttons to buy/renew license
* feat(licenses): introduce add license route
* feat(licenses): add license form
* feat(license): datatable
* feat(license): show more details about license
* refactor(license): rename components name
* feat(licenses): show expiration date
* feat(license): introduce init license route
* feat(license): validate license
* feat(license): save licenses
* feat(bouncer): check if license is valid on restricted
* feat(bouncer): remove license check on api
* feat(home): add node warning
* feat(licenses): remove license
* feat(licenses): listen to info changes
* feat(license): show license expiration message
* feat(license): block regular users from licenses view
* feat(license): prevent removing of last license
* fix(license): show message when failed delete
* feat(license): remove trial license when applying oneoff
* feat(license): hide the number of nodes for trial
* feat(auth): disable login if license is invalid
* feat(licenses): add confirmation before removal of license
* feat(nodes): count nodes in env
* feat(license): show message if nodes exceed allowed
* feat(deps): update liblicense
* feat(licenses): show validation errors
* feat(license): use information panel for node info
* fix(license): reload license data on remove
* fix(license): always send list of failed keys
* fix(license): rename buttons
* feat(license): replace icon
* feat(license): add link to licenses page in add license
* fix(licenses): show green valid icon
* fix(licenses): rename expires at
* fix(licenses): rename Attach to add
* fix(licenses): show license type label
* feat(license): aggregate revoked info
* chore(deps): update liblicense
* fix(license): remove space
* fix(sidebar): align icon
* fix(license): change info layout
* feat(license): aggregate only valid licenses
* fix(licenses): move add license to a new line
* style(license): remove console
* refactor(license): move license line to component
* feat(license): check server validation
* fix(licenses): check form validation before submit
* feat(licenses): send only invalid licenses
* fix(license): hide panels when not needed
* feat(licnese): receive a single license on init
* refactor(header): move header to module
* feat(license): move license panel to header
* fix(header): set min height
* fix(home): show node warning only if subscription
* feat(licenses): minor UI updates
* feat(licenses): minor UI update
* feat(licenses-datatable): add copy button
* fix(licenses-datatable): show date without hours
* feat(license): show expiration message
* fix(users): get user info only on restriced access
* fix(license): clear check for single license
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>