public void GetTokenTest()
        {
            var v = "";

            var models = new GetTokenModel.Input();

            models.OpMid     = "aaaa1bbbb2cccc3dddd4eeee5ffff6ee";
            models.CardNo    = "7413159981000227";
            models.CallTime  = DateTime.Now.ToString("yyyyMMddhhmmss");
            models.MachineID = "Machine0001";
            models.Mask      = models.GetInMask();

            v = JsonConvert.SerializeObject(models);

            var controller = new SecurityController();

            var result = controller.GetToken(AesUtility.Encrypt(v));

            result = result.AesDecrypt();

            var resultObj = result.FromJson <ApiResult>();

            if (resultObj.ErrorCode == "000")
            {
                Assert.IsTrue(true, "errorCode為000");
            }

            Assert.IsFalse(true, resultObj.ErrorMessage);
        }
        public void EncryptAndDecrypt()
        {
            var inputList = new List <string>();

            inputList.Add("test123456789");
            inputList.Add("abcdefg");
            inputList.Add(Guid.NewGuid().ToString("N") + DateTime.Now.ToString("yyyyMMddhhmmss"));
            inputList.Add(Guid.NewGuid().ToString("N") + DateTime.Now.ToString("yyyyMMddhhmmss"));


            foreach (var item in inputList)
            {
                var encrypt  = AesUtility.Encrypt(item);
                var decrypt  = AesUtility.Decrypt(encrypt);
                var actual   = item;
                var expected = decrypt;
                Assert.AreEqual(expected, actual);
            }
        }
        protected bool HandlePreviewToken()
        {
            bool result = false;

            if (qsPreview == null)
            {
                return(false);
            }

            if (qsPreview == "1")
            {
                // redirect to back-stage to get authorization
                string websiteUrl = ConfigurationManager.AppSettings["WebsiteUrl"];
                string backendSsoAuthenticatorUrl = ConfigurationManager.AppSettings["BackendSsoAuthenticatorUrl"];

                if (string.IsNullOrEmpty(backendSsoAuthenticatorUrl))
                {
                    logger.Error("Invalid AppSettings/BackendSsoAuthenticatorUrl");
                    return(false);
                }

                string valueInToken = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                string token        = AesUtility.Encrypt(valueInToken, aesKeyOfFP, basicIV);
                string location     = websiteUrl + "/" + Request.AppRelativeCurrentExecutionFilePath.Replace("~/", "");
                string url          = StringUtility.SetParaValueInUrl(backendSsoAuthenticatorUrl, "token", Server.UrlEncode(token));
                url = StringUtility.SetParaValueInUrl(url, "location", Server.UrlEncode(location));
                url = AppendCurrentQueryString(url);
                Response.Redirect(url);
            }
            else
            {
                try
                {
                    // decrypt token
                    string         valueInToken   = AesUtility.Decrypt(qsPreview, aesKeyOfBP, basicIV);
                    PreviewArticle previewArticle = JsonConvert.DeserializeObject <PreviewArticle>(valueInToken);

                    if (!string.IsNullOrEmpty(previewArticle.EmpAccount))
                    {
                        if (DateTime.Now <= previewArticle.ValidTime)
                        {
                            articleData.ArticleId = new Guid(previewArticle.ArticleId);
                            result        = true;
                            isPreviewMode = true;

                            logger.DebugFormat("{0} previews {1} (id:[{2}])(lang:{3}).",
                                               previewArticle.EmpAccount,
                                               Request.AppRelativeCurrentExecutionFilePath,
                                               previewArticle.ArticleId,
                                               qsLangNo);
                        }
                        else
                        {
                            logger.InfoFormat("{0} previews {1} but exceed valid time.", previewArticle.EmpAccount, Request.AppRelativeCurrentExecutionFilePath);
                        }
                    }
                    else
                    {
                        logger.InfoFormat("user previews {0} but not logged in.", Request.AppRelativeCurrentExecutionFilePath);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error("", ex);
                }
            }

            return(result);
        }