public ActionResult DeleteSub(string id, string env, string sub,SubstitutionParameter model)
 {
     var subParam = reader.GetSubstitutionParameter(Server.UrlDecode(sub));
     if (subParam.Id != sub) throw new InvalidDataException("Substitution parameters don't match");
     reader.DeleteSubstitutionParameter(env, Server.UrlDecode(sub));
     return RedirectToAction("Details", "Environment", new { id = "edit", item = env });
 }
 public ActionResult EditSub(string id, string item, SubstitutionParameter model)
 {
     var subPar = reader.GetSubstitutionParameter(Server.UrlDecode(item));
     subPar.IsSecure = model.IsSecure;   
     subPar.ItemValue = model.ItemValue.IsInstance() ? model.ItemValue.TrimEnd() : null;
     subPar.Description = model.Description;
     if (subPar.IsSecure && subPar.ItemValue.ContainsCharacters()) subPar.ItemValue = subPar.ItemValue.Encrypt(KeyHelper.SharedSecret);
     if (!subPar.UserHasAccessTo()) throw new UnauthorizedAccessException("Access denied to configset");
     reader.UpdateSubstitutionParameter(subPar);
     return RedirectToAction("Details", "Environment", new { id = "edit", item = subPar.Environment.Id });
 }