/// <summary> /// User loggining /// </summary> /// <param name="token">User account token</param> /// <param name="password">User account password</param> /// <returns></returns> public async Task <bool> LoginUserAsync(string token, string password) { //Getting user from the database User user = await _unitOfWork.UserRepository.GetUserByToken(token); if (user != null) { //Decrypting user password string decryptedUserPassword = _decryptService.DecryptData(user.Password); if (decryptedUserPassword == password) { bool result = _unitOfWork.SignInManager.PasswordSignInAsync(user.UserName, user.Password, true, false).Result.Succeeded; if (result) { return(true); } return(false); } return(false); } return(false); }
public async Task <ActionResult <IEnumerable <string> > > Get(string password = null, string token = null) { if (string.IsNullOrWhiteSpace(token) && string.IsNullOrWhiteSpace(password)) { User user = await _unitOfWork.UserManager.GetUserAsync(User); if (user != null) { token = user.Token; password = _decryptService.DecryptData(user.Password); } else { return(null); } } //List of added user files to the database List <string> result = _fileService.GetFiles(password, token); if (result != null) { return(Ok(result)); } else { return(BadRequest()); } }
public async Task <ActionResult <string> > Post(IFormFile file, string userToken = null, string password = null) { if (string.IsNullOrWhiteSpace(userToken) && string.IsNullOrWhiteSpace(password)) { User user = await _unitOfWork.UserManager.GetUserAsync(User); if (user != null) { userToken = user.Token; password = _decryptService.DecryptData(user.Password); } else { return(BadRequest(JsonConvert.SerializeObject(new ResultOfApiRequest <string>("User doesn't exist", HttpStatusCode.BadRequest)))); } } if (file != null) { //Getting result of adding data to the database ResultOfApiRequest <string> result = await _postDataService.AddDataToTheChain(file, userToken, password); //Converting result to json format string jsonData = JsonConvert.SerializeObject(result); if (result.StatusCode == HttpStatusCode.OK) { return(Ok(jsonData)); } else { return(BadRequest(jsonData)); } } return(BadRequest(JsonConvert.SerializeObject(new ResultOfApiRequest <string>(string.Empty, HttpStatusCode.BadRequest)))); }
/// <summary> /// Get user file from the database for downloading /// </summary> /// <param name="token">User token</param> /// <param name="password">User password</param> /// <param name="fileName">User file name</param> /// <returns></returns> public async Task <ResultOfApiRequest <UserFile> > GetFile(string token, string password, string fileName) { //Getting user blocks from the database List <Block> blocks = _unitOfWork.BlockRepository.GetBlocksByUserToken(token); //Getting user from the databse User userFromDb = await _unitOfWork.UserRepository.GetUserByToken(token); //Creating object of the user file UserFile userFile = new UserFile(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), new byte[0]); //Result of the method ResultOfApiRequest <UserFile> result; //Decrypting user password string userDecryptedPassword = _decryptService.DecryptData(userFromDb?.Password); if (blocks != null && userFromDb != null && userDecryptedPassword == password) { foreach (var block in blocks) { if (block.Data.Title == fileName) { userFile = block.Data; break; } } if (userFile.Data.Length > 0) { result = new ResultOfApiRequest <UserFile>(userFile, HttpStatusCode.OK); return(result); } else { result = new ResultOfApiRequest <UserFile>(userFile, HttpStatusCode.BadRequest); return(result); } } result = new ResultOfApiRequest <UserFile>(userFile, HttpStatusCode.BadRequest); return(result); }
/// <summary> /// Adding data to the block and adding block to the chain /// </summary> /// <param name="data">Data of the block</param> /// <returns></returns> public async Task <ResultOfApiRequest <string> > AddDataToTheChain(IFormFile file, string userToken, string password, bool isTest = false) { //Creating the chain and if chain is exist it will be downloaded from database Chain chain = new Chain(_unitOfWork); ResultOfApiRequest <string> result; //Getting user from the database User userFromDb = await _unitOfWork.UserRepository.GetUserByToken(userToken); //Creating new file name which will be saved to the database string newFileName = Guid.NewGuid().ToString() + file.FileName; //Decrypting user password for checking if it equal to requester password string userDecryptedPassword = _decryptService.DecryptData(userFromDb?.Password); if (userFromDb != null && userDecryptedPassword == password) { //Directory name where will be saved user file string dirName = "DataFromUsers"; if (!Directory.Exists(dirName)) { Directory.CreateDirectory(dirName); } //Massive of bytes of the user file byte[] fileData; UserFile userFile; DirectoryInfo directoryInfo = new DirectoryInfo(dirName); foreach (var fileInfo in directoryInfo.GetFiles()) { fileInfo.Delete(); } //Checking if method is not used in testing if (!isTest) { //Creating user file in directory using (var fstream = new FileInfo($"DataFromUsers/{newFileName}").Create()) { file.CopyTo(fstream); fstream.Close(); } //Getting file info for opening this file FileInfo fileInfo = new FileInfo($"DataFromUsers/{newFileName}"); //Reading bytes from the file using (FileStream fs = new FileStream(fileInfo.FullName, FileMode.Open)) { fileData = new byte[fs.Length]; await fs.ReadAsync(fileData, 0, fileData.Length); fs.Close(); } //Creating object of user file userFile = new UserFile(fileInfo.FullName, fileInfo.Name, fileData); //Deleting file from the directory fileInfo.Delete(); } else { userFile = new UserFile(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), new byte[1]); } //Adding user file to the database await chain.Add(userFile, userFromDb); result = new ResultOfApiRequest <string>(newFileName, HttpStatusCode.OK); return(result); } result = new ResultOfApiRequest <string>(newFileName, HttpStatusCode.BadRequest); return(result); }