Example #1
0
        public async Task <IActionResult> ViewVault(string id)
        {
            Models.Vault foundVault = _dbContext.Vaults.Where(v => v.Url == id).FirstOrDefault();
            if (foundVault != null)
            {
                // Update view count
                foundVault.Views += 1;
                _dbContext.Entry(foundVault).State = EntityState.Modified;
                _dbContext.SaveChanges();

                ViewBag.Title = foundVault.Title + " | Vault";

                VaultViewModel model = new VaultViewModel();
                model.CurrentSub = Subdomain;

                model.Url         = foundVault.Url;
                model.UserId      = foundVault.UserId;
                model.User        = foundVault.User;
                model.Title       = foundVault.Title;
                model.Description = foundVault.Description;
                model.DateCreated = foundVault.DateCreated;
                model.DateEdited  = foundVault.DateEdited;

                if (foundVault.VaultItems.Any())
                {
                    foreach (VaultItem item in foundVault.VaultItems.OrderBy(v => v.Index))
                    {
                        if (item.GetType().BaseType == typeof(UploadVaultItem))
                        {
                            UploadVaultItem upload = (UploadVaultItem)item;
                            // Increment Views
                            upload.Upload.Downloads += 1;
                            _dbContext.Entry(upload.Upload).State = EntityState.Modified;
                            _dbContext.SaveChanges();

                            UploadItemViewModel uploadModel = new UploadItemViewModel();
                            uploadModel.VaultItemId = item.VaultItemId;
                            uploadModel.Title       = item.Title;
                            uploadModel.Description = item.Description;
                            uploadModel.DateAdded   = item.DateAdded;
                            uploadModel.Upload      = upload.Upload;
                            model.Items.Add(uploadModel);
                        }
                        else if (item.GetType().BaseType == typeof(PasteVaultItem))
                        {
                            PasteVaultItem paste = (PasteVaultItem)item;
                            // Increment Views
                            paste.Paste.Views += 1;
                            _dbContext.Entry(paste.Paste).State = EntityState.Modified;
                            _dbContext.SaveChanges();

                            // Check Expiration
                            if (PasteHelper.CheckExpiration(paste.Paste))
                            {
                                _dbContext.Pastes.Remove(paste.Paste);
                                _dbContext.SaveChanges();
                                break;
                            }

                            PasteItemViewModel pasteModel = new PasteItemViewModel();
                            pasteModel.VaultItemId = item.VaultItemId;
                            pasteModel.Title       = item.Title;
                            pasteModel.Description = item.Description;
                            pasteModel.DateAdded   = item.DateAdded;

                            pasteModel.PasteId     = paste.Paste.PasteId;
                            pasteModel.Url         = paste.Paste.Url;
                            pasteModel.DatePosted  = paste.Paste.DatePosted;
                            pasteModel.Syntax      = paste.Paste.Syntax;
                            pasteModel.HasPassword = !string.IsNullOrEmpty(paste.Paste.HashedPassword);

                            if (!pasteModel.HasPassword)
                            {
                                // Read in the file
                                string subDir   = paste.Paste.FileName[0].ToString();
                                string filePath = Path.Combine(_config.PasteConfig.PasteDirectory, subDir, paste.Paste.FileName);
                                if (!System.IO.File.Exists(filePath))
                                {
                                    continue;
                                }

                                byte[] ivBytes  = Encoding.Unicode.GetBytes(paste.Paste.IV);
                                byte[] keyBytes = AesCounterManaged.CreateKey(paste.Paste.Key, ivBytes, paste.Paste.KeySize);
                                using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
                                    using (AesCounterStream cs = new AesCounterStream(fs, false, keyBytes, ivBytes))
                                        using (StreamReader sr = new StreamReader(cs, Encoding.Unicode))
                                        {
                                            pasteModel.Content = await sr.ReadToEndAsync();
                                        }
                            }

                            model.Items.Add(pasteModel);
                        }
                    }
                }

                return(View(model));
            }
            return(new StatusCodeResult(StatusCodes.Status404NotFound));
        }
