Exemplo n.º 1
0
        public ApiResponse IsOrmInstalled([FromRoute] string name, [FromQuery] string projectName, [FromQuery] string dbSourceName, [FromQuery] bool forceRecheck)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(projectName, dbSourceName, out var proj, out var dbSource, out var resp))
                {
                    return(resp);
                }

                if (!dbSource.GetEndpoint(name, out var endpoint, out var resp2))
                {
                    return(ApiResponse.ExclamationModal(resp2.userErrorVal));
                }

                if (!forceRecheck && endpoint.IsOrmInstalled)
                {
                    return(ApiResponse.Payload(null));
                }

                var missingDeps = endpoint.CheckForMissingOrmPreRequisitesOnDatabase();

                endpoint.IsOrmInstalled = missingDeps == null;

                SettingsInstance.SaveSettingsToFile();

                return(ApiResponse.Payload(missingDeps));
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 2
0
        public ApiResponse UninstallOrm([FromRoute] string name, [FromQuery] string projectName, [FromQuery] string dbSourceName)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(projectName, dbSourceName, out var proj, out var dbSource, out var resp))
                {
                    return(resp);
                }

                if (!dbSource.GetEndpoint(name, out var endpoint, out var resp2))
                {
                    return(ApiResponse.ExclamationModal(resp2.userErrorVal));
                }

                var success = endpoint.UnInstallOrm();

                if (success)
                {
                    endpoint.IsOrmInstalled = false;
                    SettingsInstance.SaveSettingsToFile();

                    return(ApiResponse.Success());
                }
                else
                {
                    return(ApiResponse.ExclamationModal("Failed to uninstall ORM"));
                }
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 3
0
        public ApiResponse AddJsFile([FromQuery] string project, [FromRoute] string name, [FromQuery] string jsFileName) // TODO: Change from jsFilename to jsFileGuid?
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, name, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                var ret = app.AddJsFile(jsFileName);

                if (ret.IsSuccess)
                {
                    SettingsInstance.SaveSettingsToFile();
                    //?!GeneratorThreadDispatcher.SetOutputFilesDirty(cs);
                    return(ApiResponse.Success());
                }
                else
                {
                    return(ApiResponse.ExclamationModal(ret.userErrorVal));
                }
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 4
0
        public ApiResponse AddUpdateConnection([FromRoute] string endpoint, [FromQuery] string projectName, [FromQuery] string dbSourceName,
                                               [FromBody] Newtonsoft.Json.Linq.JObject json
                                               )
        {
            try
            {
                bool   isMetadata         = (bool)json["isMetadata"].ToObject(typeof(bool));
                string dataSource         = json["dataSource"].ToString();
                string catalog            = json["catalog"].ToString();
                string username           = json["username"].ToString();
                string password           = json["password"].ToString();
                int?   port               = json["port"].ToObject(typeof(int?)) as int?;
                bool   integratedSecurity = json["authType"].ToString() == "100";

                if (integratedSecurity)
                {
                    username = password = null;
                }

                if (!port.HasValue)
                {
                    port = 1433;
                }

                if (!ControllerHelper.GetProjectAndApp(projectName, dbSourceName, out var proj, out var dbSource, out var resp))
                {
                    return(resp);
                }

                if (!dbSource.GetEndpoint(endpoint, out var ep, out var resp2))
                {
                    return(ApiResponse.ExclamationModal(resp2.userErrorVal));
                }

                CommonReturnValueWithApplication ret = null;

                if (isMetadata)
                {
                    ret = ep.UpdateMetadataConnection(dataSource, catalog, username, password, port.Value);
                }
                else
                {
                    ret = ep.UpdateExecConnection(dataSource, catalog, username, password, port.Value);
                }

                if (!ret.IsSuccess)
                {
                    return(ApiResponse.ExclamationModal(ret.userErrorVal));
                }

                WorkSpawner.RestartWorker(ep);
                SettingsInstance.SaveSettingsToFile();

                return(ApiResponse.Success());
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 5
0
        public ApiResponse Post([FromRoute] string name, [FromQuery] string project, [FromQuery] string dbSourceName)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, dbSourceName, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                var ret = app.AddEndpoint(name);

                if (ret.IsSuccess)
                {
                    app.GetEndpoint(name, out var endpoint, out var _);
                    WorkSpawner.CreateNewWorker(endpoint);
                    SettingsInstance.SaveSettingsToFile();
                    return(ApiResponse.Success());
                }
                else
                {
                    return(ApiResponse.ExclamationModal(ret.userErrorVal));
                }
            }
            catch (Exception e)
            {
                return(ApiResponse.Exception(e));
            }
        }
