示例#1
0
 /// <summary>
 /// 解析入口
 /// </summary>
 /// <param name="urlInfo"></param>
 /// <param name="site"></param>
 /// <param name="skin"></param>
 /// <param name="page"></param>
 /// <param name="pageCode"></param>
 public void Parse(MaUrl urlInfo, IMaSite site, IMaSkin skin, MaPage page, ref StringBuilder pageCode)
 {
     //处理页面临时变量
     foreach (KeyValuePair <string, string> item in Htmx.HtmxHandler.GetThisPageTempVariable())
     {
         pageCode = pageCode.Replace("{$" + item.Key + "}", item.Value);
     }
     //处理页面变量
     foreach (KeyValuePair <string, string> item in page.GetPageVariable())
     {
         pageCode = pageCode.Replace("{$" + item.Key + "}", item.Value);
     }
     //处理皮肤变量
     foreach (KeyValuePair <string, string> item in ((MaConfig)skin).Variables)
     {
         pageCode = pageCode.Replace("{$" + item.Key + "}", item.Value);
     }
     //处理站点变量
     foreach (KeyValuePair <string, string> item in ((MaConfig)site).Variables)
     {
         pageCode = pageCode.Replace("{$" + item.Key + "}", item.Value);
     }
     //处理基本变量
     pageCode = pageCode.Replace("{$_ma_this_domain}", urlInfo.Domain.Domain);
     pageCode = pageCode.Replace("{$_ma_this_root_domain}", urlInfo.Domain.MainDomain);
 }
示例#2
0
        /// <summary>
        /// 初始化页面信息
        /// </summary>
        /// <param name="context"></param>
        /// <param name="url"></param>
        /// <param name="web"></param>
        /// <param name="site"></param>
        /// <param name="skin"></param>
        /// <param name="page"></param>
        public virtual void InitPage(HttpContext context, MaUrl url, IMaWeb web, IMaSite site, IMaSkin skin, MaPage page)
        {
            //Http对象
            Context  = context;
            Request  = context.Request;
            Response = context.Response;

            //Ma对象
            m_maUrl  = url;
            m_maweb  = web;
            m_maSite = site;
            m_maSkin = skin;
            m_maPage = page;
        }
示例#3
0
        /// <summary>
        /// 标签处理虚方法
        /// </summary>
        /// <param name="urlInfo"></param>
        /// <param name="site"></param>
        /// <param name="skin"></param>
        /// <param name="page"></param>
        /// <param name="pageCode"></param>
        public virtual void Parse(MaUrl urlInfo, IMaSite site, IMaSkin skin, MaPage page, ref StringBuilder pageCode)
        {
            if (string.IsNullOrEmpty(m_tagRegexStr))
            {
                throw new Exception("解析表情出错,当前类没有标签匹配字符串串,请给[TagRegexStr]赋值");
            }

            //查询的正则表达式
            Regex           re      = new Regex(m_tagRegexStr, RegexOptions.IgnoreCase);
            MatchCollection matches = re.Matches(pageCode.ToString());

            foreach (Match var in matches)
            {
                MaTag _maTag = new MaTag(var.Value, urlInfo);
                ParseTag(urlInfo, site, skin, page, ref pageCode, _maTag);
            }
        }
