Exemple #1
0
        /// <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);
        }
Exemple #2
0
        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());
            }
        }
Exemple #3
0
        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))));
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        /// <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);
        }