示例#1
0
        public static AttachmentInfo DownloadTempMediaFile(string accessToken, string mediaId)
        {
            WebClient webClient = new WebClient();

            webClient.Encoding = Encoding.UTF8;
            webClient.Headers.Add(HttpRequestHeader.KeepAlive, "false");

            YZUrlBuilder uri = new YZUrlBuilder("https://qyapi.weixin.qq.com/cgi-bin/media/get");

            uri.QueryString["access_token"] = accessToken;
            uri.QueryString["media_id"]     = mediaId;

            using (Stream stream = webClient.OpenRead(uri.ToString()))
            {
                StreamReader reader = new StreamReader(stream);

                ContentDisposition contentDisposition = new ContentDisposition(webClient.ResponseHeaders["Content-Disposition"]);
                AttachmentInfo     attachment         = new AttachmentInfo();
                attachment.Name = "";
                attachment.Ext  = Path.GetExtension(contentDisposition.FileName);

                attachment = AttachmentManager.SaveAsAttachment(stream, attachment);
                return(attachment);
            }
        }
示例#2
0
        //https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.h16qh4&treeId=172&articleId=104969&docType=1
        public JObject GetUserInfoFromCode(string accessToken, string code)
        {
            WebClient webClient = new WebClient();

            webClient.Encoding = Encoding.UTF8;
            webClient.Headers.Add(HttpRequestHeader.ContentType, "application/json");
            webClient.Headers.Add(HttpRequestHeader.KeepAlive, "false");

            YZUrlBuilder uri = new YZUrlBuilder("https://oapi.dingtalk.com/user/getuserinfo");

            uri.QueryString["access_token"] = accessToken;
            uri.QueryString["code"]         = code;

            byte[] dataResult = webClient.DownloadData(uri.ToString());
            string strResult  = Encoding.UTF8.GetString(dataResult);

            JObject rv = JObject.Parse(strResult);

            if ((int)rv["errcode"] != 0)
            {
                throw new Exception((string)rv["errmsg"]);
            }

            return(rv);
        }
示例#3
0
    public static YZUrlBuilder FromPath(string path)
    {
        string urlBody;
        string urlQuery;

        int index = path.IndexOf('?');

        if (index != -1)
        {
            urlBody  = path.Substring(0, index);
            urlQuery = path.Substring(index);
        }
        else
        {
            urlBody  = path;
            urlQuery = String.Empty;
        }

        YZUrlBuilder urlBuilder = new YZUrlBuilder("a.aspx" + urlQuery);

        urlBuilder._pathFlag = true;
        urlBuilder._pathBody = urlBody;

        return(urlBuilder);
    }
示例#4
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!YZAuthHelper.IsAuthenticated)
        {
            FormsAuthentication.RedirectToLoginPage();
            return;
        }

        int    tid = Int32.Parse(this.Request["tid"]);
        string formFile;

        using (BPMConnection cn = new BPMConnection())
        {
            cn.WebOpen();
            formFile = BPMProcess.GetDefaultReadForm(cn, tid);
        }

        if (String.IsNullOrEmpty(formFile))
        {
            throw new Exception(Resources.YZStrings.Aspx_Read_MissForm);
        }
        else
        {
            YZUrlBuilder urlBuilder = YZUtility.GetFormRedirectUrl(this.Page, formFile);
            this.Response.Redirect(urlBuilder.ToString(), true);
        }
    }
