Merge branch 'developpement' of https://codefirst.iut.uca.fr/git/matheo.thierry/notus into developpement
continuous-integration/drone/push Build was killed Details

pull/15/head
Liam MONCHANIN 2 years ago
commit 97b249813c

@ -6,4 +6,8 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NHibernate" Version="5.4.2" />
</ItemGroup>
</Project>

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Data;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
@ -9,7 +10,7 @@ using System.Threading.Tasks;
namespace Biblioteque_de_Class
{
[DataContract]
[DataContract(IsReference = true)]
public class Database
{
[DataMember]
@ -18,17 +19,24 @@ namespace Biblioteque_de_Class
private List<Theme> ThemeList;
[DataMember]
private List<User> UserList;
[DataMember]
private Dictionary<User, List<Theme>> AddedThemeList;
public Database()
{
DefaultLogoList = new List<Logo>();
ThemeList = new List<Theme>();
UserList = new List<User>();
AddedThemeList = new Dictionary<User, List<Theme>>();
}
public List<Logo> GetDefaultLogoList() { return DefaultLogoList; }
public List<Theme> GetThemeList() { return ThemeList; }
public List<User> GetUserList() { return UserList; }
public Dictionary<User,List<Theme>> GetAddedThemeFromUser() { return AddedThemeList; }
public void SetDefaultLogoList(List<Logo> defaultLogoList) { DefaultLogoList = defaultLogoList; }
public void SetDefaultThemeList(List<Theme> defaultThemeList) { ThemeList = defaultThemeList; }
/// <summary>
/// recherche un utilisateur dans la liste d'utilisateur
@ -204,5 +212,10 @@ namespace Biblioteque_de_Class
}
}
}
public List<Theme> AddedThemeOfOneUser(User user)
{
return GetAddedThemeFromUser()[user];
}
}
}

@ -8,8 +8,11 @@ namespace Biblioteque_de_Class
{
public interface IManager
{
public void SaveDatabaseData(Database database);
public void SaveDatabaseData(List<User> UserList, Dictionary<User, List<Theme>> AddedThemeFromUser);
public Database LoadDatabaseData();
public List<Theme> LoadDefaultTheme();
public List<Logo> LoadDefaultLogo();
}
}

