示例#1
0
        public async Task <ActionResult> ShowSecret(string clientId, string hash)
        {
            var model = new ShowSecretViewModel()
            {
                ClientId   = clientId,
                Hash       = hash,
                OpenSecret = "hidden for now"
            };

            return(View(model));
        }
示例#2
0
        public async Task <ActionResult> ShowOpenSecret(string clientId, string hash, string passCode, string openSecret)
        {
            var model = new ShowSecretViewModel()
            {
                ClientId   = clientId,
                Hash       = hash,
                OpenSecret = openSecret,
                PassCode   = passCode
            };

            return(View(model));
        }
示例#3
0
        public IActionResult ShowSecret(string id)
        {
            var vm = new ShowSecretViewModel();

            string data = this.redis.StringGet(id);

            if (data != null)
            {
                RedisModel model = JsonConvert.DeserializeObject <RedisModel>(data);
                vm.HasPassphrase = model.HasPassphrase;
            }

            return(this.View(vm));
        }
示例#4
0
        public IActionResult ShowSecretConfirmed(string id)
        {
            string data = this.redis.StringGet(id);

            if (data == null)
            {
                return(this.View(new ShowSecretViewModel
                {
                    DoesntExist = true,
                }));
            }

            RedisModel model = JsonConvert.DeserializeObject <RedisModel>(data);
            var        vm    = new ShowSecretViewModel
            {
                HasPassphrase = model.HasPassphrase,
            };

            try
            {
                Microsoft.Extensions.Primitives.StringValues passphrase = this.Request.Form["passphrase"];

                string secret = this.cryptoService.DecryptData(model.EncryptedData, passphrase);

                // always delete before showing to prevent it from being seen twice
                this.redis.KeyDelete(id);

                vm.Secret = secret;
                return(this.View(vm));
            }
            catch (Exception)
            {
                if (model.HasPassphrase)
                {
                    vm.DidError = true;
                    return(this.View("ShowSecret", vm));
                }
                else
                {
                    throw;
                }
            }
        }
示例#5
0
        public async Task <ActionResult> ShowSecret(ShowSecretViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var adminStore = new IdentityServer3AdminStore();
            ProtectedSecretQueryValues queryValues = new ProtectedSecretQueryValues()
            {
                ClientId = model.ClientId,
                Value    = model.Hash
            };
            var record = await adminStore.FindSecretProtectedValue(queryValues);

            var myCrypto = new TripleDesEncryption(model.PassCode);

            model.OpenSecret = myCrypto.Decrypt(record.ProtectedValue);
            return(RedirectToAction("ShowOpenSecret",
                                    new { clientId = model.ClientId, hash = model.Hash, openSecret = model.OpenSecret, passCode = model.PassCode }));
        }