Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }