Пример #1
0
        /// <summary>
        /// Metoda koja prima json od servera u chunkovima te konsturira kompletnu poruku sve dok su podaci na streamu dohvatljivi.
        /// Deserijalizira json u odgovarajući podatkovni objekt.
        /// </summary>
        /// <returns></returns>
        public object PrimiOdServera()
        {
            readBuffer = new byte[1024];
            int           numberOfBytesRead = 0;
            StringBuilder myCompleteMessage = new StringBuilder();
            object        trenutni          = null;

            try
            {
                stream = klijent.GetStream();
                do
                {
                    numberOfBytesRead = stream.Read(readBuffer, 0, readBuffer.Length);
                    stream.Flush();
                    myCompleteMessage.AppendFormat("{0}", Encoding.UTF8.GetString(readBuffer, 0, numberOfBytesRead));
                } while (stream.DataAvailable);
                stream.Close();
                string jsonString = myCompleteMessage.ToString();
                trenutni = JsonPretvarac.Deserijalizacija(jsonString);
                stream.Flush();
            }
            catch (Exception)
            {
                MessageBox.Show("Problemi oko komunikacije sa web servisom, pokušajte ponovo kasnije");
            }
            return(trenutni);
        }
Пример #2
0
        /// <summary>
        /// Metoda koja zapisuje poruku u bazu podataka - potreno je izvršiti 2 upita - jedan na tablici EnkriptiraniPaket, a drugi
        /// na tablici Poruka - tada je poruka usješno zapisana u bazu podataka.
        /// </summary>
        /// <param name="connection"></param>
        /// <returns></returns>
        public string ZapisiPorukuUBazu(SqlConnection connection)
        {
            string rezultat = "";
            int    idEnkriptiraniPaket;

            var command = new SqlCommand();

            command.Connection  = connection;
            command.CommandType = CommandType.Text;
            command.CommandText = "INSERT INTO EnkriptiraniPaket(EnkriptiraniKljuc,EnkriptiraniPodaci,Iv) OUTPUT INSERTED.Id VALUES (@EnkriptiraniKljuc,@EnkriptiraniPodaci,@Iv)";
            command.Parameters.AddWithValue("@EnkriptiraniKljuc", Paket.EnkriptiraniKljuc);
            command.Parameters.AddWithValue("@EnkriptiraniPodaci", Paket.EnkriptiraniPodaci);
            command.Parameters.AddWithValue("@Iv", Paket.Iv);
            idEnkriptiraniPaket = (int)command.ExecuteScalar();

            command             = new SqlCommand();
            command.Connection  = connection;
            command.CommandType = CommandType.Text;
            command.CommandText = "INSERT INTO Poruka(Posiljatelj,Primatelj,DatumSlanja,IdPaketa) VALUES (@Posiljatelj,@Primatelj,@DatumSlanja,@IdPaketa)";
            command.Parameters.AddWithValue("@Posiljatelj", Posiljatelj);
            command.Parameters.AddWithValue("@Primatelj", Primatelj);
            command.Parameters.AddWithValue("@DatumSlanja", DatumSlanja);
            command.Parameters.AddWithValue("@IdPaketa", idEnkriptiraniPaket);
            command.ExecuteNonQuery();

            UspjehSlanjaPoruke uspjeh = new UspjehSlanjaPoruke("DA");

            rezultat = JsonPretvarac.Serijalizacija(uspjeh);
            return(rezultat);
        }
Пример #3
0
        /// <summary>
        /// Metoda koja dohvaća korisnike iz baze podataka te vraća json koji sadrži samo one podatke koji su dovoljni da bi korisnik
        /// mogao enkriptirati samu poruku i proslijediti je drugom korisniku.
        /// </summary>
        /// <param name="connection"></param>
        /// <returns></returns>
        public string DohvatiKorisnike(SqlConnection connection)
        {
            string   rezultat = "";
            Korisnik korisnik;

            var command = new SqlCommand();

            command.Connection  = connection;
            command.CommandType = CommandType.Text;
            command.CommandText = "SELECT Username,Ime,Prezime,JavniKljuc,Status from Korisnik";
            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    korisnik            = new Korisnik();
                    korisnik.Username   = reader["Username"].ToString();
                    korisnik.Ime        = reader["Ime"].ToString();
                    korisnik.Prezime    = reader["Prezime"].ToString();
                    korisnik.JavniKljuc = reader["JavniKljuc"].ToString();
                    korisnik.Status     = Convert.ToInt32(reader["Status"]);
                    Korisnici.Add(korisnik);
                }
            }
            rezultat = JsonPretvarac.Serijalizacija(this);
            return(rezultat);
        }
