Exemplo n.º 1
0
        public async Task <ActionResult> Compression([FromForm] IFormFile file, string name)
        {
            try
            {
                #region "Compression"
                string path   = _env.ContentRootPath;
                byte[] result = null;
                byte[] copy   = null;
                using (var memory = new MemoryStream())
                {
                    await file.CopyToAsync(memory);

                    copy = memory.ToArray();
                    using (FileStream fStream = System.IO.File.Create(path + "/Copy/" + file.FileName))
                    {
                        fStream.Write(memory.ToArray());
                    }
                    result = lzw.Compression(path + "/Copy/" + file.FileName, file.FileName);
                }
                Archive response = new Archive
                {
                    Content     = result,
                    ContentType = "compressedFile / huff",
                    FileName    = name
                };
                #endregion
                #region "Json"
                LZW_Compressions jsonValues = new LZW_Compressions
                {
                    OriginalName        = file.FileName,
                    CompressedFilePath  = _env.ContentRootPath + "\\Compressions",
                    CompressionRatio    = (double)result.Length / (double)copy.Length,
                    CompressionFactor   = (double)copy.Length / (double)result.Length,
                    ReductionPorcentage = 1 - ((double)result.Length / (double)copy.Length)
                };
                JsonFile addToJson = new JsonFile();
                addToJson.WriteInJson(jsonValues, _env.ContentRootPath);
                #endregion
                #region "Path"
                string compressionPath = _env.ContentRootPath + "/Compressions/" + name + ".huff";
                using (FileStream fs = System.IO.File.Create(compressionPath))
                {
                    fs.Write(result);
                }
                #endregion
                return(File(response.Content, response.ContentType, response.FileName + ".huff"));
            }
            catch (System.Exception)
            {
                return(StatusCode(500));
            }
        }
