/// <summary> /// Método privado para processamento do método 'user.resetpassword' /// </summary> /// <param name="sqlConnection">Conexão com o banco de dados MS-SQL</param> /// <param name="parameters">Dicionário (String, Object) contendo todos os parâmetros necessários</param> private Boolean delete(IAMDatabase database, Dictionary <String, Object> parameters) { if (!parameters.ContainsKey("workflowid")) { Error(ErrorType.InvalidRequest, "Parameter workflowid is not defined.", "", null); return(false); } String plugin = parameters["workflowid"].ToString(); if (String.IsNullOrWhiteSpace(plugin)) { Error(ErrorType.InvalidRequest, "Parameter workflowid is not defined.", "", null); return(false); } Int64 workflowid = 0; try { workflowid = Int64.Parse(plugin); } catch { Error(ErrorType.InvalidRequest, "Parameter workflowid is not a long integer.", "", null); return(false); } DbParameterCollection par = new DbParameterCollection(); par.Add("@enterprise_id", typeof(Int64)).Value = this._enterpriseId; par.Add("@plugin_id", typeof(Int64)).Value = workflowid; DataTable dtPlugin = database.ExecuteDataTable("select p.*, resource_plugin_qty = (select COUNT(distinct rp1.plugin_id) from resource_plugin rp1 where rp1.plugin_id = p.id) from plugin p with(nolock) where p.enterprise_id = @enterprise_id and p.id = @plugin_id", CommandType.Text, par, null); if (dtPlugin == null) { Error(ErrorType.InternalError, "", "", null); return(false); } if (dtPlugin.Rows.Count == 0) { Error(ErrorType.InvalidRequest, "Plugin not found.", "", null); return(false); } //Verifica se está sendo usado if ((Int32)dtPlugin.Rows[0]["resource_plugin_qty"] > 0) { Error(ErrorType.SystemError, "Plugin is being used and can not be deleted.", "", null); return(false); } //Localiza o arquivo físico FileInfo assemblyFile = null; try { DirectoryInfo pluginsDir = null; pluginsDir = new DirectoryInfo(database.GetDBConfig("pluginFolder")); if (pluginsDir.Exists) { assemblyFile = new FileInfo(Path.Combine(pluginsDir.FullName, dtPlugin.Rows[0]["assembly"].ToString())); } } catch { assemblyFile = null; } if ((assemblyFile == null) || (!assemblyFile.Exists)) { Error(ErrorType.SystemError, "Plugin physical file not found.", "", null); return(false); } SqlTransaction trans = (SqlTransaction)database.BeginTransaction(); try { database.ExecuteNonQuery("delete from plugin where id = @plugin_id", CommandType.Text, par, trans); database.AddUserLog(LogKey.Plugin_Deleted, null, "API", UserLogLevel.Info, 0, this._enterpriseId, 0, 0, 0, 0, 0, "Plugin " + dtPlugin.Rows[0]["name"] + " deleted", "", trans); assemblyFile.Delete(); trans.Commit(); } catch { trans.Rollback(); Error(ErrorType.SystemError, "Fail on delete physical file", "", null); return(false); } return(true); }
/// <summary> /// Método privado para processamento do método 'user.resetpassword' /// </summary> /// <param name="sqlConnection">Conexão com o banco de dados MS-SQL</param> /// <param name="parameters">Dicionário (String, Object) contendo todos os parâmetros necessários</param> private Dictionary <String, Object> get(IAMDatabase database, Dictionary <String, Object> parameters) { Dictionary <String, Object> result = new Dictionary <String, Object>(); if (!parameters.ContainsKey("pluginid")) { Error(ErrorType.InvalidRequest, "Parameter pluginid is not defined.", "", null); return(null); } String plugin = parameters["pluginid"].ToString(); if (String.IsNullOrWhiteSpace(plugin)) { Error(ErrorType.InvalidRequest, "Parameter pluginid is not defined.", "", null); return(null); } Int64 pluginid = 0; try { pluginid = Int64.Parse(plugin); } catch { Error(ErrorType.InvalidRequest, "Parameter pluginid is not a long integer.", "", null); return(null); } DbParameterCollection par = new DbParameterCollection(); par.Add("@enterprise_id", typeof(Int64)).Value = this._enterpriseId; par.Add("@plugin_id", typeof(Int64)).Value = pluginid; DataTable dtPlugin = database.ExecuteDataTable("select p.*, resource_plugin_qty = (select COUNT(distinct rp1.plugin_id) from resource_plugin rp1 where rp1.plugin_id = p.id) from plugin p with(nolock) where (p.enterprise_id = @enterprise_id or p.enterprise_id = 0) and p.id = @plugin_id", CommandType.Text, par, null); if (dtPlugin == null) { Error(ErrorType.InternalError, "", "", null); return(null); } if (dtPlugin.Rows.Count == 0) { Error(ErrorType.InvalidRequest, "Plugin not found.", "", null); return(null); } DataRow dr1 = dtPlugin.Rows[0]; Dictionary <string, object> newItem = new Dictionary <string, object>(); newItem.Add("enterprise_id", dr1["enterprise_id"]); newItem.Add("plugin_id", dr1["id"]); newItem.Add("name", dr1["name"]); newItem.Add("scheme", dr1["scheme"]); newItem.Add("uri", dr1["uri"]); newItem.Add("assembly", dr1["assembly"]); newItem.Add("resource_plugin_qty", dr1["resource_plugin_qty"]); newItem.Add("create_date", (dr1["create_date"] != DBNull.Value ? (Int32)((((DateTime)dr1["create_date"]) - new DateTime(1970, 1, 1)).TotalSeconds) : 0)); result.Add("info", newItem); if (parameters.ContainsKey("parameters") && (parameters["parameters"] is Boolean) && ((Boolean)parameters["parameters"])) { FileInfo assemblyFile = null; try { assemblyFile = new FileInfo(Path.Combine(database.GetDBConfig("pluginFolder"), dr1["assembly"].ToString())); } catch { assemblyFile = null; } if ((assemblyFile == null) || (!assemblyFile.Exists)) { Error(ErrorType.InternalError, "Plugin assembly file not found", "", null); return(null); } try { PluginBase selectedPlugin = null; Byte[] rawAssembly = File.ReadAllBytes(assemblyFile.FullName); List <PluginBase> p1 = Plugins.GetPlugins <PluginBase>(rawAssembly); Array.Clear(rawAssembly, 0, rawAssembly.Length); rawAssembly = null; foreach (PluginBase p in p1) { if (p.GetPluginId().AbsoluteUri.ToLower() == dr1["uri"].ToString().ToLower()) { selectedPlugin = p; } } if (selectedPlugin == null) { Error(ErrorType.InternalError, "Plugin uri '" + dr1["uri"] + "' not found in assembly '" + dr1["assembly"] + "'", "", null); return(null); } List <Dictionary <string, object> > pars = new List <Dictionary <string, object> >(); foreach (PluginConfigFields f in selectedPlugin.GetConfigFields()) { Dictionary <string, object> newPar = new Dictionary <string, object>(); newPar.Add("name", f.Name); newPar.Add("key", f.Key); newPar.Add("description", f.Description); newPar.Add("default_value", f.DefaultValue); newPar.Add("type", f.Type.ToString().ToLower()); newPar.Add("import_required", f.ImportRequired); newPar.Add("deploy_required", f.DeployRequired); newPar.Add("list_value", f.ListValue); pars.Add(newPar); } result.Add("parameters", pars); if (selectedPlugin is PluginConnectorBase) { List <Dictionary <string, object> > actions = new List <Dictionary <string, object> >(); foreach (PluginConnectorConfigActions af in ((PluginConnectorBase)selectedPlugin).GetConfigActions()) { Dictionary <string, object> newAction = new Dictionary <string, object>(); newAction.Add("name", af.Name); newAction.Add("key", af.Key); newAction.Add("description", af.Description); newAction.Add("field_name", af.Field.Name); newAction.Add("field_key", af.Field.Key); newAction.Add("field_description", af.Field.Description); newAction.Add("macros", af.Macro); actions.Add(newAction); } result.Add("actions", actions); } } catch (Exception ex) { Error(ErrorType.InternalError, "Erro on load assembly '" + dr1["assembly"] + "'", ex.Message, null); return(null); } } return(result); }