Пример #4
0
        /// <summary>
        /// Metoda koja dohvaća poruke koje je korisnik poslao ostalim korisnicima
        /// </summary>
        /// <param name="connection"></param>
        /// <returns></returns>
        public string DohvatiPoslanePoruke(SqlConnection connection)
        {
            string rezultat = "";
            Poruka poruka;

            var command = new SqlCommand();

            command.Connection  = connection;
            command.CommandType = CommandType.Text;
            command.CommandText = "SELECT * from Poruka,EnkriptiraniPaket WHERE Posiljatelj=@Username AND IdPaketa=EnkriptiraniPaket.Id";
            command.Parameters.AddWithValue("@Username", Username);
            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    poruka                          = new Poruka();
                    poruka.DatumSlanja              = (DateTime)reader["DatumSlanja"];
                    poruka.Posiljatelj              = reader["Posiljatelj"].ToString();
                    poruka.Primatelj                = reader["Primatelj"].ToString();
                    poruka.Paket.EnkriptiraniKljuc  = reader["EnkriptiraniKljuc"].ToString();
                    poruka.Paket.EnkriptiraniPodaci = reader["EnkriptiraniPodaci"].ToString();
                    poruka.Paket.Iv                 = (byte[])reader["Iv"];
                    Poruke.Add(poruka);
                }
            }
            rezultat = JsonPretvarac.Serijalizacija(this);
            return(rezultat);
        }
Пример #5
0
        /// <summary>
        /// Metoda koja prijavljuje korisnika u bazu podataka te vraća odgovarajuće podatke korisnika.
        /// Ukoliko korisnik prilikom registracije nije odabrao 2FA autentifikaciju vraćaju se njegovi podaci iz baze podataka.
        /// Ukoliko je korisnik prilikom registracije odabrao 2FA autentifikaciju vraća se Username,Password i obavijest o 2FA autentifikaciji u obliku korisničkoga JSON-a
        /// </summary>
        /// <param name="connection"></param>
        /// <returns></returns>
        public string PrijavaKorisnika(SqlConnection connection)
        {
            string rezultat = "";

            var command = new SqlCommand();

            command.Connection  = connection;
            command.CommandType = CommandType.Text;
            command.CommandText = "SELECT Korisnik.*,TipoviKorisnika.Naziv FROM Korisnik,TipoviKorisnika WHERE Username=@Username AND Password=@Password AND TipKorisnika=Id";
            command.Parameters.AddWithValue("@Password", Password);
            command.Parameters.AddWithValue("@Username", Username);
            using (SqlDataReader reader = command.ExecuteReader())
            {
                if (!reader.HasRows)
                {
                    Username = null;
                    Password = null;
                }
                else if (reader.Read())
                {
                    if (Convert.ToInt32(reader["Status"]) == 0)
                    {
                        Username = null;
                        Password = null;
                    }
                    else
                    {
                        Username      = reader["Username"].ToString();
                        Ime           = reader["Ime"].ToString();
                        Prezime       = reader["Prezime"].ToString();
                        Email         = reader["Email"].ToString();
                        BrojTelefona  = reader["BrojTelefona"].ToString();
                        DatumRodjenja = reader["DatumRodjenja"].ToString();
                        Kljuc2FA      = reader["Kljuc2FA"].ToString();
                        Status        = Convert.ToInt32(reader["Status"]);
                        TipKorisnika  = reader["Naziv"].ToString();
                    }
                }
            }

            if (Kljuc2FA != "" && Kljuc2FA != "null")
            {
                Korisnik        novi        = new Korisnik();
                Verficiranje2FA verificiraj = new Verficiranje2FA();
                Kljuc2FA = verificiraj.GenerirajKljuc2FA();
                UnesiUBazuKljuc2FA(connection);
                verificiraj.PosaljiPorukuNaMobilni(BrojTelefona);
                novi.Username = Username;
                novi.Password = Password;
                novi.Kljuc2FA = "DA";
                rezultat      = JsonPretvarac.Serijalizacija(novi);
                return(rezultat);
            }

            rezultat = JsonPretvarac.Serijalizacija(this);
            return(rezultat);
        }
