Merge branch '99-can-t-install-velero-with-flask-cli-app-install' into 'main'

Resolve "Can't install Velero with `flask cli app install`"

Closes #99

See merge request stackspin/dashboard!58
This commit is contained in:
Maarten de Waard 2022-10-13 12:50:51 +00:00
commit 0ebc0f4768
7 changed files with 66 additions and 32 deletions

View file

@ -4,6 +4,7 @@ Hydra for OIDC sessions and MariaDB for application and role specifications.
The application provides also several command line options to interact with The application provides also several command line options to interact with
the user entries in the database(s)""" the user entries in the database(s)"""
import sys
import click import click
import hydra_client import hydra_client
@ -68,7 +69,7 @@ def create_app(slug, name, external_url = None):
if app_obj: if app_obj:
current_app.logger.info(f"App definition: {name} ({slug}) already exists in database") current_app.logger.info(f"App definition: {name} ({slug}) already exists in database")
return sys.exit(1)
if (external_url): if (external_url):
obj.external = True obj.external = True
@ -102,13 +103,13 @@ def delete_app(slug):
if not app_obj: if not app_obj:
current_app.logger.info("Not found") current_app.logger.info("Not found")
return sys.exit(1)
app_status = app_obj.get_status() app_status = app_obj.get_status()
if app_status.installed and not app_obj.external: if app_status.installed and not app_obj.external:
current_app.logger.info("Can not delete installed application, run" current_app.logger.info("Can not delete installed application, run"
" 'uninstall' first") " 'uninstall' first")
return sys.exit(1)
app_obj.delete() app_obj.delete()
current_app.logger.info("Success.") current_app.logger.info("Success.")
@ -127,11 +128,10 @@ def uninstall_app(slug):
if not app_obj: if not app_obj:
current_app.logger.info("Not found") current_app.logger.info("Not found")
return sys.exit(1)
app_obj.uninstall() app_obj.uninstall()
current_app.logger.info("Success.") current_app.logger.info("Success.")
return
@app_cli.command("status") @app_cli.command("status")
@click.argument("slug") @click.argument("slug")
@ -145,7 +145,7 @@ def status_app(slug):
if not app: if not app:
current_app.logger.error(f"App {slug} does not exist") current_app.logger.error(f"App {slug} does not exist")
return sys.exit(1)
current_app.logger.info(app.get_status()) current_app.logger.info(app.get_status())
@ -161,12 +161,12 @@ def install_app(slug):
if not app: if not app:
current_app.logger.error(f"App {slug} does not exist") current_app.logger.error(f"App {slug} does not exist")
return sys.exit(1)
if app.external: if app.external:
current_app.logger.info( current_app.logger.info(
f"App {slug} is an external app and can not be provisioned automatically") f"App {slug} is an external app and can not be provisioned automatically")
return sys.exit(1)
current_status = app.get_status() current_status = app.get_status()
if not current_status.installed: if not current_status.installed:
@ -188,7 +188,7 @@ def roles_app(slug):
if not app: if not app:
current_app.logger.error(f"App {slug} does not exist") current_app.logger.error(f"App {slug} does not exist")
return sys.exit(1)
current_app.logger.info("Roles: ") current_app.logger.info("Roles: ")
for role in app.roles: for role in app.roles:
@ -217,16 +217,16 @@ def setrole(email, app_slug, role):
if role not in ("admin", "user"): if role not in ("admin", "user"):
print("At this point only the roles 'admin' and 'user' are accepted") print("At this point only the roles 'admin' and 'user' are accepted")
return sys.exit(1)
if not user: if not user:
print("User not found. Abort") print("User not found. Abort")
return sys.exit(1)
app_obj = db.session.query(App).filter(App.slug == app_slug).first() app_obj = db.session.query(App).filter(App.slug == app_slug).first()
if not app_obj: if not app_obj:
print("App not found. Abort.") print("App not found. Abort.")
return sys.exit(1)
role_obj = ( role_obj = (
db.session.query(AppRole) db.session.query(AppRole)
@ -291,7 +291,7 @@ def update_user(email, field, value):
user = KratosUser.find_by_email(KRATOS_ADMIN, email) user = KratosUser.find_by_email(KRATOS_ADMIN, email)
if not user: if not user:
current_app.logger.error(f"User with email {email} not found.") current_app.logger.error(f"User with email {email} not found.")
return sys.exit(1)
if field == "name": if field == "name":
user.name = value user.name = value
@ -313,7 +313,7 @@ def delete_user(email):
user = KratosUser.find_by_email(KRATOS_ADMIN, email) user = KratosUser.find_by_email(KRATOS_ADMIN, email)
if not user: if not user:
current_app.logger.error(f"User with email {email} not found.") current_app.logger.error(f"User with email {email} not found.")
return sys.exit(1)
user.delete() user.delete()
@ -344,8 +344,6 @@ def setpassword_user(email, password):
"""Set a password for an account """Set a password for an account
:param email: email address of account to set a password for :param email: email address of account to set a password for
:param password: password to be set :param password: password to be set
:return: true on success, false if not set (too weak)
:rtype: boolean
:raise: exception if unexepted error happens :raise: exception if unexepted error happens
""" """
@ -362,7 +360,7 @@ def setpassword_user(email, password):
kratos_user = KratosUser.find_by_email(KRATOS_ADMIN, email) kratos_user = KratosUser.find_by_email(KRATOS_ADMIN, email)
if kratos_user is None: if kratos_user is None:
current_app.logger.error(f"User with email '{email}' not found") current_app.logger.error(f"User with email '{email}' not found")
return False sys.exit(1)
# Get a recovery URL # Get a recovery URL
url = kratos_user.get_recovery_link() url = kratos_user.get_recovery_link()
@ -372,15 +370,13 @@ def setpassword_user(email, password):
except Exception as error: # pylint: disable=broad-except except Exception as error: # pylint: disable=broad-except
current_app.logger.error(f"Error while setting password: {error}") current_app.logger.error(f"Error while setting password: {error}")
return False sys.exit(1)
if result: if result:
current_app.logger.info("Success setting password") current_app.logger.info("Success setting password")
else: else:
current_app.logger.error("Failed to set password. Password too weak?") current_app.logger.error("Failed to set password. Password too weak?")
return result
@user_cli.command("list") @user_cli.command("list")
def list_user(): def list_user():

View file

@ -0,0 +1,25 @@
"""add-velero-as-app
Revision ID: 3fa0c38ea1ac
Revises: e08df0bef76f
Create Date: 2022-10-13 09:40:44.290319
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '3fa0c38ea1ac'
down_revision = 'e08df0bef76f'
branch_labels = None
depends_on = None
def upgrade():
# Add monitoring app
op.execute(f'INSERT IGNORE INTO app (`name`, `slug`) VALUES ("Velero","velero")')
def downgrade():
pass

View file

@ -1,9 +0,0 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"local>stackspin/renovate-config:default"
],
"assignees": [
"luka"
]
}

21
public/assets/velero.svg Normal file
View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="6cm" height="6cm" viewBox="6 5 106 106" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs/>
<g id="Background">
<g>
<path style="fill: none; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" d="M 112.1 60.8 C 112.1,60.1 112.2,59.4 112.2,58.8 C 112.2,58.1 112.2,57.4 112.1,56.8 C 112.1,58.1333 112.1,59.4667 112.1,60.8"/>
<path style="fill: #009bdb; fill-opacity: 1; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 96.9 92.9 C 93.6,92.9 92,94.1 90.2,95.6 C 88.2,97.2 86,99 81.6,99 C 77.3,99 75,97.2 73,95.6 C 71.2,94.2 69.6,92.9 66.3,92.9 C 63,92.9 61.4,94.1 59.6,95.6 C 57.6,97.2 55.4,99 51,99 C 46.7,99 44.4,97.2 42.4,95.6 C 40.6,94.2 39,92.9 35.7,92.9 C 32.4,92.9 30.8,94.1 29,95.6 C 27.7,96.6 26.3,97.8 24.2,98.4 C 32.5,105.7 43.1,110.4 54.7,111.4 C 55,111.4 55.3,111.5 55.7,111.5 C 56.8,111.6 58,111.6 59.1,111.6 C 60.3,111.6 61.4,111.5 62.5,111.5 C 62.8,111.5 63.1,111.5 63.5,111.4 C 77.7,110.2 90.3,103.4 99.1,93.2 C 98.6,93.1 97.8,92.9 96.9,92.9z"/>
<path style="fill: #009bdb; fill-opacity: 1; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 20.7 53.5 C 24.3,53.5 26,52.1 27.9,50.6 C 29.9,49 31.9,47.4 35.9,47.4 C 39.9,47.4 42,49 43.9,50.6 C 45.8,52.1 47.5,53.5 51.1,53.5 C 54.7,53.5 56.4,52.1 58.3,50.6 C 60.3,49 62.3,47.4 66.3,47.4 C 70.3,47.4 72.4,49 74.3,50.6 C 76.2,52.1 77.9,53.5 81.5,53.5 C 85.1,53.5 86.8,52.1 88.7,50.6 C 90.7,49 92.7,47.4 96.7,47.4 C 100.7,47.4 102.8,49 104.7,50.6 C 106.5,52.1 108.3,53.4 111.7,53.5 C 111.2,48.7 110.1,44 108.4,39.7 C 106.6,39.1 105.3,38.1 104,37.1 C 102.1,35.6 100.3,34.2 96.6,34.2 C 92.9,34.2 91.1,35.6 89.2,37.1 C 87.3,38.6 85.3,40.2 81.3,40.2 C 77.3,40.2 75.4,38.6 73.4,37.1 C 71.5,35.6 69.7,34.2 66,34.2 C 62.3,34.2 60.5,35.6 58.6,37.1 C 56.7,38.6 54.7,40.2 50.7,40.2 C 46.7,40.2 44.8,38.6 42.8,37.1 C 40.9,35.6 39.1,34.2 35.4,34.2 C 31.7,34.2 29.9,35.6 28,37.1 C 26.1,38.6 24.1,40.2 20.1,40.2 C 16.1,40.2 14.2,38.6 12.2,37.1 C 11.8,36.8 11.3,36.4 10.9,36.1 C 9.2,39.7 7.8,43.6 7,47.7 C 9.7,48.2 11.3,49.4 12.9,50.7 C 15.4,52.1 17.1,53.5 20.7,53.5z"/>
<path style="fill: #009bdb; fill-opacity: 1; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 20.7 39.3 C 24.4,39.3 26.2,37.9 28.1,36.4 C 30,34.9 32,33.3 36,33.3 C 40,33.3 41.9,34.9 43.9,36.4 C 45.8,37.9 47.6,39.3 51.3,39.3 C 55,39.3 56.8,37.9 58.7,36.4 C 60.6,34.9 62.6,33.3 66.6,33.3 C 70.6,33.3 72.5,34.9 74.5,36.4 C 76.4,37.9 78.2,39.3 81.9,39.3 C 85.6,39.3 87.4,37.9 89.3,36.4 C 91.2,34.9 93.2,33.3 97.2,33.3 C 101.2,33.3 103.1,34.9 105.1,36.4 C 106.2,37.2 107.2,38.1 108.5,38.6 C 100.6,19.4 81.6,5.8 59.6,5.8 C 38.8,5.8 20.9,17.8 12.2,35.3 C 12.7,35.7 13.2,36 13.6,36.4 C 15.2,37.9 17,39.3 20.7,39.3z"/>
<path style="fill: #009bdb; fill-opacity: 1; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 96.9 78.2 C 93.5,78.2 91.9,79.5 90.1,81 C 88.2,82.5 86,84.3 81.7,84.3 C 77.5,84.3 75.3,82.6 73.3,81 C 71.4,79.5 69.8,78.2 66.5,78.2 C 63.1,78.2 61.5,79.5 59.7,81 C 57.8,82.5 55.6,84.3 51.3,84.3 C 47.1,84.3 44.9,82.6 42.9,81 C 41,79.5 39.4,78.2 36.1,78.2 C 32.7,78.2 31.1,79.5 29.3,81 C 27.4,82.5 25.2,84.3 20.9,84.3 C 16.7,84.3 14.5,82.6 12.5,81 C 12,80.6 11.5,80.2 11,79.9 C 13.6,85.9 17.3,91.3 21.9,95.9 C 24.5,95.7 25.9,94.5 27.5,93.3 C 29.5,91.7 31.7,89.9 36.1,89.9 C 40.4,89.9 42.7,91.7 44.7,93.3 C 46.5,94.7 48.1,96 51.4,96 C 54.7,96 56.3,94.8 58.1,93.3 C 60.1,91.7 62.3,89.9 66.7,89.9 C 71,89.9 73.3,91.7 75.3,93.3 C 77.1,94.7 78.7,96 82,96 C 85.3,96 86.9,94.8 88.7,93.3 C 90.7,91.7 92.9,89.9 97.3,89.9 C 99.1,89.9 100.6,90.2 101.8,90.7 C 103.7,88.2 105.3,85.6 106.8,82.8 C 105.8,82.2 105,81.6 104.2,81 C 101.9,79.5 100.2,78.2 96.9,78.2z"/>
<path style="fill: #009bdb; fill-opacity: 1; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 112 54.9 C 108,54.9 106,53.3 104,51.7 C 102.1,50.2 100.4,48.8 96.8,48.8 C 93.2,48.8 91.5,50.2 89.6,51.7 C 87.6,53.3 85.6,54.9 81.6,54.9 C 77.6,54.9 75.5,53.3 73.6,51.7 C 71.7,50.2 70,48.8 66.4,48.8 C 62.8,48.8 61.1,50.2 59.2,51.7 C 57.2,53.3 55.2,54.9 51.2,54.9 C 47.2,54.9 45.1,53.3 43.2,51.7 C 41.3,50.2 39.6,48.8 36,48.8 C 32.4,48.8 30.7,50.2 28.8,51.7 C 26.8,53.3 24.8,54.9 20.8,54.9 C 16.8,54.9 14.7,53.3 12.8,51.7 C 11.3,50.5 9.8,49.4 7.5,49 C 7,51.5 6.7,54.1 6.6,56.7 C 6.6,57.4 6.5,58.1 6.5,58.7 C 6.5,59.4 6.5,60.1 6.6,60.7 C 6.6,61 6.6,61.3 6.6,61.6 C 10.1,61.9 12,63.4 13.8,64.8 C 15.6,66.2 17.3,67.6 20.8,67.6 C 24.3,67.6 26,66.2 27.8,64.8 C 29.7,63.3 31.9,61.6 36,61.6 C 40.1,61.6 42.3,63.3 44.2,64.8 C 46,66.2 47.7,67.6 51.2,67.6 C 54.7,67.6 56.4,66.2 58.2,64.8 C 60.1,63.3 62.3,61.6 66.4,61.6 C 70.5,61.6 72.7,63.3 74.6,64.8 C 76.4,66.2 78.1,67.6 81.6,67.6 C 85.1,67.6 86.8,66.2 88.6,64.8 C 90.5,63.3 92.7,61.6 96.8,61.6 C 100.9,61.6 103.1,63.3 105,64.8 C 106.7,66.1 108.3,67.4 111.3,67.6 C 111.6,66 111.8,64.4 111.9,62.7 C 111.9,62.1 112,61.4 112,60.8 C 112,59.4333 112,58.0667 112,56.7 C 112.1,56 112,54.9 112,54.9z"/>
<path style="fill: #009bdb; fill-opacity: 1; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 96.9 63.5 C 93.4,63.5 91.7,64.9 89.9,66.3 C 88,67.8 85.8,69.5 81.7,69.5 C 77.6,69.5 75.4,67.8 73.5,66.3 C 71.7,64.9 70,63.5 66.5,63.5 C 63,63.5 61.3,64.9 59.5,66.3 C 57.6,67.8 55.4,69.5 51.3,69.5 C 47.2,69.5 45,67.8 43.1,66.3 C 41.3,64.9 39.6,63.5 36.1,63.5 C 32.6,63.5 30.9,64.9 29.1,66.3 C 27.2,67.8 25,69.5 20.9,69.5 C 16.8,69.5 14.6,67.8 12.7,66.3 C 11.1,65 9.6,63.8 6.9,63.5 C 7.3,68 8.3,72.2 9.7,76.3 C 11.6,76.9 12.9,78 14.1,79 C 16,80.5 17.6,81.8 20.9,81.8 C 24.3,81.8 25.9,80.5 27.7,79 C 29.6,77.5 31.8,75.7 36.1,75.7 C 40.3,75.7 42.5,77.4 44.5,79 C 46.4,80.5 48,81.8 51.3,81.8 C 54.7,81.8 56.3,80.5 58.1,79 C 60,77.5 62.2,75.7 66.5,75.7 C 70.7,75.7 72.9,77.4 74.9,79 C 76.8,80.5 78.4,81.8 81.7,81.8 C 85.1,81.8 86.7,80.5 88.5,79 C 90.4,77.5 92.6,75.7 96.9,75.7 C 101.1,75.7 103.3,77.4 105.3,79 C 106,79.6 106.7,80.1 107.5,80.6 C 109.1,77.1 110.3,73.4 111.1,69.5 C 107.6,69.2 105.7,67.7 103.9,66.3 C 102.1,64.9 100.3,63.5 96.9,63.5z"/>
<path style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 88.3 93.3 C 86.5,94.7 84.9,96 81.6,96 C 78.3,96 76.7,94.8 74.9,93.3 C 72.9,91.7 70.7,89.9 66.3,89.9 C 62,89.9 59.7,91.7 57.7,93.3 C 55.9,94.7 54.3,96 51,96 C 47.7,96 46.1,94.8 44.3,93.3 C 42.3,91.7 40.1,89.9 35.7,89.9 C 31.4,89.9 29.1,91.7 27.1,93.3 C 25.5,94.6 24.1,95.7 21.5,95.9 C 22.4,96.8 23.3,97.6 24.2,98.4 C 26.3,97.8 27.7,96.6 29,95.6 C 30.8,94.2 32.4,92.9 35.7,92.9 C 39,92.9 40.6,94.1 42.4,95.6 C 44.4,97.2 46.6,99 51,99 C 55.3,99 57.6,97.2 59.6,95.6 C 61.4,94.2 63,92.9 66.3,92.9 C 69.6,92.9 71.2,94.1 73,95.6 C 75,97.2 77.2,99 81.6,99 C 85.9,99 88.2,97.2 90.2,95.6 C 92,94.2 93.6,92.9 96.9,92.9 C 97.8,92.9 98.6,93 99.3,93.2 C 100,92.4 100.7,91.5 101.3,90.7 C 100.1,90.2 98.6,89.9 96.8,89.9 C 92.5,89.9 90.3,91.7 88.3,93.3z"/>
<path style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 96.9 75.8 C 92.7,75.8 90.5,77.5 88.5,79.1 C 86.6,80.6 85,81.9 81.7,81.9 C 78.3,81.9 76.7,80.6 74.9,79.1 C 73,77.6 70.8,75.8 66.5,75.8 C 62.3,75.8 60.1,77.5 58.1,79.1 C 56.2,80.6 54.6,81.9 51.3,81.9 C 47.9,81.9 46.3,80.6 44.5,79.1 C 42.6,77.6 40.4,75.8 36.1,75.8 C 31.9,75.8 29.7,77.5 27.7,79.1 C 25.8,80.6 24.2,81.9 20.9,81.9 C 17.5,81.9 15.9,80.6 14.1,79.1 C 12.9,78.1 11.6,77.1 9.7,76.4 C 10.1,77.6 10.6,78.7 11.1,79.9 C 11.6,80.2 12.1,80.6 12.6,81 C 14.5,82.5 16.7,84.3 21,84.3 C 25.2,84.3 27.4,82.6 29.4,81 C 31.3,79.5 32.9,78.2 36.2,78.2 C 39.6,78.2 41.2,79.5 43,81 C 44.9,82.5 47.1,84.3 51.4,84.3 C 55.6,84.3 57.8,82.6 59.8,81 C 61.7,79.5 63.3,78.2 66.6,78.2 C 70,78.2 71.6,79.5 73.4,81 C 75.3,82.5 77.5,84.3 81.8,84.3 C 86,84.3 88.2,82.6 90.2,81 C 92.1,79.5 93.7,78.2 97,78.2 C 100.4,78.2 102,79.5 103.8,81 C 104.6,81.6 105.4,82.3 106.4,82.8 C 106.8,82.1 107.1,81.3 107.5,80.6 C 106.7,80.2 106.1,79.6 105.3,79 C 103.3,77.5 101.1,75.8 96.9,75.8z"/>
<path style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 96.9 61.6 C 92.8,61.6 90.6,63.3 88.7,64.8 C 86.9,66.2 85.2,67.6 81.7,67.6 C 78.2,67.6 76.5,66.2 74.7,64.8 C 72.8,63.3 70.6,61.6 66.5,61.6 C 62.4,61.6 60.2,63.3 58.3,64.8 C 56.5,66.2 54.8,67.6 51.3,67.6 C 47.8,67.6 46.1,66.2 44.3,64.8 C 42.4,63.3 40.2,61.6 36.1,61.6 C 32,61.6 29.8,63.3 27.9,64.8 C 26.1,66.2 24.4,67.6 20.9,67.6 C 17.4,67.6 15.7,66.2 13.9,64.8 C 12.2,63.4 10.2,61.9 6.7,61.6 C 6.7,62.2 6.8,62.9 6.8,63.5 C 9.5,63.8 11,65 12.6,66.3 C 14.5,67.8 16.7,69.5 20.8,69.5 C 24.9,69.5 27.1,67.8 29,66.3 C 30.8,64.9 32.5,63.5 36,63.5 C 39.5,63.5 41.2,64.9 43,66.3 C 44.9,67.8 47.1,69.5 51.2,69.5 C 55.3,69.5 57.5,67.8 59.4,66.3 C 61.2,64.9 62.9,63.5 66.4,63.5 C 69.9,63.5 71.6,64.9 73.4,66.3 C 75.3,67.8 77.5,69.5 81.6,69.5 C 85.7,69.5 87.9,67.8 89.8,66.3 C 91.6,64.9 93.3,63.5 96.8,63.5 C 100.3,63.5 102,64.9 103.8,66.3 C 105.5,67.7 107.5,69.2 111,69.5 C 111.1,68.9 111.2,68.2 111.3,67.6 C 108.3,67.4 106.7,66.2 105,64.8 C 103.2,63.3 101,61.6 96.9,61.6z"/>
<path style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 20.7 54.9 C 24.7,54.9 26.8,53.3 28.7,51.7 C 30.6,50.2 32.3,48.8 35.9,48.8 C 39.5,48.8 41.2,50.2 43.1,51.7 C 45.1,53.3 47.1,54.9 51.1,54.9 C 55.1,54.9 57.2,53.3 59.1,51.7 C 61,50.2 62.7,48.8 66.3,48.8 C 69.9,48.8 71.6,50.2 73.5,51.7 C 75.5,53.3 77.5,54.9 81.5,54.9 C 85.5,54.9 87.6,53.3 89.5,51.7 C 91.4,50.2 93.1,48.8 96.7,48.8 C 100.3,48.8 102,50.2 103.9,51.7 C 105.8,53.2 107.9,54.8 111.9,54.9 C 111.9,54.8667 111.9,54.8333 111.9,54.8 C 111.9,54.4 111.8,54 111.8,53.5 C 108.4,53.4 106.6,52.1 104.8,50.6 C 102.8,49 100.8,47.4 96.8,47.4 C 92.8,47.4 90.7,49 88.8,50.6 C 86.9,52.1 85.2,53.5 81.6,53.5 C 78,53.5 76.3,52.1 74.4,50.6 C 72.4,49 70.4,47.4 66.4,47.4 C 62.4,47.4 60.3,49 58.4,50.6 C 56.5,52.1 54.8,53.5 51.2,53.5 C 47.6,53.5 45.9,52.1 44,50.6 C 42,49 40,47.4 36,47.4 C 32,47.4 29.9,49 28,50.6 C 26.1,52.1 24.4,53.5 20.8,53.5 C 17.2,53.5 15.5,52.1 13.6,50.6 C 12,49.3 10.4,48.1 7.7,47.6 C 7.6,48 7.5,48.5 7.4,48.9 C 9.8,49.3 11.2,50.4 12.7,51.6 C 14.6,53.3 16.6,54.9 20.7,54.9z"/>
<path style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 0; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 20.7 40.2 C 24.7,40.2 26.6,38.6 28.6,37.1 C 30.5,35.6 32.3,34.2 36,34.2 C 39.7,34.2 41.5,35.6 43.4,37.1 C 45.3,38.6 47.3,40.2 51.3,40.2 C 55.3,40.2 57.2,38.6 59.2,37.1 C 61.1,35.6 62.9,34.2 66.6,34.2 C 70.3,34.2 72.1,35.6 74,37.1 C 75.9,38.6 77.9,40.2 81.9,40.2 C 85.9,40.2 87.8,38.6 89.8,37.1 C 91.7,35.6 93.5,34.2 97.2,34.2 C 100.9,34.2 102.7,35.6 104.6,37.1 C 105.9,38.1 107.1,39.1 109,39.7 C 108.9,39.4 108.7,39 108.6,38.7 C 107.3,38.1 106.2,37.3 105.2,36.5 C 103.3,35 101.3,33.4 97.3,33.4 C 93.3,33.4 91.4,35 89.4,36.5 C 87.5,38 85.7,39.4 82,39.4 C 78.3,39.4 76.5,38 74.6,36.5 C 72.7,35 70.7,33.4 66.7,33.4 C 62.7,33.4 60.8,35 58.8,36.5 C 56.9,38 55.1,39.4 51.4,39.4 C 47.7,39.4 45.9,38 44,36.5 C 42.1,35 40.1,33.4 36.1,33.4 C 32.1,33.4 30.2,35 28.2,36.5 C 26.3,38 24.5,39.4 20.8,39.4 C 17.1,39.4 15.3,38 13.4,36.5 C 12.9,36.1 12.5,35.8 12,35.4 C 11.9,35.6 11.7,35.9 11.6,36.2 C 12,36.5 12.5,36.8 12.9,37.2 C 14.7,38.6 16.7,40.2 20.7,40.2z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -1,7 +1,7 @@
{ {
"$schema": "https://docs.renovatebot.com/renovate-schema.json", "$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [ "extends": [
"local>stackspin/renovate-config" "local>stackspin/renovate-config:default"
], ],
"npm": { "npm": {
"enabled": false "enabled": false

View file

@ -6,6 +6,7 @@ import { Banner, Modal, ConfirmationModal } from 'src/components';
import { Input, Select } from 'src/components/Form'; import { Input, Select } from 'src/components/Form';
import { User, UserRole, useUsers } from 'src/services/users'; import { User, UserRole, useUsers } from 'src/services/users';
import { useAuth } from 'src/services/auth'; import { useAuth } from 'src/services/auth';
import { HIDDEN_APPS } from 'src/modules/dashboard/consts';
import { appAccessList, initialUserForm } from './consts'; import { appAccessList, initialUserForm } from './consts';
import { UserModalProps } from './types'; import { UserModalProps } from './types';
@ -221,7 +222,7 @@ export const UserModal = ({ open, onClose, userId, setUserId }: UserModalProps)
<div className="flow-root mt-6"> <div className="flow-root mt-6">
<ul className="-my-5 divide-y divide-gray-200"> <ul className="-my-5 divide-y divide-gray-200">
{fields.map((item, index) => { {fields.map((item, index) => {
if (item.name === 'dashboard') { if (item.name != null && HIDDEN_APPS.indexOf(item.name) !== -1) {
return null; return null;
} }

View file

@ -10,7 +10,7 @@ export const DASHBOARD_QUICK_ACCESS = [
]; ];
/** Apps that should not be shown on the dashboard */ /** Apps that should not be shown on the dashboard */
export const HIDDEN_APPS = ['dashboard']; export const HIDDEN_APPS = ['dashboard', 'velero'];
/** Apps that should be shown under "Utilities" */ /** Apps that should be shown under "Utilities" */
export const UTILITY_APPS = ['monitoring']; export const UTILITY_APPS = ['monitoring'];