Documentation & code cleanup

This commit is contained in:
Dimitar Byalkov
2023-06-09 11:51:42 +02:00
parent 0ac97bd31a
commit 1832e111e3
61 changed files with 140 additions and 325 deletions

View File

@@ -1,5 +1,24 @@
# Student House Dashboard # Student House Dashboard
Work in progress
Project documentation is available in the docs folder Project documentation is available in the docs folder
## Default user details
### System administrator
admin
admin
### Manager
manager
manager
### Tenant
room1
room1
room2
room2
## FHICT Luna server
The web application is hosted on the FHICT Luna server at: https://i509645.luna.fhict.nl/

View File

@@ -1,13 +1,8 @@
using Models; using Logic;
using Logic;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Logic.Exceptions; using Logic.Exceptions;
using System.Reflection; using Models;
using System.Data.SqlClient;
using System.Text;
namespace Data namespace Data
{ {
@@ -50,13 +45,13 @@ namespace Data
cmd.Parameters.AddWithValue("id", id); cmd.Parameters.AddWithValue("id", id);
var reader = cmd.ExecuteReader(); var reader = cmd.ExecuteReader();
reader.Read(); reader.Read();
Announcement announcement = new Announcement(Convert.ToInt32(reader["ID"]), Announcement announcement = new Announcement(Convert.ToInt32(reader["ID"]),
userRepository.GetUserById(Convert.ToInt32(reader["Author"])), userRepository.GetUserById(Convert.ToInt32(reader["Author"])),
reader["Description"].ToString(), reader["Title"].ToString(), reader["Description"].ToString(), reader["Title"].ToString(),
(DateTime)reader["PublishDate"], (bool)reader["IsImportant"], (DateTime)reader["PublishDate"], (bool)reader["IsImportant"],
(bool)reader["IsSticky"]); (bool)reader["IsSticky"]);
CommentRepository commentRepository = new CommentRepository(); CommentRepository commentRepository = new CommentRepository();
announcement.Comments = commentRepository.GetAllCommentsOnAnnouncement(announcement.ID); announcement.Comments = commentRepository.GetAllCommentsOnAnnouncement(announcement.ID);
conn.Close(); conn.Close();
return announcement; return announcement;
} }

View File

@@ -1,8 +1,7 @@
using System.ComponentModel.Design;
using System.Data.SqlClient;
using Models;
using Logic; using Logic;
using Logic.Exceptions; using Logic.Exceptions;
using Models;
using System.Data.SqlClient;
namespace Data; namespace Data;

View File