Пример #6
0
        /// <summary>
        /// Metoda koja šalje svim korisnicima aplikacije adminski mail - mail vezan uz aplikaciju. Prvo se dohvaćaju
        /// svi mailovi iz baze podataka te se zatim salje mail svim korisnicima
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="adminMail"></param>
        /// <returns></returns>
        public static string PosaljiAdminMail(SqlConnection connection, AdminMail adminMail)
        {
            List <string> emailovi = new List <string>();
            string        rezultat = "";

            var command = new SqlCommand();

            command.Connection  = connection;
            command.CommandType = CommandType.Text;
            command.CommandText = "SELECT Email from Korisnik";
            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    emailovi.Add(reader["Email"].ToString());
                }
            }

            var client = new SmtpClient("smtp.gmail.com", 587)
            {
                Credentials = new NetworkCredential("*****@*****.**", "crypto2101pi#"),
                EnableSsl   = true
            };

            MailMessage msg = new MailMessage();

            msg.Subject = "Admin Poruka - Crypto Aplikacija";
            msg.Body    = adminMail.Sadrzaj;
            msg.From    = new MailAddress("*****@*****.**");
            foreach (var item in emailovi)
            {
                msg.To.Add(item);
            }
            try
            {
                client.Send(msg);
                adminMail.Status = 1;
            }
            catch
            {
                adminMail.Status = 0;
            }
            rezultat = JsonPretvarac.Serijalizacija(adminMail);
            return(rezultat);
        }
Пример #7
0
 /// <summary>
 /// Metoda koja šalje serveru objekt - taj objekt serijalizira u json te ga zapisuje na stream sa kojega server
 /// može pročitati podatke.
 /// </summary>
 /// <param name="objekt"></param>
 /// <param name="tipPoruke"></param>
 public void PosaljiServeru(object objekt, string tipPoruke = "null")
 {
     try
     {
         stream = klijent.GetStream();
         string jsonString = JsonPretvarac.Serijalizacija(objekt, tipPoruke);
         int    length     = Encoding.UTF8.GetBytes(jsonString).Length;
         writeBuffer = new byte[length];
         writeBuffer = Encoding.UTF8.GetBytes(jsonString);
         stream.Write(writeBuffer, 0, writeBuffer.Length);
     }
     catch (Exception)
     {
         //MessageBox.Show("Problemi oko komunikacije sa web servisom, pokušajte ponovo kasnije");
         return;
     }
     stream.Flush();
 }
Пример #8
0
        /// <summary>
        /// Metoda koja na temelju poslanih korisničkih podataka i 2FA ključa vraća praznoga korisnika(2FA ključ na bazi podataka se ne podudara)
        /// ili ako objekt sadrži ispravan 2FA ključ vraća odgovarajuće podatke koje koristi klijentska aplikacija.
        /// </summary>
        /// <param name="connection"></param>
        /// <returns></returns>
        public string PotvrdaKljuca2FA(SqlConnection connection)
        {
            string rezultat = "";
            var    command  = new SqlCommand();

            command.Connection  = connection;
            command.CommandType = CommandType.Text;
            command.CommandText = "SELECT Korisnik.*,TipoviKorisnika.Naziv FROM Korisnik,TipoviKorisnika WHERE Username=@Username AND Password=@Password AND TipKorisnika=Id AND Kljuc2FA = @Kljuc2FA";
            command.Parameters.AddWithValue("@Password", Password);
            command.Parameters.AddWithValue("@Username", Username);
            command.Parameters.AddWithValue("@Kljuc2FA", Kljuc2FA);
            using (SqlDataReader reader = command.ExecuteReader())
            {
                if (!reader.HasRows)
                {
                    Username = null;
                    Password = null;
                    Kljuc2FA = null;
                }
                else if (reader.Read())
                {
                    if (Convert.ToInt32(reader["Status"]) == 0)
                    {
                        Username = null;
                        Password = null;
                        Kljuc2FA = null;
                    }
                    else
                    {
                        Username      = reader["Username"].ToString();
                        Ime           = reader["Ime"].ToString();
                        Prezime       = reader["Prezime"].ToString();
                        Email         = reader["Email"].ToString();
                        BrojTelefona  = reader["BrojTelefona"].ToString();
                        DatumRodjenja = reader["DatumRodjenja"].ToString();
                        Kljuc2FA      = null;
                        Status        = Convert.ToInt32(reader["Status"]);
                        TipKorisnika  = reader["Naziv"].ToString();
                    }
                }
            }
            rezultat = JsonPretvarac.Serijalizacija(this);
            return(rezultat);
        }