Exemplo n.º 2
0
        public async Task <ActionResult> Archive(IFormFile file, IFormCollection form)
        {
            User    userAux = JsonSerializer.Deserialize <User>(HttpContext.Session.GetString("thisUser"));
            Message message = new Message();

            message.emisor   = userAux.UserName;
            message.receptor = form["receptor"];
            message.message  = "attached file";
            message._id      = Guid.NewGuid().ToString();
            message.date     = DateTime.Now;
            message.type     = "archive";

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:62573/api/");
                client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

                var postTask = client.PostAsJsonAsync <Message>("addMessage", message);
                postTask.Wait();

                var result = postTask.Result;

                if (result.IsSuccessStatusCode)
                {
                    #region "LZW Compression"
                    LZW    _lzw          = new LZW();
                    byte[] resultArchive = null;
                    byte[] originalByte  = null;

                    using (var memory = new MemoryStream())
                    {
                        await file.CopyToAsync(memory);

                        originalByte = memory.ToArray();
                        //nuevo
                        using (FileStream fstream = System.IO.File.Create(_env.ContentRootPath + "/Copy/" + file.FileName))
                        {
                            fstream.Write(memory.ToArray());
                            fstream.Close();
                        }
                        resultArchive = _lzw.Compression(_env.ContentRootPath + "/Copy/" + file.FileName, file.FileName);
                    }
                    System.IO.File.Delete(_env.ContentRootPath + "/Copy/" + file.FileName);
                    #endregion

                    Archive archive = new Archive
                    {
                        _id     = message._id,
                        message = resultArchive,
                        name    = file.FileName
                    };

                    var postTaskAux = client.PostAsJsonAsync <Archive>("addArchive", archive);
                    postTaskAux.Wait();

                    //HERE

                    var postTask2 = client.GetAsync("allMessages");
                    postTask2.Wait();

                    var result2 = postTask2.Result;

                    if (result2.IsSuccessStatusCode)
                    {
                        string resultAux2 = await result2.Content.ReadAsAsync <string>();

                        Message[]      allMessages    = JsonSerializer.Deserialize <Message[]>(resultAux2);
                        List <Message> allMessagesAux = new List <Message>();

                        for (int i = 0; i < allMessages.Length; i++)
                        {
                            if (((allMessages[i].emisor == message.emisor) && (allMessages[i].receptor == message.receptor)) || ((allMessages[i].receptor == message.emisor) && (allMessages[i].emisor == message.receptor)))
                            {
                                if (allMessages[i].type == "message")
                                {
                                    #region "Descifrado SDES"

                                    var postAllUsers2 = client.GetAsync("allUsers");
                                    postAllUsers2.Wait();
                                    var    fufufu    = postAllUsers2.Result;
                                    string asdasdasa = await fufufu.Content.ReadAsAsync <string>();

                                    User[] allUsersXDD = JsonSerializer.Deserialize <User[]>(asdasdasa);

                                    User newUser11 = new User();
                                    User newUser22 = new User();
                                    for (int j = 0; j < allUsersXDD.Length; j++)
                                    {
                                        if (allUsersXDD[j].UserName == userAux.UserName)
                                        {
                                            newUser11 = allUsersXDD[j];
                                        }
                                        if (allUsersXDD[j].UserName == form["receptor"])
                                        {
                                            newUser22 = allUsersXDD[j];
                                        }
                                    }

                                    Diffie_Hellman _diffie1       = new Diffie_Hellman();
                                    BigInteger     publicNumber11 = _diffie1.PublicNumberGenerator(33, 101, newUser11.Private_Number);
                                    BigInteger     publicNumber22 = _diffie1.PublicNumberGenerator(33, 101, newUser22.Private_Number);
                                    BigInteger     kuser11        = _diffie1.KGenerator(publicNumber22, newUser11.Private_Number, 101);
                                    BigInteger     kuser22        = _diffie1.KGenerator(publicNumber11, newUser22.Private_Number, 101);

                                    string response2 = "";
                                    if (kuser11 == kuser22)
                                    {
                                        SDES   _sdes     = new SDES();
                                        string keyMaster = _sdes.ToNBase(kuser11, 2);
                                        _sdes.KeysGenerator(keyMaster);
                                        //Convertir mensaje a arreglo de bytes:
                                        char[] arrayChar       = allMessages[i].message.ToCharArray();
                                        byte[] bytes_Encrypted = new byte[arrayChar.Length];
                                        for (int j = 0; j < arrayChar.Length; j++)
                                        {
                                            bytes_Encrypted[j] = (byte)arrayChar[j];
                                        }
                                        byte[] resultFinalBytes = _sdes.SDES_Encryption(bytes_Encrypted, "descifrado");
                                        //Convertir arreglo de bytes a string y agregarlo a Mongo:
                                        char[] charResult = new char[resultFinalBytes.Length];
                                        for (int j = 0; j < resultFinalBytes.Length; j++)
                                        {
                                            charResult[j] = (char)resultFinalBytes[j];
                                        }
                                        for (int j = 0; j < charResult.Length; j++)
                                        {
                                            response2 += charResult[j].ToString();
                                        }
                                    }
                                    allMessages[i].message = response2;
                                    #endregion
                                }
                                allMessagesAux.Add(allMessages[i]);
                            }
                        }

                        #region "Motrar nuevamente usuario en el combobox"
                        var postTask3 = client.GetAsync("allUsers");
                        postTask3.Wait();

                        var result3 = postTask3.Result;

                        if (result3.IsSuccessStatusCode)
                        {
                            string resultAux3 = await result3.Content.ReadAsAsync <string>();

                            User[]        allUsers     = JsonSerializer.Deserialize <User[]>(resultAux3);
                            List <string> nameAllUsers = new List <string>();
                            for (int i = 0; i < allUsers.Length; i++)
                            {
                                Message mmm = JsonSerializer.Deserialize <Message>(HttpContext.Session.GetString("thisR"));

                                if (allUsers[i].UserName == mmm.receptor)
                                {
                                    nameAllUsers.Insert(0, mmm.receptor);
                                }
                                else if (allUsers[i].UserName != userAux.UserName)
                                {
                                    nameAllUsers.Add(allUsers[i].UserName);
                                }
                            }

                            string[] arrayAux = nameAllUsers.ToArray();
                            HttpContext.Session.SetString("nameAllUsers", JsonSerializer.Serialize(arrayAux));
                        }
                        #endregion

                        Message[] arrayAux2 = allMessagesAux.ToArray();
                        HttpContext.Session.SetString("nameAllMessages", JsonSerializer.Serialize(arrayAux2));

                        return(RedirectToAction("LoginChat"));
                    }
                }
                else
                {
                    return(StatusCode(500));
                }
            }
            return(StatusCode(500));
        }