@@ -1,12 +1,8 @@
using Logic; using Logic;
using Logic.Exceptions; using Logic.Exceptions;
using Models; using Models;
using System;
using System.Collections.Generic;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks;
namespace Data namespace Data
{ {
@@ -14,7 +10,7 @@ namespace Data
{ {
public ComplaintRepository() public ComplaintRepository()
{ {
} }
public List<Complaint> GetAllComplaints() public List<Complaint> GetAllComplaints()
{ {
@@ -86,7 +82,7 @@ namespace Data
} }
using (SqlConnection conn = SqlConnectionHelper.CreateConnection()) using (SqlConnection conn = SqlConnectionHelper.CreateConnection())
{ {
SqlCommand sqlCommand = new SqlCommand(sql, conn); SqlCommand sqlCommand = new SqlCommand(sql, conn);
sqlCommand.Parameters.AddWithValue("@start", p * c); sqlCommand.Parameters.AddWithValue("@start", p * c);
sqlCommand.Parameters.AddWithValue("@count", c); sqlCommand.Parameters.AddWithValue("@count", c);

View File

@@ -1,12 +1,7 @@
using Logic; using Logic;
using Logic.Exceptions; using Logic.Exceptions;
using Models; using Models;
using System;
using System.Collections.Generic;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Data namespace Data
{ {

View File

@@ -1,10 +1,5 @@
using Logic.Exceptions; using Logic.Exceptions;
using System;
using System.Collections.Generic;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Data namespace Data
{ {

View File

@@ -1,13 +1,6 @@
using System; using Logic;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using Models; using Models;
using System.Data; using System.Data.SqlClient;
using System.Xml.Linq;
using Logic;
namespace Data namespace Data
{ {
@@ -115,7 +108,7 @@ namespace Data
} }
} }
public User GetUserByName(string userName) public User? GetUserByName(string userName)
{ {
using (SqlConnection conn = SqlConnectionHelper.CreateConnection()) using (SqlConnection conn = SqlConnectionHelper.CreateConnection())
{ {
@@ -124,8 +117,14 @@ namespace Data
cmd.Parameters.AddWithValue("@userName", userName); cmd.Parameters.AddWithValue("@userName", userName);
var reader = cmd.ExecuteReader(); var reader = cmd.ExecuteReader();
return new User(Convert.ToInt32(reader["ID"]), reader["Name"].ToString(), if (reader.HasRows)
{
reader.Read();
return new User(Convert.ToInt32(reader["ID"]), reader["Name"].ToString(),
reader["Password"].ToString(), (UserRole)reader["Role"]); reader["Password"].ToString(), (UserRole)reader["Role"]);
}
else { return null; }
} }
} }
} }

View File

@@ -1,11 +1,5 @@
using Models; using Models;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Logic namespace Logic
{ {

View File

@@ -1,9 +1,4 @@
using Models; using Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Logic namespace Logic
{ {
@@ -14,7 +9,7 @@ namespace Logic
{ {
this.commentRepository = commentRepository; this.commentRepository = commentRepository;
} }
public Comment GetCommentById(int id) public Comment GetCommentById(int id)
{ {
return commentRepository.GetCommentById(id); return commentRepository.GetCommentById(id);

View File

@@ -1,16 +1,11 @@
using Models; using Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Logic namespace Logic
{ {
public class ComplaintManager public class ComplaintManager
{ {
private IComplaintRepository complaintRepository; private IComplaintRepository complaintRepository;
public ComplaintManager(IComplaintRepository complaintRepository) public ComplaintManager(IComplaintRepository complaintRepository)
{ {
this.complaintRepository = complaintRepository; this.complaintRepository = complaintRepository;
} }

View File

@@ -1,9 +1,4 @@
using Models; using Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Logic namespace Logic
{ {
@@ -14,7 +9,7 @@ namespace Logic
{ {
this.eventRepository = eventRepository; this.eventRepository = eventRepository;
} }
public List<Event> GetAllEvents() public List<Event> GetAllEvents()
{ {
return eventRepository.GetAllEvents(); return eventRepository.GetAllEvents();
} }

View File

@@ -1,9 +1,4 @@
using System; using System.Net;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace Logic.Exceptions namespace Logic.Exceptions
{ {

View File

@@ -1,10 +1,4 @@
using System; namespace Logic.Exceptions
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Logic.Exceptions
{ {
public class DatabaseOperationException : ApplicationException public class DatabaseOperationException : ApplicationException
{ {

View File

@@ -1,10 +1,4 @@
using Models; using Models;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Logic namespace Logic
{ {

View File

@@ -1,5 +1,3 @@
using System.ComponentModel.Design;
using System.Data.SqlClient;
using Models; using Models;
namespace Logic; namespace Logic;

View File

@@ -1,10 +1,4 @@
using Logic.Exceptions; using Models;
using Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Logic namespace Logic
{ {

View File

@@ -1,9 +1,4 @@
using Models; using Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Logic namespace Logic
{ {
@@ -17,4 +12,3 @@ namespace Logic
public void DeleteEvent(int id); public void DeleteEvent(int id);
} }
} }

View File

@@ -1,9 +1,4 @@
using Models; using Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Logic namespace Logic
{ {

View File

@@ -1,14 +1,4 @@
using BCrypt.Net; using Models;
using Models;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net.Http;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace Logic namespace Logic
{ {

View File

@@ -1,9 +1,4 @@
using System; namespace Models
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Models
{ {
public class Announcement : GenericMessage public class Announcement : GenericMessage
{ {
@@ -15,16 +10,16 @@ namespace Models
public Announcement() public Announcement()
{ {
} }
public List<Comment> Comments public List<Comment> Comments
{ {
get;set; get; set;
} }
public bool IsImportant public bool IsImportant
{ {
get;set; get; set;
} }
public bool IsSticky public bool IsSticky

View File

@@ -1,21 +1,16 @@
using System; namespace Models
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Models
{ {
public class Comment : GenericMessage public class Comment : GenericMessage
{ {
public Comment() public Comment()
{ {
} }
public Comment(int id, User author, string description, string title, DateTime publishDate) : base(id, author, description, title, publishDate) public Comment(int id, User author, string description, string title, DateTime publishDate) : base(id, author, description, title, publishDate)
{ {
Responses = new List<Comment>(); Responses = new List<Comment>();
} }
public List<Comment> Responses { get; set; } public List<Comment> Responses { get; set; }
public override string ToString() public override string ToString()
{ {

View File

@@ -1,15 +1,10 @@
using System; namespace Models
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Models
{ {
public class Complaint : GenericMessage public class Complaint : GenericMessage
{ {
public Complaint() public Complaint()
{ {
} }
public Complaint(int id, User author, string description, string title, DateTime publishDate, ComplaintStatus status, ComplaintSeverity severity) : base(id, author, description, title, publishDate) public Complaint(int id, User author, string description, string title, DateTime publishDate, ComplaintStatus status, ComplaintSeverity severity) : base(id, author, description, title, publishDate)
{ {
@@ -19,17 +14,17 @@ namespace Models
public ComplaintStatus Status public ComplaintStatus Status
{ {
get;set; get; set;
} }
public ComplaintSeverity Severity public ComplaintSeverity Severity
{ {
get;set; get; set;
} }
public List<Comment> Responses public List<Comment> Responses
{ {
get;set; get; set;
} }
public override string ToString() public override string ToString()
{ {

View File

@@ -1,8 +1,4 @@
using System; using System.ComponentModel;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace Models namespace Models
{ {

View File

@@ -1,8 +1,4 @@
using System; using System.ComponentModel;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace Models namespace Models
{ {

View File

@@ -1,15 +1,10 @@
using System; namespace Models
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Models
{ {
public class Event : GenericMessage public class Event : GenericMessage
{ {
public Event() public Event()
{ {
} }
public Event(int id, User author, string description, string title, DateTime publishDate, DateTime startDate, DateTime endDate) : base(id, author, description, title, publishDate) public Event(int id, User author, string description, string title, DateTime publishDate, DateTime startDate, DateTime endDate) : base(id, author, description, title, publishDate)
{ {
@@ -19,12 +14,12 @@ namespace Models
public DateTime StartDate public DateTime StartDate
{ {
get;set; get; set;
} }
public DateTime EndDate public DateTime EndDate
{ {
get;set; get; set;
} }
public override string ToString() public override string ToString()
{ {

View File

@@ -1,8 +1,4 @@
using System; using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
namespace Models namespace Models
{ {
@@ -18,7 +14,7 @@ namespace Models
} }
protected GenericMessage() protected GenericMessage()
{ {
} }
public int ID public int ID
{ {
@@ -27,16 +23,16 @@ namespace Models
public User Author public User Author
{ {
get;set; get; set;
} }
public string Description public string Description
{ {
get;set; get; set;
} }
[StringLength(255)] [StringLength(255)]
public string Title public string Title
{ {
get;set; get; set;
} }
public DateTime PublishDate public DateTime PublishDate
{ {

View File

@@ -1,9 +1,4 @@
using System; using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
namespace Models namespace Models
{ {
@@ -25,13 +20,17 @@ namespace Models
{ {
get; set; get; set;
} }
[Required]
[StringLength(255)] [StringLength(255)]
public string Name public string Name
{ {
get; set; get; set;
} }
[Required]
[DataType(DataType.Password)] [DataType(DataType.Password)]
[StringLength(int.MaxValue, MinimumLength = 4)]
public string Password public string Password
{ {
get; set; get; set;

View File

@@ -1,9 +1,4 @@
using System; using System.ComponentModel;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
namespace Models namespace Models
{ {

View File

@@ -1,10 +1,5 @@
using Logic; using Logic;
using Models; using Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tests.Mocks; using Tests.Mocks;
namespace Tests namespace Tests

View File

@@ -1,13 +1,6 @@
using Logic; using Logic;
using Models; using Models;
using System;
using System.Collections.Generic;
using System.Data; using System.Data;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace Tests.Mocks namespace Tests.Mocks
{ {
@@ -16,7 +9,7 @@ namespace Tests.Mocks
private List<Announcement> announcements; private List<Announcement> announcements;
private int currentId; private int currentId;
public AnnouncementRepositoryFake() public AnnouncementRepositoryFake()
{ {
announcements = new List<Announcement>(); announcements = new List<Announcement>();
currentId = 1; currentId = 1;

View File

@@ -1,10 +1,5 @@
using Models; using Logic;
using Logic; using Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tests.Mocks namespace Tests.Mocks
{ {
@@ -12,7 +7,7 @@ namespace Tests.Mocks
{ {
private List<User> users; private List<User> users;
private int currentId; private int currentId;
public UserRepositoryFake() public UserRepositoryFake()
{ {
users = new List<User>(); users = new List<User>();
currentId = 1; currentId = 1;

View File

@@ -1,4 +1,3 @@
using BCrypt.Net;
using Logic; using Logic;
using Models; using Models;
using Tests.Mocks; using Tests.Mocks;
@@ -26,7 +25,7 @@ namespace Tests
// Assert // Assert
Assert.IsNull(result); Assert.IsNull(result);
} }
[TestMethod] [TestMethod]
[ExpectedException(typeof(ArgumentException))] [ExpectedException(typeof(ArgumentException))]
public void AuthenticatedUserNullPasswordTest() public void AuthenticatedUserNullPasswordTest()
@@ -133,7 +132,7 @@ namespace Tests
// Assert // Assert
// ArgumentException expected // ArgumentException expected
} }
[TestMethod] [TestMethod]
public void DisableUserTest() public void DisableUserTest()
{ {
@@ -148,6 +147,6 @@ namespace Tests
Assert.AreEqual(user.Name, $"Deleted User {user.ID}"); Assert.AreEqual(user.Name, $"Deleted User {user.ID}");
Assert.AreEqual(user.Password, "0"); Assert.AreEqual(user.Password, "0");
} }
} }
} }

View File

@@ -1,5 +1,4 @@
using Logic; using Logic;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.RazorPages;
using Models; using Models;

View File

@@ -1,9 +1,6 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Logic; using Logic;
using Models; using Microsoft.AspNetCore.Authorization;
using Data; using Microsoft.AspNetCore.Mvc.RazorPages;
namespace WebApp.Pages namespace WebApp.Pages
{ {

View File

@@ -1,9 +1,7 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Logic; using Logic;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Models; using Models;
using System.Security.Claims;
namespace WebApp.Pages namespace WebApp.Pages
{ {

View File

@@ -1,9 +1,6 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Logic; using Logic;
using Models; using Microsoft.AspNetCore.Authorization;
using Data; using Microsoft.AspNetCore.Mvc.RazorPages;
namespace WebApp.Pages namespace WebApp.Pages
{ {

View File

@@ -1,8 +1,6 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Logic; using Logic;
using Models; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Security.Claims; using System.Security.Claims;
namespace WebApp.Pages namespace WebApp.Pages

View File

@@ -24,7 +24,7 @@ namespace WebApp.Pages
if (id != null) if (id != null)
{ {
Announcement announcement = announcementManager.GetAnnouncementById(id); Announcement announcement = announcementManager.GetAnnouncementById(id);
if (announcement.Author.ID == int.Parse(User.FindFirstValue("id")) || User.IsInRole("ADMIN") ) if (announcement.Author.ID == int.Parse(User.FindFirstValue("id")) || User.IsInRole("ADMIN"))
{ {
ViewData["announcement"] = announcement; ViewData["announcement"] = announcement;
} }

View File

@@ -26,7 +26,7 @@ namespace WebApp.Pages
if (id != null) if (id != null)
{ {
Event @event = eventManager.GetEventById(id.Value); Event @event = eventManager.GetEventById(id.Value);
if (@event.Author.ID == int.Parse(User.FindFirstValue("id")) || User.IsInRole("ADMIN") ) if (@event.Author.ID == int.Parse(User.FindFirstValue("id")) || User.IsInRole("ADMIN"))
{ {
ViewData["event"] = @event; ViewData["event"] = @event;
} }
@@ -46,7 +46,7 @@ namespace WebApp.Pages
EventManager eventManager = new EventManager(_eventRepository); EventManager eventManager = new EventManager(_eventRepository);
eventManager.UpdateEvent(Event.ID, Event.Title, Event.Description, Event.StartDate, Event.EndDate); eventManager.UpdateEvent(Event.ID, Event.Title, Event.Description, Event.StartDate, Event.EndDate);
} }
return RedirectToPage("Events"); return RedirectToPage("Events");
} }
} }

View File

@@ -1,4 +1,3 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.RazorPages;
namespace WebApp.Pages.Error namespace WebApp.Pages.Error

View File

@@ -1,4 +1,3 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.RazorPages;
namespace WebApp.Pages.Error namespace WebApp.Pages.Error

View File

@@ -1,9 +1,6 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Logic; using Logic;
using Models; using Microsoft.AspNetCore.Authorization;
using Data; using Microsoft.AspNetCore.Mvc.RazorPages;
namespace WebApp.Pages namespace WebApp.Pages
{ {

View File

@@ -1,10 +1,6 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Logic; using Logic;
using Models; using Microsoft.AspNetCore.Authorization;
using System.Security.Claims; using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Dynamic;
namespace WebApp.Pages namespace WebApp.Pages
{ {

View File

@@ -1,6 +1,4 @@
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace WebApp.Pages namespace WebApp.Pages
{ {

View File

@@ -1,11 +1,11 @@
using Microsoft.AspNetCore.Mvc; using Data;
using Microsoft.AspNetCore.Mvc.RazorPages; using Logic;
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Models; using Models;
using Logic;
using System.Security.Claims; using System.Security.Claims;
using Data;
namespace WebApp.Pages namespace WebApp.Pages
{ {

View File

@@ -1,5 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace WebApp.Pages namespace WebApp.Pages
{ {

View File

@@ -1,8 +1,8 @@
using Data;
using Logic;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.RazorPages;
using Logic;
using Models; using Models;
using Data;
namespace WebApp.Pages namespace WebApp.Pages
{ {
@@ -16,9 +16,21 @@ namespace WebApp.Pages
public void OnPost() public void OnPost()
{ {
var userManager = new UserManager(new UserRepository()); var userManager = new UserManager(new UserRepository());
if (userManager.CreateUser(MyUser.Name, BCrypt.Net.BCrypt.HashPassword(MyUser.Password), MyUser.Role) != null) User? result = null;
try
{ {
ViewData["confirm"] = $"Successfully registered {MyUser.Name}!"; result = userManager.CreateUser(MyUser.Name, BCrypt.Net.BCrypt.HashPassword(MyUser.Password), MyUser.Role);
}
catch (ArgumentException)
{
ViewData["confirm"] = "An error has occurred. Try a different username.";
}
finally
{
if (result != null)
{
ViewData["confirm"] = $"Successfully registered {MyUser.Name}!";
}
} }
} }
} }

View File

@@ -13,7 +13,8 @@ namespace WebApp
// Add services to the container. // Add services to the container.
builder.Services.AddRazorPages(); builder.Services.AddRazorPages();
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options => { builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
{
options.LoginPath = new PathString("/Login"); options.LoginPath = new PathString("/Login");
options.AccessDeniedPath = new PathString("/Error/401"); options.AccessDeniedPath = new PathString("/Error/401");
}); });

View File

@@ -1,15 +1,6 @@
using Data; using Data;
using Logic; using Logic;
using Models; using Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinForms namespace WinForms
{ {

View File

@@ -1,15 +1,6 @@
using Data; using Data;
using Logic; using Logic;
using Models; using Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinForms namespace WinForms
{ {
@@ -80,11 +71,11 @@ namespace WinForms
{ {
switch (responseType) switch (responseType)
{ {
case "announcement": case "announcement":
commentManager.CreateCommentOnAnnouncement(currentUser, tbDescription.Text, tbTitle.Text, dtpPublishDate.Value, parentId); commentManager.CreateCommentOnAnnouncement(currentUser, tbDescription.Text, tbTitle.Text, dtpPublishDate.Value, parentId);
break; break;
case "comment": case "comment":
commentManager.CreateResponseOnComment(currentUser, tbDescription.Text, tbTitle.Text, dtpPublishDate.Value, parentId); commentManager.CreateResponseOnComment(currentUser, tbDescription.Text, tbTitle.Text, dtpPublishDate.Value, parentId);
break; break;
case "complaint": case "complaint":
commentManager.CreateCommentOnComplaint(currentUser, tbDescription.Text, tbTitle.Text, dtpPublishDate.Value, parentId); commentManager.CreateCommentOnComplaint(currentUser, tbDescription.Text, tbTitle.Text, dtpPublishDate.Value, parentId);
@@ -111,7 +102,7 @@ namespace WinForms
form.ShowDialog(); form.ShowDialog();
RefreshComments(); RefreshComments();
} }
} }
private void btnEditComment_Click(object sender, EventArgs e) private void btnEditComment_Click(object sender, EventArgs e)

View File

@@ -1,15 +1,6 @@
using Data; using Data;
using Logic; using Logic;
using Models; using Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinForms namespace WinForms
{ {

View File

@@ -1,15 +1,6 @@
using Data; using Data;
using Logic; using Logic;
using Models; using Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinForms namespace WinForms
{ {

View File

@@ -1,15 +1,6 @@
using Data; using Data;
using Logic; using Logic;
using Models; using Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinForms namespace WinForms
{ {

View File

@@ -1,15 +1,6 @@
using Data; using Data;
using Logic; using Logic;
using Models; using Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinForms namespace WinForms
{ {

BIN
docs/project-report.docx Normal file

Binary file not shown.

Binary file not shown.

BIN
docs/testplan.pdf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,6 +1,7 @@
USE dbi509645 USE dbi509645
GO GO
-- User roles
INSERT INTO UserRole ([Role]) INSERT INTO UserRole ([Role])
VALUES VALUES
('TENANT'), ('TENANT'),
@@ -8,6 +9,7 @@ VALUES
('ADMIN') ('ADMIN')
GO GO
-- Default users
INSERT INTO Users ([Name], [Password], [Role]) INSERT INTO Users ([Name], [Password], [Role])
VALUES VALUES
('admin', 'admin', 2), ('admin', 'admin', 2),
@@ -15,6 +17,7 @@ VALUES
('room1', 'room1', 0) ('room1', 'room1', 0)
GO GO
-- Complaint status
INSERT INTO ComplaintStatus ([Status]) INSERT INTO ComplaintStatus ([Status])
VALUES VALUES
('FILED'), ('FILED'),
@@ -23,12 +26,11 @@ VALUES
('ARCHIVED') ('ARCHIVED')
GO GO
-- Complaint severity
INSERT INTO ComplaintSeverity ([Severity]) INSERT INTO ComplaintSeverity ([Severity])
VALUES VALUES
('LOW'), ('LOW'),
('NORMAL'), ('NORMAL'),
('HIGH'), ('HIGH'),
('URGENT') ('URGENT')
GO GO
SELECT * FROM Users u JOIN UserRole r ON u.[Role] = r.ID

View File

@@ -15,6 +15,8 @@ CREATE TABLE Users (
) )
GO GO
-- Used only in previous versions for a contact form
-- no longer needed
CREATE TABLE ContactForm ( CREATE TABLE ContactForm (
ID INT PRIMARY KEY IDENTITY NOT NULL, ID INT PRIMARY KEY IDENTITY NOT NULL,
[Name] NVARCHAR(255) NOT NULL, [Name] NVARCHAR(255) NOT NULL,