Пример #1
0
 /// <summary>
 /// 进行DES解密。
 /// </summary>
 /// <param name="pToDecrypt">要解密的以Base64</param>
 /// <param name="sKey">密钥,且必须为8位。</param>
 /// <returns>已解密的字符串。</returns>
 private string Decrypt(string pToDecrypt, string sKey)
 {
     byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
     try
     {
         using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
         {
             des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
             des.IV  = ASCIIEncoding.ASCII.GetBytes(sKey);
             System.IO.MemoryStream ms = new System.IO.MemoryStream();
             using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
             {
                 cs.Write(inputByteArray, 0, inputByteArray.Length);
                 cs.FlushFinalBlock();
                 cs.Close();
             }
             string str = Encoding.UTF8.GetString(ms.ToArray());
             ms.Close();
             return(str);
         }
     }
     catch (Exception ept)
     {
         LogTrace.TraceException(ept);
         return(String.Empty);
     }
 }
Пример #2
0
        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public int ExecuteSeaFileGetUnseenMessageRequest(String strToken)
        {
            LogTrace.TraceInfo("ExecuteSeaFileGetUnseenMessageRequest");

            try
            {
                HttpWebRequest req = CreateSeaFileGetUnseenMessageRequest(strToken);
                if (req != null)
                {
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                    LogTrace.TraceInfo("Response code for GetUnseenMessage is {0}", res.StatusCode);

                    String strResponse = String.Empty;

                    Stream       rStream = res.GetResponseStream();
                    StreamReader sr      = new StreamReader(rStream);
                    strResponse = sr.ReadToEnd();

                    req.Abort();
                    res.Close();

                    JObject jo = (JObject)JsonConvert.DeserializeObject(strResponse);
                    return(Convert.ToInt32(jo["count"].ToString()));
                }

                return(0);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(0);
            }
        }
Пример #3
0
        /// <summary>
        /// 计算文件分块大小
        /// </summary>
        private int CaculateProgressBarMaxSize(int iFileLength)
        {
            int iStep = 0;

            if (iFileLength <= 5242880)
            {
                iStep = 204800;
            }
            else if (iFileLength <= 10485760)
            {
                iStep = 512000;
            }
            else if (iFileLength <= 20971520)
            {
                iStep = 1048576;
            }
            else
            {
                iStep = 2097152;
            }

            LogTrace.TraceVerbose("Caculate the size of bytes ({0}) that in the uploading stream each time.", iStep);

            return((int)Math.Ceiling((double)iFileLength / (double)iStep));
        }
Пример #4
0
        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public HttpSeaFileGetUpdateLinkResponse ExecuteSeaFileGetUpdateLinkRequest(String strToken, String strRepoId)
        {
            LogTrace.TraceInfo("ExecuteSeaFileGetUpdateLinkRequest");

            HttpSeaFileGetUpdateLinkResponse rsp = new HttpSeaFileGetUpdateLinkResponse();

            try
            {
                HttpWebRequest req = CreateSeaFileGetUpdateLinkRequest(strToken, strRepoId);
                if (req != null)
                {
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();

                    LogTrace.TraceInfo("Response code for GetUpdateLink is {0}", res.StatusCode);

                    Stream       rStream = res.GetResponseStream();
                    StreamReader sr      = new StreamReader(rStream);
                    rsp.URL = sr.ReadToEnd();

                    req.Abort();
                    res.Close();

                    return(rsp);
                }

                return(null);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(null);
            }
        }
Пример #5
0
        /// <summary>
        /// 创建PutOid请求,通过之前预申请的oid向Wos云端上传文件
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWebRequest对象</returns>
        private HttpWebRequest CreateSeaFileTokenRequest(String strUserName, String strPassword)
        {
            LogTrace.TraceInfo("CreateSeaFileTokenRequest");

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + "/api2/auth-token/");

            MemoryStream memoryStream = new MemoryStream();
            StreamWriter writer       = new StreamWriter(memoryStream);

            String strPost = "username="******"&password="******"POST";
            req.ContentType = " application/x-www-form-urlencoded";
            req.Timeout     = 10000;
            req.KeepAlive   = false;

            UTF8Encoding encode = new UTF8Encoding();

            memoryStream.Write(encode.GetBytes(strPost), 0, encode.GetBytes(strPost).Length);
            writer.Flush();


            using (Stream stream = req.GetRequestStream())
            {
                memoryStream.WriteTo(stream);
            }

            memoryStream.Close();
            writer.Close();


            return(req);
        }