Example #2
0
        public IActionResult CreateVault(ModifyVaultViewModel model)
        {
            if (model != null)
            {
                if (!string.IsNullOrEmpty(model.title))
                {
                    Models.Vault newVault = new Models.Vault();
                    // Create a new ID
                    string url = StringHelper.RandomString(_config.VaultConfig.UrlLength);
                    while (_dbContext.Vaults.Where(v => v.Url == url).FirstOrDefault() != null)
                    {
                        url = StringHelper.RandomString(_config.VaultConfig.UrlLength);
                    }
                    newVault.Url         = url;
                    newVault.DateCreated = DateTime.Now;
                    newVault.Title       = model.title;
                    newVault.Description = model.description;
                    if (User.Identity.IsAuthenticated)
                    {
                        User user = UserHelper.GetUser(_dbContext, User.Identity.Name);
                        if (user != null)
                        {
                            newVault.UserId = user.UserId;
                        }
                    }

                    // Add/Verify items
                    if (model.items.Any())
                    {
                        int index = 0;
                        foreach (ModifyVaultItemViewModel item in model.items)
                        {
                            if (IsValidItem(item.type, item.url))
                            {
                                switch (item.type.ToLower())
                                {
                                case "upload":
                                    UploadVaultItem newUpload = new UploadVaultItem();
                                    newUpload.Index       = index;
                                    newUpload.DateAdded   = DateTime.Now;
                                    newUpload.Title       = item.title;
                                    newUpload.Description = item.description;
                                    newUpload.UploadId    = _dbContext.Uploads.Where(u => u.Url == item.url).FirstOrDefault().UploadId;
                                    newVault.VaultItems.Add(newUpload);
                                    index++;
                                    break;

                                case "paste":
                                    PasteVaultItem newPaste = new PasteVaultItem();
                                    newPaste.Index       = index;
                                    newPaste.DateAdded   = DateTime.Now;
                                    newPaste.Title       = item.title;
                                    newPaste.Description = item.description;
                                    newPaste.PasteId     = _dbContext.Pastes.Where(p => p.Url == item.url).FirstOrDefault().PasteId;
                                    newVault.VaultItems.Add(newPaste);
                                    index++;
                                    break;

                                default:
                                    return(Json(new { error = new { message = "You have an invalid item type: " + item.type } }));
                                }
                            }
                            else
                            {
                                return(Json(new { error = new { message = "You have an invalid item URL: " + item.url } }));
                            }
                        }
                    }

                    // Add and save the new vault
                    _dbContext.Vaults.Add(newVault);
                    _dbContext.SaveChanges();
                    return(Json(new { result = new { url = Url.SubRouteUrl("v", "Vault.ViewVault", new { id = url }) } }));
                }
                return(Json(new { error = new { message = "You must supply a Title" } }));
            }
            return(Json(new { error = new { message = "Invalid Parameters" } }));
        }
Example #3
0
        public IActionResult EditVault(ModifyVaultViewModel model)
        {
            if (model != null)
            {
                Vault.Models.Vault foundVault = _dbContext.Vaults.Where(v => v.VaultId == model.vaultId).FirstOrDefault();
                if (foundVault != null)
                {
                    if (foundVault.User.Username == User.Identity.Name)
                    {
                        foundVault.DateEdited  = DateTime.Now;
                        foundVault.Title       = model.title;
                        foundVault.Description = model.description;

                        // Clear previous items
                        List <VaultItem> vaultItems = _dbContext.VaultItems.Where(v => v.VaultId == foundVault.VaultId).ToList();
                        if (vaultItems != null)
                        {
                            foreach (VaultItem item in vaultItems)
                            {
                                _dbContext.VaultItems.Remove(item);
                            }
                        }
                        foundVault.VaultItems.Clear();

                        // Add/Verify items
                        if (model.items.Any())
                        {
                            int index = 0;
                            foreach (ModifyVaultItemViewModel item in model.items)
                            {
                                if (IsValidItem(item.type, item.url))
                                {
                                    switch (item.type.ToLower())
                                    {
                                    case "upload":
                                        UploadVaultItem newUpload = new UploadVaultItem();
                                        newUpload.Index       = index;
                                        newUpload.DateAdded   = DateTime.Now;
                                        newUpload.Title       = item.title;
                                        newUpload.Description = item.description;
                                        newUpload.UploadId    = _dbContext.Uploads.Where(u => u.Url == item.url).FirstOrDefault().UploadId;
                                        foundVault.VaultItems.Add(newUpload);
                                        index++;
                                        break;

                                    case "paste":
                                        PasteVaultItem newPaste = new PasteVaultItem();
                                        newPaste.Index       = index;
                                        newPaste.DateAdded   = DateTime.Now;
                                        newPaste.Title       = item.title;
                                        newPaste.Description = item.description;
                                        newPaste.PasteId     = _dbContext.Pastes.Where(p => p.Url == item.url).FirstOrDefault().PasteId;
                                        foundVault.VaultItems.Add(newPaste);
                                        index++;
                                        break;

                                    default:
                                        return(Json(new { error = new { message = "You have an invalid item type: " + item.type } }));
                                    }
                                }
                                else
                                {
                                    return(Json(new { error = new { message = "You have an invalid item URL: " + item.url } }));
                                }
                            }
                        }

                        _dbContext.Entry(foundVault).State = EntityState.Modified;
                        _dbContext.SaveChanges();

                        return(Json(new { result = new { url = Url.SubRouteUrl("v", "Vault.ViewVault", new { id = foundVault.Url }) } }));
                    }
                    return(Json(new { error = new { message = "You do not have permission to edit this Vault" } }));
                }
                return(Json(new { error = new { message = "That Vault does not exist" } }));
            }
            return(Json(new { error = new { message = "Invalid Parameters" } }));
        }