示例#4
0
        /// <summary>
        /// 处理标签构造函数
        /// </summary>
        /// <param name="tagStr"></param>
        /// <param name="urlInfo"></param>
        public MaTag(string tagStr, MaUrl urlInfo)
        {
            m_urlInfo = urlInfo;

            m_tagStr  = tagStr;
            m_tagName = System.Text.RegularExpressions.Regex.Replace(tagStr, TAG_REGEX, "$1", System.Text.RegularExpressions.RegexOptions.IgnoreCase).ToUpper();
            //获得属性值
            m_tagAttributeStr = System.Text.RegularExpressions.Regex.Replace(tagStr, TAG_REGEX, "$2", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            string[] tagArray = m_tagAttributeStr.Trim().Split(';');
            foreach (string var in tagArray)
            {
                if (!string.IsNullOrEmpty(var) &&
                    var.Contains("="))
                {
                    string _key   = var.Substring(0, var.IndexOf("="));
                    string _value = var.Substring(var.IndexOf("=") + 1);
                    this[_key] = _value;
                }
            }
            //获得动态属性
            if (!string.IsNullOrEmpty(this["regex"]))
            {
                string _url = urlInfo.AbsolutePath;
                if (this["regex"].Substring(0, 1) != "/")
                {//带域名匹配
                    _url = urlInfo.Domain.Domain + "/" + urlInfo.AbsolutePath;
                }
                foreach (string var in this.AllKeys)
                {
                    if (this[var].Substring(0, 1) == "$")
                    {
                        this[var] = System.Text.RegularExpressions.Regex.Replace(_url, this["regex"], this[var]);
                    }
                }
            }
        }
示例#5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="url"></param>
 /// <returns></returns>
 public override bool IsBrowseUrl(MaUrl url)
 {
     //throw new NotImplementedException();
     return(false);
 }
示例#6
0
 /// <summary>
 /// 标签处理抽象函数
 /// </summary>
 /// <param name="urlInfo"></param>
 /// <param name="site"></param>
 /// <param name="skin"></param>
 /// <param name="page"></param>
 /// <param name="pageCode"></param>
 /// <param name="tag"></param>
 public abstract void ParseTag(MaUrl urlInfo, IMaSite site, IMaSkin skin, MaPage page, ref StringBuilder pageCode, MaTag tag);
示例#7
0
        void application_AuthenticateRequest(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            HttpContext     context     = application.Context;
            MaUrl           _url        = MaUrl.Current;

            if (_url.AbsolutePath == "/")
            {
                return;
            }

            //获得认证用户信息
            OnAuthenticate(context);

            if ((context.User == null) && (MaSecurityConfig.Instance.LoginUrl != _url.AbsolutePath))
            {
                //开放域名跳过
                foreach (var item in MaSecurityConfig.Instance.OpenDoamin)
                {
                    if (_url.Domain.Domain == item)
                    {
                        goto URLCHECK;
                    }
                }
                //开放跳过
                foreach (var item in MaSecurityConfig.Instance.OpenPath)
                {
                    if (_url.AbsolutePath.IndexOf(item) == 0)
                    {
                        goto URLCHECK;
                    }
                }
                //授权目录,跳转登陆页面
                foreach (var item in MaSecurityConfig.Instance.AuthorizationPath)
                {
                    if (_url.AbsolutePath.IndexOf(item) == 0)
                    {
                        #region 授权页面,未经授权的处理方式

                        switch (MaSecurityConfig.Instance.StopType)
                        {
                        case StopBrowseType.Redirect:
                        {
                            string _loginPage = MaSecurityConfig.Instance.LoginUrl + "?ReturnUrl=" + MaWebUtility.UrlEncode(_url.ToString());
                            context.Response.Redirect(_loginPage, true);
                        }
                        break;

                        case StopBrowseType.Stop:
                        {
                            context.Response.Clear();
                            context.Response.End();
                        }
                        break;

                        case StopBrowseType.Exception:
                        {
                            throw new Exception("未经授权,禁止访问:" + MaSecurityConfig.Instance.StopInfo);
                        }

                        case StopBrowseType.Info:
                        {
                            context.Response.Clear();
                            context.Response.Write(MaSecurityConfig.Instance.StopInfo);
                            context.Response.End();
                        }
                        break;

                        default:
                        {
                            string _loginPage = MaSecurityConfig.Instance.LoginUrl + "?ReturnUrl=" + MaWebUtility.UrlEncode(_url.ToString());
                            context.Response.Redirect(_loginPage, true);
                        }
                        break;
                        }

                        #endregion
                    }
                }
            }

URLCHECK:

            //进行URL检测
            MaPrincipal _principal = context.User as MaPrincipal;
            if (_principal != null)
            {
                if (!_principal.IsBrowseUrl(_url))
                {
                    throw new Exception("你没有浏览该页面的权限,请与管理员联系");
                }
            }
        }
示例#8
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="sink"></param>
        /// <param name="url"></param>
        /// <param name="page"></param>
        public HtmxFilter(Stream sink, MaUrl url, MaPage page)
        {
            m_sink = sink;

            //非编辑模式
            switch (url.RequestView)
            {
            case MaRequestView.Put:
            {
                switch (page.SaveWay)
                {
                case MaPageSaveWay.Null:
                    break;

                case MaPageSaveWay.Save:
                {
                    //保存静态文件
                    if (!(new FileInfo(url.SavePath)).Directory.Exists)
                    {
                        (new FileInfo(url.SavePath)).Directory.Create();
                    }
                    m_fs = new FileStream(url.SavePath, FileMode.OpenOrCreate, FileAccess.Write);
                }
                break;

                case MaPageSaveWay.Cache:
                {
                    #region 默认缓存模式

                    //设置页的可缓存性
                    HttpCacheability _cacheability = HttpCacheability.Server;
                    if (!System.Enum.TryParse <HttpCacheability>(page.Location, out _cacheability))
                    {
                        _cacheability = HttpCacheability.Server;
                    }
                    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Server);
                    //是否应忽略由使缓存无效的客户端发送的 HTTP Cache-Control 标头
                    HttpContext.Current.Response.Cache.SetValidUntilExpires(true);

                    //设置页缓存的到期时间
                    HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddSeconds(page.UpdateTime));
                    HttpContext.Current.Response.Cache.SetMaxAge(new TimeSpan((long)((long)page.UpdateTime * 10000000)));

                    //根据 HTTP 标头值进行缓存
                    if (!string.IsNullOrEmpty(page.Header))
                    {
                        HttpContext.Current.Response.Cache.VaryByHeaders[page.Header] = true;
                    }
                    //使用参数对页的各个版本进行缓存
                    if (!string.IsNullOrEmpty(page.Param))
                    {
                        HttpContext.Current.Response.Cache.VaryByParams[page.Param] = true;
                    }
                    //使用自定义字符串对页的各个版本进行缓存
                    if (!string.IsNullOrEmpty(page.Custom))
                    {
                        HttpContext.Current.Response.Cache.SetVaryByCustom(page.Custom);
                    }

                    #endregion
                }
                break;

                case MaPageSaveWay.None:
                    break;

                default:
                    break;
                }
            }
            break;

            case MaRequestView.Edit:
                break;

            case MaRequestView.Update:
            {
                //模块中处理
            }
            break;

            case MaRequestView.Delete:
            {
                //模块中处理
            }
            break;

            case MaRequestView.Save:
            {
                //保存静态文件
                if (!(new FileInfo(url.SavePath)).Directory.Exists)
                {
                    (new FileInfo(url.SavePath)).Directory.Create();
                }
                m_fs = new FileStream(url.SavePath, FileMode.OpenOrCreate, FileAccess.Write);
            }
            break;

            case MaRequestView.Null:
            {
                //模块中处理
            }
            break;

            case MaRequestView.Cache:
            {
                //模块中处理
            }
            break;

            default:
                break;
            }
        }