示例#5
0
        //https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.pWvodE&treeId=385&articleId=104980&docType=1
        public virtual string GetAccessToken(string cropId, string appSecret)
        {
            this.AcquireReaderLock();
            try
            {
                AccessToken accessToken = this.accessTokens.Contains(appSecret) ? this.accessTokens[appSecret] : null;

                if (accessToken == null ||
                    (accessToken.expireDate - DateTime.Now).TotalSeconds < 60)
                {
                    this.UpgradeToWriterLock();

                    WebClient webClient = new WebClient();
                    webClient.Encoding = Encoding.UTF8;
                    webClient.Headers.Add(HttpRequestHeader.ContentType, "application/json");
                    webClient.Headers.Add(HttpRequestHeader.KeepAlive, "false");

                    YZUrlBuilder uri = new YZUrlBuilder("https://oapi.dingtalk.com/gettoken");
                    uri.QueryString["corpid"]     = cropId;
                    uri.QueryString["corpsecret"] = appSecret;

                    DateTime now        = DateTime.Now;
                    byte[]   dataResult = webClient.DownloadData(uri.ToString());
                    string   strResult  = Encoding.UTF8.GetString(dataResult);

                    JObject rv = JObject.Parse(strResult);
                    if ((int)rv["errcode"] != 0)
                    {
                        throw new Exception((string)rv["errmsg"]);
                    }

                    string strAccessToken = (string)rv["access_token"];
                    double expiresin      = 7200;

                    if (accessToken == null)
                    {
                        accessToken           = new AccessToken();
                        accessToken.appSecret = appSecret;
                        this.accessTokens.Add(accessToken);
                    }

                    accessToken.accessToken = strAccessToken;
                    accessToken.expireDate  = now + TimeSpan.FromSeconds(expiresin);
                }

                return(accessToken.accessToken);
            }
            finally
            {
                this.ReleaseLock();
            }
        }
示例#6
0
文件: YZUtility.cs 项目: radtek/EMIP
    public static YZUrlBuilder GetFormRedirectUrl(string formFile)
    {
        try
        {
            if (!VirtualPathUtility.IsAbsolute(formFile))
            {
                formFile = VirtualPathUtility.Combine("~/YZSoft/Forms/XForm/", formFile);
            }

            formFile = VirtualPathUtility.ToAbsolute(formFile);
        }
        catch
        {
        }

        YZUrlBuilder builder = YZUrlBuilder.FromPath(formFile);

        return(builder);
    }
示例#7
0
    public void logout()
    {
        try
        {
            YZAuthHelper.SignOut();
        }
        catch (Exception)
        {
            //捕获 FormsAuthentication.SignOut()中的重定向
        }
        finally
        {
            YZAuthHelper.SetLogoutFlag("logout", String.Empty);

            YZUrlBuilder url = YZUrlBuilder.FromPath(FormsAuthentication.LoginUrl);
            url.QueryString["ReturnUrl"] = this.ReturnUrl;
            this.Response.Redirect("~/admin/login/2018/Default.aspx", true);
        }
    }
示例#8
0
        //https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.UGqlWf&treeId=385&articleId=104966&docType=1
        public virtual string GetJSapiTicket(string accessToken)
        {
            this.AcquireReaderLock();
            try
            {
                if (String.IsNullOrEmpty(this.jsapi_ticket) ||
                    (this.jsapi_ticket_expiredate - DateTime.Now).TotalSeconds < 60)
                {
                    this.UpgradeToWriterLock();

                    WebClient webClient = new WebClient();
                    webClient.Encoding = Encoding.UTF8;
                    webClient.Headers.Add(HttpRequestHeader.ContentType, "application/json");
                    webClient.Headers.Add(HttpRequestHeader.KeepAlive, "false");

                    YZUrlBuilder uri = new YZUrlBuilder("https://oapi.dingtalk.com/get_jsapi_ticket");
                    uri.QueryString["access_token"] = accessToken;

                    DateTime now        = DateTime.Now;
                    byte[]   dataResult = webClient.DownloadData(uri.ToString());
                    string   strResult  = Encoding.UTF8.GetString(dataResult);

                    JObject rv = JObject.Parse(strResult);
                    if ((int)rv["errcode"] != 0)
                    {
                        throw new Exception((string)rv["errmsg"]);
                    }

                    string ticket    = (string)rv["ticket"];
                    double expiresin = Convert.ToDouble(rv["expires_in"]);

                    this.jsapi_ticket            = ticket;
                    this.jsapi_ticket_expiredate = now + TimeSpan.FromSeconds(expiresin);
                }

                return(this.jsapi_ticket);
            }
            finally
            {
                this.ReleaseLock();
            }
        }
示例#9
0
文件: baidu.cs 项目: linxueyang/EMIP
        public static string  getVat_invoice(string basestr)
        {
            string    access_token = getAccessToken();
            WebClient webClient    = new WebClient();

            webClient.Encoding = Encoding.UTF8;
            webClient.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");

            YZUrlBuilder uri = new YZUrlBuilder("https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice");

            uri.QueryString["access_token"] = access_token;
            string param = "image=" + basestr;

            byte[] bytes = Encoding.UTF8.GetBytes(param);

            byte[] dataResult = webClient.UploadData(uri.ToString(), "POST", bytes);
            string strResult  = Encoding.UTF8.GetString(dataResult);


            return(strResult);
        }
示例#10
0
文件: baidu.cs 项目: linxueyang/EMIP
        public static String getAccessToken()
        {
            WebClient webClient = new WebClient();

            webClient.Encoding = Encoding.UTF8;
            webClient.Headers.Add(HttpRequestHeader.ContentType, "application/json");
            webClient.Headers.Add(HttpRequestHeader.KeepAlive, "false");

            YZUrlBuilder uri = new YZUrlBuilder("https://aip.baidubce.com/oauth/2.0/token");

            uri.QueryString["grant_type"]    = "client_credentials";
            uri.QueryString["client_id"]     = clientId;
            uri.QueryString["client_secret"] = clientSecret;
            DateTime now = DateTime.Now;

            byte[] dataResult   = webClient.DownloadData(uri.ToString());
            string strResult    = Encoding.UTF8.GetString(dataResult);
            string access_token = Convert.ToString(JObject.Parse(strResult)["access_token"]);

            return(access_token);
        }
示例#11
0
    public static YZUrlBuilder GetFormRedirectUrl(Page page, string formFile)
    {
        try
        {
            if (!VirtualPathUtility.IsAbsolute(formFile))
            {
                formFile = VirtualPathUtility.Combine("~/YZSoft/Forms/XForm/", formFile);
            }
        }
        catch
        {
        }

        YZUrlBuilder builder = YZUrlBuilder.FromPath(page.ResolveClientUrl(formFile));

        foreach (string key in page.Request.QueryString.Keys)
        {
            builder.QueryString[key] = page.Request.QueryString[key];
        }

        return(builder);
    }
示例#12
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!YZAuthHelper.IsAuthenticated)
        {
            FormsAuthentication.RedirectToLoginPage();
        }

        string          appName         = this.Request.QueryString["app"];
        FormApplication formApplication = null;

        using (BPMConnection cn = new BPMConnection())
        {
            cn.WebOpen();
            formApplication = FormApplication.Load(cn, appName);
        }

        string       formFile   = formApplication.Form;
        YZUrlBuilder urlBuilder = YZUtility.GetFormRedirectUrl(this.Page, formFile);

        urlBuilder.QueryString["md"] = "App";
        this.Response.Redirect(urlBuilder.ToString(), true);
    }
示例#13
0
        protected virtual void ParseMobileForm(string mobileForm, out string xclass, out JObject config)
        {
            if (String.IsNullOrEmpty(mobileForm))
            {
                xclass = "";
                config = new JObject();
                return;
            }

            int index = mobileForm.IndexOf('?');

            if (index == -1)
            {
                xclass = mobileForm;
                config = new JObject();
                return;
            }

            xclass = mobileForm.Substring(0, index);
            YZUrlBuilder builder = new YZUrlBuilder(xclass);

            config = JObject.FromObject(builder.QueryString);
        }
示例#14
0
    protected void Page_Load(object sender, EventArgs e)
    {
        string code   = this.Request.Params["code"];
        string app    = this.Request.Params["app"];
        string linsql = "";

        using (IYZAppAdminProvider applogin = IYZAppAdminProviderManager.DefaultProvider)
        {
            YZAppAdmin.LoginModule lm = applogin.LoadLogin();
            if (lm.WxLogin != "1")
            {
                this.Response.Clear();
                this.Response.Write("<script>alert('未开启微信登陆')</script>");
                return;
            }
            wechat.corpId  = lm.WxId;
            wechat.agentId = lm.WxAgentId;
            wechat.secret  = lm.WxSecret;
            linsql         = lm.WxLinkSql;
        }
        if (String.IsNullOrEmpty(app))
        {
            app = "main";
        }

        if (String.IsNullOrEmpty(code))
        {
            YZUrlBuilder uri = new YZUrlBuilder("https://open.weixin.qq.com/connect/oauth2/authorize");
            uri.QueryString["appid"]         = wechat.corpId;
            uri.QueryString["response_type"] = "code";
            uri.QueryString["redirect_uri"]  = this.Request.Url.ToString();
            uri.QueryString["scope"]         = "SCOPE";
            uri.QueryString["state"]         = "STATE#wechat_redirect";

            this.Response.Redirect(uri.ToString());
        }
        else
        {
            try
            {
                JObject jApp        = jApps[app] as JObject;
                string  accesstoken = WeChatManager.Instance.GetAccessToken(wechat.corpId, wechat.secret);
                string  userid      = WeChatManager.Instance.TryGetUserIdFromCode(accesstoken, code);
                string  ticket      = WeChatManager.Instance.GetJSapiTicket(accesstoken);
                string  timeStamp   = WeChatManager.Instance.GetTimeStamp();
                string  nonceStr    = YZSecurityHelper.SecurityKey;
                string  url         = this.Request.Url.ToString();
                string  signature   = WeChatManager.Instance.GenSigurate(nonceStr, timeStamp, ticket, url);

                if (String.IsNullOrEmpty(userid))
                {
                    throw new Exception("非企业号用户!");
                }

                if (!string.IsNullOrEmpty(linsql))
                {
                    string sql = string.Format(linsql, userid);
                    userid = Convert.ToString(DBUtil_APP.GetSingle(sql));
                }

                using (BPMConnection cn = new BPMConnection())
                {
                    cn.WebOpenAnonymous();
                    string regularAccount = null;
                    if (!BPM.Client.User.IsAccountExist(cn, userid, ref regularAccount))
                    {
                        throw new Exception(String.Format("当前企业号登录用户{0},不是有效的BPM账号!", userid));
                    }

                    YZAuthHelper.SetAuthCookie(regularAccount);

                    this.Title = (string)jApp["title"];

                    JObject jAppResult = new JObject();
                    jAppResult["app"]       = app;
                    jAppResult["agentId"]   = wechat.agentId;
                    jAppResult["secret"]    = wechat.secret;
                    jAppResult["title"]     = jApp["title"];
                    jAppResult["corpId"]    = corpId;
                    jAppResult["timeStamp"] = timeStamp;
                    jAppResult["nonceStr"]  = nonceStr;
                    jAppResult["signature"] = signature;
                    jAppResult["jsApiList"] = jApp["jsApiList"];
                    jAppResult["xclass"]    = jApp["xclass"];
                    JObject jConfig = jApp["config"] == null ? new JObject() : JObject.FromObject(jApp["config"]);
                    jAppResult["config"] = jConfig;
                    foreach (string key in this.Request.QueryString.Keys)
                    {
                        jConfig[key] = this.Request.QueryString[key];
                    }

                    this._litApp.Text = jAppResult.ToString(Formatting.Indented, YZJsonHelper.Converters);
                }
            }
            catch (Exception exp)
            {
                if (exp.Message.Contains("query?e=40029"))
                {
                    YZUrlBuilder uri = new YZUrlBuilder("https://open.weixin.qq.com/connect/oauth2/authorize");
                    uri.QueryString["appid"]         = wechat.corpId;
                    uri.QueryString["response_type"] = "code";
                    string url   = this.Request.Url.ToString();
                    int    code2 = url.IndexOf("code");
                    url = url.Substring(0, code2 - 1);
                    uri.QueryString["redirect_uri"] = url;
                    uri.QueryString["scope"]        = "SCOPE";
                    uri.QueryString["state"]        = "STATE#wechat_redirect";
                    this.Response.Redirect(uri.ToString());
                }
                else
                {
                    this.Response.Redirect("~/YZSoft/assist/AspxError/default.aspx?err=" + HttpUtility.UrlEncode(exp.Message));
                }
            }
        }
    }
