/// <summary> /// Postavljanje gesla za uporabnika /// </summary> /// <param name="geslo">Plain text geslo katero hashiramo in spremamo v bazo</param> /// <param name="idUporabnika">ID uporabnika za terog spremamo geslo</param> /// <returns></returns> public static bool HashirajGeslo(int idUporabnika, string geslo) { byte[] gesloBytes = Encoding.UTF8.GetBytes(geslo); byte[] saltBytes = Encoding.UTF8.GetBytes(CreateSalt(20)); byte[] hash = GenerateSaltedHash(gesloBytes, saltBytes); List <Uporabnik> lista = Brskaj(idUporabnika); Uporabnik u = lista.Count > 0 ? lista[0] : null; if (u != null) { if (Update(u, saltBytes, hash)) { return(true); } else { return(false); } } else { return(false); } }
/// <summary> /// Brskanje baze po uporabniškem imenu /// </summary> /// <param name="uporabniskoIme">Brska se po parametru 'Uporabnik'</param> /// <returns>Eneg uporabnika ali prazno listo</returns> public static List <Uporabnik> Brskaj(int idUporabnika = -1, string uporabniskoIme = "") { SqlConnection con = new SqlConnection(Nastavitve.GetConnectionString()); SqlCommand cmd = new SqlCommand(); string where = " 1 = 1 "; if (uporabniskoIme != "") { where += " AND (Uporabnik = '" + uporabniskoIme + "')"; } if (idUporabnika != -1) { where += " AND (Id = " + idUporabnika + ")"; } // 0 1 2 3 4 5 6 string select = "SELECT Id, Ime, Priimek, Email, Uporabnik, TipUporabnika, Kovanc " + "FROM [StackDB].[dbo].[tblUporabnik] WHERE" + where; cmd.CommandText = select; cmd.Connection = con; List <Uporabnik> lista = new List <Uporabnik>(); try { con.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { int id = reader.GetInt32(0); string ime = reader.IsDBNull(1) ? "" : reader.GetString(1).Trim(); string priimek = reader.IsDBNull(2) ? "" : reader.GetString(2).Trim(); string email = reader.IsDBNull(3) ? "" : reader.GetString(3).Trim(); string uporabnisko = reader.GetString(4).Trim(); TipUporabnika tip = (TipUporabnika)reader.GetInt32(5); int kovanc = reader.GetInt32(6); Uporabnik uporabnik = new Uporabnik(id, ime, priimek, email, uporabnisko, tip, kovanc); lista.Add(uporabnik); } reader.Close(); return(lista); } catch (TimeoutException tEx) { // Zapisivanje u log return(null); } catch (Exception ex) { // log return(null); } finally { con.Close(); } }
/// <summary> /// Pridobivanje najboljših rezultatov /// </summary> /// <param name="velikostSeznama">Število rezultatov kateri se vrnejo</param> /// <returns></returns> public static List <TopRezultat> GetTopRezultati(int velikostSeznama) { SqlConnection con = new SqlConnection(Nastavitve.GetConnectionString()); SqlCommand cmd = new SqlCommand(); if (velikostSeznama < 1) { velikostSeznama = 1; } string select = "SELECT TOP " + velikostSeznama + // 0 1 2 3 4 5 " IdUporabnika, Ime, Priimek, Email, Uporabnik, Rezultat " + "FROM [StackDB].[dbo].[viewRezultati] ORDER BY Rezultat DESC"; cmd.CommandText = select; cmd.Connection = con; List <TopRezultat> lista = new List <TopRezultat>(); try { con.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { int id = reader.GetInt32(0); string ime = reader.IsDBNull(1) ? "" : reader.GetString(1).Trim(); string priimek = reader.IsDBNull(2) ? "" : reader.GetString(2).Trim(); string email = reader.IsDBNull(3) ? "" : reader.GetString(3).Trim(); string uporabnisko = reader.IsDBNull(4) ? "" : reader.GetString(4).Trim(); int rezultat = reader.IsDBNull(5) ? -1 : reader.GetInt32(5); Uporabnik uporabnik = new Uporabnik(id, ime, priimek, email, uporabnisko, 0, 0); TopRezultat topRezultat = new TopRezultat(uporabnik, rezultat); lista.Add(topRezultat); } reader.Close(); return(lista); } catch (TimeoutException tEx) { // Zapisivanje u log return(null); } catch (Exception ex) { // log return(null); } finally { con.Close(); } }
/// <summary> /// Avtorizacija uporabnika /// </summary> /// <param name="idUporabnika">ID uporabnika kateroga preverjamo</param> /// <param name="novoGesloString">Geslo katero preverjamo če velja</param> /// <returns></returns> internal static bool?PotrdiGeslo(int idUporabnika, string novoGesloString) { Uporabnik u = Brskaj(idUporabnika)[0]; byte[] novoGeslo = Encoding.UTF8.GetBytes(novoGesloString); byte[] geslo = new byte[32]; byte[] salt = new byte[28]; SqlConnection con = new SqlConnection(Nastavitve.GetConnectionString()); SqlCommand cmd = new SqlCommand(); string select = "SELECT Geslo, Salt FROM [StackDB].[dbo].[tblUporabnik] WHERE Id = " + idUporabnika; cmd.CommandText = select; cmd.Connection = con; try { con.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { geslo = (byte[])reader["Geslo"]; salt = (byte[])reader["Salt"]; } reader.Close(); byte[] noviHash = GenerateSaltedHash(novoGeslo, salt); if (CompareByteArrays(noviHash, geslo)) { return(true); } else { return(false); } } catch (TimeoutException tEx) { // Zapisivanje u log return(null); } catch (Exception ex) { // log return(null); } finally { con.Close(); } }
/// <summary> /// Update postoječih uporabnikov /// </summary> /// <param name="uporabnik">Objekt s uporabnikom kateroga hočemo spremeniti v bazi</param> /// <param name="salt">Opcionalni parameter kje se pohrani salt od uporabnikovog gesla</param> /// <param name="geslo">Opcionalni parameter z hashiranim geslom</param> /// <returns></returns> public static bool Update(Uporabnik uporabnik, byte[] salt = null, byte[] geslo = null) { SqlConnection con = new SqlConnection(Nastavitve.GetConnectionString()); SqlCommand cmd = new SqlCommand(); string table = "[StackDB].[dbo].[tblUporabnik]"; string where = " WHERE Id = " + uporabnik.Id; string update = "UPDATE " + table + " SET Ime = '" + uporabnik.Ime + "', " + "Priimek = '" + uporabnik.Priimek + "', " + "Email = '" + uporabnik.Email + "', " + "Uporabnik = '" + uporabnik.Uporabnisko + "', " + "TipUporabnika = " + (int)uporabnik.Tip + ", Kovanc = " + uporabnik.Kovanc; if (salt != null && geslo != null) { update += ", Salt = @Salt, Geslo = @Geslo"; cmd.Parameters.Add("@Salt", SqlDbType.Binary); cmd.Parameters["@Salt"].Value = salt; cmd.Parameters.Add("@Geslo", SqlDbType.Binary); cmd.Parameters["@Geslo"].Value = geslo; } cmd.CommandText = update + where; cmd.Connection = con; try { con.Open(); cmd.ExecuteNonQuery(); return(true); } catch (TimeoutException tEx) { // Zapisivanje u log return(false); } catch (Exception ex) { // log return(false); } finally { con.Close(); } }
/// <summary> /// Dodavanje novih uporabnikov /// </summary> /// <param name="uporabnik">Objekt s uporabnikom kateroga hočemo dodati v bazo</param> /// <returns>ID noveg uporabnika</returns> public static int Dodaj(Uporabnik uporabnik, string geslo) { SqlConnection con = new SqlConnection(Nastavitve.GetConnectionString()); SqlCommand cmd = new SqlCommand(); string into = "[StackDB].[dbo].[tblUporabnik]"; string insert = "INSERT INTO " + into + " (Ime, Priimek, Email, Uporabnik, Geslo, Salt, TipUporabnika, Kovanc) " + "VALUES (@Ime, @Priimek, @Email, @Uporabnik, @Geslo, @Salt, @TipUporabnika, @Kovanc); " + "SELECT CAST(scope_identity() as int)";//'" + uporabnik.Ime + "', '" + uporabnik.Priimek + "', '" + uporabnik.Email + "', '" + //uporabnik.Uporabnisko + "', " + uporabnik.Tip + ", " + uporabnik.Kovanc; byte[] gesloBytes = Encoding.UTF8.GetBytes(geslo); byte[] saltBytes = Encoding.UTF8.GetBytes(CreateSalt(20)); byte[] gesloHash = GenerateSaltedHash(gesloBytes, saltBytes); uporabnik.Parametriziraj(ref cmd, gesloHash, saltBytes); cmd.CommandText = insert; cmd.Connection = con; try { con.Open(); int?id = -1; id = (int?)cmd.ExecuteScalar(); return((id != null) ? (int)id : -1); } catch (TimeoutException tEx) { // Zapisivanje u log return(-1); } catch (Exception ex) { // log return(-1); } finally { con.Close(); } }
public TopRezultat(Uporabnik uporabnik, int rezultat) { Uporabnik = uporabnik; Rezultat = rezultat; }