Exemplo n.º 6
0
        public ApiResponse ClearCache([FromRoute] string endpoint, [FromQuery] string projectName, [FromQuery] string dbSource)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(projectName, dbSource, out var proj, out var dbs, out var resp))
                {
                    return(resp);
                }

                if (!dbs.GetEndpoint(endpoint, out var ep, out var resp2))
                {
                    return(ApiResponse.ExclamationModal(resp2.userErrorVal));
                }


                if (ep.ClearCache())
                {
                    SettingsInstance.SaveSettingsToFile();

                    return(ApiResponse.Success());
                }
                else
                {
                    return(ApiResponse.ExclamationModal("Failed to clear cache. Check session log for errors."));
                }
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 7
0
        public ApiResponse CreateRule([FromQuery] string project, [FromQuery(Name = "app")] string appName, [FromQuery] string file, [FromBody] Newtonsoft.Json.Linq.JObject json)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, appName, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                var    type  = (RuleType)int.Parse(json["Type"].ToString());
                string value = json["Value"].ToString();


                if (file == null)
                { // DB-level
                    var ret = app.AddRule(type, value);

                    if (ret.IsSuccess)
                    {
                        SettingsInstance.SaveSettingsToFile();

                        WorkSpawner.SetRulesDirty(app);

                        return(ApiResponse.Success());
                    }
                    else
                    {
                        return(ApiResponse.ExclamationModal(ret.userErrorVal));
                    }
                }
                else
                {
                    var jsFile = app.GetJsFile(file);

                    if (jsFile == null)
                    {
                        return(ApiResponse.ExclamationModal("The specified output file was not found."));
                    }

                    var ret = jsFile.AddRule(type, value);

                    if (ret.IsSuccess)
                    {
                        SettingsInstance.SaveSettingsToFile();

                        WorkSpawner.SetRulesDirty(app, jsFile);

                        return(ApiResponse.Success());
                    }
                    else
                    {
                        return(ApiResponse.ExclamationModal(ret.userErrorVal));
                    }
                }
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 8
0
        public ApiResponse UpdateApplication([FromBody] string name, [FromQuery] string oldName,
                                             [FromQuery] string project, [FromQuery] string jsNamespace, [FromQuery] int?defaultRuleMode)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, oldName, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                var anotherExisting = proj.GetApplication(name);

                if (anotherExisting != null)
                {
                    return(ApiResponse.ExclamationModal($"The application \"{ name }\" already exists on project \" { project }\"."));
                }

                var ret = app.Update(name, jsNamespace, defaultRuleMode);

                if (!ret.IsSuccess)
                {
                    return(ApiResponse.ExclamationModal(ret.userErrorVal));
                }

                Hubs.WorkerMonitor.Instance.NotifyObservers();

                SettingsInstance.SaveSettingsToFile();

                return(ApiResponse.Success());
            }
            catch (Exception e)
            {
                return(ApiResponse.Exception(e));
            }
        }
Exemplo n.º 9
0
        public ApiResponse SavePluginConfig([FromQuery] string project, [FromRoute] string name, [FromBody] List <dynamic> pluginList)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, name, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                var ret = app.UpdatePluginList(pluginList);

                if (ret.IsSuccess)
                {
                    SettingsInstance.SaveSettingsToFile();
                    return(ApiResponse.Success());
                }
                else
                {
                    return(ApiResponse.ExclamationModal(ret.userErrorVal));
                }
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 10
0
        public ApiResponse DeleteEndpoint([FromRoute] string name, [FromQuery] string project, [FromQuery] string dbSourceName)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, dbSourceName, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                if (!app.GetEndpoint(name, out var endpoint, out var resp2))
                {
                    return(ApiResponse.ExclamationModal($"The endpoint '{name}' not found."));
                }
                var ret = app.DeleteEndpoint(name);

                if (ret.IsSuccess)
                {
                    WorkSpawner.RemoveEndpoint(endpoint);
                    SettingsInstance.SaveSettingsToFile();
                    return(ApiResponse.Success());
                }
                else
                {
                    return(ApiResponse.ExclamationModal(ret.userErrorVal));
                }
            }
            catch (Exception e)
            {
                return(ApiResponse.Exception(e));
            }
        }