Example #4
0
        public IActionResult EditVault(string url, string type, string items)
        {
            ViewBag.Title = "Edit Vault";
            Vault.Models.Vault foundVault = _dbContext.Vaults.Where(v => v.Url == url).FirstOrDefault();
            if (foundVault != null)
            {
                if (foundVault.User.Username == User.Identity.Name)
                {
                    ViewBag.Title = "Edit Vault | " + foundVault.Title;

                    ModifyVaultViewModel model = new ModifyVaultViewModel();
                    model.CurrentSub  = Subdomain;
                    model.isEdit      = true;
                    model.vaultId     = foundVault.VaultId;
                    model.title       = foundVault.Title;
                    model.description = foundVault.Description;

                    int index = 0;
                    // Add all their existing items for the vault
                    foreach (VaultItem item in foundVault.VaultItems.OrderBy(v => v.Index))
                    {
                        ModifyVaultItemViewModel itemModel = new ModifyVaultItemViewModel();
                        itemModel.index      = index;
                        itemModel.isTemplate = false;

                        if (item.GetType().BaseType == typeof(UploadVaultItem))
                        {
                            UploadVaultItem upload = (UploadVaultItem)item;
                            itemModel.title       = upload.Title;
                            itemModel.description = upload.Description;
                            itemModel.type        = "Upload";
                            itemModel.url         = upload.Upload.Url;
                            model.items.Add(itemModel);
                            index++;
                        }
                        else if (item.GetType().BaseType == typeof(PasteVaultItem))
                        {
                            PasteVaultItem paste = (PasteVaultItem)item;
                            itemModel.title       = paste.Title;
                            itemModel.description = paste.Description;
                            itemModel.type        = "Paste";
                            itemModel.url         = paste.Paste.Url;
                            model.items.Add(itemModel);
                            index++;
                        }
                    }

                    // If they passed any new items in via the parameters, let's add them
                    if (!string.IsNullOrEmpty(type) && !string.IsNullOrEmpty(items))
                    {
                        string   decodedItems = HttpUtility.UrlDecode(items);
                        string[] allItems     = decodedItems.Split(',');
                        foreach (string newItem in allItems)
                        {
                            string[] urlInfo = newItem.Split(':');
                            string   itemId  = urlInfo[0];
                            string   title   = string.Empty;
                            if (urlInfo.GetUpperBound(0) >= 1)
                            {
                                // They also passed in the original filename, so let's use it as our title
                                title = urlInfo[1];
                            }
                            if (IsValidItem(type, itemId))
                            {
                                ModifyVaultItemViewModel item = new ModifyVaultItemViewModel();
                                item.isTemplate = false;
                                item.index      = index;
                                item.title      = title;
                                item.url        = itemId;
                                item.type       = type;
                                model.items.Add(item);
                                index++;
                            }
                        }
                    }

                    return(View("~/Areas/Vault/Views/Vault/ModifyVault.cshtml", model));
                }
                return(new StatusCodeResult(StatusCodes.Status403Forbidden));
            }
            return(new StatusCodeResult(StatusCodes.Status404NotFound));
        }