From 5fdd5b1eac66709c5fba401da314f608c1c67d21 Mon Sep 17 00:00:00 2001 From: bkaiserinfosec <49665796+bkaiserinfosec@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:45:36 -0700 Subject: [PATCH 01/29] Update security_quality_gate.py --- src/vr/api/vulns/security_quality_gate.py | 128 +++++++++++----------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/src/vr/api/vulns/security_quality_gate.py b/src/vr/api/vulns/security_quality_gate.py index 930c2a1b..b00c1b1e 100644 --- a/src/vr/api/vulns/security_quality_gate.py +++ b/src/vr/api/vulns/security_quality_gate.py @@ -51,38 +51,38 @@ def _add_sg_config_settings(config, job_id, app_id): job = SgConfigSettingsPerJob( AppID=app_id, PipelineJobID = job_id, - ThreshScaLow = config['thresholds']['sca']['low'], - ThreshScaMedium = config['thresholds']['sca']['medium'], - ThreshScaHigh = config['thresholds']['sca']['high'], - ThreshScaCritical = config['thresholds']['sca']['critical'], - ThreshContainerLow = config['thresholds']['container']['low'], - ThreshContainerMedium = config['thresholds']['container']['medium'], - ThreshContainerHigh = config['thresholds']['container']['high'], - ThreshContainerCritical = config['thresholds']['container']['critical'], - ThreshDastLow = config['thresholds']['dast']['low'], - ThreshDastMedium = config['thresholds']['dast']['medium'], - ThreshDastHigh = config['thresholds']['dast']['high'], - ThreshDastCritical = config['thresholds']['dast']['critical'], - ThreshDastApiLow = config['thresholds']['dastapi']['low'], - ThreshDastApiMedium = config['thresholds']['dastapi']['medium'], - ThreshDastApiHigh = config['thresholds']['dastapi']['high'], - ThreshDastApiCritical = config['thresholds']['dastapi']['critical'], - ThreshInfrastructureLow = config['thresholds']['infrastructure']['low'], - ThreshInfrastructureMedium = config['thresholds']['infrastructure']['medium'], - ThreshInfrastructureHigh = config['thresholds']['infrastructure']['high'], - ThreshInfrastructureCritical = config['thresholds']['infrastructure']['critical'], - ThreshSastLow = config['thresholds']['sast']['low'], - ThreshSastMedium = config['thresholds']['sast']['medium'], - ThreshSastHigh = config['thresholds']['sast']['high'], - ThreshSastCritical = config['thresholds']['sast']['critical'], - ThreshIacLow = config['thresholds']['iac']['low'], - ThreshIacMedium = config['thresholds']['iac']['medium'], - ThreshIacHigh = config['thresholds']['iac']['high'], - ThreshIacCritical = config['thresholds']['iac']['critical'], - ThreshSecretsLow = config['thresholds']['secret']['low'], - ThreshSecretsMedium = config['thresholds']['secret']['medium'], - ThreshSecretsHigh = config['thresholds']['secret']['high'], - ThreshSecretsCritical = config['thresholds']['secret']['critical'], + ThreshScaLow = config['sca']['low'], + ThreshScaMedium = config['sca']['medium'], + ThreshScaHigh = config['sca']['high'], + ThreshScaCritical = config['sca']['critical'], + ThreshContainerLow = config['container']['low'], + ThreshContainerMedium = config['container']['medium'], + ThreshContainerHigh = config['container']['high'], + ThreshContainerCritical = config['container']['critical'], + ThreshDastLow = config['dast']['low'], + ThreshDastMedium = config['dast']['medium'], + ThreshDastHigh = config['dast']['high'], + ThreshDastCritical = config['dast']['critical'], + ThreshDastApiLow = config['dastapi']['low'], + ThreshDastApiMedium = config['dastapi']['medium'], + ThreshDastApiHigh = config['dastapi']['high'], + ThreshDastApiCritical = config['dastapi']['critical'], + ThreshInfrastructureLow = config['infrastructure']['low'], + ThreshInfrastructureMedium = config['infrastructure']['medium'], + ThreshInfrastructureHigh = config['infrastructure']['high'], + ThreshInfrastructureCritical = config['infrastructure']['critical'], + ThreshSastLow = config['sast']['low'], + ThreshSastMedium = config['sast']['medium'], + ThreshSastHigh = config['sast']['high'], + ThreshSastCritical = config['sast']['critical'], + ThreshIacLow = config['iac']['low'], + ThreshIacMedium = config['iac']['medium'], + ThreshIacHigh = config['iac']['high'], + ThreshIacCritical = config['iac']['critical'], + ThreshSecretsLow = config['secret']['low'], + ThreshSecretsMedium = config['secret']['medium'], + ThreshSecretsHigh = config['secret']['high'], + ThreshSecretsCritical = config['secret']['critical'], ) db.session.add(job) db_connection_handler(db) @@ -92,38 +92,38 @@ def _add_sg_results(results, job_id, app_id): job = SgResultsPerJob( AppID=app_id, PipelineJobID=job_id, - ResultScaLow=results['report']['sca']['low'], - ResultScaMedium=results['report']['sca']['medium'], - ResultScaHigh=results['report']['sca']['high'], - ResultScaCritical=results['report']['sca']['critical'], - ResultContainerLow=results['report']['container']['low'], - ResultContainerMedium=results['report']['container']['medium'], - ResultContainerHigh=results['report']['container']['high'], - ResultContainerCritical=results['report']['container']['critical'], - ResultDastLow=results['report']['dast']['low'], - ResultDastMedium=results['report']['dast']['medium'], - ResultDastHigh=results['report']['dast']['high'], - ResultDastCritical=results['report']['dast']['critical'], - ResultDastApiLow=results['report']['dastapi']['low'], - ResultDastApiMedium=results['report']['dastapi']['medium'], - ResultDastApiHigh=results['report']['dastapi']['high'], - ResultDastApiCritical=results['report']['dastapi']['critical'], - ResultInfrastructureLow=results['report']['infrastructure']['low'], - ResultInfrastructureMedium=results['report']['infrastructure']['medium'], - ResultInfrastructureHigh=results['report']['infrastructure']['high'], - ResultInfrastructureCritical=results['report']['infrastructure']['critical'], - ResultSastLow=results['report']['sast']['low'], - ResultSastMedium=results['report']['sast']['medium'], - ResultSastHigh=results['report']['sast']['high'], - ResultSastCritical=results['report']['sast']['critical'], - ResultIacLow=results['report']['iac']['low'], - ResultIacMedium=results['report']['iac']['medium'], - ResultIacHigh=results['report']['iac']['high'], - ResultIacCritical=results['report']['iac']['critical'], - ResultSecretsLow=results['report']['secret']['low'], - ResultSecretsMedium=results['report']['secret']['medium'], - ResultSecretsHigh=results['report']['secret']['high'], - ResultSecretsCritical=results['report']['secret']['critical'], + ResultScaLow=results['sca']['low'], + ResultScaMedium=results['sca']['medium'], + ResultScaHigh=results['sca']['high'], + ResultScaCritical=results['sca']['critical'], + ResultContainerLow=results['container']['low'], + ResultContainerMedium=results['container']['medium'], + ResultContainerHigh=results['container']['high'], + ResultContainerCritical=results['container']['critical'], + ResultDastLow=results['dast']['low'], + ResultDastMedium=results['dast']['medium'], + ResultDastHigh=results['dast']['high'], + ResultDastCritical=results['dast']['critical'], + ResultDastApiLow=results['dastapi']['low'], + ResultDastApiMedium=results['dastapi']['medium'], + ResultDastApiHigh=results['dastapi']['high'], + ResultDastApiCritical=results['dastapi']['critical'], + ResultInfrastructureLow=results['infrastructure']['low'], + ResultInfrastructureMedium=results['infrastructure']['medium'], + ResultInfrastructureHigh=results['infrastructure']['high'], + ResultInfrastructureCritical=results['infrastructure']['critical'], + ResultSastLow=results['sast']['low'], + ResultSastMedium=results['sast']['medium'], + ResultSastHigh=results['sast']['high'], + ResultSastCritical=results['sast']['critical'], + ResultIacLow=results['iac']['low'], + ResultIacMedium=results['iac']['medium'], + ResultIacHigh=results['iac']['high'], + ResultIacCritical=results['iac']['critical'], + ResultSecretsLow=results['secret']['low'], + ResultSecretsMedium=results['secret']['medium'], + ResultSecretsHigh=results['secret']['high'], + ResultSecretsCritical=results['secret']['critical'], ) db.session.add(job) db_connection_handler(db) From 1a5e69ee64ab912c8ef32fd599938bac3dd7ef7e Mon Sep 17 00:00:00 2001 From: bkaiserinfosec <49665796+bkaiserinfosec@users.noreply.github.com> Date: Tue, 12 Mar 2024 19:34:30 -0700 Subject: [PATCH 02/29] Update Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index bac83770..f45ebce2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -21,7 +21,7 @@ pipeline { env.GLOBAL_BRANCH_LIST = config.global.defaultBranches.join(',') env.CURRENT_STAGE_BRANCH_LIST = "" - jslStageWrapper.initReport() + jslStageWrapper.initReport(config) } } From 12cbbd2e263570bd76cfae4692eac374d6c432c1 Mon Sep 17 00:00:00 2001 From: bkaiserinfosec <49665796+bkaiserinfosec@users.noreply.github.com> Date: Tue, 12 Mar 2024 20:16:37 -0700 Subject: [PATCH 03/29] Update security_quality_gate.py --- src/vr/api/vulns/security_quality_gate.py | 64 +++++++++++------------ 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/vr/api/vulns/security_quality_gate.py b/src/vr/api/vulns/security_quality_gate.py index b00c1b1e..29c4191a 100644 --- a/src/vr/api/vulns/security_quality_gate.py +++ b/src/vr/api/vulns/security_quality_gate.py @@ -51,38 +51,38 @@ def _add_sg_config_settings(config, job_id, app_id): job = SgConfigSettingsPerJob( AppID=app_id, PipelineJobID = job_id, - ThreshScaLow = config['sca']['low'], - ThreshScaMedium = config['sca']['medium'], - ThreshScaHigh = config['sca']['high'], - ThreshScaCritical = config['sca']['critical'], - ThreshContainerLow = config['container']['low'], - ThreshContainerMedium = config['container']['medium'], - ThreshContainerHigh = config['container']['high'], - ThreshContainerCritical = config['container']['critical'], - ThreshDastLow = config['dast']['low'], - ThreshDastMedium = config['dast']['medium'], - ThreshDastHigh = config['dast']['high'], - ThreshDastCritical = config['dast']['critical'], - ThreshDastApiLow = config['dastapi']['low'], - ThreshDastApiMedium = config['dastapi']['medium'], - ThreshDastApiHigh = config['dastapi']['high'], - ThreshDastApiCritical = config['dastapi']['critical'], - ThreshInfrastructureLow = config['infrastructure']['low'], - ThreshInfrastructureMedium = config['infrastructure']['medium'], - ThreshInfrastructureHigh = config['infrastructure']['high'], - ThreshInfrastructureCritical = config['infrastructure']['critical'], - ThreshSastLow = config['sast']['low'], - ThreshSastMedium = config['sast']['medium'], - ThreshSastHigh = config['sast']['high'], - ThreshSastCritical = config['sast']['critical'], - ThreshIacLow = config['iac']['low'], - ThreshIacMedium = config['iac']['medium'], - ThreshIacHigh = config['iac']['high'], - ThreshIacCritical = config['iac']['critical'], - ThreshSecretsLow = config['secret']['low'], - ThreshSecretsMedium = config['secret']['medium'], - ThreshSecretsHigh = config['secret']['high'], - ThreshSecretsCritical = config['secret']['critical'], + ThreshScaLow = config['sca']['low'] if 'low' in 'sca' else '', + ThreshScaMedium = config['sca']['medium'] if 'medium' in 'sca' else '', + ThreshScaHigh = config['sca']['high'] if 'high' in 'sca' else '', + ThreshScaCritical = config['sca']['critical'] if 'critical' in 'sca' else '', + ThreshContainerLow = config['container']['low'] if 'low' in 'container' else '', + ThreshContainerMedium = config['container']['medium'] if 'medium' in 'container' else '', + ThreshContainerHigh = config['container']['high'] if 'high' in 'container' else '', + ThreshContainerCritical = config['container']['critical'] if 'critical' in 'container' else '', + ThreshDastLow = config['dast']['low'] if 'low' in 'dast' else '', + ThreshDastMedium = config['dast']['medium'] if 'medium' in 'dast' else '', + ThreshDastHigh = config['dast']['high'] if 'high' in 'dast' else '', + ThreshDastCritical = config['dast']['critical'] if 'critical' in 'dast' else '', + ThreshDastApiLow = config['dastapi']['low'] if 'low' in 'dastapi' else '', + ThreshDastApiMedium = config['dastapi']['medium'] if 'medium' in 'dastapi' else '', + ThreshDastApiHigh = config['dastapi']['high'] if 'high' in 'dastapi' else '', + ThreshDastApiCritical = config['dastapi']['critical'] if 'critical' in 'dastapi' else '', + ThreshInfrastructureLow = config['infrastructure']['low'] if 'low' in 'infrastructure' else '', + ThreshInfrastructureMedium = config['infrastructure']['medium'] if 'medium' in 'infrastructure' else '', + ThreshInfrastructureHigh = config['infrastructure']['high'] if 'high' in 'infrastructure' else '', + ThreshInfrastructureCritical = config['infrastructure']['critical'] if 'critical' in 'infrastructure' else '', + ThreshSastLow = config['sast']['low'] if 'low' in 'sast' else '', + ThreshSastMedium = config['sast']['medium'] if 'medium' in 'sast' else '', + ThreshSastHigh = config['sast']['high'] if 'high' in 'sast' else '', + ThreshSastCritical = config['sast']['critical'] if 'critical' in 'sast' else '', + ThreshIacLow = config['iac']['low'] if 'low' in 'iac' else '', + ThreshIacMedium = config['iac']['medium'] if 'medium' in 'iac' else '', + ThreshIacHigh = config['iac']['high'] if 'high' in 'iac' else '', + ThreshIacCritical = config['iac']['critical'] if 'critical' in 'iac' else '', + ThreshSecretsLow = config['secret']['low'] if 'low' in 'secret' else '', + ThreshSecretsMedium = config['secret']['medium'] if 'medium' in 'secret' else '', + ThreshSecretsHigh = config['secret']['high'] if 'high' in 'secret' else '', + ThreshSecretsCritical = config['secret']['critical'] if 'critical' in 'secret' else '', ) db.session.add(job) db_connection_handler(db) From c5242c921e8af6ec7aee9320f94de9bba4254722 Mon Sep 17 00:00:00 2001 From: bkaiserinfosec <49665796+bkaiserinfosec@users.noreply.github.com> Date: Sun, 17 Mar 2024 18:13:34 -0700 Subject: [PATCH 04/29] update settings and groups --- src/vr/admin/models.py | 37 ++++ src/vr/admin/routes/settings.py | 303 +++++++++++++++++++++++---- src/vr/db_models/setup.py | 37 ++++ src/vr/templates/admin/settings.html | 281 ++++++++++++++++++++++++- 4 files changed, 615 insertions(+), 43 deletions(-) diff --git a/src/vr/admin/models.py b/src/vr/admin/models.py index 1048b3d0..89785772 100644 --- a/src/vr/admin/models.py +++ b/src/vr/admin/models.py @@ -416,6 +416,43 @@ class AppConfig(db.Model): __tablename__ = 'AppConfig' id = db.Column(db.Integer, primary_key=True) first_access = db.Column(db.Boolean, nullable=False, default=True) + settings_initialized = db.Column(db.Boolean, nullable=False, default=False) + APP_EXT_URL = db.Column(db.String(200)) + AUTH_TYPE = db.Column(db.String(200)) + AZAD_AUTHORITY = db.Column(db.String(200)) + AZAD_CLIENT_ID = db.Column(db.String(200)) + AZAD_CLIENT_SECRET = db.Column(db.String(200)) + AZURE_KEYVAULT_NAME = db.Column(db.String(200)) + ENV = db.Column(db.String(200)) + INSECURE_OAUTH = db.Column(db.String(200)) + JENKINS_HOST = db.Column(db.String(200)) + JENKINS_KEY = db.Column(db.String(200)) + JENKINS_PROJECT = db.Column(db.String(200)) + JENKINS_STAGING_PROJECT = db.Column(db.String(200)) + JENKINS_TOKEN = db.Column(db.String(200)) + JENKINS_USER = db.Column(db.String(200)) + LDAP_BASE_DN = db.Column(db.String(200)) + LDAP_BIND_USER_DN = db.Column(db.String(200)) + LDAP_BIND_USER_PASSWORD = db.Column(db.String(200)) + LDAP_GROUP_DN = db.Column(db.String(200)) + LDAP_HOST = db.Column(db.String(200)) + LDAP_PORT = db.Column(db.String(200)) + LDAP_USER_DN = db.Column(db.String(200)) + LDAP_USER_LOGIN_ATTR = db.Column(db.String(200)) + LDAP_USER_RDN_ATTR = db.Column(db.String(200)) + PROD_DB_URI = db.Column(db.String(200)) + SMTP_ADMIN_EMAIL = db.Column(db.String(200)) + SMTP_HOST = db.Column(db.String(200)) + SMTP_PASSWORD = db.Column(db.String(200)) + SMTP_USER = db.Column(db.String(200)) + SNOW_CLIENT_ID = db.Column(db.String(200)) + SNOW_CLIENT_SECRET = db.Column(db.String(200)) + SNOW_INSTANCE_NAME = db.Column(db.String(200)) + SNOW_PASSWORD = db.Column(db.String(200)) + SNOW_USERNAME = db.Column(db.String(200)) + VERSION = db.Column(db.String(200)) + JENKINS_ENABLED = db.Column(db.String(200)) + SNOW_ENABLED = db.Column(db.String(200)) class SuSiteConfiguration(db.Model): diff --git a/src/vr/admin/routes/settings.py b/src/vr/admin/routes/settings.py index c366ce43..a3125e54 100644 --- a/src/vr/admin/routes/settings.py +++ b/src/vr/admin/routes/settings.py @@ -1,4 +1,4 @@ -from flask import session, redirect, url_for, render_template +from flask import session, redirect, url_for, render_template, request from flask_login import login_required from vr import db, app import os @@ -10,14 +10,18 @@ AZAD_CLIENT_ID, AZAD_CLIENT_SECRET, AZAD_AUTHORITY, JENKINS_USER, AZURE_KEYVAULT_NAME, INSECURE_OAUTH, \ JENKINS_HOST, JENKINS_KEY, JENKINS_PROJECT, JENKINS_STAGING_PROJECT, JENKINS_TOKEN, SMTP_ADMIN_EMAIL, \ SMTP_HOST, SMTP_PASSWORD, SMTP_USER, SNOW_CLIENT_ID, SNOW_CLIENT_SECRET, SNOW_INSTANCE_NAME, SNOW_PASSWORD, \ - SNOW_USERNAME, VERSION + SNOW_USERNAME, VERSION, JENKINS_ENABLED, SNOW_ENABLED from flask_sqlalchemy import SQLAlchemy +from vr.admin.models import AppConfig +from vr.admin.functions import db_connection_handler +from sqlalchemy import text + NAV = { 'CAT': { "name": "Settings", "url": "admin.admin_dashboard"} } -@admin.route('/settings', methods=['GET']) +@admin.route('/settings', methods=['GET', 'POST']) @login_required def settings(): NAV['curpage'] = {"name": "Settings"} @@ -27,44 +31,263 @@ def settings(): elif status == 403: return render_template('403.html', user=user, nav_cat={}, nav_subcat='', \ nav_subsubcat='', nav_curpage={"name": "Unauthorized"}) - current_settings = { - "APP_EXT_URL": APP_EXT_URL, - "AUTH_TYPE": AUTH_TYPE, - "AZAD_AUTHORITY":AZAD_AUTHORITY, - "AZAD_CLIENT_ID": AZAD_CLIENT_ID, - "AZAD_CLIENT_SECRET": AZAD_CLIENT_SECRET, - "AZURE_KEYVAULT_NAME": AZURE_KEYVAULT_NAME, - "ENV": ENV, - "INSECURE_OAUTH": INSECURE_OAUTH, - "JENKINS_HOST": JENKINS_HOST, - "JENKINS_KEY": JENKINS_KEY, - "JENKINS_PROJECT": JENKINS_PROJECT, - "JENKINS_STAGING_PROJECT": JENKINS_STAGING_PROJECT, - "JENKINS_TOKEN": JENKINS_TOKEN, - "JENKINS_USER": JENKINS_USER, - "LDAP_BASE_DN": LDAP_BASE_DN, - "LDAP_BIND_USER_DN": LDAP_BIND_USER_DN, - "LDAP_BIND_USER_PASSWORD": LDAP_BIND_USER_PASSWORD, - "LDAP_GROUP_DN": LDAP_GROUP_DN, - "LDAP_HOST": LDAP_HOST, - "LDAP_PORT": LDAP_PORT, - "LDAP_USER_DN": LDAP_USER_DN, - "LDAP_USER_LOGIN_ATTR": LDAP_USER_LOGIN_ATTR, - "LDAP_USER_RDN_ATTR": LDAP_USER_RDN_ATTR, - "PROD_DB_URI": PROD_DB_URI, - "SMTP_ADMIN_EMAIL": SMTP_ADMIN_EMAIL, - "SMTP_HOST": SMTP_HOST, - "SMTP_PASSWORD": SMTP_PASSWORD, - "SMTP_USER": SMTP_USER, - "SNOW_CLIENT_ID": SNOW_CLIENT_ID, - "SNOW_CLIENT_SECRET": SNOW_CLIENT_SECRET, - "SNOW_INSTANCE_NAME": SNOW_INSTANCE_NAME, - "SNOW_PASSWORD": SNOW_PASSWORD, - "SNOW_USERNAME": SNOW_USERNAME, - "VERSION": VERSION, - } + if request.method == 'POST': + app_config = AppConfig.query.first() + + all = request.form + update_json = { + AppConfig.JENKINS_ENABLED: all["JENKINS_ENABLED"], + AppConfig.SNOW_ENABLED: all["SNOW_ENABLED"], + AppConfig.APP_EXT_URL: all["APP_EXT_URL"], + AppConfig.AUTH_TYPE: all["AUTH_TYPE"], + AppConfig.AZAD_AUTHORITY: all["AZAD_AUTHORITY"], + AppConfig.AZAD_CLIENT_ID: all["AZAD_CLIENT_ID"], + AppConfig.AZAD_CLIENT_SECRET: all["AZAD_CLIENT_SECRET"], + AppConfig.AZURE_KEYVAULT_NAME: all["AZURE_KEYVAULT_NAME"], + AppConfig.ENV: all["ENV"], + AppConfig.INSECURE_OAUTH: all["INSECURE_OAUTH"], + AppConfig.JENKINS_HOST: all["JENKINS_HOST"], + AppConfig.JENKINS_KEY: all["JENKINS_KEY"], + AppConfig.JENKINS_PROJECT: all["JENKINS_PROJECT"], + AppConfig.JENKINS_STAGING_PROJECT: all["JENKINS_STAGING_PROJECT"], + AppConfig.JENKINS_TOKEN: all["JENKINS_TOKEN"], + AppConfig.JENKINS_USER: all["JENKINS_USER"], + AppConfig.LDAP_BASE_DN: all["LDAP_BASE_DN"], + AppConfig.LDAP_BIND_USER_DN: all["LDAP_BIND_USER_DN"], + AppConfig.LDAP_BIND_USER_PASSWORD: all["LDAP_BIND_USER_PASSWORD"], + AppConfig.LDAP_GROUP_DN: all["LDAP_GROUP_DN"], + AppConfig.LDAP_HOST: all["LDAP_HOST"], + AppConfig.LDAP_PORT: all["LDAP_PORT"], + AppConfig.LDAP_USER_DN: all["LDAP_USER_DN"], + AppConfig.LDAP_USER_LOGIN_ATTR: all["LDAP_USER_LOGIN_ATTR"], + AppConfig.LDAP_USER_RDN_ATTR: all["LDAP_USER_RDN_ATTR"], + AppConfig.PROD_DB_URI: all["PROD_DB_URI"], + AppConfig.SMTP_ADMIN_EMAIL: all["SMTP_ADMIN_EMAIL"], + AppConfig.SMTP_HOST: all["SMTP_HOST"], + AppConfig.SMTP_PASSWORD: all["SMTP_PASSWORD"], + AppConfig.SMTP_USER: all["SMTP_USER"], + AppConfig.SNOW_CLIENT_ID: all["SNOW_CLIENT_ID"], + AppConfig.SNOW_CLIENT_SECRET: all["SNOW_CLIENT_SECRET"], + AppConfig.SNOW_INSTANCE_NAME: all["SNOW_INSTANCE_NAME"], + AppConfig.SNOW_PASSWORD: all["SNOW_PASSWORD"], + AppConfig.SNOW_USERNAME: all["SNOW_USERNAME"], + AppConfig.VERSION: all["VERSION"], + } + if not app_config.settings_initialized: + update_json[AppConfig.settings_initialized] = True + db.session.query(AppConfig) \ + .update(update_json, synchronize_session=False) + db_connection_handler(db) + set_env_variables(all) + current_settings = { + "JENKINS_ENABLED": all["JENKINS_ENABLED"], + "SNOW_ENABLED": all["SNOW_ENABLED"], + "APP_EXT_URL": all["APP_EXT_URL"], + "AUTH_TYPE": all["AUTH_TYPE"], + "AZAD_AUTHORITY": all["AZAD_AUTHORITY"], + "AZAD_CLIENT_ID": all["AZAD_CLIENT_ID"], + "AZAD_CLIENT_SECRET": all["AZAD_CLIENT_SECRET"], + "AZURE_KEYVAULT_NAME": all["AZURE_KEYVAULT_NAME"], + "ENV": all["ENV"], + "INSECURE_OAUTH": all["INSECURE_OAUTH"], + "JENKINS_HOST": all["JENKINS_HOST"], + "JENKINS_KEY": all["JENKINS_KEY"], + "JENKINS_PROJECT": all["JENKINS_PROJECT"], + "JENKINS_STAGING_PROJECT": all["JENKINS_STAGING_PROJECT"], + "JENKINS_TOKEN": all["JENKINS_TOKEN"], + "JENKINS_USER": all["JENKINS_USER"], + "LDAP_BASE_DN": all["LDAP_BASE_DN"], + "LDAP_BIND_USER_DN": all["LDAP_BIND_USER_DN"], + "LDAP_BIND_USER_PASSWORD": all["LDAP_BIND_USER_PASSWORD"], + "LDAP_GROUP_DN": all["LDAP_GROUP_DN"], + "LDAP_HOST": all["LDAP_HOST"], + "LDAP_PORT": all["LDAP_PORT"], + "LDAP_USER_DN": all["LDAP_USER_DN"], + "LDAP_USER_LOGIN_ATTR": all["LDAP_USER_LOGIN_ATTR"], + "LDAP_USER_RDN_ATTR": all["LDAP_USER_RDN_ATTR"], + "PROD_DB_URI": all["PROD_DB_URI"], + "SMTP_ADMIN_EMAIL": all["SMTP_ADMIN_EMAIL"], + "SMTP_HOST": all["SMTP_HOST"], + "SMTP_PASSWORD": all["SMTP_PASSWORD"], + "SMTP_USER": all["SMTP_USER"], + "SNOW_CLIENT_ID": all["SNOW_CLIENT_ID"], + "SNOW_CLIENT_SECRET": all["SNOW_CLIENT_SECRET"], + "SNOW_INSTANCE_NAME": all["SNOW_INSTANCE_NAME"], + "SNOW_PASSWORD": all["SNOW_PASSWORD"], + "SNOW_USERNAME": all["SNOW_USERNAME"], + "VERSION": all["VERSION"], + } + else: + app_config = AppConfig.query.first() + if app_config.settings_initialized: + current_settings = { + "JENKINS_ENABLED": app_config.JENKINS_ENABLED, + "SNOW_ENABLED": app_config.SNOW_ENABLED, + "APP_EXT_URL": app_config.APP_EXT_URL, + "AUTH_TYPE": app_config.AUTH_TYPE, + "AZAD_AUTHORITY": app_config.AZAD_AUTHORITY, + "AZAD_CLIENT_ID": app_config.AZAD_CLIENT_ID, + "AZAD_CLIENT_SECRET": app_config.AZAD_CLIENT_SECRET, + "AZURE_KEYVAULT_NAME": app_config.AZURE_KEYVAULT_NAME, + "ENV": app_config.ENV, + "INSECURE_OAUTH": app_config.INSECURE_OAUTH, + "JENKINS_HOST": app_config.JENKINS_HOST, + "JENKINS_KEY": app_config.JENKINS_KEY, + "JENKINS_PROJECT": app_config.JENKINS_PROJECT, + "JENKINS_STAGING_PROJECT": app_config.JENKINS_STAGING_PROJECT, + "JENKINS_USER": app_config.JENKINS_USER, + "JENKINS_TOKEN": app_config.JENKINS_TOKEN, + "LDAP_BASE_DN": app_config.LDAP_BASE_DN, + "LDAP_BIND_USER_DN": app_config.LDAP_BIND_USER_DN, + "LDAP_BIND_USER_PASSWORD": app_config.LDAP_BIND_USER_PASSWORD, + "LDAP_GROUP_DN": app_config.LDAP_GROUP_DN, + "LDAP_HOST": app_config.LDAP_HOST, + "LDAP_PORT": app_config.LDAP_PORT, + "LDAP_USER_DN": app_config.LDAP_USER_DN, + "LDAP_USER_LOGIN_ATTR": app_config.LDAP_USER_LOGIN_ATTR, + "LDAP_USER_RDN_ATTR": app_config.LDAP_USER_RDN_ATTR, + "PROD_DB_URI": app_config.PROD_DB_URI, + "SMTP_ADMIN_EMAIL": app_config.SMTP_ADMIN_EMAIL, + "SMTP_HOST": app_config.SMTP_HOST, + "SMTP_USER": app_config.SMTP_USER, + "SMTP_PASSWORD": app_config.SMTP_PASSWORD, + "SNOW_CLIENT_ID": app_config.SNOW_CLIENT_ID, + "SNOW_CLIENT_SECRET": app_config.SNOW_CLIENT_SECRET, + "SNOW_INSTANCE_NAME": app_config.SNOW_INSTANCE_NAME, + "SNOW_USERNAME": app_config.SNOW_USERNAME, + "SNOW_PASSWORD": app_config.SNOW_PASSWORD, + "VERSION": app_config.VERSION, + } + else: + current_settings = { + "JENKINS_ENABLED": JENKINS_ENABLED, + "SNOW_ENABLED": SNOW_ENABLED, + "APP_EXT_URL": APP_EXT_URL, + "AUTH_TYPE": AUTH_TYPE, + "AZAD_AUTHORITY":AZAD_AUTHORITY, + "AZAD_CLIENT_ID": AZAD_CLIENT_ID, + "AZAD_CLIENT_SECRET": AZAD_CLIENT_SECRET, + "AZURE_KEYVAULT_NAME": AZURE_KEYVAULT_NAME, + "ENV": ENV, + "INSECURE_OAUTH": INSECURE_OAUTH, + "JENKINS_HOST": JENKINS_HOST, + "JENKINS_KEY": JENKINS_KEY, + "JENKINS_PROJECT": JENKINS_PROJECT, + "JENKINS_STAGING_PROJECT": JENKINS_STAGING_PROJECT, + "JENKINS_USER": JENKINS_USER, + "JENKINS_TOKEN": JENKINS_TOKEN, + "LDAP_BASE_DN": LDAP_BASE_DN, + "LDAP_BIND_USER_DN": LDAP_BIND_USER_DN, + "LDAP_BIND_USER_PASSWORD": LDAP_BIND_USER_PASSWORD, + "LDAP_GROUP_DN": LDAP_GROUP_DN, + "LDAP_HOST": LDAP_HOST, + "LDAP_PORT": LDAP_PORT, + "LDAP_USER_DN": LDAP_USER_DN, + "LDAP_USER_LOGIN_ATTR": LDAP_USER_LOGIN_ATTR, + "LDAP_USER_RDN_ATTR": LDAP_USER_RDN_ATTR, + "PROD_DB_URI": PROD_DB_URI, + "SMTP_ADMIN_EMAIL": SMTP_ADMIN_EMAIL, + "SMTP_HOST": SMTP_HOST, + "SMTP_USER": SMTP_USER, + "SMTP_PASSWORD": SMTP_PASSWORD, + "SNOW_CLIENT_ID": SNOW_CLIENT_ID, + "SNOW_CLIENT_SECRET": SNOW_CLIENT_SECRET, + "SNOW_INSTANCE_NAME": SNOW_INSTANCE_NAME, + "SNOW_USERNAME": SNOW_USERNAME, + "SNOW_PASSWORD": SNOW_PASSWORD, + "VERSION": VERSION, + } + cat_general = [ + 'APP_EXT_URL', + 'AUTH_TYPE', + 'ENV', + 'INSECURE_OAUTH', + 'PROD_DB_URI', + 'VERSION', + 'AZURE_KEYVAULT_NAME' + ] + cat_azad = [ + 'AZAD_AUTHORITY', + 'AZAD_CLIENT_ID', + 'AZAD_CLIENT_SECRET' + ] + cat_jenkins = [ + 'JENKINS_ENABLED', + 'JENKINS_HOST', + 'JENKINS_KEY', + 'JENKINS_PROJECT', + 'JENKINS_STAGING_PROJECT', + 'JENKINS_TOKEN', + 'JENKINS_USER' + ] + cat_ldap = [ + 'LDAP_BASE_DN', + 'LDAP_BIND_USER_DN', + 'LDAP_BIND_USER_PASSWORD', + 'LDAP_GROUP_DN', + 'LDAP_HOST', + 'LDAP_PORT', + 'LDAP_USER_DN', + 'LDAP_USER_LOGIN_ATTR', + 'LDAP_USER_RDN_ATTR' + ] + smtp_settings = [ + 'SMTP_ADMIN_EMAIL', + 'SMTP_HOST', + 'SMTP_PASSWORD', + 'SMTP_USER' + ] + snow_settings = [ + 'SNOW_ENABLED', + 'SNOW_CLIENT_ID', + 'SNOW_CLIENT_SECRET', + 'SNOW_INSTANCE_NAME', + 'SNOW_PASSWORD', + 'SNOW_USERNAME' + ] return render_template('admin/settings.html', user_roles=user_roles, NAV=NAV, - user=user, settings=current_settings) + user=user, settings=current_settings, cat_general=cat_general, + cat_azad=cat_azad, cat_jenkins=cat_jenkins, cat_ldap=cat_ldap, + smtp_settings=smtp_settings, snow_settings=snow_settings) + +def set_env_variables(form): + os.environ['APP_EXT_URL'] = form["APP_EXT_URL"] + os.environ['AUTH_TYPE'] = form["AUTH_TYPE"] + os.environ['AZAD_AUTHORITY'] = form["AZAD_AUTHORITY"] + os.environ['AZAD_CLIENT_ID'] = form["AZAD_CLIENT_ID"] + os.environ['AZAD_CLIENT_SECRET'] = form["AZAD_CLIENT_SECRET"] + os.environ['AZURE_KEYVAULT_NAME'] = form["AZURE_KEYVAULT_NAME"] + os.environ['ENV'] = form["ENV"] + os.environ['INSECURE_OAUTH'] = form["INSECURE_OAUTH"] + os.environ['JENKINS_ENABLED'] = form["JENKINS_ENABLED"] + os.environ['JENKINS_HOST'] = form["JENKINS_HOST"] + os.environ['JENKINS_KEY'] = form["JENKINS_KEY"] + os.environ['JENKINS_PROJECT'] = form["JENKINS_PROJECT"] + os.environ['JENKINS_STAGING_PROJECT'] = form["JENKINS_STAGING_PROJECT"] + os.environ['JENKINS_TOKEN'] = form["JENKINS_TOKEN"] + os.environ['JENKINS_USER'] = form["JENKINS_USER"] + os.environ['LDAP_BASE_DN'] = form["LDAP_BASE_DN"] + os.environ['LDAP_BIND_USER_DN'] = form["LDAP_BIND_USER_DN"] + os.environ['LDAP_BIND_USER_PASSWORD'] = form["LDAP_BIND_USER_PASSWORD"] + os.environ['LDAP_GROUP_DN'] = form["LDAP_GROUP_DN"] + os.environ['LDAP_HOST'] = form["LDAP_HOST"] + os.environ['LDAP_PORT'] = form["LDAP_PORT"] + os.environ['LDAP_USER_DN'] = form["LDAP_USER_DN"] + os.environ['LDAP_USER_LOGIN_ATTR'] = form["LDAP_USER_LOGIN_ATTR"] + os.environ['LDAP_USER_RDN_ATTR'] = form["LDAP_USER_RDN_ATTR"] + os.environ['PROD_DB_URI'] = form["PROD_DB_URI"] + os.environ['SMTP_ADMIN_EMAIL'] = form["SMTP_ADMIN_EMAIL"] + os.environ['SMTP_HOST'] = form["SMTP_HOST"] + os.environ['SMTP_PASSWORD'] = form["SMTP_PASSWORD"] + os.environ['SMTP_USER'] = form["SMTP_USER"] + os.environ['SNOW_ENABLED'] = form["SNOW_ENABLED"] + os.environ['SNOW_CLIENT_ID'] = form["SNOW_CLIENT_ID"] + os.environ['SNOW_CLIENT_SECRET'] = form["SNOW_CLIENT_SECRET"] + os.environ['SNOW_INSTANCE_NAME'] = form["SNOW_INSTANCE_NAME"] + os.environ['SNOW_PASSWORD'] = form["SNOW_PASSWORD"] + os.environ['SNOW_USERNAME'] = form["SNOW_USERNAME"] + os.environ['VERSION'] = form["VERSION"] + @admin.route('/dangerous/delete_all', methods=['POST']) def delete_all_data(): diff --git a/src/vr/db_models/setup.py b/src/vr/db_models/setup.py index 67adfc3b..b36fdc22 100644 --- a/src/vr/db_models/setup.py +++ b/src/vr/db_models/setup.py @@ -117,6 +117,43 @@ class AppConfig(db.Model): __table_args__ = {'extend_existing': True} id = db.Column(db.Integer, primary_key=True) first_access = db.Column(db.Boolean, nullable=False, default=True) + settings_initialized = db.Column(db.Boolean, nullable=False, default=False) + APP_EXT_URL = db.Column(db.String(200)) + AUTH_TYPE = db.Column(db.String(200)) + AZAD_AUTHORITY = db.Column(db.String(200)) + AZAD_CLIENT_ID = db.Column(db.String(200)) + AZAD_CLIENT_SECRET = db.Column(db.String(200)) + AZURE_KEYVAULT_NAME = db.Column(db.String(200)) + ENV = db.Column(db.String(200)) + INSECURE_OAUTH = db.Column(db.String(200)) + JENKINS_HOST = db.Column(db.String(200)) + JENKINS_KEY = db.Column(db.String(200)) + JENKINS_PROJECT = db.Column(db.String(200)) + JENKINS_STAGING_PROJECT = db.Column(db.String(200)) + JENKINS_TOKEN = db.Column(db.String(200)) + JENKINS_USER = db.Column(db.String(200)) + LDAP_BASE_DN = db.Column(db.String(200)) + LDAP_BIND_USER_DN = db.Column(db.String(200)) + LDAP_BIND_USER_PASSWORD = db.Column(db.String(200)) + LDAP_GROUP_DN = db.Column(db.String(200)) + LDAP_HOST = db.Column(db.String(200)) + LDAP_PORT = db.Column(db.String(200)) + LDAP_USER_DN = db.Column(db.String(200)) + LDAP_USER_LOGIN_ATTR = db.Column(db.String(200)) + LDAP_USER_RDN_ATTR = db.Column(db.String(200)) + PROD_DB_URI = db.Column(db.String(200)) + SMTP_ADMIN_EMAIL = db.Column(db.String(200)) + SMTP_HOST = db.Column(db.String(200)) + SMTP_PASSWORD = db.Column(db.String(200)) + SMTP_USER = db.Column(db.String(200)) + SNOW_CLIENT_ID = db.Column(db.String(200)) + SNOW_CLIENT_SECRET = db.Column(db.String(200)) + SNOW_INSTANCE_NAME = db.Column(db.String(200)) + SNOW_PASSWORD = db.Column(db.String(200)) + SNOW_USERNAME = db.Column(db.String(200)) + VERSION = db.Column(db.String(200)) + JENKINS_ENABLED = db.Column(db.String(200)) + SNOW_ENABLED = db.Column(db.String(200)) AppConfig() diff --git a/src/vr/templates/admin/settings.html b/src/vr/templates/admin/settings.html index 06a4bee5..a7564e1a 100644 --- a/src/vr/templates/admin/settings.html +++ b/src/vr/templates/admin/settings.html @@ -113,13 +113,135 @@