Exemplo n.º 11
0
        public ApiResponse DeleteJsFile([FromQuery] string project, [FromRoute] string name, [FromRoute] string file)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, name, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                var existing = app.GetJsFile(file);

                if (existing == null)
                {
                    return(ApiResponse.ExclamationModal($"The output file \"{file}\" does not exist in \"{project}/{name}\""));
                }

                app.JsFiles.Remove(existing);

                SettingsInstance.SaveSettingsToFile();

                //!GeneratorThreadDispatcher.SetOutputFilesDirty(cs);

                return(ApiResponse.Success());
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 12
0
        } // Run

        private async Task ProcessAsync(SqlConnection con, string connectionString)
        {
            var changesCount = await OrmDAL.GetRoutineListCntAsync(con, this.MaxRowDate);

            if (changesCount > 0)
            {
                last0Cnt = null;

                // commented out changes line, happens too frequently with just 1 change
                //this.log.Info($"{ changesCount } change(s) found using row date { this.MaxRowDate }");
                this.Status = $"{ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} - { changesCount } change(s) found using rowdate { this.MaxRowDate}";

                var changesList = await GetAndProcessRoutineChangesAsync(con, connectionString, changesCount);

                if (changesList?.Count > 0)
                {
                    // call save for final changes
                    await this.Endpoint.SaveCacheAsync();

                    this.GenerateOutputFiles(this.Endpoint, changesList);
                    // save "settings" to persist JsFile version changes
                    SettingsInstance.SaveSettingsToFile();
                }
            }// if changeCount > 0
            else
            {
                if (last0Cnt == null)
                {
                    last0Cnt = DateTime.Now;
                }

                // only update status if we've been receiving 0 changes for a while
                if (DateTime.Now.Subtract(last0Cnt.Value).TotalSeconds > 30)
                {
                    last0Cnt    = DateTime.Now;
                    this.Status = $"{ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} - no changes found";
                }

                // handle the case where the output files no longer exist but we have also not seen any changes on the DB again
                // TODO: !!!
                // dbSource.JsFiles.forEach(jsFile =>
                // {
                //     let path = dbSource.outputFilePath(jsFile);

                //     if (!fs.existsSync(path))
                //     {
                //         this.progress('Generating ' + jsFile.Filename);
                //         JsFileGenerator.generateJsFile(dbSource, jsFile);

                //         //!this.IsRulesDirty = false;
                //         //!this.IsOutputFilesDirty = false;
                //         dbSource.LastUpdateDate = new Date();
                //     }

                // });
            }
        } // Process
Exemplo n.º 13
0
        public ApiResponse UpdateRule([FromQuery] string project, [FromQuery(Name = "app")] string appName, [FromQuery] string file, [FromRoute] string ruleId, [FromBody] Newtonsoft.Json.Linq.JObject json)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, appName, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                var    type  = (RuleType)int.Parse(json["Type"].ToString());
                string value = json["Value"].ToString();

                CommonReturnValue ret;
                JsFile            jsFile = null;

                if (file == null)
                { // DB-level
                    ret = app.UpdateRule(ruleId, value);
                }
                else
                {
                    jsFile = app.GetJsFile(file);

                    // TODO: Move check and error message down to App api?
                    if (jsFile == null)
                    {
                        return(ApiResponse.ExclamationModal("The specified output file was not found."));
                    }

                    ret = jsFile.UpdateRule(ruleId, value);
                }

                if (ret.IsSuccess)
                {
                    SettingsInstance.SaveSettingsToFile();

                    if (jsFile == null)
                    {
                        WorkSpawner.SetRulesDirty(app);
                    }
                    else
                    {
                        WorkSpawner.SetRulesDirty(app, jsFile);
                    }

                    return(ApiResponse.Success());
                }
                else
                {
                    return(ApiResponse.ExclamationModal(ret.userErrorVal));
                }
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 14
0
        public ApiResponse DeleteRule([FromQuery] string project, [FromQuery(Name = "app")] string appName, [FromQuery] string file, [FromRoute] string ruleId)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, appName, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                if (file == null)
                { // DB level
                    var ret = app.DeleteRule(ruleId);

                    if (ret.IsSuccess)
                    {
                        WorkSpawner.SetRulesDirty(app);
                        SettingsInstance.SaveSettingsToFile();
                        return(ApiResponse.Success());
                    }
                    else
                    {
                        return(ApiResponse.ExclamationModal(ret.userErrorVal));
                    }
                }
                else
                {
                    var jsFile = app.GetJsFile(file);

                    if (jsFile == null)
                    {
                        return(ApiResponse.ExclamationModal("The specified output file was not found."));
                    }

                    var ret = jsFile.DeleteRule(ruleId);

                    if (ret.IsSuccess)
                    {
                        WorkSpawner.SetRulesDirty(app, jsFile);
                        SettingsInstance.SaveSettingsToFile();
                        return(ApiResponse.Success());
                    }
                    else
                    {
                        return(ApiResponse.ExclamationModal(ret.userErrorVal));
                    }
                }
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 15
0
        public ApiResponse Delete([FromBody] string name)
        {
            var ret = SettingsInstance.Instance.DeleteProject(name);

            if (ret.IsSuccess)
            {
                SettingsInstance.SaveSettingsToFile();
                return(ApiResponse.Success());
            }
            else
            {
                return(ApiResponse.ExclamationModal(ret.userErrorVal));
            }
        }