@ -1,34 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace Biblioteque_de_Class
{
[DataContract(IsReference = true)]
public class Note
{
[DataMember]
private string name;
[DataMember]
public string Name
{
get { return name; }
private set { if (value == null) { name = "Unnamed Note"; } else { name = value; } }
}
[DataMember]
private string Text { get; set; } = "";
[DataMember]
private string logoPath;
[DataMember]
public string LogoPath
{
get { return logoPath; }
private set { if (value == null) { logoPath = "PATH TO DEFAULT LOGO"; } else { logoPath = value; } }
}
[DataMember]
private DateOnly CreationDate { get; }
[DataMember]
private DateOnly ModificationDate { get; set; }
[DataMember]
private readonly List<NoteImage> ImageList;
[DataMember]
private readonly List<User> Collaborators;
[DataMember]
private readonly List<User> Editors;
[DataMember]
private readonly User Owner;
public Note(string name, string logoPath, User owner)

@ -4,6 +4,8 @@ namespace Biblioteque_de_Class
{
public class PersistenceManager
{
private Database db = new();
private readonly IManager persistence;
public PersistenceManager(IManager pers)
@ -13,12 +15,15 @@ namespace Biblioteque_de_Class
public void SaveDatabaseData(Database database)
{
persistence.SaveDatabaseData(database);
persistence.SaveDatabaseData(database.GetUserList(), database.GetAddedThemeFromUser());
}
public Database LoadDatabaseData()
{
return persistence.LoadDatabaseData();
db = persistence.LoadDatabaseData();
db.SetDefaultThemeList(persistence.LoadDefaultTheme());
db.SetDefaultLogoList(persistence.LoadDefaultLogo());
return db;
}
}
}

@ -5,7 +5,7 @@ using System.Runtime.Serialization;
namespace Biblioteque_de_Class
{
[DataContract]
[DataContract(IsReference = true)]
public class User
{
[DataMember]
@ -14,6 +14,9 @@ namespace Biblioteque_de_Class
private string Email { get; set; }
[DataMember]
private string Password { get; set; }
[DataMember]
private string Picture { get; set; }
[DataMember]
private Theme Theme;
[DataMember]
private List<Note> NoteList;
@ -21,7 +24,7 @@ namespace Biblioteque_de_Class
private List<Tags> TagList;
[DataMember]
private List<Note> FavList;
[DataMember]
[DataMember(EmitDefaultValue = false)]
private bool IsConnected { get; set; }
[DataMember]
private Dictionary<Note, List<Tags>> NoteTagged;
@ -31,6 +34,7 @@ namespace Biblioteque_de_Class
Username = username;
Email = email;
Password = password;
Picture = "defaultpicture.png";
NoteList = new List<Note>();
TagList = new List<Tags>();
FavList = new List<Note>();
@ -40,6 +44,7 @@ namespace Biblioteque_de_Class
public string GetUsername() { return Username; }
public string GetEmail() { return Email; }
public string GetPassword() { return Password; }
public string GetPicture() { return Picture;}
public Theme GetTheme() { return Theme; }
public List<Note> GetNoteList() { return NoteList; }
public List<Tags> GetTagList() { return TagList; }
@ -51,6 +56,7 @@ namespace Biblioteque_de_Class
public void SetUsername(string username) { Username = username; }
public void SetEmail(string email) { Email = email; }
public void SetPassword(string password) { Password = password; }
public void SetPicture(string picture) { Picture = picture; }
public void SetTheme(Theme theme) { Theme = theme; }
public void SetIsConnected(bool isConnected) { IsConnected = isConnected; }

@ -7,10 +7,6 @@ using System.Text;
// load database
PersistenceManager manager = new(new Stub());
Database db = manager.LoadDatabaseData();
foreach(User user in db.GetUserList())
{
user.SetPassword(GetSHA256Hash(user.GetPassword()));
}
// initialization zone==============================================================================
@ -139,22 +135,6 @@ List<string>? choix_couleur()
return colorList;
}
static string GetSHA256Hash(string input)
{
using (SHA256 sha256Hash = SHA256.Create())
{
byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
StringBuilder builder = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
builder.Append(bytes[i].ToString("x2"));
}
return builder.ToString();
}
}
while (menu)
{
Console.WriteLine("\n|--------------------------------------|");
@ -190,7 +170,6 @@ while (menu)
Console.WriteLine("\nEntrez un password :");
string? password = Console.ReadLine();
if (password == null) { continue; }
password = GetSHA256Hash(password);
try
{
u = db.GetUser(nom);
@ -202,7 +181,7 @@ while (menu)
}
if (!connection)
{
if (Database.ComparePassword(u, password))
if (Database.ComparePassword(u, password.GetHashCode().ToString()))
{
u.SetIsConnected(true);
Console.WriteLine("\nConnection réussie !\n");
@ -234,8 +213,7 @@ while (menu)
}
catch (AlreadyUsedException)
{
password = GetSHA256Hash(password);
u = new User(nom, "", password);
u = new User(nom, "", password.GetHashCode().ToString());
db.AddUser(u);
db.GetUser(nom).SetIsConnected(true);
Console.WriteLine("\nConnection réussie !\n");
@ -548,8 +526,7 @@ while (u.GetIsConnected())
Console.WriteLine("\nLe mot de passe doit contenir au moins 8 caractères.\n");
break;
}
wantedNewPassword = GetSHA256Hash(wantedNewPassword);
if(wantedNewPassword == u.GetPassword()){
if(wantedNewPassword.GetHashCode().ToString() == u.GetPassword()){
Console.WriteLine("\nLe nouveau mot de passe doit être différent de l'ancien.\n");
break;
}

@ -4,13 +4,15 @@ using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Security.Cryptography;
using System.Threading.Tasks;
namespace Notus_Persistance
{
public class Stub : IManager
{
public void SaveDatabaseData(Database database)
public void SaveDatabaseData(List<User> UserList, Dictionary<User, List<Theme>> AddedThemeFromUser)
{
throw new NotImplementedException();
}
@ -59,10 +61,23 @@ namespace Notus_Persistance
colorListHexaCode = new("000000,FFFFFF,000000".Split(','));
database.AddTheme(new Theme("Theme_3", colorListHexaCode));
foreach (User user in database.GetUserList())
{
user.SetPassword(user.GetPassword().GetHashCode().ToString());
}
return database;
}
public List<Theme> LoadDefaultTheme()
{
throw new NotImplementedException();
}
public List<Logo> LoadDefaultLogo()
{
throw new NotImplementedException();
}
}
}

@ -9,26 +9,18 @@ using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Notus_Persistance
{
public class ToJSON : IManager
{
private const string DatabaseDataFilePath = "data.json";
private const string UserDataFilePath = "userdata.json";
private const string NoteDataFilePath = "notedata.json";
private const string ThemeDataFilePath = "themedata.json";
private const string LogoDataFilePath = "logodata.json";
private const string TagsDataFilePath = "tagsdata.json";
private const string NoteImageDataFilePath = "noteImagedata.json";
private static DataContractJsonSerializer DatabasejsonSerializer = new DataContractJsonSerializer(typeof(Database));
private static DataContractJsonSerializer UserjsonSerializer = new DataContractJsonSerializer(typeof(User));
private static DataContractJsonSerializer NotejsonSerializer = new DataContractJsonSerializer(typeof(Note));
private static DataContractJsonSerializer ThemejsonSerializer = new DataContractJsonSerializer(typeof(Theme));
private static DataContractJsonSerializer LogojsonSerializer = new DataContractJsonSerializer(typeof(Logo));
private static DataContractJsonSerializer TagsjsonSerializer = new DataContractJsonSerializer(typeof(Tags));
private static DataContractJsonSerializer NoteImagejsonSerializer = new DataContractJsonSerializer(typeof(NoteImage));
public void SaveDatabaseData(Database database)
private const string DefaultThemePath = "";
private const string DefaultLogoPath = "";
private static readonly DataContractJsonSerializer DatabasejsonSerializer = new(typeof(Database));
public void SaveDatabaseData(List<User> UserList, Dictionary<User, List<Theme>> AddedThemeFromUser)
{
using (FileStream fileStream = File.Create(DatabaseDataFilePath))
{
@ -38,7 +30,8 @@ namespace Notus_Persistance
false,
true))//<- this boolean says that we sant indentation
{
DatabasejsonSerializer.WriteObject(writer, database);
DatabasejsonSerializer.WriteObject(writer, UserList);
DatabasejsonSerializer.WriteObject(writer, AddedThemeFromUser);
}
}
}
@ -65,5 +58,50 @@ namespace Notus_Persistance
throw new FileException("No data file found.");
}
}
public List<Theme> LoadDefaultTheme()
{
if (File.Exists(DefaultThemePath))
{
using (FileStream fileStream = File.OpenRead(DefaultThemePath))
{
List<Theme>? DefaultThemeList = (List<Theme>?)DatabasejsonSerializer.ReadObject(fileStream);
if (DefaultThemeList == null)
{
throw new FileException("Failed to Default Theme. The loaded object is null.");
}
else
{
return DefaultThemeList;
}
}
}
else
{
throw new FileException("No data file found.");
}
}
public List<Logo> LoadDefaultLogo()
{
if (File.Exists(DefaultLogoPath))
{
using (FileStream fileStream = File.OpenRead(DefaultLogoPath))
{
List<Logo>? DefaultLogoList = (List<Logo>?)DatabasejsonSerializer.ReadObject(fileStream);
if (DefaultLogoList == null)
{
throw new FileException("Failed to Default Logo. The loaded object is null.");
}
else
{
return DefaultLogoList;
}
}
}
else
{
throw new FileException("No data file found.");
}
}
}
}