Пример #6
0
        /// <summary>
        /// 创建PutOid请求,通过之前预申请的oid向Wos云端上传文件
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWebRequest对象</returns>
        public String ExecuteCreateSeaFileCreateDownloadLinkRequest(String strToken, String strRepoId, String strPath, String strPassword, int iExpire)
        {
            LogTrace.TraceInfo("ExecuteCreateSeaFileCreateDownloadLinkRequest");

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + "/api2/repos/" + strRepoId + "/file/shared-link/");

            req.Method      = "PUT";
            req.ContentType = "application/x-www-form-urlencoded";
            req.Accept      = "application/json; indent=4";
            req.UserAgent   = "curl/7.19.0 (i586-pc-mingw32msvc) libcurl/7.19.0 zlib/1.2.3";
            req.Headers.Add("Authorization: Token " + strToken);
            req.Timeout   = 10000;
            req.KeepAlive = false;

            String strPutContent = "p=" + strPath;

            if (strPassword != null && strPassword != String.Empty)
            {
                strPutContent += "&password="******"&expire=" + iExpire.ToString();
            }

            UTF8Encoding code = new UTF8Encoding();

            try
            {
                Stream postStream = req.GetRequestStream();

                postStream.Write(code.GetBytes(strPutContent), 0, code.GetBytes(strPutContent).Length);

                postStream.Close();

                HttpWebResponse res = (HttpWebResponse)req.GetResponse();

                if (res.StatusCode == System.Net.HttpStatusCode.Created)
                {
                    LogTrace.TraceInfo("Response code for CreateDownloadLink is {0}", res.StatusCode);

                    req.Abort();
                    res.Close();

                    return(res.Headers["Location"].ToString());
                }

                req.Abort();
                res.Close();
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(String.Empty);
            }

            return(String.Empty);
        }
Пример #7
0
        /// <summary>
        /// 创建PutOid请求,通过之前预申请的oid向Wos云端上传文件
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWebRequest对象</returns>
        public Boolean ExecuteCreateSeaFileCreateNewDirectoryRequest(String strToken, String strRepoId, String strPath)
        {
            LogTrace.TraceInfo("ExecuteCreateSeaFileCreateNewDirectoryRequest");

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + "/api2/repos/" + strRepoId + "/dir/?p=" + strPath);

            req.Method      = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.Accept      = "application/json; indent=4";
            req.UserAgent   = "curl/7.19.0 (i586-pc-mingw32msvc) libcurl/7.19.0 zlib/1.2.3";
            req.Headers.Add("Authorization: Token " + strToken);
            req.Timeout   = 10000;
            req.KeepAlive = false;

            String strPostContent = "operation=mkdir";

            UTF8Encoding code = new UTF8Encoding();

            try
            {
                Stream postStream = req.GetRequestStream();

                postStream.Write(code.GetBytes(strPostContent), 0, code.GetBytes(strPostContent).Length);

                postStream.Close();

                HttpWebResponse res = (HttpWebResponse)req.GetResponse();

                if (res.StatusCode == System.Net.HttpStatusCode.Created)
                {
                    LogTrace.TraceInfo("Response code for CreateNewDirectory is {0}", res.StatusCode);

                    String strResponse = String.Empty;

                    Stream       rStream = res.GetResponseStream();
                    StreamReader sr      = new StreamReader(rStream);
                    strResponse = sr.ReadToEnd();

                    req.Abort();
                    res.Close();

                    if (strResponse == "\"success\"")
                    {
                        return(true);
                    }
                }
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(false);
            }

            return(false);
        }
Пример #8
0
        /// <summary>
        /// 创建PutOid请求,通过之前预申请的oid向Wos云端上传文件
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWebRequest对象</returns>
        public String ExecuteCreateSeaFileCreateLibraryRequest(String strToken, String strLibrary)
        {
            LogTrace.TraceInfo("ExecuteCreateSeaFileCreateLibraryRequest");

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + "/api2/repos/");

            req.Method      = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.Accept      = "application/json; indent=4";
            req.UserAgent   = "curl/7.19.0 (i586-pc-mingw32msvc) libcurl/7.19.0 zlib/1.2.3";
            req.Headers.Add("Authorization: Token " + strToken);
            req.Timeout   = 10000;
            req.KeepAlive = false;

            String strPostContent = "name=" + strLibrary.Trim() + "&desc=new library";

            UTF8Encoding code = new UTF8Encoding();

            try
            {
                Stream postStream = req.GetRequestStream();

                postStream.Write(code.GetBytes(strPostContent), 0, code.GetBytes(strPostContent).Length);

                postStream.Close();

                HttpWebResponse res = (HttpWebResponse)req.GetResponse();

                LogTrace.TraceInfo("Response code for CreateLibrary is {0}", res.StatusCode);

                String strResponse = String.Empty;

                Stream       rStream = res.GetResponseStream();
                StreamReader sr      = new StreamReader(rStream);
                strResponse = sr.ReadToEnd();

                req.Abort();
                res.Close();

                LogTrace.TraceVerbose("Got Server response [{0}]", strResponse);

                JObject jo = (JObject)JsonConvert.DeserializeObject(strResponse);
                return(jo["repo_id"].ToString());
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(String.Empty);
            }
        }
Пример #9
0
 /// <summary>
 /// 从注册表中获取Web Service的URL地址
 /// </summary>
 private void GetWebServiceURL()
 {
     try
     {
         RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\MICROSOFT\OFFICE\OUTLOOK\ADDINS\PinganAttachment.OutlookAddin", false);
         WebServiceUrl = regKey.GetValue("WosAppServiceURL").ToString();
         LogTrace.TraceVerbose("Read web service URL({0}) from register table.", WebServiceUrl);
     }
     catch (Exception ept)
     {
         WebServiceUrl = String.Empty;
         LogTrace.TraceException(ept);
     }
 }
Пример #10
0
        /// <summary>
        /// 创建PutOid请求,通过之前预申请的oid向Wos云端上传文件
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWebRequest对象</returns>
        private HttpWebRequest CreateSeaFilePingRequest(String strToken)
        {
            LogTrace.TraceInfo("CreateSeaFilePingRequest");

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + "/api2/auth/ping/");

            req.Method = "Get";
            req.Accept = "application/json; indent=4";
            req.Headers.Add("Authorization: Token " + strToken);
            req.Timeout   = 5000;
            req.KeepAlive = false;

            return(req);
        }
Пример #11
0
        /// <summary>
        /// 创建PutOid请求,通过之前预申请的oid向Wos云端上传文件
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWebRequest对象</returns>
        private HttpWebRequest CreateSeaFileGetDirectoryEntriesRequest(String strToken, String strRepoId, String strPath)
        {
            LogTrace.TraceInfo("CreateSeaFileGetDirectoryEntriesRequest");

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + "/api2/repos/" + strRepoId + "/dir/?p=" + strPath);

            req.Method = "Get";
            req.Accept = "application/json; indent=4";
            req.Headers.Add("Authorization: Token " + strToken);
            req.Timeout   = 15000;
            req.KeepAlive = false;

            return(req);
        }
Пример #12
0
        /// <summary>
        /// 创建PutOid请求,通过之前预申请的oid向Wos云端上传文件
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWebRequest对象</returns>
        private HttpWebRequest CreateSeaFileGetUnseenMessageRequest(String strToken)
        {
            LogTrace.TraceInfo("CreateSeaFileGetUnseenMessageRequest");

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + "/api2/unseen_messages/");

            req.Method      = "Get";
            req.ContentType = " application/x-www-form-urlencoded";
            req.Headers.Add("Authorization: Token " + strToken);
            req.Timeout   = 10000;
            req.KeepAlive = false;

            return(req);
        }
Пример #13
0
 /// <summary>
 /// 在上传过程中更新进度条状态
 /// </summary>
 private void bgwUploadFile_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
 {
     try
     {
         uploadProgressBar.Show();
         lbInfo.Hide();
         uploadProgressBar.Value = e.ProgressPercentage;
         float fProgress = ((float)e.ProgressPercentage * (float)100 / (float)uploadProgressBar.Maximum);
         uploadInfo.Text = String.Format("正在上传附件:{0}, 完成 {1:F2}%", (String)e.UserState, fProgress);
         LogTrace.TraceVerbose("Uploding file in progress, finished {0}%", fProgress);
     }
     catch (Exception ept)
     {
         LogTrace.TraceException(ept);
     }
 }
Пример #14
0
        /// <summary>
        /// 创建PutOid请求,通过之前预申请的oid向Wos云端上传文件
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWebRequest对象</returns>
        private HttpWebRequest CreateSeaFileGetUpdateLinkRequest(String strToken, String strRepoId)
        {
            LogTrace.TraceInfo("CreateSeaFileGetUpdateLinkRequest");

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + "/api2/repos/" + strRepoId + "/upload-link/");

            req.Method = "Get";
            //req.ContentType = " application/x-www-form-urlencoded";
            req.Accept    = "*/*";
            req.UserAgent = "curl/7.19.0 (i586-pc-mingw32msvc) libcurl/7.19.0 zlib/1.2.3";
            req.Headers.Add("Authorization: Token " + strToken);
            req.Timeout   = 10000;
            req.KeepAlive = false;

            return(req);
        }
Пример #15
0
 public HttpUploadingFile(string fileName, string fieldName)
 {
     this.fileName  = fileName;
     this.fieldName = fieldName;
     try
     {
         using (FileStream stream = File.OpenRead(fileName) /*new FileStream(fileName, FileMode.Open)*/)
         {
             iFileLength = (int)stream.Length;
             byte[] inBytes = new byte[stream.Length];
             stream.Read(inBytes, 0, inBytes.Length);
             data = inBytes;
         }
     }
     catch (Exception ept)
     {
         LogTrace.TraceException(ept);
     }
 }