Exemplo n.º 16
0
        public ApiResponse UpdateProject([FromRoute] string name, [FromBody] string newName) // TODO: clean up interface...get some consistency
        {
            var ret = SettingsInstance.Instance.UpdateProject(name, newName);

            if (ret.IsSuccess)
            {
                Hubs.WorkerMonitor.Instance.NotifyObservers();
                SettingsInstance.SaveSettingsToFile();
                return(ApiResponse.Success());
            }
            else
            {
                return(ApiResponse.ExclamationModal(ret.userErrorVal));
            }
        }
Exemplo n.º 17
0
        public ApiResponse SetupSharedMetadata([FromRoute] string endpointName, [FromQuery(Name = "project")] string projectName, [FromQuery(Name = "app")] string appName, [FromQuery(Name = "srcEndpointId")] string shareFromEndpointId)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndAppAndEndpoint(projectName, appName, endpointName, out var project, out var app, out var endpoint, out var resp))
                {
                    return(resp);
                }

                var shareDependencies = Settings.SettingsInstance.Instance
                                        .ProjectList
                                        .SelectMany(p => p.Applications)
                                        .SelectMany(a => a.Endpoints)
                                        .Where(ep => ep.PullMetadataFromEndpointId?.Equals(endpoint.Id, StringComparison.Ordinal) ?? false)
                                        .Select(ep => ep.Pedigree)
                ;

                if (shareDependencies.Count() > 0)
                {
                    return(ApiResponse.ExclamationModal($"This endpoint cannot be configured with metadata sharing while other endpoints dependent on it. The following endpoint(s) share metadata from this endpoint:<p>{string.Join("<br>", shareDependencies.ToArray())}</p>"));
                }

                var srcEndpoint = Settings.SettingsInstance.Instance.ProjectList.SelectMany(p => p.Applications).SelectMany(a => a.Endpoints).FirstOrDefault(ep => ep.Id.Equals(shareFromEndpointId, StringComparison.Ordinal));


                if (srcEndpoint == null)
                {
                    return(ApiResponse.ExclamationModal($"Failed to find source endpoint with id: {shareFromEndpointId ?? "(null)"}"));
                }
                else if (srcEndpoint == endpoint)
                {
                    return(ApiResponse.ExclamationModal($"Endpoint cannot share with itself"));
                }

                endpoint.ShareMetadaFrom(srcEndpoint);
                SettingsInstance.SaveSettingsToFile();

                return(ApiResponse.Success());
            }
            catch (Exception e)
            {
                return(ApiResponse.Exception(e));
            }
        }
Exemplo n.º 18
0
        public ApiResponse ClearSharedMetadata([FromRoute] string endpointName, [FromQuery(Name = "project")] string projectName, [FromQuery(Name = "app")] string appName)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndAppAndEndpoint(projectName, appName, endpointName, out var project, out var app, out var endpoint, out var resp))
                {
                    return(resp);
                }

                endpoint.ShareMetadaFrom(null);
                SettingsInstance.SaveSettingsToFile();

                return(ApiResponse.Success());
            }
            catch (Exception e)
            {
                return(ApiResponse.Exception(e));
            }
        }