示例#15
0
    public void Default()
    {
        bool webLogin = String.Compare(WebConfigurationManager.AppSettings["WebLoginEnable"], "false", true) == 0 ? false : true;
        bool ntLogin  = String.Compare(WebConfigurationManager.AppSettings["NTLoginEnable"], "false", true) == 0 ? false : true;

        this._btnLogin.InnerHtml   = Resources.YZStrings.Aspx_Login_BtnLogin;
        this._btnLoginNT.InnerHtml = Resources.YZStrings.Aspx_Login_BtnNTLogin;

        //调转到单点登录
        string ssoUrl = this.ssoUrl;
        string ssoReturnUrlParamName = this.ssoReturnUrlParamName;

        if (!String.IsNullOrEmpty(ssoUrl))
        {
            YZUrlBuilder url = YZUrlBuilder.FromPath(ssoUrl);
            url.QueryString[ssoReturnUrlParamName] = this.ReturnUrl;

            Response.Redirect(url.ToString(), true);
        }

        //页标题
        this.Page.Title = System.Web.Configuration.WebConfigurationManager.AppSettings["CompanyInfoLoginPageTitle"];
        if (String.IsNullOrEmpty(this.Page.Title))
        {
            this.Page.Title = Resources.YZStrings.Aspx_Login_Title;
        }

        //根据启动程序应用Css
        string startApp = System.Web.Configuration.WebConfigurationManager.AppSettings["StartApp"];

        if (String.IsNullOrEmpty(startApp))
        {
            startApp = "BPM2018/BPM/Portal";
        }

        string[] paths   = startApp.Split(new char[] { '/', '\\' });
        string   cssfile = String.Format("../../../{0}/login.css", paths[0]);

        if (paths.Length >= 1 && System.IO.File.Exists(Server.MapPath(cssfile)))
        {
            this._litLoginCss.Text = String.Format("<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />", cssfile);
        }

        //初始化画面
        List <string> pnlCls = new List <string>();

        pnlCls.Add("login-panel");

        this._txtUid.Attributes["placeholder"] = Resources.YZStrings.Aspx_Login_Placeholder_Account;
        this._txtPwd.Attributes["placeholder"] = Resources.YZStrings.Aspx_Login_Placeholder_Password;

        if (!webLogin)
        {
            this._txtUid.Disabled   = true;
            this._txtPwd.Disabled   = true;
            this._btnLogin.Disabled = true;
            pnlCls.Add("web-login-denied");
        }

        if (!ntLogin)
        {
            this._btnLoginNT.Disabled = true;
            pnlCls.Add("nt-login-denied");
        }

        this._pnlLogin.Attributes["class"] = String.Join(" ", pnlCls.ToArray());
    }
示例#16
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!YZAuthHelper.IsAuthenticated)
        {
            string token = this.Request.QueryString["Token"];
            if (!String.IsNullOrEmpty(token))
            {
                using (SqlConnection cn = new SqlConnection())
                {
                    cn.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["BPMDB"].ConnectionString;
                    cn.Open();

                    using (SqlCommand cmd = new SqlCommand())
                    {
                        cmd.Connection  = cn;
                        cmd.CommandText = "SELECT StepID,Account,hash FROM BPMInstProcessToken WHERE Token=@Token";
                        cmd.Parameters.Add("@Token", SqlDbType.NVarChar).Value = token;

                        using (DBReader reader = new DBReader(cmd.ExecuteReader()))
                        {
                            if (reader.Read())
                            {
                                int    stepid      = Int32.Parse(this.Request.QueryString["pid"]);
                                int    stepidSaved = reader.ReadInt32(0);
                                string account     = reader.ReadString(1);
                                string hash        = reader.ReadString(2);

                                if (stepid == stepidSaved)
                                {
                                    List <string> values = new List <string>();
                                    values.Add(token);
                                    values.Add(stepid.ToString());
                                    values.Add(account);

                                    if (YZSecurityHelper.CheckHash(values, hash, YZSecurityHelper.SecurityKey))
                                    {
                                        YZAuthHelper.SetAuthCookie(account);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        if (!YZAuthHelper.IsAuthenticated)
        {
            FormsAuthentication.RedirectToLoginPage();
            return;
        }

        int pid = Int32.Parse(this.Request["pid"]);

        BPM.Client.ProcessInfo processInfo;

        using (BPMConnection cn = new BPMConnection())
        {
            cn.WebOpen();

            //如果是共享任务,表单打开时直接获取共享任务
            //BPMProcStep step = BPMProcStep.Load(cn,pid);
            //if (step.Share)
            //    BPMProcStep.PickupShareStep(cn, pid);

            processInfo = BPMProcess.GetProcessInfo(cn, pid);
        }

        if (String.IsNullOrEmpty(processInfo.FormFile))
        {
            throw new Exception(Resources.YZStrings.Aspx_Process_MissForm);
        }
        else
        {
            YZUrlBuilder urlBuilder = YZUtility.GetFormRedirectUrl(this.Page, processInfo.FormFile);
            this.Response.Redirect(urlBuilder.ToString(), true);
        }
    }