Пример #16
0
        /// <summary>
        /// 在用户发送邮件时检查附件是否上传完成
        /// </summary>
        public void ThisAddIn_Send(Object Item, ref bool Cancel)
        {
            WindowFormRegionCollection formRegions =
                Globals.FormRegions
                [Globals.ThisAddIn.Application.ActiveInspector()];

            if (formRegions.uploadWosAttachment.UploadInProgress)
            {
                DialogResult result =
                    MessageBox.Show("有附件正在上传,是否放弃?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button3);

                if (result == DialogResult.Cancel)
                {
                    Cancel = true;
                    return;
                }
                LogTrace.TraceInfo("Send item and discard attachment uploading.");
            }
        }
Пример #17
0
        /// <summary>
        /// 在关闭邮件编辑窗口时进行一些处理
        /// </summary>
        public void MailItem_Close(ref bool Cancel)
        {
            if (UploadInProgress)
            {
                DialogResult result =
                    MessageBox.Show("有附件正在上传,是否继续退出?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button3);

                if (result == DialogResult.Cancel)
                {
                    Cancel = true;
                    return;
                }

                m_bgwUploadFile.CancelAsync();
                m_bUploadInProgress = false;

                LogTrace.TraceInfo("Close item edit window and discard attachment uploading.");
            }
        }
Пример #18
0
        /// <summary>
        /// 插件启动的时候,进行初始化配置
        /// </summary>
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            inspectors = this.Application.Inspectors;
            inspectors.NewInspector +=
                new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(Inspectors_NewInspector);

            this.Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(ThisAddIn_Send);
            //this.Application.ItemLoad += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemLoadEventHandler(ThisAddIn_Load);

            try
            {
                //GetWebServiceURL();
                //QueryProfile();
                LoadProfile();
            }
            catch (Exception ep)
            {
                WebServiceUrl = String.Empty;
                LogTrace.TraceException(ep);
            }

            RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall", true);

            if (regKey != null)
            {
                String[] strSubKeyNames = regKey.GetSubKeyNames();
                foreach (String strKeyName in strSubKeyNames)
                {
                    RegistryKey regSubKey = regKey.OpenSubKey(strKeyName);
                    try
                    {
                        if (regSubKey.GetValue("DisplayName").ToString().Trim() == "PinganAttachment.OutlookAddin")
                        {
                            regKey.DeleteSubKeyTree(strKeyName);
                        }
                    }
                    catch
                    {}
                }
            }

            //m_tmQueryProfile.Tick += TimerQueryProfile_Tick;
        }
Пример #19
0
        private void btSelectShareFile_Click(object sender, EventArgs e)
        {
            String strSelectedFile = String.Empty;

            ShareFileSelectDialog dlgFileSelect = new ShareFileSelectDialog();

            if (dlgFileSelect.ShowDialog() == DialogResult.OK)
            {
                strSelectedFile = dlgFileSelect.strSelectedFile;
            }
            else
            {
                //MessageBox.Show("读取网盘数据失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            String[] strArrSelectedFile = strSelectedFile.Split(';');

            if (!SeafileLogon())
            {
                LogTrace.TraceError("Fileshare logon failed.");
                return;
            }

            foreach (String strFile in strArrSelectedFile)
            {
                String strDownloadLink = httpClient.ExecuteCreateSeaFileCreateDownloadLinkRequest(m_strToken, m_strRepoID, strFile, Globals.ThisAddIn.GetShareFilePassword(), Globals.ThisAddIn.GetExpireDates());
                String strFileName     = strFile.Substring(strFile.LastIndexOf("/"));

                if (strDownloadLink != null && strDownloadLink != "" && strDownloadLink != string.Empty)
                {
                    ReplceAttachment(strFileName, strDownloadLink);

                    LogTrace.TraceInfo("Fileshare replace file {0} with Link {1} Expire time {2}", strFileName, strDownloadLink, Globals.ThisAddIn.GetExpireDates());
                }
                else
                {
                    MessageBox.Show("文件(" + strFileName + ")下载链接获取失败");
                    LogTrace.TraceError("Retrieve file {0} download link failed", strFileName);
                }
            }
        }
Пример #20
0
        /// <summary>
        /// 替换附件为下载页面(HTML文件)
        /// </summary>
        private void ReplceAttachment(String strFileName, String strDownloadURL)
        {
            //ClientProfile profile = Globals.ThisAddIn.Profile;
            //OBSUploadManagement obsMgr = new OBSUploadManagement(Globals.ThisAddIn.WebServiceUrl);

            Outlook.Application objApplication = Globals.ThisAddIn.Application;
            Outlook.Inspector   objInspector   = objApplication.ActiveInspector();

            //替换附件到邮件中
            try
            {
                String       strTempFolder = System.Environment.GetEnvironmentVariable("TEMP");
                DownloadPage htmlPage      = new DownloadPage();
                htmlPage.FileName    = strFileName;
                htmlPage.PageContent = "<script language=\"javascript\" type=\"text/javascript\"> window.location.href='" + strDownloadURL + "'; </script>";
                String     strTempFile = strTempFolder + @"\" + htmlPage.FileName + ".htm";
                FileStream stream      = File.Create(strTempFile);

                StreamWriter sWrite = new StreamWriter(stream);
                sWrite.Write(htmlPage.PageContent);
                sWrite.Close();
                stream.Close();

                LogTrace.TraceVerbose("Create Temp file under: {0}", strTempFile);

                ((dynamic)objInspector.CurrentItem).Attachments.Add(strTempFile, Outlook.OlAttachmentType.olByValue, 1, strFileName);
                ((dynamic)objInspector.CurrentItem).Save();

                if (File.Exists(strTempFile))
                {
                    //如果存在则删除
                    File.Delete(strTempFile);
                    LogTrace.TraceVerbose("Remove Temp file under: {0}", strTempFile);
                }
            }
            catch (Exception ept)
            {
                MessageBox.Show("Add attachment failed.  " + ept.Message);
                LogTrace.TraceException(ept);
                UploadInProgress = false;
            }
        }
Пример #21
0
        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public Boolean ExecuteSeaFilePingRequest(String strToken)
        {
            LogTrace.TraceInfo("ExecuteSeaFilePingRequest");

            try
            {
                HttpWebRequest req = CreateSeaFilePingRequest(strToken);
                if (req != null)
                {
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();

                    LogTrace.TraceInfo("Response code for Ping is {0}", res.StatusCode);

                    String strResponse = String.Empty;

                    Stream       rStream = res.GetResponseStream();
                    StreamReader sr      = new StreamReader(rStream);
                    strResponse = sr.ReadToEnd();

                    req.Abort();
                    res.Close();

                    if (strResponse != "\"pong\"")
                    {
                        return(false);
                    }
                    else
                    {
                        return(true);
                    }
                }

                return(false);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(false);
            }
        }
Пример #22
0
        //************************************************************************************************
        //** Execution Functions
        //************************************************************************************************

        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public HttpSeaFileTokenResponse ExecuteSeaFileTokenRequest(String strUser, String strPassword)
        {
            LogTrace.TraceInfo("ExecuteSeaFileTokenRequest");

            HttpSeaFileTokenResponse rsp = new HttpSeaFileTokenResponse();

            try
            {
                HttpWebRequest req = CreateSeaFileTokenRequest(strUser, strPassword);
                if (req != null)
                {
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();

                    LogTrace.TraceInfo("Response code for TokenRequest is {0}", res.StatusCode);

                    String strResponse = String.Empty;

                    Stream       rStream = res.GetResponseStream();
                    StreamReader sr      = new StreamReader(rStream);
                    strResponse = sr.ReadToEnd();

                    JObject jo = (JObject)JsonConvert.DeserializeObject(strResponse);
                    rsp.Token = jo["token"].ToString();

                    req.Abort();
                    res.Close();

                    return(rsp);
                }

                return(null);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(null);
            }
        }
Пример #23
0
        /// <summary>
        /// 计算Hash值
        /// </summary>
        private string HashFile(System.IO.Stream stream, string strAlgName)
        {
            System.Security.Cryptography.HashAlgorithm algorithm;

            if (strAlgName == null)
            {
                LogTrace.TraceWarning("algName 不能为空");
            }
            if (string.Compare(strAlgName, "sha1", true) == 0)
            {
                algorithm = System.Security.Cryptography.SHA1.Create();
            }
            else
            {
                if (string.Compare(strAlgName, "md5", true) != 0)
                {
                    LogTrace.TraceWarning("algName 只能使用 sha1 或 md5");
                }
                algorithm = System.Security.Cryptography.MD5.Create();
            }

            return(BitConverter.ToString(algorithm.ComputeHash(stream)).Replace("-", ""));
        }
Пример #24
0
        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public HttpSeaFileGetDefaultLibraryResponse ExecuteSeaFileGetDefaultLibraryRequest(String strToken)
        {
            LogTrace.TraceInfo("ExecuteSeaFileGetDefaultLibraryRequest");

            HttpSeaFileGetDefaultLibraryResponse rsp = new HttpSeaFileGetDefaultLibraryResponse();

            try
            {
                HttpWebRequest req = CreateSeaFileGetDefaultLibraryRequest(strToken);
                if (req != null)
                {
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                    LogTrace.TraceInfo("Response code for GetDefaultLibrary is {0}", res.StatusCode);
                    String strResponse = String.Empty;

                    Stream       rStream = res.GetResponseStream();
                    StreamReader sr      = new StreamReader(rStream);
                    strResponse = sr.ReadToEnd();

                    JObject jo = (JObject)JsonConvert.DeserializeObject(strResponse);
                    rsp.RepoId = jo["repo_id"].ToString();
                    rsp.Exists = jo["exists"].ToString();

                    req.Abort();
                    res.Close();

                    return(rsp);
                }

                return(null);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(null);
            }
        }
Пример #25
0
        public void CheckLogon(/*object source, System.Timers.ElapsedEventArgs e*/)
        {
            RegistryKey regKey    = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\MICROSOFT\OFFICE\OUTLOOK\ADDINS\PinganAttachment.OutlookAddin", true);
            String      strDesKey = Globals.ThisAddIn.Application.Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress.Substring(0, 8);

            String m_strToken = String.Empty;

            if (regKey != null)
            {
                try
                {
                    m_strToken = Decrypt(regKey.GetValue("token").ToString(), strDesKey);
                }
                catch (Exception ept)
                {
                    LogTrace.TraceException(ept);
                    pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    return;
                }
            }
            else
            {
                pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                return;
            }

            if (m_strToken == null || m_strToken == String.Empty)
            {
                pbLogon.Image = global::FileToUpload.Properties.Resources.off;
            }
            else
            {
                WosHttpClient httpClient = null;
                string        strUrl     = Globals.ThisAddIn.GetSeafileURL();

                if (strUrl != null && strUrl != "" && strUrl != String.Empty)
                {
                    httpClient = new WosHttpClient(strUrl);
                    LogTrace.TraceInfo("Connect to Fileshare with URL: {0}", strUrl);
                }
                else
                {
                    LogTrace.TraceError("Sharefile URL is empty, turn logon off");
                    pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    return;
                }

                try
                {
                    Boolean bCheckLogon = httpClient.ExecuteSeaFilePingRequest(m_strToken);

                    if (bCheckLogon)
                    {
                        LogTrace.TraceInfo("Turn logon on (1)");
                        pbLogon.Image = global::FileToUpload.Properties.Resources.on;
                    }
                    else
                    {
                        LogTrace.TraceInfo("Turn logon off (1)");
                        pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    }
                }
                catch (Exception ept)
                {
                    LogTrace.TraceInfo("Turn logon off (1)");
                    pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    LogTrace.TraceException(ept);
                }
            }
        }
Пример #26
0
 /// <summary>
 /// 定时器,定时获取客户端配置信息
 /// </summary>
 void TimerQueryProfile_Tick(object sender, EventArgs e)
 {
     //bool result = this.QueryProfile();
     LogTrace.TraceVerbose("Timer for Profile query triggered.");
 }
Пример #27
0
        /// <summary>
        /// 开始上传附件到OBS云端存储
        /// </summary>
        private void bgwUploadFile_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            if (m_bRegisterWindowClose == false)
            {
                ((Outlook.ItemEvents_10_Event)(dynamic) Globals.ThisAddIn.Application.ActiveInspector().CurrentItem).Close +=
                    new Microsoft.Office.Interop.Outlook.ItemEvents_10_CloseEventHandler(MailItem_Close);

                m_bRegisterWindowClose = true;
            }

            Outlook.Application objApplication = Globals.ThisAddIn.Application;
            Outlook.Inspector   objInspector   = objApplication.ActiveInspector();

            //获取入参
            Object[] objArray = (Object[])e.Argument;

            String[] strArrFilePath = (String[])objArray[0];
            String[] strArrFileName = (String[])objArray[1];


            if (!SeafileLogon())
            {
                LogTrace.TraceError("Seafile Logon failed.");
                return;
            }

            UploadInProgress = true;

            for (int i = 0; i < strArrFilePath.Count <String>(); i++)
            {
                String strFilePath = strArrFilePath[i];
                String strFileName = strArrFileName[i];

                LogTrace.TraceInfo("Start upload file {0} : {1}", strFileName, strFilePath);

                //获取文件信息
                FileInfo fInfo = new FileInfo(strFileName, strFilePath);

                if (fInfo.FileLength > Globals.ThisAddIn.GetMaxFileSize() * 1024 * 1024)
                {
                    MessageBox.Show("文件" + strFileName + "大小超过管理员规定(" + Globals.ThisAddIn.GetMaxFileSize().ToString() + ")", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    break;
                }

                if (uploadProgressBar.InvokeRequired)
                {
                    uploadProgressBar.Invoke(new MethodInvoker(delegate
                    {
                        uploadProgressBar.Minimum = 0;
                        uploadProgressBar.Maximum = CaculateProgressBarMaxSize(fInfo.FileLength);
                        uploadProgressBar.Value   = 0;

                        LogTrace.TraceInfo("Reset ProgressBar bar, Min {0} Max {1} value {2}", uploadProgressBar.Minimum, uploadProgressBar.Maximum, uploadProgressBar.Value);
                    }));
                }

                if (!m_bUploadFolder)
                {
                    HttpSeaFileGetDirectoryEntriesResponse gdeRsp = httpClient.ExecuteSeaFileGetDirectoryEntriesRequest(m_strToken, m_strRepoID, "/" + m_strDefaultUploadFolder);

                    if (gdeRsp == null)
                    {
                        m_bUploadFolder = httpClient.ExecuteCreateSeaFileCreateNewDirectoryRequest(m_strToken, m_strRepoID, "/" + m_strDefaultUploadFolder);
                    }
                }

                HttpSeaFileGetUpdateLinkResponse gulDlg = httpClient.ExecuteSeaFileGetUpdateLinkRequest(m_strToken, m_strRepoID);

                if (gulDlg != null)
                {
                    //upload File to ShareFile
                    httpClient.AttachFile(strFilePath, strFileName);
                    String strResult = httpClient.ExecuteBackGroundShareFileUploadFileStream(m_bgwUploadFile, m_strToken, gulDlg.URL, "/" + m_strDefaultUploadFolder);
                    if (strResult == null || strResult == String.Empty)
                    {
                        MessageBox.Show("上传文件 " + strFileName + " 失败!");
                        LogTrace.TraceError("Upload file {0} failed.", strFileName);
                    }
                    else
                    {
                        String strDownloadLink = httpClient.ExecuteCreateSeaFileCreateDownloadLinkRequest(m_strToken, m_strRepoID, "/" + m_strDefaultUploadFolder + "/" + strFileName, "", 0);

                        if (strDownloadLink != null && strDownloadLink != "" && strDownloadLink != String.Empty)
                        {
                            LogTrace.TraceInfo("Replace attachment {0} with Link {1}", strFileName, strDownloadLink);
                            ReplceAttachment(strFileName, strDownloadLink);
                        }
                        else
                        {
                            MessageBox.Show("文件(" + strFileName + ")下载链接获取失败");
                            LogTrace.TraceError("Get Download Link for file {0} is empty", strFileName);
                        }
                    }
                }
                else
                {
                    LogTrace.TraceError("Retrieve Upload URL failed.");
                }
            }

            UploadInProgress = false;
        }
Пример #28
0
        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public HttpSeaFileGetDirectoryEntriesResponse ExecuteSeaFileGetDirectoryEntriesRequest(String strToken, String strRepoId, string strPath)
        {
            LogTrace.TraceInfo("ExecuteSeaFileGetDirectoryEntriesRequest");

            try
            {
                HttpSeaFileGetDirectoryEntriesResponse rsp = new HttpSeaFileGetDirectoryEntriesResponse();

                HttpWebRequest req = CreateSeaFileGetDirectoryEntriesRequest(strToken, strRepoId, strPath);
                if (req != null)
                {
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();

                    LogTrace.TraceInfo("Response code for GetDirectoryEntries is {0}", res.StatusCode);

                    String strResponse = String.Empty;

                    Stream       rStream = res.GetResponseStream();
                    StreamReader sr      = new StreamReader(rStream);
                    strResponse = sr.ReadToEnd();

                    LogTrace.TraceVerbose("Got Server response [{0}]", strResponse);

                    strResponse = strResponse.Replace("[", "{\"root\":[");
                    strResponse = strResponse.Replace("]", "]}");

                    LogTrace.TraceVerbose("Got Server response replace [{0}]", strResponse);

                    JObject jo    = (JObject)JsonConvert.DeserializeObject(strResponse);
                    JToken  token = (JToken)jo["root"].First;

                    while (token != null)
                    {
                        int iSize = 0;
                        if (token["type"].ToString() == "file")
                        {
                            iSize = Convert.ToInt32(token["size"].ToString());
                        }

                        rsp.AddEntry(
                            token["permission"].ToString(),
                            token["mtime"].ToString(),
                            token["type"].ToString(),
                            token["name"].ToString(),
                            token["id"].ToString(),
                            iSize);

                        token = (JToken)token.Next;
                    }

                    req.Abort();
                    res.Close();

                    return(rsp);
                }

                return(null);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(null);
            }
        }
Пример #29
0
        private Boolean SeafileLogon()
        {
            Boolean bFoundToken = false;

            string strUrl = Globals.ThisAddIn.GetSeafileURL();

            if (strUrl != null && strUrl != "" && strUrl != String.Empty)
            {
                httpClient = new WosHttpClient(strUrl);
                LogTrace.TraceInfo("Connect to Fileshare with URL: {0}", strUrl);
            }
            else
            {
                LogTrace.TraceError("Sharefile URL is empty.");
                LogTrace.TraceInfo("Turn logon off (3)");
                pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                return(false);
            }

            String      strDesKey = Globals.ThisAddIn.Application.Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress.Substring(0, 8);
            RegistryKey regKey    = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\MICROSOFT\OFFICE\OUTLOOK\ADDINS\PinganAttachment.OutlookAddin", true);

            try
            {
                if (regKey != null)
                {
                    m_strToken = Decrypt(regKey.GetValue("token").ToString(), strDesKey);

                    if (m_strToken != null && m_strToken != String.Empty)
                    {
                        Boolean b = httpClient.ExecuteSeaFilePingRequest(m_strToken);

                        if (b)
                        {
                            LogTrace.TraceVerbose("Retrieve Token {0} from register Key.", m_strToken);
                            bFoundToken = true;
                        }
                    }
                }
                else
                {
                    bFoundToken = false;
                }
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                bFoundToken = false;
            }

            // Retrieve Token for current user
            if (!bFoundToken)
            {
                String      strLoginUser, strLoginPassword;
                LogonDialog dlg = new LogonDialog();

                DialogResult result = dlg.ShowDialog();

                if (result == DialogResult.OK)
                {
                    strLoginUser     = dlg.EmailAddress;
                    strLoginPassword = dlg.Password;

                    LogTrace.TraceVerbose("Logon user Name is {0}, password is {1}", strLoginUser, "*********");
                }
                else
                {
                    LogTrace.TraceInfo("Cancel logon");
                    LogTrace.TraceInfo("Turn logon off (4)");
                    pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    return(false);
                }

                HttpSeaFileTokenResponse rsp = httpClient.ExecuteSeaFileTokenRequest(strLoginUser, strLoginPassword);
                if (rsp != null)
                {
                    regKey.SetValue("token", Encrypt(rsp.Token, strDesKey));
                    m_strToken = rsp.Token;
                    LogTrace.TraceVerbose("Save token {0} into register key.", m_strToken);
                }
                else
                {
                    MessageBox.Show("1、如果您已是云盘用户,请输入正确的邮箱密码(开机密码)\n\r2、如果您还不是云盘用户请联系所在机构IT咨询如何申请开通,不要重复尝试登录避免邮箱帐号被锁定", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    LogTrace.TraceInfo("Turn logon off (5)");
                    pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    return(false);
                }
            }

            HttpSeaFileGetDefaultLibraryResponse gdlRsp = httpClient.ExecuteSeaFileGetDefaultLibraryRequest(m_strToken);

            if (gdlRsp != null)
            {
                m_strRepoID = gdlRsp.RepoId;
                LogTrace.TraceVerbose("Retrieve Repro Id {0}.", m_strRepoID);
                LogTrace.TraceInfo("Turn logon on (6)");
                pbLogon.Image = global::FileToUpload.Properties.Resources.on;
                return(true);
            }
            else
            {
                LogTrace.TraceError("Retrieve Repro Id failed.");
            }

            LogTrace.TraceInfo("Turn logon off (7)");
            pbLogon.Image = global::FileToUpload.Properties.Resources.off;
            return(false);
        }
Пример #30
0
        /// <summary>
        /// 选择上传的文件
        /// </summary>
        private void btSelectFile_Click(object sender, EventArgs e)
        {
            String strFilePath = String.Empty;
            String strFileName = String.Empty;
            String strFileExt  = String.Empty;

            String[] strArrFilePath;
            String[] strArrFileName;

            OpenFileDialog dlgSelectFile = new OpenFileDialog();

            dlgSelectFile.FileName    = "*.*";
            dlgSelectFile.Multiselect = true;

            //打开文件选择对话框
            if (dlgSelectFile.ShowDialog() == DialogResult.OK)
            {
                strFilePath = dlgSelectFile.FileName;
                strFileName = dlgSelectFile.SafeFileName;
                strFileExt  = Path.GetExtension(strFileName);

                strArrFileName = dlgSelectFile.SafeFileNames;
                strArrFilePath = dlgSelectFile.FileNames;
            }
            else
            {
                return;
            }

            LogTrace.TraceInfo("Select file: {0}, Path: {1}, for uploading.", strFileName, strFilePath);

            //去掉该声名,进度条将无法使用
            ProgressBar pb = new ProgressBar();

            //LogTrace.TraceVerbose("File {0} size is {1:N}", strFileName, fInfo.FileLength);

            try
            {
                LogTrace.TraceInfo("Web Server allow to upload file to Cloud.");

                //初始化进度条对象
                //uploadProgressBar.Minimum = 0;
                //uploadProgressBar.Maximum = CaculateProgressBarMaxSize(fInfo.FileLength);
                //uploadProgressBar.Value = 0;
                btSelectFile.Enabled = false;

                //调整控件位置
                uploadProgressBar.Width = this.Width / 3;
                uploadInfo.Left         = uploadProgressBar.Right + 10;

                //创建后台线程来上传附件到云盘
                m_bgwUploadFile = new BackgroundWorker();          // 实例化后台对象

                m_bgwUploadFile.WorkerReportsProgress      = true; // 设置可以通告进度
                m_bgwUploadFile.WorkerSupportsCancellation = true; // 设置可以取消

                //注册后台线程事件
                m_bgwUploadFile.DoWork                    += new DoWorkEventHandler(bgwUploadFile_DoWork);
                m_bgwUploadFile.ProgressChanged           += new ProgressChangedEventHandler(bgwUploadFile_ProgressChanged);
                m_bgwUploadFile.RunWorkerCompleted        += new RunWorkerCompletedEventHandler(bgwUploadFile_RunWorkerCompleted);
                m_bgwUploadFile.WorkerSupportsCancellation = true;

                //启动线程
                m_bgwUploadFile.RunWorkerAsync(new object[] { strArrFilePath, strArrFileName /*, uploadResponse*/ });
                LogTrace.TraceInfo("Start uploading thread for file {0}", strFileName);

                uploadInfo.Text = String.Format("准备上传附件:{0} ,请稍后...", strFileName);
            }
            catch (Exception exp)
            {
                LogTrace.TraceException(exp);
                MessageBox.Show("上传附件请求失败!", "错误");
            }
        }