Beispiel #1
0
 private static string f_format_CssJs(string css_js, m_cache item)
 {
     return(css_js
            .Replace("___host_connect", main.page_Socket)
            .Replace("___modkey", item.modkey)
            .Replace("___browser_name", item.browser_name)
            .Replace("___theme_key", item.theme_key)
            .Replace("___device_type", item.device_type)
            .Replace("___lang_key", item.lang_key));
 }
Beispiel #2
0
 private static string f_format_htm(string htm, m_cache item)
 {
     return(htm.Replace("../", string.Empty)
            .Replace("___host_connect", main.page_Socket)
            .Replace("___modkey", item.modkey)
            .Replace("___browser_name", item.browser_name)
            .Replace("___theme_key", item.theme_key)
            .Replace("___device_type", item.device_type)
            .Replace("___lang_key", item.lang_key));
 }
Beispiel #3
0
        public static m_cache get(string key)
        {
            m_cache item = new m_cache()
            {
            };

            if (cache[key] != null)
            {
                item = (m_cache)cache[key];
            }
            return(item);
        }
Beispiel #4
0
        private static void cache_User()
        {
            m_permission p = new m_permission();

            p.DATA = 1;


            foreach (var u in list)
            {
                #region // init default permission ...
                switch (u.username)
                {
                case "ban":
                    p.VIEW = 0;
                    break;

                case "view":
                    p.VIEW = 1;
                    break;

                case "add":
                    p.VIEW = 1;
                    p.ADD  = 1;
                    break;

                case "edit":
                    p.VIEW = 1;
                    p.ADD  = 1;
                    p.EDIT = 1;
                    break;

                case "delete":
                    p.VIEW   = 1;
                    p.EDIT   = 1;
                    p.DELETE = 1;
                    break;

                default:
                    p.ALL = 1;
                    break;
                }
                #endregion

                string[] a = httpCache.get_Keys().Where(x => x.Contains(".htm") || x.Contains(".js") || x.Contains(".css") || x.Contains(".txt") || x.Contains(".json")).ToArray();
                foreach (string ki in a)
                {
                    m_cache o = httpCache.get(ki);
                }
            }
        }
Beispiel #5
0
 public static void set(m_cache item)
 {
     //byte[] buffer = Encoding.UTF8.GetBytes(data);
     //Muốn tạo sự kiện thì tạo ở đây còn k thì hoy
     //(MyCacheItemPriority == MyCachePriority.Default) ? CacheItemPriority.Default : CacheItemPriority.NotRemovable;
     //Globals.policy.RemovedCallback = callback;
     if (!string.IsNullOrEmpty(item.Key) && item.Content != null && item.Content.Length > 0)
     {
         cache.Set(item.Key, item, policy, null);
         ls_key.Add(item.Key);
         if (ls_file.IndexOf(item.PathFile) == -1)
         {
             ls_file.Add(item.PathFile);
         }
     }
 }
Beispiel #6
0
        public static string getString(string key)
        {
            string s = "";

            m_cache item = new m_cache()
            {
            };

            if (cache[key] != null)
            {
                item = (m_cache)cache[key];
                if (item.Content != null && item.Content.Length > 0)
                {
                    s = Encoding.UTF8.GetString(item.Content);
                }
            }
            return(s);
        }
