Esempio n. 1
0
        /// <summary>
        /// Adds an item to the cache
        /// </summary>
        /// <param name="Direction">Direction to ignore traffic from/to</param>
        /// <param name="ItemPath">Item path</param>
        private static int AddCacheItem(string Direction, IEnumerable <string> ItemPath)
        {
            var Cached = new List <RangeEntry>(Cache.SelectedRanges);

            if (Direction != null)
            {
                if (ItemPath != null)
                {
                    var FullName = ItemPath.ToArray();
                    if (Cache.ValidEntry(FullName))
                    {
                        var R = new RangeEntry();
                        R.Segments = FullName;
                        if (Enum.TryParse(Direction, true, out R.Direction))
                        {
                            if (Cached.Any(m => m.Segments.SequenceEqual(FullName)))
                            {
                                //Update range
                                Cached = new List <RangeEntry>(Cached
                                                               .Where(m => m.Segments.SequenceEqual(FullName))
                                                               .Concat(new RangeEntry[] { R }));
                                Log("Updated Range: {0}", string.Join(" --> ", FullName));
                            }
                            else
                            {
                                //Add range
                                Cached.Add(R);
                                Log("Added Range: {0}", string.Join(" --> ", FullName));
                            }
                        }
                        else
                        {
                            Log("Invalid Direction: '{0}'", Direction);
                            return(ERR.ARGS);
                        }
                    }
                    else
                    {
                        Log("Name {0} is not a valid Range. Use /list to view all", string.Join(" --> ", FullName));
                        return(ERR.ARGS);
                    }
                }
                else
                {
                    Log("No range specified to ignore");
                    return(ERR.ARGS);
                }
            }
            else
            {
                Log("No direction specified. Please specify a direction.");
                return(ERR.ARGS);
            }
            Cache.SelectedRanges = Cached.ToArray();
            return(ERR.SUCCESS);
        }
Esempio n. 2
0
 public IEnumerable <UserLockouts> GetPage(int page)
 {
     if (!IsInnitalized)
     {
         throw new InvalidOperationException("call RefreshData() first!");
     }
     if (page > LastPage && !IsInnitalized)
     {
         throw new InvalidOperationException("invalid page");
     }
     if (Cached.ContainsKey(page))
     {
         var collection = Cached[page];
         return(collection);
     }
     else
     {
         var list = new List <UserLockouts>();
         _adapter.BeginDBAccess();
         if (IsDataFiltered)
         {
             if (string.IsNullOrEmpty(FilterString) || FilterParam == null)
             {
                 throw new InvalidOperationException("filter is not set");
             }
             var collection = _adapter.GetData(FilterString, FilterParam,
                                               (page - 1) * _adapter.RecordPerPage, _adapter.RecordPerPage, out int total);
             //bc of lazy or smt if we dont clone the UserLockouts when endDB is called our UserLockouts will be lost
             foreach (var item in collection)
             {
                 list.Add(item.Clone());
             }
             Cached.Add(page, list);
             RecordCount = total;
             LastPage    = Helper.HelperClass.CalculatePage(RecordCount, _adapter.RecordPerPage);
         }
         else
         {
             var collection = _adapter.GetData((page - 1) * _adapter.RecordPerPage, _adapter.RecordPerPage, out int total);
             foreach (var item in collection)
             {
                 list.Add(item.Clone());
             }
             Cached.Add(page, list);
             RecordCount = total;
             LastPage    = Helper.HelperClass.CalculatePage(RecordCount, _adapter.RecordPerPage);
         }
         _adapter.EndDBAccess();
         return(list);
     }
 }
Esempio n. 3
0
        private void LoadRecord(FileInfo file)
        {
            if (Cached.ContainsKey(Path.GetFileNameWithoutExtension(file.Name)))
            {
                return;
            }
            var record = InvertJsonExtensions.DeserializeObject(For, JSON.Parse(File.ReadAllText(file.FullName))) as IDataRecord;

            if (record != null)
            {
                record.Repository = this.Repository;

                Cached.Add(record.Identifier, record);
                record.Changed = false;
            }
        }
Esempio n. 4
0
        public void Add(IDataRecord o)
        {
            if (Removed.Contains(o.Identifier))
            {
                Removed.Remove(o.Identifier);
            }

            o.Changed = true;
            if (string.IsNullOrEmpty(o.Identifier))
            {
                o.Identifier = Guid.NewGuid().ToString();
            }
            o.Repository = this.Repository;
            if (!Cached.ContainsKey(o.Identifier))
            {
                Cached.Add(o.Identifier, o);
                Repository.Signal <IDataRecordInserted>(_ => _.RecordInserted(o));
            }
        }
