예제 #1
0
        public async Task <IActionResult> CreateStorage([FromBody] StorageRequestModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    model.Storage.User = User.Identity.Name;
                    model.Storage.IV   = encryptor.GenerateIV();

                    var result = storageContext.Storages
                                 .Where(s => s.Name == model.Storage.Name && s.User == User.Identity.Name);

                    if (model.Storage.Name == null)
                    {
                        return(new BadRequestObjectResult("Отсутствует имя хранилища"));
                    }

                    if (result.Count() != 0)
                    {
                        return(new BadRequestObjectResult("Хранилище с таким именем существует"));
                    }

                    if (!encryptor.CheckSizeKey(model.Key))
                    {
                        return(new BadRequestObjectResult("Размер ключа [16, 24, 32]"));
                    }

                    await storageContext.Storages.AddAsync(model.Storage);

                    HttpContext.Session.SetString("StorageIV", encryptor.ToString(model.Storage.IV));
                    HttpContext.Session.SetString("StorageKey", model.Key);

                    await storageContext.Words.AddAsync(
                        new WordModel()
                    {
                        User        = User.Identity.Name,
                        Storage     = model.Storage.Name,
                        ControlWord = encryptor.Encrypt(encryptor.ToByte("ControlWord"))
                    });

                    await storageContext.SaveChangesAsync();

                    //LoadStorages(storageDB, model.Storage.Name);
                    //storageDB.Connection.Close();
                    dataLite.Initializing(model.Storage.Name);
                    dataLite.Close();

                    logger.LogInformation("Хранилище создано");
                    return(new OkObjectResult("Хранилище создано"));
                }
                catch (Exception ex)
                {
                    logger.LogInformation("##### " + ex.StackTrace);
                    return(new BadRequestObjectResult(ex.Message));
                }
            }

            return(new BadRequestObjectResult("Модель данных не корректна"));
        }
        public IActionResult Create([FromBody] AccountModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var storageName = HttpContext.Session?.GetString("StorageName");
                    if (storageName == null)
                    {
                        return(new BadRequestObjectResult("Нужно зайти в хранилище"));
                    }

                    //LoadStorages(ref storageDB, storageName);
                    var storage = storageContext.Storages
                                  .Where(s => s.Name == storageName)
                                  .FirstOrDefault();

                    model = encryptor.Encrypt(model);
                    dataLite.Accounts.Add(model);
                    dataLite.Close();

                    logger.LogInformation("Аккаунт добавлен в хранилище");
                    return(new OkObjectResult("Аккаунт добавлен в хранилище"));
                }
                catch (Exception ex)
                {
                    logger.LogInformation("##### " + ex.StackTrace);
                    return(new BadRequestObjectResult(ex.Message));
                }
            }

            return(new BadRequestObjectResult("Модель не корректна"));
        }
        public async Task <IActionResult> Upload()
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var files       = Request.Form.Files;
                    var storageName = HttpContext.Session?.GetString("StorageName");

                    if (storageName == null)
                    {
                        return(new BadRequestObjectResult("Хранилище не выбрано"));
                    }

                    if (files == null)
                    {
                        return(new BadRequestObjectResult("Файл отсутствует"));
                    }

                    //LoadStorages(ref storageDB, storageName);

                    var storage = storageContext.Storages
                                  .Where(s => s.Name == storageName && s.User == User.Identity.Name)
                                  .FirstOrDefault();

                    if (storage == null)
                    {
                        new BadRequestObjectResult("Хранилище не найдено");
                    }

                    var fileName = (Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 10)).Replace(@"\", "0").Replace(@"/", "0");

                    foreach (var file in files)
                    {
                        var findFile = dataLite.Files.Get(f => f.Name == file.Name);

                        if (findFile != null)
                        {
                            return(new BadRequestObjectResult("Файл с таким именем существует"));
                        }

                        var type = file.FileName.Split('.').Last();
                        fileName += "." + type;
                        var group = file.ContentType.Split('/')[0];

                        //storageDB.Connection.Insert(
                        //    new CryptoFile()
                        //    {
                        //        Name = file.Name,
                        //        Size = Math.Round(file.Length / (double)1000000, 2),
                        //        Group = group,
                        //        Type = type,
                        //        Path = fileName
                        //    }
                        //);
                        //storageDB.Connection.Close();
                        dataLite.Files.Add(
                            new FileModel()
                        {
                            Name  = file.Name,
                            Size  = Math.Round(file.Length / (double)1000000, 2),
                            Group = group,
                            Type  = type,
                            Path  = fileName
                        }
                            );
                        dataLite.Close();

                        await encryptor.EncryptFile(file, GetDirFile() + fileName);
                    }

                    return(new OkObjectResult(files[0].Name));

                    ;
                }
                catch (Exception ex)
                {
                    logger.LogInformation("#####" + ex.StackTrace);
                    return(new BadRequestObjectResult(ex.Message));
                }
            }

            return(new BadRequestObjectResult("Модель данных не корректна"));
        }