Пример #9
0
        /// <summary>
        /// Metoda koja uređuje podatke korisnika na bazi podataka, izvršava se UPDATE upit podataka na temelju podataka
        /// koje je korisnik poslao da mu se promijene
        /// </summary>
        /// <param name="connection"></param>
        public string UrediPodatke(SqlConnection connection)
        {
            string rezultat = "";

            var command = new SqlCommand();

            command.Connection  = connection;
            command.CommandType = CommandType.Text;
            command.CommandText = @"UPDATE Korisnik SET Ime = @Ime, 
Prezime=@Prezime, Email=@Email, BrojTelefona=@BrojTelefona WHERE Username=@Username";
            command.Parameters.AddWithValue("@Username", Username);
            command.Parameters.AddWithValue("@Ime", Ime);
            command.Parameters.AddWithValue("@Prezime", Prezime);
            command.Parameters.AddWithValue("@Email", Email);
            command.Parameters.AddWithValue("@BrojTelefona", BrojTelefona);
            command.ExecuteNonQuery();

            rezultat = JsonPretvarac.Serijalizacija(this);
            return(rezultat);
        }
Пример #10
0
        /// <summary>
        /// Funkcija registrira korisnika u bazu podataka i vraća JSON(string) o uspješnosti  registracije
        /// </summary>
        /// <param name="connection"></param>
        /// <returns></returns>
        public string RegistrirajKorisnika(SqlConnection connection)
        {
            string             rezultat;
            int                tip_korisnika = 1;
            UspjehRegistracije uspjeh        = new UspjehRegistracije();

            uspjeh.PotvrdaKorisnika = 1;
            if (TipKorisnika == "Korisnik")
            {
                tip_korisnika = 2;
            }

            var command = new SqlCommand();

            command.Connection  = connection;
            command.CommandType = CommandType.Text;
            command.CommandText = "INSERT into Korisnik (Username, Password, Ime, Prezime, Email, BrojTelefona, DatumRodjenja, Status, TipKorisnika) VALUES(@Username, @Password, @Ime, @Prezime, @Email, @BrojTelefona, @DatumRodjenja, @Status, @tip_korisnika)";
            command.Parameters.AddWithValue("@Username", Username);
            command.Parameters.AddWithValue("@Password", Password);
            command.Parameters.AddWithValue("@Ime", Ime);
            command.Parameters.AddWithValue("@Prezime", Prezime);
            command.Parameters.AddWithValue("@Email", Email);
            command.Parameters.AddWithValue("@BrojTelefona", BrojTelefona);
            command.Parameters.AddWithValue("@DatumRodjenja", DatumRodjenja);
            command.Parameters.AddWithValue("@Status", Status);
            command.Parameters.AddWithValue("@tip_korisnika", tip_korisnika);
            try
            {
                command.ExecuteNonQuery();
                ZapisiKljuceveUBazu(connection);
            }
            catch (SqlException ex)
            {
                Console.WriteLine(ex);
                uspjeh.PotvrdaKorisnika = 0;
            }
            rezultat = JsonPretvarac.Serijalizacija(uspjeh);
            return(rezultat);
        }