/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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(); }
/// <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); }
/// <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); }
/// <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); }