Esempio n. 5
0
        private void LoadRecord(string file)
        {
            if (Cached.ContainsKey(Path.GetFileNameWithoutExtension(file)))
            {
                return;
            }
            try
            {
                var record = InvertJsonExtensions.DeserializeObject(For, JSON.Parse(ReadFile(file))) as IDataRecord;
                if (record != null)
                {
                    record.Repository = this.Repository;

                    Cached.Add(record.Identifier, record);
                    record.Changed = false;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Error parsing file {0}", file), ex);
            }
        }
Esempio n. 6
0
        public void Cache(Style style)
        {
            var properties = typeof(Style).GetProperties();
            var group      = new List <CachedStyleComponent>();

            foreach (var property in properties)
            {
                var first = group.FirstOrDefault();
                var name  = property.Name.ToLower();

                if (first != null && !name.StartsWith(first.Seed))
                {
                    Cached.Add(new CachedStyle
                    {
                        Seed  = first.Seed,
                        Label = first.Component.Label,
                        Group = group.Select(self => (CachedStyleComponent)self.Clone()).ToList()
                    });

                    group.Clear();
                }

                group.Add(new CachedStyleComponent
                {
                    Seed      = name,
                    Component = style.GetByName(name)
                });
            }

            Cached.Add(new CachedStyle
            {
                Seed  = group.FirstOrDefault()?.Seed,
                Label = group.FirstOrDefault()?.Component.Label,
                Group = group.Select(self => (CachedStyleComponent)self.Clone()).ToList()
            });

            Logger.Info($"[Style] Successfully cached {properties.Length} style component(s)");
        }
Esempio n. 7
0
        /// <summary>
        ///     Загружает конфигурационный файл из XML
        /// </summary>
        /// <param name="xml"></param>
        /// <param name="context"></param>
        public void LoadXmlConfig(XElement xml, IBSharpContext context = null)
        {
            foreach (var condition in xml.Elements("machine"))
            {
                var machine = condition.Attr("code").ToLowerInvariant();
                var not     = false;
                if (machine == "not" && !string.IsNullOrWhiteSpace(condition.Attr("name")))
                {
                    not     = true;
                    machine = condition.Attr("name").ToLowerInvariant();
                }
                if ((machine == MachineName && !not) || (not && machine != MachineName))
                {
                    var target = condition.Attr("use");
                    if (context == null)
                    {
                        throw new Exception("Cannot resolve machine-related config cause context is null");
                    }
                    var config = context[target];
                    if (config == null)
                    {
                        throw new Exception("Cannot resolve machine-related config");
                    }
                    xml = config.Compiled;
                    Log.Info("Usage config " + target + " because machine name is " + (not ? "not " : "") + MachineName);
                    break;
                }
            }
            this.BSharpContext = context;
            this.Definition    = xml;
            RootFolder         = xml.ResolveValue("root", RootFolder);
            RootFolder         = xml.ResolveValue(HostUtils.RootFolderXmlName, RootFolder);
            ConfigFolder       = xml.ResolveValue(HostUtils.ConfigFolderXmlName, ConfigFolder);
            DllFolder          = xml.ResolveValue(HostUtils.DllFolderXmlName, DllFolder);
            LogFolder          = xml.ResolveValue(HostUtils.LogFolderXmlName, LogFolder);
            TmpFolder          = xml.ResolveValue(HostUtils.TmpFolderXmlName, TmpFolder);
            LogLevel           = xml.ResolveValue(HostUtils.LogLevelXmlName, "Info").To <LogLevel>();
            UseApplicationName = xml.ResolveValue(HostUtils.UseApplicationName, "false").To <bool>();
            AuthCookieName     = xml.ResolveValue(HostUtils.AuthCookieName, AuthCookieName);
            AuthCookieDomain   = xml.ResolveValue(HostUtils.AuthCookieDomain, AuthCookieDomain);
            EncryptBasis       = xml.ResolveValue(HostUtils.EncryptBasis, Guid.NewGuid().ToString());
            DefaultPage        = xml.ResolveValue(HostUtils.DefaultPage, "default.html");
            MaxRequestSize     = xml.ResolveValue("maxrequestsize", "10000000").ToInt();
            RequireLogin       = xml.ResolveValue("requirelogin").ToBool();
            foreach (XElement bind in xml.Elements(HostUtils.BindingXmlName))
            {
                var  excludehost = bind.Attr("excludehost").SmartSplit();
                bool process     = true;
                if (0 != excludehost.Count)
                {
                    var machine = Environment.MachineName.ToUpperInvariant();
                    foreach (var h in excludehost)
                    {
                        if (machine == h.ToUpperInvariant().Trim())
                        {
                            process = false;
                            break;
                        }
                    }
                }
                if (!process)
                {
                    continue;
                }
                var hostbind = new HostBinding();
                hostbind.Port      = bind.Attr(HostUtils.PortXmlName).ToInt();
                hostbind.Interface = bind.Attr(HostUtils.InterfaceXmlName);
                string schema = bind.Attr(HostUtils.SchemaXmlName);
                if (!string.IsNullOrWhiteSpace(schema))
                {
                    if (schema == HostUtils.HttpsXmlValue)
                    {
                        hostbind.Schema = HostSchema.Https;
                    }
                }
                if (hostbind.Port == 0)
                {
                    hostbind.Port = HostUtils.DefaultBindingPort;
                }
                if (string.IsNullOrWhiteSpace(hostbind.Interface))
                {
                    hostbind.Interface = HostUtils.DefaultBindingInterface;
                }
                Bindings.Add(hostbind);
            }
            foreach (var constant in xml.Elements("constant"))
            {
                if (string.IsNullOrWhiteSpace(constant.Attr("code")))
                {
                    continue;
                }
                Constants[constant.Attr("code").ToLowerInvariant()] = constant.Attr("name");
            }
            foreach (XElement e in xml.Elements(HostUtils.ContentFolder))
            {
                ContentFolders.Add(e.Attr("code"));
            }
            ReadModules(xml);
            foreach (var e in xml.Elements("connection"))
            {
                var name = e.Attr("code");
                var cstr = e.Attr("name");
                if (string.IsNullOrWhiteSpace(name))
                {
                    continue;
                }
                if (string.IsNullOrWhiteSpace(cstr))
                {
                    continue;
                }
                ConnectionStrings[name] = cstr;
            }
            foreach (var e in xml.Elements("static"))
            {
                var name   = e.Attr("code");
                var folder = EnvironmentInfo.ResolvePath(e.Attr("name"));
                var role   = e.Attr("role");
                if (!name.StartsWith("/"))
                {
                    name = "/" + name;
                }
                if (!name.EndsWith("/"))
                {
                    name += "/";
                }
                if (e.Attr("cache").ToBool())
                {
                    this.StaticContentCacheMap[name] = e;
                }
                else
                {
                    this.StaticContentMap[name] = new StaticFolderDescriptor {
                        Key = name, Path = folder, Role = role
                    };
                }
            }
            foreach (var e in xml.Elements("startup"))
            {
                var name = e.Attr("code");
                Initializers.Add(name);
            }
            foreach (XElement e in xml.Elements(HostUtils.ExContentFolder))
            {
                ExtendedContentFolders.Add(e.Attr("code"));
            }
            foreach (XElement e in xml.Elements(HostUtils.IncludeConfigXmlName))
            {
                IncludeConfigMasks.Add(e.Describe().GetEfficienValue());
            }
            foreach (XElement e in xml.Elements(HostUtils.ExcludeConfigXmlName))
            {
                ExcludeConfigMasks.Add(e.Describe().GetEfficienValue());
            }
            foreach (XElement e in xml.Elements("cache"))
            {
                Cached.Add(e.Value);
            }
            foreach (XElement e in xml.Elements("proxize"))
            {
                var key = e.Attr("code");
                var url = e.Attr("url");
                if (string.IsNullOrWhiteSpace(url))
                {
                    if (!string.IsNullOrWhiteSpace(e.Attr("appid")))
                    {
                        url += "appid=" + e.Attr("appid") + ";";
                    }
                    if (!string.IsNullOrWhiteSpace(e.Attr("secure")))
                    {
                        url += "secure=" + e.Attr("secure") + ";";
                    }
                    if (!string.IsNullOrWhiteSpace(e.Attr("server")))
                    {
                        url += "server=" + e.Attr("server") + ";";
                    }
                }
                Proxize[key] = url;
            }
            foreach (XElement e in xml.Elements("lib"))
            {
                AutoconfigureAssemblies.Add(e.AttrOrValue("code"));
            }
            ForceNoCache = xml.Attr("forcenocache").ToBool();

            var appid = xml.ResolveValue("appid", "0").ToInt();

            if (appid != 0)
            {
                AddQorpentBinding(appid);
                Loggy.Info(string.Concat("AppId is [", appid, "]"));
            }

            LoggerName   = xml.ResolveValue("loggername", "");
            LoggerHost   = xml.ResolveValue("loggerhost", "");
            LoggerPort   = xml.ResolveValue("loggerport", "0").ToInt();
            LoggerFormat = xml.ResolveValue("loggerformat", "").Replace("%{", "${");

            this.AccessAllowOrigin = xml.ResolveValue("origin", "");

            foreach (var e in xml.Elements("require"))
            {
                var appname = e.Attr("code") + e.Attr("suffix");

                var proxize = e.GetSmartValue("proxize").ToBool() || e.Attr("name") == "proxize";
                if (proxize)
                {
                    if (null == context)
                    {
                        this.Log.Error("context not provi " + appname);
                    }
                    var cls = context[appname];
                    if (null == cls)
                    {
                        this.Log.Error("cannot find application for proxize " + appname);
                    }
                    else
                    {
                        var sappid   = cls.Compiled.ResolveValue("appid");
                        var services = cls.Compiled.Elements("service");
                        foreach (var srv in services)
                        {
                            var root   = srv.Attr("code");
                            var server = e.Attr("server");
                            var cp     = "appid=" + sappid + ";";
                            if (!string.IsNullOrWhiteSpace(server))
                            {
                                cp += "server=" + server;
                            }
                            this.Proxize[root] = cp;
                        }
                    }
                }
            }
        }