Exemplo n.º 19
0
        public ApiResponse CreateApplication([FromBody] string name, [FromQuery] string project, [FromQuery] string jsNamespace, [FromQuery] int?defaultRuleMode)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(name))
                {
                    return(ApiResponse.ExclamationModal("Please provide a valid application name."));
                }

                if (!defaultRuleMode.HasValue)
                {
                    return(ApiResponse.ExclamationModal("Please specify the default rule mode."));
                }

                if (!ControllerHelper.GetProject(project, out var proj, out var resp))
                {
                    return(resp);
                }

                var existing = proj.GetApplication(name);

                if (existing != null)
                {
                    return(ApiResponse.ExclamationModal($"The application \"{ name }\" already exists on project \" { project }\"."));
                }

                var ret = proj.AddApplication(name, jsNamespace, defaultRuleMode.Value);

                if (!ret.IsSuccess)
                {
                    return(ApiResponse.ExclamationModal(ret.userErrorVal));
                }

                SettingsInstance.SaveSettingsToFile();

                return(ApiResponse.Success());
            }
            catch (Exception e)
            {
                return(ApiResponse.Exception(e));
            }
        }
Exemplo n.º 20
0
        public ApiResponse UpdateEndpoint([FromRoute] string name, [FromBody] string newName, [FromQuery] string project, [FromQuery] string dbSourceName)
        {
            if (!ControllerHelper.GetProjectAndApp(project, dbSourceName, out var proj, out var dbSource, out var resp))
            {
                return(resp);
            }

            var ret = dbSource.UpdateEndpoint(name, newName);

            if (ret.IsSuccess)
            {
                SettingsInstance.SaveSettingsToFile();
                Hubs.WorkerMonitor.Instance.NotifyObservers();
                return(ApiResponse.Success());
            }
            else
            {
                return(ApiResponse.ExclamationModal(ret.userErrorVal));
            }
        }
Exemplo n.º 21
0
        public ApiResponse EnableDisableMetadataCapturing([FromRoute] string name, [FromQuery(Name = "project")] string projectName, [FromQuery(Name = "dbSource")] string dbSourceName, [FromQuery] bool enable)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(projectName, dbSourceName, out var proj, out var dbSource, out var resp))
                {
                    return(resp);
                }

                if (!dbSource.GetEndpoint(name, out var endpoint, out var resp2))
                {
                    return(ApiResponse.ExclamationModal(resp2.userErrorVal));
                }

                if (!enable)
                {
                    var shareDependencies = Settings.SettingsInstance.Instance
                                            .ProjectList
                                            .SelectMany(p => p.Applications)
                                            .SelectMany(a => a.Endpoints)
                                            .Where(ep => ep.PullMetadataFromEndpointId?.Equals(endpoint.Id, StringComparison.Ordinal) ?? false)
                                            .Select(ep => ep.Pedigree)
                    ;

                    if (shareDependencies.Count() > 0)
                    {
                        return(ApiResponse.ExclamationModal($"Cannot disable metadata capturing on this endpoint while other endpoints depend on it. The following endpoint(s) share metadata from this endpoint:<p>{string.Join("<br>", shareDependencies.ToArray())}</p>"));
                    }
                }

                endpoint.DisableMetadataCapturing = !enable;

                SettingsInstance.SaveSettingsToFile();

                return(ApiResponse.Success());
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 22
0
        public ApiResponse UpdateJsFile([FromQuery] string project, [FromRoute] string name, [FromQuery] string oldName, [FromQuery] string newName)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, name, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                //!if (!newName.ToLower().EndsWith(".js")) newName += ".js";

                // TODO: All validation needs to be move OM API
                var existing = app.JsFiles.FirstOrDefault(js => js.Filename.Equals(oldName, StringComparison.OrdinalIgnoreCase));

                if (existing == null)
                {
                    return(ApiResponse.ExclamationModal($"The output file \"{oldName}\" does not exist in \"{project}/{name}\""));
                }

                var existingNewName = app.JsFiles.FirstOrDefault(js => js.Filename.Equals(newName, StringComparison.OrdinalIgnoreCase));

                if (existingNewName != null)
                {
                    return(ApiResponse.ExclamationModal($"The output file \"{newName}\" already exists in \"{project}/{name}\""));
                }

                existing.Filename = newName;
                SettingsInstance.SaveSettingsToFile();

                //!GeneratorThreadDispatcher.SetOutputFilesDirty(cs);

                return(ApiResponse.Success());
            }
            catch (Exception ex)
            {
                return(ApiResponse.Exception(ex));
            }
        }
Exemplo n.º 23
0
        public ApiResponse UpdateWhitelist([FromQuery] string project, [FromRoute] string name, [FromQuery] string whitelist, [FromQuery] bool allowAllPrivate)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, name, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                app.WhitelistAllowAllPrivateIPs = allowAllPrivate;

                if (whitelist != null)
                {
                    var ar = whitelist.Split('\n').Select(w => w.Trim()).Where(w => !string.IsNullOrEmpty(w));

                    if (ar.Count() > 0)
                    {
                        app.WhitelistedDomainsCsv = string.Join(",", ar);
                    }
                    else
                    {
                        app.WhitelistedDomainsCsv = null;
                    }
                }
                else
                {
                    app.WhitelistedDomainsCsv = null;
                }

                SettingsInstance.SaveSettingsToFile();

                return(ApiResponse.Success());
            }
            catch (Exception e)
            {
                return(ApiResponse.Exception(e));
            }
        }
Exemplo n.º 24
0
        public ApiResponse DeleteApplication([FromQuery] string project, string name)
        {
            try
            {
                if (!ControllerHelper.GetProjectAndApp(project, name, out var proj, out var app, out var resp))
                {
                    return(resp);
                }

                if (proj.DeleteApplication(app))
                {
                    SettingsInstance.SaveSettingsToFile();

                    //!WorkSpawner.RemoveApplication(cs); TODO: Move to endpoint
                }

                return(ApiResponse.Success());
            }
            catch (Exception e)
            {
                return(ApiResponse.Exception(e));
            }
        }
Exemplo n.º 25
0
        public BackgroundWorker InstallOrm()
        {
            var missing = CheckForMissingOrmPreRequisitesOnDatabase();

            if (string.IsNullOrEmpty(missing))
            {
                return(null);
            }

            var sqlScriptPath    = Path.GetFullPath("./resources/install-orm.sql");
            var installSqlScript = File.ReadAllText(sqlScriptPath, System.Text.Encoding.UTF8);

            //https://stackoverflow.com/a/18597052
            var statements = Regex.Split(installSqlScript, @"^[\s]*GO[\s]*\d*[\s]*(?:--.*)?$", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);

            var statementsToExec = statements.Where(x => !string.IsNullOrWhiteSpace(x)).Select(x => x.Trim(' ', '\r', '\n'));

            using (var con = new SqlConnection())
            {
                con.ConnectionString = this.MetadataConnection.ConnectionStringDecrypted;
                con.Open();

                var trans = con.BeginTransaction();

                try
                {
                    foreach (var st in statementsToExec)
                    {
                        var cmd = new SqlCommand();

                        cmd.Connection     = con;
                        cmd.Transaction    = trans;
                        cmd.CommandType    = System.Data.CommandType.Text;
                        cmd.CommandText    = st;
                        cmd.CommandTimeout = 80;

                        cmd.ExecuteNonQuery();
                    }

                    trans.Commit();
                }
                catch (Exception ex)
                {
                    if (trans != null)
                    {
                        trans.Rollback();
                    }
                    SessionLog.Exception(ex);
                }

                con.Close();

                BackgroundWorker backgroundWorker = null;

                backgroundWorker = BackgroundTask.Queue($"{GetBgTaskKey()}.ORM_INIT", $"{Application.Project.Name}/{Application.Name}/{this.Name} ORM initilisation", () =>
                {
                    // try
                    // {
                    using (var conInit = new SqlConnection())
                    {
                        con.FireInfoMessageEventOnUserErrors = true;
                        conInit.ConnectionString             = this.MetadataConnection.ConnectionStringDecrypted;
                        conInit.Open();

                        var cmdInit = new SqlCommand();

                        cmdInit.Connection     = conInit;
                        cmdInit.CommandText    = "ormv2.Init";
                        cmdInit.CommandTimeout = 600;

                        conInit.InfoMessage += (sender, e) =>
                        {
                            if (!backgroundWorker.IsDone && double.TryParse(e.Message, out var p))
                            {
                                backgroundWorker.Progress = p;
                                Hubs.BackgroundTaskMonitor.Instance.NotifyOfChange(backgroundWorker);
                            }
                        };

                        cmdInit.ExecuteScalar();


                        WorkSpawner.HandleOrmInstalled(this);
                        SettingsInstance.SaveSettingsToFile();

                        return(true);
                    }
                    // }
                    // catch (Exception ex)
                    // {
                    //     return ex;
                    //     //return ex;
                    // }
                });

                return(backgroundWorker);
            }
        }