Beispiel #7
0
        public static void set(string file, string path_root)
        {
            string type_code = "", name = "", modkey = "", ext = "", key = "", folder_root = "", path_dir = "", path_key = file.Replace(path_root, string.Empty);

            path_key = path_key.Replace("\\", "/");
            if (path_key.IndexOf("/") == 0)
            {
                path_key = path_key.Substring(1, path_key.Length - 1);
            }

            switch (path_key[0])
            {
            case '.':
                type_code = "module";
                break;

            case '_':
                type_code = "layout";
                break;

            default:
                type_code = "page";
                break;
            }

            if (file.EndsWith(".jpg"))
            {
                name = "";
            }

            string[] a = path_key.Split('/');
            if (a.Length < 2)
            {
                return;
            }

            folder_root = a[0];
            name        = a[a.Length - 1];
            path_dir    = path_key.Substring(0, path_key.Length - (name.Length + 1));
            modkey      = path_dir.Replace(".", string.Empty).Replace("/", "___")
                          .Replace(' ', '_').Replace('-', '_').Replace(".", string.Empty);
            a   = name.Split(new string[] { "_", "." }, StringSplitOptions.None);
            ext = a[a.Length - 1];

            m_cache f = new m_cache();

            f.theme_key    = hostContext.theme_Default;
            f.device_type  = hostContext.device_Default;
            f.lang_key     = hostContext.lang_Default;
            f.browser_name = "chrome";
            f.Type         = type_code;
            f.Cache        = true;
            f.Ext          = ext;
            f.Name         = path_key;
            f.MimeType     = mineType.GetContentType(ext);
            f.PathFile     = file;

            if (ext == "htm" || ext == "html" || ext == "js" || ext == "css" || ext == "txt" || ext == "json")
            {
                StreamReader streamReader = new StreamReader(file);
                string       s            = streamReader.ReadToEnd();

                if (a.Length > 3)
                {
                    string theme = a[a.Length - 3], device = a[a.Length - 2];
                    if (ls_device.IndexOf(device) != -1 && ls_theme.IndexOf(theme) != -1)
                    {
                        s = s.Replace("___theme_key", theme).Replace("___device_type", device);
                    }
                }
                s = s.Replace("___modkey", modkey);

                switch (type_code)
                {
                case "module":
                    #region

                    switch (ext)
                    {
                    case "html":
                        #region
                        var ls_uri = regEx_ResourceURL.Matches(s).Cast <Match>()
                                     .Select(m => new { tag = m.ToString(), uri = m.Groups["URL"].Value.Replace(@"\", "/") })
                                     .Where(x => !x.uri.Contains(main.pathSite_Ext))
                                     .ToArray();

                        if (modkey.IndexOf("api___") != 0)
                        {
                            s = "<div id='" + modkey + "'><div class='mod " + modkey + " module__' mdir='" + path_dir + "' mkey='" + path_key + "'>" + Environment.NewLine +
                                @"<em class='btnConfig fa fa-wrench @username' onclick=""apiConfig('" + path_key + @"')""></em>" + Environment.NewLine + s + Environment.NewLine + "</div></div>";
                        }

                        foreach (string theme in ls_theme)
                        {
                            foreach (string device in ls_device)
                            {
                                foreach (string bi in a_browser)
                                {
                                    #region         // uri format ...

                                    if (ls_uri.Length > 0)
                                    {
                                        foreach (var ri in ls_uri)
                                        {
                                            string tag = ri.tag, uri = ri.uri, tag_new = "", uri_new = "";
                                            if (uri.StartsWith("../"))
                                            {
                                                uri_new = "/" + uri.Replace("../", string.Empty);
                                                tag_new = tag.Replace(uri, uri_new.ToLower());
                                                s       = s.Replace(tag, tag_new);
                                            }
                                            else
                                            {
                                                if (!uri.StartsWith("http") && !uri.StartsWith("/" + folder_root))
                                                {
                                                    uri_new = "/" + path_dir + "/" + uri;
                                                    tag_new = tag.Replace(uri, uri_new.ToLower());
                                                    s       = s.Replace(tag, tag_new);
                                                }
                                            }
                                        }
                                    }

                                    #endregion

                                    string dir_lang = path_root + "\\" + path_dir + "\\lang\\";
                                    dir_lang = dir_lang.Replace("/", "\\").Replace("\\\\", "\\");
                                    foreach (string lang in ls_lang)
                                    {
                                        f.modkey       = modkey;
                                        f.browser_name = bi;
                                        f.theme_key    = theme;
                                        f.lang_key     = lang;
                                        f.device_type  = device;
                                        string si = f_format_htm(s, f);

                                        #region         // json/lang: vi, en ...

                                        string fla = dir_lang + lang + ".json";
                                        if (File.Exists(fla))
                                        {
                                            string s_la = File.ReadAllText(fla);

                                            var las = s_la.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)
                                                      .Select(x => x.Trim())
                                                      .Where(x => x.Contains(":"))
                                                      .Select(x => new Tuple <string, string>(
                                                                  "[lang_" + x.Split(':')[0].Trim() + "]",
                                                                  x.Split(':')[1].Replace(@"""", string.Empty).Replace(",", string.Empty).Trim()))
                                                      .ToArray();

                                            foreach (var lai in las)
                                            {
                                                si = si.Replace(lai.Item1, lai.Item2);
                                            }
                                        }

                                        #endregion

                                        key = path_key + "?" + theme + "." + device + "." + bi + "." + lang;
                                        si  = si +
                                              Environment.NewLine + @"<link href=""/" + path_dir + "/bin_" + theme + "_" + device + @".css"" rel=""stylesheet"" /> " +
                                              Environment.NewLine + @"<script src=""/" + path_dir + "/bin_" + theme + "_" + device + @".js""></script>";

                                        f.Key     = key;
                                        f.Content = Encoding.UTF8.GetBytes(si);
                                        set(f);
                                    } // end for lang
                                }     // end for browser
                            }         // end for device
                        }             // end for theme

                        break;

                        #endregion
                    default:
                        #region         // css, js, json, txt ..,

                        foreach (string bi in a_browser)
                        {
                            string dir_lang = path_root + "\\" + path_dir + "\\lang\\";
                            dir_lang = dir_lang.Replace("/", "\\").Replace("\\\\", "\\");
                            foreach (string lang in ls_lang)
                            {
                                string fla = dir_lang + lang + ".json";
                                if (File.Exists(fla))
                                {
                                    string s_la = File.ReadAllText(fla);

                                    var las = s_la.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)
                                              .Select(x => x.Trim())
                                              .Where(x => x.Contains(":"))
                                              .Select(x => new Tuple <string, string>(
                                                          "[lang_" + x.Split(':')[0].Trim() + "]",
                                                          x.Split(':')[1].Replace(@"""", string.Empty).Replace(",", string.Empty).Trim()))
                                              .ToArray();

                                    foreach (var lai in las)
                                    {
                                        s = s.Replace(lai.Item1, lai.Item2);
                                    }
                                }

                                key       = path_key + "?" + bi + "." + lang;
                                f.Key     = key;
                                f.Content = Encoding.UTF8.GetBytes(s);
                                set(f);
                            }    // end for lang
                        }        // end for browser
                        break;

                        #endregion
                    }

                    break;

                    #endregion
                case "page":
                    #region
                    switch (ext)
                    {
                    case "html":
                        #region
                        var ls_mod = regEx_IncludeModule.Matches(s).Cast <Match>()
                                     .Select(m => new
                        {
                            tag      = m.ToString(),
                            mod_path = m.Groups["ViewName"].Value.ToLower()
                        })
                                     .Distinct().ToArray();

                        var ls_uri = regEx_ResourceURL.Matches(s).Cast <Match>()
                                     .Select(m => new { tag = m.ToString(), uri = m.Groups["URL"].Value.Replace(@"\", "/") })
                                     .Where(x => !x.uri.Contains(main.pathSite_Ext)).ToArray();

                        int pos = s.ToLower().IndexOf("<head>");
                        if (pos > 0)
                        {
                            pos = pos + 6;
                        }

                        string[] a_dv = name.Split(new string[] { "_", "." }, StringSplitOptions.None).Where(x => x != "").ToArray();
                        if (a_dv.Length > 2)
                        {
                            string device = a_dv[a_dv.Length - 2];
                            foreach (string theme in ls_theme)
                            {
                                foreach (string bi in a_browser)
                                {
                                    #region         // uri format ...

                                    if (ls_uri.Length > 0)
                                    {
                                        foreach (var ri in ls_uri)
                                        {
                                            string tag = ri.tag, uri = ri.uri, tag_new = "", uri_new = "";
                                            if (uri.StartsWith("../"))
                                            {
                                                uri_new = "/" + uri.Replace("../", string.Empty);
                                                tag_new = tag.Replace(uri, uri_new.ToLower());
                                                s       = s.Replace(tag, tag_new);
                                            }
                                            else
                                            {
                                                switch (uri[0])
                                                {
                                                case '.':
                                                    uri_new = "/" + uri;
                                                    tag_new = tag.Replace(uri, uri_new.ToLower());
                                                    s       = s.Replace(tag, tag_new);
                                                    break;

                                                case '_':
                                                    uri_new = "/" + uri.ToLower();
                                                    if (!uri_new.StartsWith("/_layout/"))
                                                    {
                                                        uri_new = "/_layout" + uri_new.Replace("/_", "/");
                                                    }
                                                    tag_new = tag.Replace(uri, uri_new);
                                                    s       = s.Replace(tag, tag_new);
                                                    break;

                                                default:
                                                    if (!uri.StartsWith("http") && !uri.StartsWith("/" + folder_root))
                                                    {
                                                        uri_new = "/" + path_dir + "/" + uri;
                                                        tag_new = tag.Replace(uri, uri_new.ToLower());
                                                        s       = s.Replace(tag, tag_new);
                                                    }
                                                    break;
                                                }
                                            }
                                        }
                                    }

                                    #endregion

                                    if (pos > 0)
                                    {
                                        s = s.Substring(0, pos) + Environment.NewLine +
                                            @"<script src=""/.api/init/init.js""></script>" +
                                            Environment.NewLine + s.Substring(pos, s.Length - pos);
                                    }

                                    string dir_lang = path_root + "\\" + path_dir + "\\lang\\";
                                    dir_lang = dir_lang.Replace("/", "\\").Replace("\\\\", "\\");
                                    foreach (string lang in ls_lang)
                                    {
                                        f.modkey       = modkey;
                                        f.browser_name = bi;
                                        f.theme_key    = theme;
                                        f.lang_key     = lang;
                                        f.device_type  = device;
                                        string si_lang = f_format_htm(s, f);

                                        #region         // @Module ...

                                        if (ls_mod.Length > 0)
                                        {
                                            foreach (var mi in ls_mod)
                                            {
                                                string tag = mi.tag, key_mod = "." + mi.mod_path + "/index_.html?" + theme + "." + device + "." + bi + "." + lang;
                                                string s_mod = getString(key_mod);
                                                si_lang = si_lang.Replace(tag, s_mod);
                                            }
                                        }

                                        if (si_lang.Contains("@Module") || si_lang.Contains("@module"))
                                        {
                                            var ls_mod2 = regEx_IncludeModule.Matches(si_lang).Cast <Match>()
                                                          .Select(m => new
                                            {
                                                tag      = m.ToString(),
                                                mod_path = m.Groups["ViewName"].Value.ToLower()
                                            }).Distinct().ToArray();

                                            if (ls_mod2.Length > 0)
                                            {
                                                foreach (var mi in ls_mod2)
                                                {
                                                    string tag = mi.tag, key_mod = "." + mi.mod_path + "/index_.html?" + theme + "." + device + "." + bi + "." + lang;
                                                    string s_mod = getString(key_mod);
                                                    si_lang = si_lang.Replace(tag, s_mod);
                                                }
                                            }
                                        }

                                        #endregion

                                        #region         // json/lang: vi, en ...

                                        string fla = dir_lang + lang + ".json";
                                        if (File.Exists(fla))
                                        {
                                            string s_la = File.ReadAllText(fla);

                                            var las = s_la.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)
                                                      .Select(x => x.Trim())
                                                      .Where(x => x.Contains(":"))
                                                      .Select(x => new Tuple <string, string>(
                                                                  "[lang_" + x.Split(':')[0].Trim() + "]",
                                                                  x.Split(':')[1].Replace(@"""", string.Empty).Replace(",", string.Empty).Trim()))
                                                      .ToArray();

                                            foreach (var lai in las)
                                            {
                                                si_lang = si_lang.Replace(lai.Item1, lai.Item2);
                                            }
                                        }

                                        #endregion

                                        key       = path_key + "?" + theme + "." + device + "." + bi + "." + lang;
                                        f.Key     = key;
                                        f.Content = Encoding.UTF8.GetBytes(si_lang);
                                        set(f);
                                    } // end for lang
                                }     // end for browser
                            }         // end for theme
                        }
                        break;

                        #endregion
                    default:
                        #region         // css, js, json, txt ..,
                        foreach (string theme in ls_theme)
                        {
                            foreach (string device in ls_device)
                            {
                                foreach (string bi in a_browser)
                                {
                                    string dir_lang = path_root + "\\" + path_dir + "\\lang\\";
                                    dir_lang = dir_lang.Replace("/", "\\").Replace("\\\\", "\\");
                                    foreach (string lang in ls_lang)
                                    {
                                        f.modkey       = modkey;
                                        f.browser_name = bi;
                                        f.theme_key    = theme;
                                        f.lang_key     = lang;
                                        f.device_type  = device;
                                        string si_lang = f_format_htm(s, f);

                                        #region         // json/lang: vi, en ...

                                        string fla = dir_lang + lang + ".json";
                                        if (File.Exists(fla))
                                        {
                                            string s_la = File.ReadAllText(fla);

                                            var las = s_la.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)
                                                      .Select(x => x.Trim())
                                                      .Where(x => x.Contains(":"))
                                                      .Select(x => new Tuple <string, string>(
                                                                  "[lang_" + x.Split(':')[0].Trim() + "]",
                                                                  x.Split(':')[1].Replace(@"""", string.Empty).Replace(",", string.Empty).Trim()))
                                                      .ToArray();

                                            foreach (var lai in las)
                                            {
                                                si_lang = si_lang.Replace(lai.Item1, lai.Item2);
                                            }
                                        }

                                        #endregion

                                        key       = path_key + "?" + theme + "." + device + "." + bi + "." + lang;
                                        f.Key     = key;
                                        f.Content = Encoding.UTF8.GetBytes(si_lang);
                                        set(f);
                                    }    // end for lang
                                }        // end for browser
                            }
                        }
                        break;

                        #endregion
                    }
                    break;

                    #endregion
                default:
                    #region

                    foreach (string bi in a_browser)
                    {
                        string dir_lang = path_root + "\\" + path_dir + "\\lang\\";
                        dir_lang = dir_lang.Replace("/", "\\").Replace("\\\\", "\\");
                        foreach (string lang in ls_lang)
                        {
                            string fla = dir_lang + lang + ".json";
                            if (File.Exists(fla))
                            {
                                string s_la = File.ReadAllText(fla);

                                var las = s_la.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)
                                          .Select(x => x.Trim())
                                          .Where(x => x.Contains(":"))
                                          .Select(x => new Tuple <string, string>(
                                                      "[lang_" + x.Split(':')[0].Trim() + "]",
                                                      x.Split(':')[1].Replace(@"""", string.Empty).Replace(",", string.Empty).Trim()))
                                          .ToArray();

                                foreach (var lai in las)
                                {
                                    s = s.Replace(lai.Item1, lai.Item2);
                                }
                            }

                            key       = path_key + "?" + bi + "." + lang;
                            f.Key     = key;
                            f.Content = Encoding.UTF8.GetBytes(s);
                            set(f);
                        } // end for lang
                    }     // end for browser
                    break;

                    #endregion
                }
            }
            else
            {
                #region // gif, png, jpg, jpeg ...

                if (ext == "gif" || ext == "png" || ext == "jpg" || ext == "jpeg")
                {
                    ImageFormat imgFormat = ImageFormat.Jpeg;
                    switch (ext)
                    {
                    case "gif":
                        imgFormat = ImageFormat.Gif;
                        break;

                    case "png":
                        imgFormat = ImageFormat.Png;
                        break;

                    case "jpg":
                    case "jpeg":
                        imgFormat = ImageFormat.Jpeg;
                        break;
                    }

                    Image  img = Image.FromFile(file);
                    byte[] buffer;
                    using (MemoryStream ms = new MemoryStream())
                    {
                        img.Save(ms, imgFormat);
                        buffer = ms.ToArray();
                    }

                    f.Key     = path_key;
                    f.Content = buffer;
                    set(f);
                }
                else
                {
                    //woff
                    // this method is limited to 2^32 byte files (4.2 GB)
                    byte[]     buffer;
                    FileStream fs = null;
                    try
                    {
                        fs     = File.OpenRead(file);
                        buffer = new byte[fs.Length];
                        fs.Read(buffer, 0, Convert.ToInt32(fs.Length));
                    }
                    finally
                    {
                        if (fs != null)
                        {
                            fs.Close();
                            fs.Dispose();
                        }
                    }

                    f.Key     = path_key;
                    f.Content = buffer;
                    set(f);
                }

                #endregion
            }

            ls_file.Add(file);
        }