@ -7,22 +7,76 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace Notus_Persistance
{
public class ToXML : IManager
{
private const string DataFilePath = "data.xml";
private const string XmlDataFilePath = "userdata.xml";
private const string DefaultThemePath = "";
private const string DefaultLogoPath = "";
private static readonly DataContractSerializer DatabaseXmlSerializer = new(typeof(Database));
public void SaveDatabaseData(Database database)
public void SaveDatabaseData(List<User> UserList, Dictionary<User, List<Theme>> AddedThemeFromUser)
{
throw new NotImplementedException();
XmlWriterSettings settings = new() { Indent = true };
using TextWriter tw = File.CreateText(DataFilePath);
using XmlWriter writer = XmlWriter.Create(tw, settings);
DatabaseXmlSerializer.WriteObject(writer, UserList);
DatabaseXmlSerializer.WriteObject(writer, AddedThemeFromUser);
}
public Database LoadDatabaseData()
{
throw new NotImplementedException();
if (File.Exists(DataFilePath))
{
using (FileStream fileStream = File.OpenRead(DataFilePath))
{
return DatabaseXmlSerializer.ReadObject(fileStream) is not Database database
? throw new FileException("Failed to load the database. The loaded object is null.")
: database;
}
}
else
{
throw new FileException("No data file found.");
}
}
public List<Theme> LoadDefaultTheme()
{
if (File.Exists(DefaultThemePath))
{
using (FileStream fileStream = File.OpenRead(DefaultThemePath))
{
return DatabaseXmlSerializer.ReadObject(fileStream) is not List<Theme> DefaultThemeList
? throw new FileException("Failed to load Default Theme. The loaded object is null.")
: DefaultThemeList;
}
}
else
{
throw new FileException("No data file found.");
}
}
public List<Logo> LoadDefaultLogo()
{
if (File.Exists(DefaultLogoPath))
{
using (FileStream fileStream = File.OpenRead(DefaultLogoPath))
{
return DatabaseXmlSerializer.ReadObject(fileStream) is not List<Logo> DefaultLogoList
? throw new FileException("Failed to load Default Logo. The loaded object is null.")
: DefaultLogoList;
}
}
else
{
throw new FileException("No data file found.");
}
}
}
}

Loading…
Cancel
Save