Merge remote-tracking branch 'origin/Danny's_branch' into Long_archivePos
This commit is contained in:
commit
66e3aed842
26
Source Code/.vscode/launch.json
vendored
Normal file
26
Source Code/.vscode/launch.json
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
// Use IntelliSense to find out which attributes exist for C# debugging
|
||||
// Use hover for the description of the existing attributes
|
||||
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
|
||||
"name": ".NET Core Launch (console)",
|
||||
"type": "coreclr",
|
||||
"request": "launch",
|
||||
"preLaunchTask": "build",
|
||||
// If you have changed target frameworks, make sure to update the program path.
|
||||
"program": "${workspaceFolder}/main/bin/Debug/net6.0/main.dll",
|
||||
"args": [],
|
||||
"cwd": "${workspaceFolder}/main",
|
||||
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
|
||||
"console": "internalConsole",
|
||||
"stopAtEntry": false
|
||||
},
|
||||
{
|
||||
"name": ".NET Core Attach",
|
||||
"type": "coreclr",
|
||||
"request": "attach"
|
||||
}
|
||||
]
|
||||
}
|
||||
42
Source Code/.vscode/tasks.json
vendored
Normal file
42
Source Code/.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "build",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/main/main.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "publish",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"${workspaceFolder}/main/main.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "watch",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"watch",
|
||||
"run",
|
||||
"${workspaceFolder}/main/main.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -4,6 +4,7 @@
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<Platforms>AnyCPU;x86</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Odbc;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@ -197,6 +198,98 @@ namespace TeamHobby.HobbyProjectGenerator.ArchiveTests
|
||||
|
||||
}
|
||||
|
||||
public void RemoveEntriesTest(IDataSource<string> sqlDAO)
|
||||
{
|
||||
Console.WriteLine("TESTING - REMOVE ENTRIES");
|
||||
|
||||
// Arrange
|
||||
ArchiveManager archiveManager = new ArchiveManager(sqlDAO);
|
||||
SqlDAO sqlDS = null;
|
||||
|
||||
if (sqlDAO.GetType() == typeof(SqlDAO))
|
||||
{
|
||||
sqlDS = (SqlDAO)sqlDAO;
|
||||
//sqlDS.GetConnection().Open();
|
||||
|
||||
// Act
|
||||
Console.WriteLine("\nInserting into archive...");
|
||||
sqlDS.WriteData("INSERT into log(LtimeStamp, LvName, catname, userop, logmessage) values " +
|
||||
"('2021-08-07 23:00:00', 'Info', 'View', 'create some projects', 'new account created')," +
|
||||
"('2021-06-04 23:00:00', 'Info', 'Business', 'create some projects', 'new projects made')," +
|
||||
"('2021-07-02 23:00:00', 'Info', 'View', 'log out', 'log out successful')," +
|
||||
"('2021-09-03 23:00:00', 'Info', 'Business', 'log in', 'log in successfully')," +
|
||||
"('2021-10-20 23:00:00', 'Info', 'View', 'search for projects', 'result return')," +
|
||||
"('2021-09-03 23:00:00', 'Info', 'Business', 'log in', 'log in successfully');");
|
||||
|
||||
OdbcDataReader odbcObj = (OdbcDataReader)sqlDS.ReadData("SELECT * FROM log WHERE DATEDIFF(CURRENT_TIMESTAMP, log.LtimeStamp) > 30;");
|
||||
|
||||
int count = 0;
|
||||
while (odbcObj.Read()) { ++count; }
|
||||
Console.WriteLine("Number of entries > 30 days old: " + count);
|
||||
|
||||
Console.WriteLine("\nRemoving entries from archive...");
|
||||
sqlDS.RemoveEntries();
|
||||
|
||||
odbcObj = (OdbcDataReader)sqlDS.ReadData("SELECT * FROM log WHERE DATEDIFF(CURRENT_TIMESTAMP, log.LtimeStamp) > 30;");
|
||||
|
||||
count = 0;
|
||||
while (odbcObj.Read()) { ++count; }
|
||||
Console.WriteLine("Number of entries > 30 days old: " + count);
|
||||
|
||||
// Assert
|
||||
bool expectedVal = true;
|
||||
bool actualVal = !Convert.ToBoolean(count);
|
||||
|
||||
if (expectedVal == actualVal)
|
||||
{
|
||||
Console.WriteLine("\nExpected: {0}, Actual: {0}. Entries removed correctly.", expectedVal, actualVal);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("\nExpected: {0}, Actual: {1}. Entries not removed.", expectedVal, actualVal);
|
||||
}
|
||||
|
||||
//sqlDS.GetConnection().Close();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
public void RemoveOutputFileTest(IDataSource<string> sqlDAO)
|
||||
{
|
||||
Console.WriteLine("TESTING - REMOVE OUTPUT FILE\n");
|
||||
|
||||
// Arrange
|
||||
ArchiveManager archiveManager = new ArchiveManager(sqlDAO);
|
||||
SqlDAO sqlDS = null;
|
||||
|
||||
if (sqlDAO.GetType() == typeof(SqlDAO))
|
||||
{
|
||||
sqlDS = (SqlDAO)sqlDAO;
|
||||
}
|
||||
|
||||
// Act
|
||||
string filepath = archiveManager.CreateOutFileName();
|
||||
Console.WriteLine("\nRemoving file...");
|
||||
sqlDS.RemoveOutputFile(filepath);
|
||||
|
||||
// Assert
|
||||
bool expectedVal = false;
|
||||
bool actualVal = File.Exists(filepath);
|
||||
Console.WriteLine("Checking if file exists: " + actualVal);
|
||||
|
||||
if (expectedVal == actualVal)
|
||||
{
|
||||
Console.WriteLine("\nExpected: {0}, Actual: {0}. Output file removed correctly.", expectedVal, actualVal);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("\nExpected: {0}, Actual: {1}. Output file NOT removed.", expectedVal, actualVal);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
string dbInfo = "DRIVER={MariaDB ODBC 3.1 Driver};" +
|
||||
@ -206,6 +299,7 @@ namespace TeamHobby.HobbyProjectGenerator.ArchiveTests
|
||||
"PASSWORD=Teamhobby;" +
|
||||
"OPTION=3";
|
||||
SqlDAO sqlDAO = new SqlDAO(dbInfo);
|
||||
sqlDAO.GetConnection().Open();
|
||||
//ArchiveManager archiveManager = new ArchiveManager(sqlDAO);
|
||||
|
||||
// Testing folder creation
|
||||
@ -226,12 +320,21 @@ namespace TeamHobby.HobbyProjectGenerator.ArchiveTests
|
||||
Console.WriteLine("");
|
||||
|
||||
|
||||
|
||||
// Testing clean up sequence
|
||||
//test.IsCleaningUpCompleted(sqlDAO);
|
||||
//Console.WriteLine("-----------------");
|
||||
//Console.WriteLine("");
|
||||
|
||||
// Testing remove entries
|
||||
test.RemoveEntriesTest(sqlDAO);
|
||||
Console.WriteLine("-----------------");
|
||||
Console.WriteLine("");
|
||||
|
||||
// Testing remove output file
|
||||
test.RemoveOutputFileTest(sqlDAO);
|
||||
Console.WriteLine("-----------------");
|
||||
Console.WriteLine("");
|
||||
sqlDAO.GetConnection().Close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -17,9 +17,9 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess
|
||||
public SqlDAO(string info)
|
||||
{
|
||||
try {
|
||||
Console.WriteLine("Establising Connection");
|
||||
Console.WriteLine("Establising Connection...");
|
||||
_conn = new OdbcConnection(info);
|
||||
Console.WriteLine("Connection established");
|
||||
Console.WriteLine("Connection established.");
|
||||
}
|
||||
catch {
|
||||
//_conn = null;
|
||||
@ -42,7 +42,7 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess
|
||||
{
|
||||
try
|
||||
{
|
||||
_conn.Open();
|
||||
//_conn.Open();
|
||||
OdbcCommand command = new OdbcCommand(cmd, _conn);
|
||||
OdbcDataReader reader = command.ExecuteReader();
|
||||
|
||||
@ -67,12 +67,12 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess
|
||||
{
|
||||
try
|
||||
{
|
||||
_conn.Open();
|
||||
|
||||
//_conn.Open();
|
||||
|
||||
OdbcCommand command = new OdbcCommand(cmd, _conn);
|
||||
command.ExecuteNonQuery();
|
||||
|
||||
_conn.Close();
|
||||
|
||||
//_conn.Close();
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -84,7 +84,7 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess
|
||||
}
|
||||
finally
|
||||
{
|
||||
_conn.Close();
|
||||
//_conn.Close();
|
||||
}
|
||||
}
|
||||
|
||||
@ -94,12 +94,12 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess
|
||||
{
|
||||
try
|
||||
{
|
||||
_conn.Open();
|
||||
//_conn.Open();
|
||||
|
||||
OdbcCommand command = new OdbcCommand(cmd, _conn);
|
||||
command.ExecuteNonQuery();
|
||||
|
||||
_conn.Close();
|
||||
//_conn.Close();
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -111,7 +111,7 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess
|
||||
}
|
||||
finally
|
||||
{
|
||||
_conn.Close();
|
||||
//_conn.Close();
|
||||
}
|
||||
}
|
||||
|
||||
@ -120,12 +120,12 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess
|
||||
{
|
||||
try
|
||||
{
|
||||
_conn.Open();
|
||||
//_conn.Open();
|
||||
|
||||
OdbcCommand command = new OdbcCommand(cmd, _conn);
|
||||
command.ExecuteNonQuery();
|
||||
|
||||
_conn.Close();
|
||||
//_conn.Close();
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -137,7 +137,7 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess
|
||||
}
|
||||
finally
|
||||
{
|
||||
_conn.Close();
|
||||
//_conn.Close();
|
||||
}
|
||||
}
|
||||
|
||||
@ -177,7 +177,7 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess
|
||||
public bool CopyToFile(string filePath){
|
||||
try
|
||||
{
|
||||
_conn.Open();
|
||||
//_conn.Open();
|
||||
// Conver backward slash in to forward slash
|
||||
filePath = filePath.Replace("\\", "/");
|
||||
string sqlQuery = "SELECT 'LtimeStamp', 'logID', 'LvName', 'catName', 'userOP', 'logMessage' " +
|
||||
@ -200,19 +200,19 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess
|
||||
Console.WriteLine("Output to a file completed. ");
|
||||
|
||||
|
||||
_conn.Close();
|
||||
//_conn.Close();
|
||||
return true;
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_conn.Close();
|
||||
//_conn.Close();
|
||||
Console.WriteLine("Error when copying query to a file !!, will be handled higher up the call stack");
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
_conn.Close();
|
||||
//_conn.Close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,39 @@
|
||||
// Print Statements used throughout the program.
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.DataAccess
|
||||
{
|
||||
public class UiPrint
|
||||
{
|
||||
public void InitialMenu()
|
||||
{
|
||||
// Create intial menu
|
||||
Console.WriteLine("What would you like to access?");
|
||||
int num = 1;
|
||||
Console.WriteLine(num + ".User Management");
|
||||
num += 1;
|
||||
Console.WriteLine(num + ".Logging");
|
||||
}
|
||||
public void UserManagementMenu(string username)
|
||||
{
|
||||
// Menu for all UserManagement options
|
||||
int menu = 0;
|
||||
Console.WriteLine($"Welcome {username} to User Management.\n");
|
||||
Console.WriteLine("What would you like to do?\n");
|
||||
Console.WriteLine(menu + ") To exit User Management.\n");
|
||||
menu += 1;
|
||||
Console.WriteLine(menu + ") Create a new account.\n");
|
||||
menu += 1;
|
||||
Console.WriteLine(menu + ") Edit an account.\n");
|
||||
menu += 1;
|
||||
Console.WriteLine(menu + ") Delete an account.\n");
|
||||
menu += 1;
|
||||
Console.WriteLine(menu + ") Disable an account.\n");
|
||||
menu += 1;
|
||||
Console.WriteLine(menu + ") Enable an account.\n");
|
||||
menu += 1;
|
||||
Console.WriteLine(menu + ") View logs.\n");
|
||||
menu += 1;
|
||||
Console.WriteLine(menu + ") View archive.\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Logging
|
||||
{
|
||||
public interface ILogger
|
||||
{
|
||||
bool Log(LogEntry log);
|
||||
|
||||
// IList<string> GetAllLogs();
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Logging.Contracts
|
||||
{
|
||||
public interface ILoggerFactory
|
||||
{
|
||||
ILogger CreateLogger()
|
||||
{
|
||||
return new DBLogger();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
// using System;
|
||||
// using System.Collections.Generic;
|
||||
// using System.Linq;
|
||||
// using System.Text;
|
||||
// using System.Threading.Tasks;
|
||||
|
||||
// namespace TeamHobby.HobbyProjectGenerator.Logging
|
||||
// {
|
||||
// public class ConsoleLogger : ILogger
|
||||
// {
|
||||
// public bool Log(LogEntry log)
|
||||
// {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Logging
|
||||
{
|
||||
public class DBLogger : ILogger
|
||||
{
|
||||
public DBLogger()
|
||||
{
|
||||
}
|
||||
|
||||
public IList<string> GetAllLogs()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool Log(LogEntry log)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TeamHobby.HobbyProjectGenerator.Logging.Contracts;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Logging.Implementations
|
||||
{
|
||||
public class DBLoggerFactory : ILoggerFactory
|
||||
{
|
||||
public DBLoggerFactory()
|
||||
{
|
||||
}
|
||||
public ILogger CreateLogger()
|
||||
{
|
||||
return new DBLogger();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
// using System;
|
||||
|
||||
// namespace TeamHobby.HobbyProjectGenerator.Logging
|
||||
// {
|
||||
// public class FileLogger : Ilogger
|
||||
// {
|
||||
// public FileLogger()
|
||||
// {
|
||||
// }
|
||||
|
||||
// public IList<string> GetAllLogs()
|
||||
// {
|
||||
// throw new NotImplementedException();
|
||||
// }
|
||||
|
||||
// public bool Log(LogEntry log)
|
||||
// {
|
||||
// throw new NotImplementedException();
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// }
|
||||
@ -0,0 +1,58 @@
|
||||
// using System;
|
||||
// using System.Collections.Generic;
|
||||
// namespace TeamHobby.HobbyProjectGenerator.Logging
|
||||
// {
|
||||
// // implementation of ILogger that stores logs as they initialize
|
||||
// public class InMemoryLogger : ILogger
|
||||
// {
|
||||
// // make readonly to prevent it from being changed somewhere other than in the constructor
|
||||
// private readonly IList<string> _logStore;
|
||||
|
||||
// public InMemoryLogger()
|
||||
// {
|
||||
// // list of current logs
|
||||
// _logStore = new List<string>();
|
||||
// }
|
||||
|
||||
// public InMemoryLogger(IList<string> logStore)
|
||||
// {
|
||||
// _logStore = logStore;
|
||||
// }
|
||||
|
||||
// public bool Log(LogEntry entry)
|
||||
// {
|
||||
// if (entry is null)
|
||||
// {
|
||||
// throw new ArgumentNullException(nameof(entry));
|
||||
// }
|
||||
|
||||
// try
|
||||
// {
|
||||
// // string interpolation to add UTC timestamp to log description
|
||||
// //_logStore.Add($"{DateTime.UtcNow}-> {description}");
|
||||
// return true;
|
||||
// }
|
||||
// catch
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// public IList<string> GetAllLogs()
|
||||
// {
|
||||
// return _logStore;
|
||||
// }
|
||||
|
||||
|
||||
// public override bool Equals(object? obj)
|
||||
// {
|
||||
// return obj is InMemoryLogger logger &&
|
||||
// EqualityComparer<IList<string>>.Default.Equals(_logStore, logger._logStore);
|
||||
// }
|
||||
|
||||
// public override int GetHashCode()
|
||||
// {
|
||||
// return HashCode.Combine(_logStore);
|
||||
// }
|
||||
// }
|
||||
|
||||
// }
|
||||
@ -0,0 +1,54 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Logging
|
||||
{
|
||||
public enum LogLevel
|
||||
{
|
||||
Info, Debug, Warning, Error
|
||||
}
|
||||
|
||||
public enum LogCategory
|
||||
{
|
||||
View, Business, Server, Data, Datastore
|
||||
}
|
||||
|
||||
// LogEntry is a record type with init properties for each field
|
||||
// ensures that log entries are immutable after initialization
|
||||
public record LogEntry
|
||||
{
|
||||
public LogLevel level { get; init; }
|
||||
public LogCategory category { get; init; }
|
||||
public string user { get; init; }
|
||||
public string description { get; init; }
|
||||
public DateTime timestamp { get; init; }
|
||||
|
||||
|
||||
// Constructor requireing only the description as an arg
|
||||
// Assigns default values for LogLevel (Info), LogCategory (Server), user ("System"), and the UTC time at initialization for timestamp
|
||||
public LogEntry(string description)
|
||||
{
|
||||
this.level = LogLevel.Info;
|
||||
this.category = LogCategory.Server;
|
||||
this.user = "System";
|
||||
this.description = description;
|
||||
this.timestamp = DateTime.UtcNow;
|
||||
}
|
||||
// Constructor with args for all fields except timestamp
|
||||
// timestamp is always set to the UTC time at the time of initialization
|
||||
public LogEntry(LogLevel level, string user, LogCategory category, string description)
|
||||
{
|
||||
this.level = level;
|
||||
this.category = category;
|
||||
this.user = user;
|
||||
this.description = description;
|
||||
this.timestamp = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,44 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TeamHobby.HobbyProjectGenerator.DataAccess;
|
||||
using TeamHobby.HobbyProjectGenerator.Logging.Contracts;
|
||||
using TeamHobby.HobbyProjectGenerator.Logging.Implementations;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Logging
|
||||
{
|
||||
internal class LoggingManager
|
||||
{
|
||||
private readonly IDataSource<string> _conn;
|
||||
private readonly ILogger _logger;
|
||||
private readonly ILoggerFactory _factory;
|
||||
private readonly LogEntry _logEntry;
|
||||
|
||||
// Both Constructors take an IDataSource arg to make logging extensible to future data sources
|
||||
// first constructor has no additional args - defaults to using the DBFactiry implementation
|
||||
public LoggingManager(IDataSource<string> dataSource)
|
||||
{
|
||||
_conn = dataSource;
|
||||
_factory = new DBLoggerFactory();
|
||||
_logger = _factory.CreateLogger();
|
||||
}
|
||||
// second constructor takes an additional ILoggerFactory arg - allows for extensible logger types
|
||||
public LoggingManager(IDataSource<string> dataSource, ILoggerFactory factory)
|
||||
{
|
||||
_conn = dataSource;
|
||||
_factory = factory;
|
||||
_logger = _factory.CreateLogger();
|
||||
|
||||
}
|
||||
|
||||
public void Process()
|
||||
{
|
||||
_logger.Log(_logEntry);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<OutputType>Library</OutputType>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<Platforms>AnyCPU;x86</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<Optimize>True</Optimize>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
|
||||
<Optimize>True</Optimize>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@ -0,0 +1,15 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<Platforms>AnyCPU;x86</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\TeamHobby.HobbyProjectGenerator.Archive\TeamHobby.HobbyProjectGenerator.Archive.csproj" />
|
||||
<ProjectReference Include="..\TeamHobby.HobbyProjectGenerator.DataAccess\TeamHobby.HobbyProjectGenerator.DataAccess.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@ -0,0 +1,81 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Data.Odbc;
|
||||
using TeamHobby.HobbyProjectGenerator.DataAccess;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.UserManagement
|
||||
{
|
||||
public class AccountService
|
||||
{
|
||||
public bool CreateUserRecord(UserAccount newUser, string CreatedBy, IDataSource<string> dbSource)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Insert into users table
|
||||
string sqlUser = $"INSERT INTO users (UserName, Password, Role, IsActive," +
|
||||
$"CreatedBy, CreatedDate, Email) VALUES ('{newUser.username}', " +
|
||||
$"'{newUser.password}','{newUser.role}', 1," +
|
||||
$"'{CreatedBy}', NOW(),'{newUser.email}');";
|
||||
|
||||
bool insertNewUser = dbSource.WriteData(sqlUser);
|
||||
return insertNewUser;
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public bool EditUserRecord(UserAccount newUser, string CreatedBy, IDataSource<string> dbSource)
|
||||
{
|
||||
/* // Insert into users table
|
||||
string sqlUser = $"UPDATE hobby.roles r SET r.Role = 'regular',r.CreatedBy = 'colin'WHERE r.RoleID = 5; ";
|
||||
|
||||
Object insertNewUser = dbSource.WriteData(sqlUser);
|
||||
// Insert into users table
|
||||
string sqlRoles = $"INSERT INTO roles (Role, CreatedBy, CreatedDate) " +
|
||||
$"VALUES ('{newUser.NewRole}', '{CreatedBy}', NOW());";
|
||||
Object insertNewRole = dbSource.WriteData(sqlUser);
|
||||
// Create string for confirming user account
|
||||
string confirmUser = $"Select * from users where username = {newUser.NewUserName} " +
|
||||
$"and password = {newUser.NewPassword};";
|
||||
Object conUser = dbSource.ReadData(confirmUser);
|
||||
|
||||
//Console.WriteLine("type of Reesult:" + confirmAdmin.GetType());
|
||||
OdbcDataReader reader = null;
|
||||
|
||||
if (conUser.GetType() == typeof(OdbcDataReader))
|
||||
{
|
||||
reader = (OdbcDataReader)conUser;
|
||||
}
|
||||
|
||||
// Read Sql query results
|
||||
while (reader.Read())
|
||||
{
|
||||
Console.WriteLine(reader.GetString(0));
|
||||
}
|
||||
|
||||
SqlDAO sqlDS = (SqlDAO)dbSource;
|
||||
Console.WriteLine("");
|
||||
|
||||
// Closing the connection
|
||||
sqlDS.getConnection().Close();*/
|
||||
return true;
|
||||
}
|
||||
public bool DeleteUserRecord(UserAccount newUser, IDataSource<string> dbSource)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
public bool DisableUser(UserAccount newUser, IDataSource<string> dbSource)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
public bool EnableUser(UserAccount newUser, IDataSource<string> dbSource)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,270 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Data.Odbc;
|
||||
using TeamHobby.HobbyProjectGenerator.UserManagement;
|
||||
using TeamHobby.HobbyProjectGenerator.DataAccess;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.UserManagement
|
||||
{
|
||||
public class SystemAccountManager
|
||||
{
|
||||
public string IsInputValid(string checkUN, string checkPWD)
|
||||
{
|
||||
// Create bool variables to check if username and password are valid
|
||||
bool validUN = checkUN.All(un=>Char.IsLetterOrDigit(un) || un=='@'
|
||||
|| un == '.' || un == ',' || un == '!');
|
||||
|
||||
bool validPwd = checkPWD.All(Char.IsLetterOrDigit);
|
||||
|
||||
|
||||
// Check if any are empty
|
||||
if (checkUN == null || checkPWD == null)
|
||||
{
|
||||
return "Invalid input\n";
|
||||
}
|
||||
// Check if username is within the restricted length
|
||||
else if (checkUN.Length > 15 || checkUN.Length <= 0
|
||||
|| validUN is false)
|
||||
{
|
||||
return "Invalid Username\n";
|
||||
}
|
||||
// Check if password is within the restricted length
|
||||
else if (checkPWD.Length > 18 || checkPWD.Length <= 0
|
||||
|| validPwd is false)
|
||||
{
|
||||
return "Invalid Password\n";
|
||||
}
|
||||
// Check if username and password are valid
|
||||
else if (checkUN.Length <= 15 && checkUN.Length > 0
|
||||
&& validUN is true && checkPWD.Length <= 18
|
||||
&& checkPWD.Length > 0 && validPwd is true)
|
||||
{
|
||||
return "Username and password is valid.\n";
|
||||
}
|
||||
// Check if username and password and email are valid
|
||||
else if (checkUN.Length <= 15 && checkUN.Length > 0
|
||||
&& validUN is true && checkPWD.Length <= 18
|
||||
&& checkPWD.Length > 0 && validPwd is true)
|
||||
{
|
||||
return "Username and password is valid.\n";
|
||||
}
|
||||
// For testing to make sure username is valid
|
||||
else if (checkUN.Length <= 15 && checkUN.Length > 0
|
||||
&& validUN is true)
|
||||
{
|
||||
return "Valid Username\n";
|
||||
}
|
||||
// For testing to make sure password is valid
|
||||
else if (checkPWD.Length <= 18 && checkPWD.Length > 0
|
||||
&& validPwd is true)
|
||||
{
|
||||
return "Valid Password\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Invalid input\n";
|
||||
}
|
||||
}
|
||||
public string IsInputValid(string checkUN, string checkPWD, string email, string role)
|
||||
{
|
||||
// Create bool variables to check if username and password and email are valid
|
||||
bool validUN = checkUN.All(un => Char.IsLetterOrDigit(un) || un == '@'
|
||||
|| un == '.' || un == ',' || un == '!');
|
||||
|
||||
bool validPwd = checkPWD.All(Char.IsLetterOrDigit);
|
||||
|
||||
bool validEmail = email.All(email => Char.IsLetterOrDigit(email) && email == '@'
|
||||
&& email == '.');
|
||||
|
||||
bool validRole = role.All(role => Char.IsLetter(role));
|
||||
|
||||
// Check if any are empty
|
||||
if (checkUN == null || checkPWD == null || email == null)
|
||||
{
|
||||
return "Invalid input\n";
|
||||
}
|
||||
// Check if username is within the restricted length
|
||||
else if (checkUN.Length > 15 || checkUN.Length <= 0
|
||||
|| validUN is false)
|
||||
{
|
||||
return "Invalid Username\n";
|
||||
}
|
||||
// Check if password is within the restricted length
|
||||
else if (checkPWD.Length > 18 || checkPWD.Length <= 0
|
||||
|| validPwd is false)
|
||||
{
|
||||
return "Invalid Password\n";
|
||||
}
|
||||
// Check if email is within the restricted length
|
||||
else if (email.Length > 18 || email.Length <= 0
|
||||
|| validEmail is false)
|
||||
{
|
||||
return "Invalid Email.\n";
|
||||
}
|
||||
// Check if username and password are valid
|
||||
else if (checkUN.Length <= 15 && checkUN.Length > 0
|
||||
&& validUN is true && checkPWD.Length <= 18
|
||||
&& checkPWD.Length > 0 && validPwd is true)
|
||||
{
|
||||
return "Username and password is valid.\n";
|
||||
}
|
||||
// Check if username and password and email are valid
|
||||
else if (checkUN.Length <= 15 && checkUN.Length > 0
|
||||
&& validUN is true && checkPWD.Length <= 18
|
||||
&& checkPWD.Length > 0 && validPwd is true
|
||||
&& email.Length > 18 && email.Length <= 0
|
||||
&& validEmail is true)
|
||||
{
|
||||
return "Username and password is valid.\n";
|
||||
}
|
||||
// For testing to make sure username is valid
|
||||
else if (checkUN.Length <= 15 && checkUN.Length > 0
|
||||
&& validUN is true)
|
||||
{
|
||||
return "Valid Username\n";
|
||||
}
|
||||
// For testing to make sure password is valid
|
||||
else if (checkPWD.Length <= 18 && checkPWD.Length > 0
|
||||
&& validPwd is true)
|
||||
{
|
||||
return "Valid Password\n";
|
||||
}
|
||||
// For testing to make sure email is valid
|
||||
else if (email.Length > 18 && email.Length <= 0
|
||||
&& validEmail is true)
|
||||
{
|
||||
return "Valid Password\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Invalid input\n";
|
||||
}
|
||||
}
|
||||
// Check with database if user is an admin
|
||||
public bool isAdmin(UserAccount user, IDataSource<string> dbSource)
|
||||
{
|
||||
// string checkAdmin = $"Select * from users where username = {user.username} and password = {user.password};";
|
||||
string checkAdmin = $"select r.Role from roles r, users u where " +
|
||||
$"UserName = '{user.username}' and Password = '{user.password}' and r.Role = u.Role;";
|
||||
Object confirmAdmin = dbSource.ReadData(checkAdmin);
|
||||
//Console.WriteLine("type of Reesult:" + confirmAdmin.GetType());
|
||||
OdbcDataReader reader = null;
|
||||
|
||||
if (confirmAdmin.GetType() == typeof(OdbcDataReader))
|
||||
{
|
||||
reader = (OdbcDataReader)confirmAdmin;
|
||||
}
|
||||
|
||||
// Create String to hold sql output
|
||||
string checkSql = "";
|
||||
|
||||
// Read Sql query results
|
||||
while (reader.Read())
|
||||
{
|
||||
checkSql = reader.GetString(0);
|
||||
}
|
||||
|
||||
SqlDAO sqlDS = (SqlDAO)dbSource;
|
||||
Console.WriteLine("");
|
||||
|
||||
// Closing the connection
|
||||
sqlDS.getConnection().Close();
|
||||
|
||||
if (checkSql == "Admin")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public string CreateUserRecord(UserAccount user, IDataSource<string> dbSource)
|
||||
{
|
||||
// Check Login inputs
|
||||
IsInputValid(user.username, user.password);
|
||||
|
||||
bool Admin = isAdmin(user, dbSource);
|
||||
|
||||
// Give access if the user is and Admin
|
||||
if (Admin is false)
|
||||
{
|
||||
return "Access Denied: Unauthorized\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
// db.users layout (UserName, Password, RoleID, IsActive, CreatedBy, CreatedDate)
|
||||
// db.roles layout (RoleID(AutoGen), Role, CreatedBy, CreatedDate)
|
||||
// Create UiPrint Object
|
||||
UiPrint ui = new UiPrint();
|
||||
// Create Account Service object
|
||||
AccountService accountService = new AccountService();
|
||||
// Create credentials object for new inptus
|
||||
GetCredentials newCredentials = new GetCredentials();
|
||||
// Print User Management menu
|
||||
ui.UserManagementMenu(user.username);
|
||||
// Create bool object for menu loop
|
||||
bool menuLoop = true;
|
||||
// Create loop for menu
|
||||
while (menuLoop is true) {
|
||||
// Get user choice
|
||||
int menuChoice = Convert.ToInt32(Console.ReadLine());
|
||||
// Complete the appropriate action
|
||||
switch (menuChoice)
|
||||
{
|
||||
// Exit menu
|
||||
case 0:
|
||||
return "Exiting UserManagement.\n";
|
||||
break;
|
||||
// Create account
|
||||
case 1:
|
||||
UserAccount newUser = new UserAccount(newCredentials.GetUserName(),
|
||||
newCredentials.GetPassword(), newCredentials.GetEmail(),
|
||||
newCredentials.GetRole(), DateTime.UtcNow);
|
||||
accountService.CreateUserRecord(newUser,user.username, dbSource);
|
||||
break;
|
||||
// Edit account
|
||||
case 2:
|
||||
/* UserAccount newEditUser = new UserAccount(newCredentials.GetUserName(),
|
||||
newCredentials.GetPassword(), DateTime.UtcNow);
|
||||
accountService.EditUserRecord(newEditUser, dbSource);*/
|
||||
break;
|
||||
// Delete account
|
||||
case 3:
|
||||
UserAccount newDeleteUser = new UserAccount(newCredentials.GetUserName(),
|
||||
newCredentials.GetPassword(), DateTime.UtcNow);
|
||||
accountService.DeleteUserRecord(newDeleteUser, dbSource);
|
||||
break;
|
||||
// Disable account
|
||||
case 4:
|
||||
UserAccount newDisableUser = new UserAccount(newCredentials.GetUserName(),
|
||||
newCredentials.GetPassword(), DateTime.UtcNow);
|
||||
accountService.DisableUser(newDisableUser, dbSource);
|
||||
break;
|
||||
// Enable account
|
||||
case 5:
|
||||
UserAccount newEnableUser = new UserAccount(newCredentials.GetUserName(),
|
||||
newCredentials.GetPassword(), DateTime.UtcNow);
|
||||
accountService.EnableUser(newEnableUser, dbSource);
|
||||
break;
|
||||
// View logs
|
||||
case 6:
|
||||
break;
|
||||
// View archive
|
||||
case 7:
|
||||
break;
|
||||
default:
|
||||
Console.WriteLine("Invalid input.\nPlease enter a valid option.\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
string dbAction = user.username;
|
||||
return dbAction;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\TeamHobby.HobbyProjectGenerator.DataAccess\TeamHobby.HobbyProjectGenerator.DataAccess.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@ -0,0 +1,75 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.UserManagement
|
||||
{
|
||||
public class GetCredentials
|
||||
{
|
||||
public string? GetUserName()
|
||||
{
|
||||
Console.WriteLine("Please enter a username:");
|
||||
string? userName = Console.ReadLine();
|
||||
return userName;
|
||||
}
|
||||
public string? GetPassword()
|
||||
{
|
||||
Console.WriteLine("Please enter a password:");
|
||||
string? userPassword = Console.ReadLine();
|
||||
return userPassword;
|
||||
}
|
||||
/*public string ConfirmPassword()
|
||||
{
|
||||
Console.WriteLine();
|
||||
string confirmPassword = newUser.NewPassword;
|
||||
}*/
|
||||
public string GetEmail()
|
||||
{
|
||||
Console.WriteLine("Please enter an email:");
|
||||
return Console.ReadLine();
|
||||
}
|
||||
public string GetRole()
|
||||
{
|
||||
Console.WriteLine("Please enter the role of the user:");
|
||||
return Console.ReadLine();
|
||||
}
|
||||
}
|
||||
public class UserAccount
|
||||
{
|
||||
// Admin Credentials
|
||||
private string _userName;
|
||||
private string _password;
|
||||
private DateTime _Time;
|
||||
// New User Credentials
|
||||
private string _Email;
|
||||
private string _Role;
|
||||
|
||||
public UserAccount(string un, string pwd, DateTime TimeStamp)
|
||||
{
|
||||
_userName = un;
|
||||
_password = pwd;
|
||||
_Time = TimeStamp;
|
||||
}
|
||||
public UserAccount(string newUN, string newPWD, string Email, string role, DateTime newTime)
|
||||
{
|
||||
_userName = newUN;
|
||||
_password = newPWD;
|
||||
_Role = role;
|
||||
_Email = Email;
|
||||
_Time = newTime;
|
||||
}
|
||||
public UserAccount()
|
||||
{
|
||||
_Role = "regular";
|
||||
_Time= DateTime.Now;
|
||||
}
|
||||
|
||||
public string username { get { return _userName; } }
|
||||
public string password { get { return _password; } }
|
||||
public string email { get { return _Email; } }
|
||||
public string role { get { return _Role; } }
|
||||
public DateTime Time { get { return _Time; } }
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Contracts
|
||||
{
|
||||
internal interface IDataSource
|
||||
{
|
||||
}
|
||||
}
|
||||
@ -1,15 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator
|
||||
{
|
||||
public interface IUserService
|
||||
{
|
||||
// Public methods shouldn't be void so it can be tested
|
||||
bool User(string username);
|
||||
IList<string> GetAllUsers();
|
||||
}
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Implementations
|
||||
{
|
||||
internal class Database_Users : IUserService
|
||||
{
|
||||
public IList<string> GetAllUsers()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool User(string username)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,53 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Implementations
|
||||
{
|
||||
public class InMemoryUserService : IUserService
|
||||
{
|
||||
// Make it readonly so it can't be changed
|
||||
private readonly IList<string> _logstore;
|
||||
|
||||
public InMemoryUserService()
|
||||
{
|
||||
_logstore = new List<string>();
|
||||
}
|
||||
|
||||
public IList<string> GetAllUsers()
|
||||
{
|
||||
return _logstore;
|
||||
}
|
||||
|
||||
public bool User(string username)
|
||||
{
|
||||
try
|
||||
{
|
||||
//DateTime.UtcNow.ToString() + "->" + username; old way of doing it
|
||||
_logstore.Add($"{DateTime.UtcNow}->{username}"); // New way of doing it
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/*
|
||||
public bool User(DateTime timestamp, string username)
|
||||
{
|
||||
try
|
||||
{
|
||||
//DateTime.UtcNow.ToString() + "->" + username; old way of doing it
|
||||
_logstore.Add($"{timestamp.ToUniversalTime()}->{username}"); // New way of doing it
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TeamHobby.HobbyProjectGenerator.UserManagement;
|
||||
|
||||
// Print Statements used throughout the program.
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator
|
||||
{
|
||||
public class UiPrint
|
||||
{
|
||||
public void InitialMenu()
|
||||
{
|
||||
// Create intial menu
|
||||
Console.WriteLine("What would you like to access?");
|
||||
int num = 1;
|
||||
Console.WriteLine(num + ".User Management");
|
||||
num += 1;
|
||||
Console.WriteLine(num + ".Logging");
|
||||
}
|
||||
public void SystemAccountMenu()
|
||||
{
|
||||
UserAccount user = new UserAccount();
|
||||
// Menu for all UserManagement options
|
||||
int menu = 0;
|
||||
Console.WriteLine($"Welcome {user.username} to User Management.\n");
|
||||
Console.WriteLine("What would you like to do?\n");
|
||||
Console.WriteLine((menu + 1) + ". Create a new account.");
|
||||
Console.WriteLine((menu + 1) + ". Edit an account.");
|
||||
Console.WriteLine((menu + 1) + ". Delete an account.");
|
||||
Console.WriteLine((menu + 1) + ". Disable an account.");
|
||||
Console.WriteLine((menu + 1) + ". Enable an account.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,17 +0,0 @@
|
||||
namespace TeamHobby.HobbyProjectGenerator
|
||||
{
|
||||
public class User_Authentication : IUserService
|
||||
{
|
||||
public IList<string> GetAllUsers()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool User(string username)
|
||||
{
|
||||
//Console.WriteLine("Hello World!");
|
||||
//Console.WriteLine("Testing console");
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Implementations
|
||||
{
|
||||
public class User_Manager : IUserService
|
||||
{
|
||||
public IList<string> GetAllUsers()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool User(string username)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -6,4 +6,8 @@
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Contracts\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@ -3,8 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.31919.166
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator", "TeamHobby.HobbyProjectGenerator.csproj", "{C75B6909-FD9E-4382-94B6-7CA2CE371C9A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.UserManagement.Tests", "..\TeamHobby.UserManagement.Tests\TeamHobby.UserManagement.Tests.csproj", "{5C5A44B4-EC3C-44F2-8F39-F917F8ED932F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.Models", "..\TeamHobby.HobbyProjectGenerator.Models\TeamHobby.HobbyProjectGenerator.Models.csproj", "{75DED6C2-D404-4E71-A58B-0F616DB5C062}"
|
||||
@ -17,6 +15,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.Main", "..\TeamHo
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.DataAccess", "..\TeamHobby.HobbyProjectGenerator.DataAccess\TeamHobby.HobbyProjectGenerator.DataAccess.csproj", "{AA48A66C-FA36-4AF9-A782-CEC22838EB8F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.Logging", "..\TeamHobby.HobbyProjectGenerator.Logging\TeamHobby.HobbyProjectGenerator.Logging.csproj", "{C0494115-838E-43A3-8896-133E5D1E874A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.UserManagement", "..\TeamHobby.HobbyProjectGenerator.UserManagement\TeamHobby.HobbyProjectGenerator.UserManagement.csproj", "{2E7193B8-86B6-48DA-9671-CD84615A5F5D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.Logging.Tests", "..\TeamHobby.HobbyProjectGenerator.Logging.Tests\TeamHobby.HobbyProjectGenerator.Logging.Tests.csproj", "{CA8D11CF-807C-4C90-A529-0371F73518F6}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.ArchiveTests", "..\TeamHobby.HobbyProjectGenerator.ArchiveTests\TeamHobby.HobbyProjectGenerator.ArchiveTests.csproj", "{C5EBD1F8-C806-4BF9-B2D7-8876072630FD}"
|
||||
EndProject
|
||||
Global
|
||||
@ -25,13 +29,11 @@ Global
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{C75B6909-FD9E-4382-94B6-7CA2CE371C9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C75B6909-FD9E-4382-94B6-7CA2CE371C9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C75B6909-FD9E-4382-94B6-7CA2CE371C9A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5C5A44B4-EC3C-44F2-8F39-F917F8ED932F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5C5A44B4-EC3C-44F2-8F39-F917F8ED932F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5C5A44B4-EC3C-44F2-8F39-F917F8ED932F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{75DED6C2-D404-4E71-A58B-0F616DB5C062}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{75DED6C2-D404-4E71-A58B-0F616DB5C062}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{75DED6C2-D404-4E71-A58B-0F616DB5C062}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{75DED6C2-D404-4E71-A58B-0F616DB5C062}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{30C7EBF3-3957-46E5-86C1-C13356841ECA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
@ -43,13 +45,24 @@ Global
|
||||
{B88ED0D9-72E2-4245-BD8F-856FF42E500C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B88ED0D9-72E2-4245-BD8F-856FF42E500C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{ED126EFB-B337-42F9-BE4B-65A5AE90503B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{ED126EFB-B337-42F9-BE4B-65A5AE90503B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{ED126EFB-B337-42F9-BE4B-65A5AE90503B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{ED126EFB-B337-42F9-BE4B-65A5AE90503B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C0494115-838E-43A3-8896-133E5D1E874A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C0494115-838E-43A3-8896-133E5D1E874A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C0494115-838E-43A3-8896-133E5D1E874A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C0494115-838E-43A3-8896-133E5D1E874A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2E7193B8-86B6-48DA-9671-CD84615A5F5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2E7193B8-86B6-48DA-9671-CD84615A5F5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2E7193B8-86B6-48DA-9671-CD84615A5F5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2E7193B8-86B6-48DA-9671-CD84615A5F5D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CA8D11CF-807C-4C90-A529-0371F73518F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CA8D11CF-807C-4C90-A529-0371F73518F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CA8D11CF-807C-4C90-A529-0371F73518F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CA8D11CF-807C-4C90-A529-0371F73518F6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C5EBD1F8-C806-4BF9-B2D7-8876072630FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C5EBD1F8-C806-4BF9-B2D7-8876072630FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C5EBD1F8-C806-4BF9-B2D7-8876072630FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
|
||||
@ -128,7 +128,7 @@ public class HobbyMain
|
||||
Console.WriteLine("Read the database");
|
||||
while (reader.Read())
|
||||
{
|
||||
Console.WriteLine("Date={0} {1} {2} {3} {4} {5}", reader[0], reader[1], reader[2], reader[3],reader[4], reader[5]);
|
||||
Console.WriteLine("Date={0} {1} {2} {3} {4} {5}", reader[0], reader[1], reader[2], reader[3], reader[4], reader[5]);
|
||||
//Console.WriteLine("Col A: {0} ", reader[0]);
|
||||
//Console.WriteLine("Column: " + reader.FieldCount);
|
||||
//Console.WriteLine("Column={1}", reader[1]);
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
|
||||
public class MasterController{
|
||||
|
||||
public static void main(string[] args){
|
||||
public class MasterController
|
||||
{
|
||||
|
||||
public static void main(string[] args)
|
||||
{
|
||||
|
||||
//The main Controller of the program, It will run all services here
|
||||
|
||||
@ -13,12 +15,14 @@ public class MasterController{
|
||||
|
||||
int userInput = 0;
|
||||
|
||||
while (userInput != -1) {
|
||||
while (userInput != -1)
|
||||
{
|
||||
|
||||
// Print the menu
|
||||
|
||||
//
|
||||
if (userInput == 1){
|
||||
if (userInput == 1)
|
||||
{
|
||||
// 1. User Managment goes here
|
||||
}
|
||||
|
||||
|
||||
@ -14,8 +14,4 @@
|
||||
<PackageReference Include="coverlet.collector" Version="3.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\TeamHobby.HobbyProjectGenerator\TeamHobby.HobbyProjectGenerator.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@ -1,13 +1,16 @@
|
||||
using main;
|
||||
using System;
|
||||
using System;
|
||||
using System.Data.Odbc;
|
||||
using TeamHobby.HobbyProjectGenerator.Archive;
|
||||
using TeamHobby.HobbyProjectGenerator.DataAccess;
|
||||
using TeamHobby.HobbyProjectGenerator.Logging;
|
||||
using TeamHobby.HobbyProjectGenerator.UserManagement;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Main
|
||||
{
|
||||
|
||||
public class GetCredentials
|
||||
{
|
||||
|
||||
public string? GetUserName()
|
||||
{
|
||||
Console.WriteLine("Please enter a username:");
|
||||
@ -16,37 +19,81 @@ namespace TeamHobby.HobbyProjectGenerator.Main
|
||||
}
|
||||
public string? GetPassword()
|
||||
{
|
||||
Console.WriteLine("Please enter a password:");
|
||||
Console.WriteLine("Please enter " +
|
||||
"a password:");
|
||||
string? userPassword = Console.ReadLine();
|
||||
return userPassword;
|
||||
}
|
||||
}
|
||||
public class Controller
|
||||
{
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
// Console customization
|
||||
// Change the look of the console
|
||||
Console.Title = "HobbyProjectGenerator";
|
||||
// Change console text color
|
||||
Console.ForegroundColor = ConsoleColor.Green;
|
||||
// Change terminal height
|
||||
Console.WindowHeight = 40;
|
||||
|
||||
Console.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
|
||||
// Creating the Factory class
|
||||
// Logger log = new Logger();
|
||||
//Logger.PrintTest();
|
||||
//GetCredentials credentials = new GetCredentials();
|
||||
//string? username = credentials.GetUserName();
|
||||
//string? password = credentials.GetPassword();
|
||||
|
||||
|
||||
// Console customization
|
||||
// Change the look of the console
|
||||
Console.Title = "HobbyProjectGenerator";
|
||||
// Change console text color
|
||||
Console.ForegroundColor = ConsoleColor.Green;
|
||||
// Change terminal height
|
||||
Console.WindowHeight = 40;
|
||||
//Console.WriteLine(value: $"username is {username}\npassword is {password}");
|
||||
|
||||
// Creating the Factory class
|
||||
// Creating the Factory class
|
||||
|
||||
string dbType = "sql";
|
||||
RDSFactory dbFactory = new RDSFactory();
|
||||
|
||||
// Testing Data Access Layer
|
||||
string dbInfo = "DRIVER={MariaDB ODBC 3.1 Driver};" +
|
||||
"TCPIP=1;" +
|
||||
"SERVER=localhost;" +
|
||||
"DATABASE=hobby;" +
|
||||
"UID=root;" +
|
||||
"PASSWORD=Teamhobby;" +
|
||||
"OPTION=3";
|
||||
IDataSource<string> datasource = dbFactory.getDataSource(dbType,dbInfo);
|
||||
IDataSource<string> datasource = factory.getDataSource(dbType, dbInfo);
|
||||
"PORT=3306;";
|
||||
|
||||
|
||||
string sqlQuery = "Select * from log;";
|
||||
"OPTION=3";
|
||||
|
||||
IDataSource<string> datasource = dbFactory.getDataSource(dbType, dbInfo);
|
||||
// Create manager class from UserManagement
|
||||
SystemAccountManager manager = new SystemAccountManager();
|
||||
|
||||
// Admin Sign in
|
||||
GetCredentials credentials = new GetCredentials();
|
||||
string? username = credentials.GetUserName();
|
||||
string? password = credentials.GetPassword();
|
||||
|
||||
// Get time of login attempt
|
||||
DateTime TimeStamp = DateTime.UtcNow;
|
||||
|
||||
// Create UserAccount class
|
||||
UserAccount user = new UserAccount(username, password, TimeStamp);
|
||||
|
||||
Console.Write(manager.CreateUserRecord(user, datasource));
|
||||
|
||||
//Console.WriteLine(value: $"Welcome {username}\n");
|
||||
|
||||
/* string sqlQuery = "Select * from log;";
|
||||
Object result = datasource.ReadData(sqlQuery);
|
||||
Console.WriteLine("type of Result: " + result.GetType());
|
||||
OdbcDataReader reader = null;
|
||||
@ -71,19 +118,19 @@ namespace TeamHobby.HobbyProjectGenerator.Main
|
||||
|
||||
// While loop to keep this running forever with UserManagement
|
||||
//Testing archive Manager
|
||||
while (true)
|
||||
{
|
||||
string currentDate = DateTime.Now.ToString("dd");
|
||||
string currentTime = DateTime.Now.ToString("T");
|
||||
string activateDate = "01";
|
||||
string activateTime = "00:00:00 AM";
|
||||
Console.WriteLine("Current date: {0}, Current Time: {1}", currentDate, currentTime);
|
||||
if (String.Equals(currentDate, activateDate) && String.Equals(currentTime, activateTime))
|
||||
{
|
||||
ArchiveManager archive = new ArchiveManager(datasource);
|
||||
archive.Controller();
|
||||
}
|
||||
}
|
||||
//while (true)
|
||||
//{
|
||||
//string currentDate = DateTime.Now.ToString("dd");
|
||||
//string currentTime = DateTime.Now.ToString("T");
|
||||
//string activateDate = "01";
|
||||
//string activateTime = "00:00:00 AM";
|
||||
//Console.WriteLine("Current date: {0}, Current Time: {1}", currentDate, currentTime);
|
||||
//if (String.Equals(currentDate, activateDate) && String.Equals(currentTime, activateTime))
|
||||
//{
|
||||
//ArchiveManager archive = new ArchiveManager(datasource);
|
||||
//archive.Controller();
|
||||
//}
|
||||
//}
|
||||
|
||||
|
||||
|
||||
@ -132,87 +179,85 @@ namespace TeamHobby.HobbyProjectGenerator.Main
|
||||
//datasource.WriteData(sqlRemove);
|
||||
//Console.WriteLine("Writing completed. ");
|
||||
|
||||
/* bool MainMenu = true;
|
||||
|
||||
/* ExampleDAO z = new ExampleDAO();
|
||||
z.UserData("Tomato");
|
||||
Console.Read();*/
|
||||
/*bool MainMenu = true;
|
||||
|
||||
// Set up menu loop
|
||||
while (MainMenu == true)
|
||||
{
|
||||
// Console customization
|
||||
// Change the look of the console
|
||||
Console.Title = "HobbyProjectGenerator";
|
||||
// Change console text color
|
||||
Console.ForegroundColor = ConsoleColor.Green;
|
||||
// Change terminal height
|
||||
Console.WindowHeight = 40;
|
||||
// Set up menu loop
|
||||
while (MainMenu == true)
|
||||
{
|
||||
// Console customization
|
||||
// Change the look of the console
|
||||
Console.Title = "HobbyProjectGenerator";
|
||||
// Change console text color
|
||||
Console.ForegroundColor = ConsoleColor.Green;
|
||||
// Change terminal height
|
||||
Console.WindowHeight = 40;
|
||||
|
||||
|
||||
// Create class objects
|
||||
UiPrint menu = new UiPrint();
|
||||
UserAccount user = new UserAccount();
|
||||
// Create class objects
|
||||
UiPrint menu = new UiPrint();
|
||||
|
||||
|
||||
// Print main menu
|
||||
menu.InitialMenu();
|
||||
// Print main menu
|
||||
menu.InitialMenu();
|
||||
|
||||
// Set up try-catch for invalid inputs
|
||||
try
|
||||
{
|
||||
// Get user choice
|
||||
string initialChoice = Console.ReadLine();
|
||||
// Convert to integer
|
||||
int Choice = Convert.ToInt32(initialChoice);
|
||||
// Set up try-catch for invalid inputs
|
||||
try
|
||||
{
|
||||
// Get user choice
|
||||
string initialChoice = Console.ReadLine();
|
||||
// Convert to integer
|
||||
int Choice = Convert.ToInt32(initialChoice);
|
||||
|
||||
switch (Choice)
|
||||
{
|
||||
case 0:
|
||||
MainMenu = false;
|
||||
break;
|
||||
// Create a new account
|
||||
case 1:
|
||||
user.newUser();
|
||||
break;
|
||||
// Access Admin features
|
||||
case 2:
|
||||
// Ask for Admin login credentials
|
||||
Console.WriteLine("Please enter a username:");
|
||||
string AdminUser = Console.ReadLine();
|
||||
Console.WriteLine("Please enter the password for" + AdminUser);
|
||||
string AdminPsswrd = Console.ReadLine();
|
||||
switch (Choice)
|
||||
{
|
||||
case 0:
|
||||
MainMenu = false;
|
||||
break;
|
||||
// Create a new account
|
||||
case 1:
|
||||
user.newUser();
|
||||
break;
|
||||
// Access Admin features
|
||||
case 2:
|
||||
// Ask for Admin login credentials
|
||||
Console.WriteLine("Please enter a username:");
|
||||
string AdminUser = Console.ReadLine();
|
||||
Console.WriteLine("Please enter the password for" + AdminUser);
|
||||
string AdminPsswrd = Console.ReadLine();
|
||||
|
||||
// Check if the username and password match a record within the administrators
|
||||
// Check if the username and password match a record within the administrators
|
||||
|
||||
|
||||
// Show new administrator menu
|
||||
int AdminNum = 0;
|
||||
Console.WriteLine("Welcome" + AdminUser);
|
||||
Console.WriteLine("What would you like to do?");
|
||||
Console.WriteLine("1.View normal user records.");
|
||||
Console.WriteLine("2.View Administrator user records.");
|
||||
Console.WriteLine("3.View log files.");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("");
|
||||
// Show new administrator menu
|
||||
int AdminNum = 0;
|
||||
Console.WriteLine("Welcome" + AdminUser);
|
||||
Console.WriteLine("What would you like to do?");
|
||||
Console.WriteLine("1.View normal user records.");
|
||||
Console.WriteLine("2.View Administrator user records.");
|
||||
Console.WriteLine("3.View log files.");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("");
|
||||
|
||||
|
||||
break;
|
||||
default:
|
||||
Console.WriteLine("Invalid choice, please enter a valid number.");
|
||||
break;
|
||||
};
|
||||
}
|
||||
// Catch invalid keys such as spamming enter
|
||||
catch
|
||||
{
|
||||
MainMenu = false;
|
||||
};
|
||||
}*/
|
||||
break;
|
||||
default:
|
||||
Console.WriteLine("Invalid choice, please enter a valid number.");
|
||||
break;
|
||||
};
|
||||
}
|
||||
// Catch invalid keys such as spamming enter
|
||||
catch
|
||||
{
|
||||
MainMenu = false;
|
||||
};*/
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1,23 +1,22 @@
|
||||
using Microsoft.Data.SqlClient;
|
||||
using TeamHobby.HobbyProjectGenerator.Models;
|
||||
|
||||
namespace TeamHobby.HobbyProjectGenerator.Main
|
||||
namespace TeamHobby.HobbyProjectGenerator.DAL
|
||||
{
|
||||
public class ExampleDAO
|
||||
public class SqlDAO
|
||||
{
|
||||
|
||||
public void UserData(string username)
|
||||
public IList<Credentials> GetUserData(string username)
|
||||
{
|
||||
// Sql server connection string, needs to be changed accordingly to connect
|
||||
var connString = "server=localhost,3316;user=root;database=users;password=Plop20"; // Using @" " makes the string literal
|
||||
|
||||
var connString = "server=localhost;userid=root;password=Plop20;database=users"; // Using @" " makes the string literal
|
||||
|
||||
// ADO.NET - ODBC
|
||||
using var conn = new SqlConnection(connString);
|
||||
using (var conn = new SqlConnection(connString))
|
||||
{
|
||||
// More complex sql commands are done in this method instead
|
||||
var sql = "Select * from roles";
|
||||
using (var command = new SqlCommand(sql, conn))
|
||||
{
|
||||
conn.Open();
|
||||
// Get the results from the query
|
||||
SqlDataReader r = command.ExecuteReader();
|
||||
|
||||
@ -33,18 +32,18 @@ namespace TeamHobby.HobbyProjectGenerator.Main
|
||||
{
|
||||
Console.WriteLine(r.ToString());
|
||||
}
|
||||
conn.Close();
|
||||
|
||||
return null;
|
||||
}
|
||||
// Console.Read();
|
||||
/*
|
||||
* this is meant for specific basic sql commands
|
||||
using (var adapter = new SqlDataAdapter())
|
||||
{
|
||||
adapter.SelectCommand
|
||||
}
|
||||
*/
|
||||
//return null;
|
||||
|
||||
/*// this is meant for specific basic sql commands
|
||||
using (var adapter = new SqlDataAdapter())
|
||||
{
|
||||
adapter.UpdateCommand
|
||||
adapter.DeleteCommand
|
||||
adapter.InsertCommand
|
||||
adapter.SelectCommand
|
||||
}*/
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,79 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace main
|
||||
{
|
||||
internal class SystemAccountManager
|
||||
{
|
||||
/*public NewUserName()
|
||||
{
|
||||
|
||||
}
|
||||
public NewPassword()
|
||||
{
|
||||
// Create bool value for password confirm loop
|
||||
bool conPsswrd = true;
|
||||
// Loop until password is confirmed
|
||||
while (conPsswrd == true)
|
||||
{
|
||||
// Confirm Password
|
||||
Console.WriteLine("Please re-enter the password:");
|
||||
string checkPsswd = Console.ReadLine();
|
||||
// Check if passwords match
|
||||
if (userPassword == checkPsswd)
|
||||
{
|
||||
// Get Security question for password reset
|
||||
Console.WriteLine("Please enter a security question.\n" +
|
||||
"(EX: What is your favorite food?");
|
||||
string SecQuest = Console.ReadLine();
|
||||
// Get Security question answer
|
||||
Console.WriteLine("Please enter the answer for your security question:");
|
||||
String SecAnswer = Console.ReadLine();
|
||||
|
||||
// Call user manager method to create the new user
|
||||
//int userCreateConfirm = new CreateUser(userName,userPassword,SecQuest,SecAnswer);
|
||||
|
||||
// Check if user creation was successful
|
||||
/*if (userCreateConfirm = 1)
|
||||
{
|
||||
|
||||
// Confirm to user that the account has been created
|
||||
Console.WriteLine("Account created succesfully with the username of" + userName);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}*/
|
||||
/*conPsswrd = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Passwords did not match, please try again.");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}*/
|
||||
|
||||
public void AccountController()
|
||||
{
|
||||
// Create objects
|
||||
UserAccount user = new UserAccount();
|
||||
UiPrint ui = new UiPrint();
|
||||
|
||||
bool foo = true;
|
||||
|
||||
while (foo == true)
|
||||
{
|
||||
// sub menu
|
||||
ui.SystemAccountMenu();
|
||||
//
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
// Print Statements used throughout the program.
|
||||
|
||||
namespace main
|
||||
{
|
||||
internal class UiPrint
|
||||
{
|
||||
public void InitialMenu()
|
||||
{
|
||||
// Create intial menu
|
||||
Console.WriteLine("What would you like to access?");
|
||||
int num = 1;
|
||||
Console.WriteLine(num + ".User Management");
|
||||
num += 1;
|
||||
Console.WriteLine(num + ".Logging");
|
||||
}
|
||||
public void SystemAccountMenu()
|
||||
{
|
||||
// Create intial menu
|
||||
Console.WriteLine("What would you like to do?");
|
||||
int num = 1;
|
||||
Console.WriteLine(num + ".Create a new account.");
|
||||
num += 1;
|
||||
Console.WriteLine(num + ".Access Admin Features");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace main
|
||||
{
|
||||
public class UserAccount
|
||||
{
|
||||
/* private string username;
|
||||
private string password;
|
||||
private string role;
|
||||
|
||||
public UserAccount(string un,string pwd,string rol)
|
||||
{
|
||||
username = un;
|
||||
password = pwd;
|
||||
role = rol;
|
||||
|
||||
}
|
||||
|
||||
public void UserAccount()
|
||||
{
|
||||
password = "1234";
|
||||
role = "Regular";
|
||||
}
|
||||
|
||||
public void newUser()
|
||||
{
|
||||
|
||||
}*/
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,8 @@
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@ -14,6 +16,8 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\TeamHobby.HobbyProjectGenerator.Archive\TeamHobby.HobbyProjectGenerator.Archive.csproj" />
|
||||
<ProjectReference Include="..\TeamHobby.HobbyProjectGenerator.DataAccess\TeamHobby.HobbyProjectGenerator.DataAccess.csproj" />
|
||||
<ProjectReference Include="..\TeamHobby.HobbyProjectGenerator.Logging\TeamHobby.HobbyProjectGenerator.Logging.csproj" />
|
||||
<ProjectReference Include="..\TeamHobby.HobbyProjectGenerator.UserManagement\TeamHobby.HobbyProjectGenerator.UserManagement.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
|
||||
Binary file not shown.
BIN
doc/LowLevel/Logging/Logging_LLD_v6.png
Normal file
BIN
doc/LowLevel/Logging/Logging_LLD_v6.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 274 KiB |
33
src/dbCode/UserManagementDDL.txt
Normal file
33
src/dbCode/UserManagementDDL.txt
Normal file
@ -0,0 +1,33 @@
|
||||
create table users
|
||||
(
|
||||
UserName varchar(50) charset utf8mb3 not null,
|
||||
Password varchar(50) charset utf8mb3 not null,
|
||||
Role varchar(50) charset utf8mb3 not null,
|
||||
IsActive int default 1 not null,
|
||||
CreatedBy varchar(50) charset utf8mb3 not null,
|
||||
CreatedDate datetime not null,
|
||||
constraint userRole_fk foreign key (Role) references roles (Role),
|
||||
constraint user_pk primary key (UserName)
|
||||
);
|
||||
|
||||
INSERT INTO hobby.users (UserName, Password, Role, IsActive, CreatedBy, CreatedDate, Email) VALUES
|
||||
('Colin ', 'Waffle', 'Admin', 1, 'Jacob', '2021-12-13 04:27:42', null),
|
||||
('Danny', 'Spartan', 'Admin', 1, 'Jacob', '2021-12-13 04:29:54', null),
|
||||
('Jacob', 'Teamhobby1234', 'Admin', 1, 'SystemCreator', '2021-12-13 03:25:14', null),
|
||||
('Long', 'Joystick', 'regular', 1, 'Jacob', '2021-12-13 04:29:57', null),
|
||||
('Rifat', 'ApproveDar', 'Admin', 1, 'Jacob', '2021-12-13 04:29:55', null);
|
||||
|
||||
|
||||
create table roles
|
||||
(
|
||||
RoleID int not null,
|
||||
Role varchar(50) charset utf8mb3 not null,
|
||||
CreatedBy varchar(200) charset utf8mb3 not null,
|
||||
CreatedDate datetime not null,
|
||||
constraint role_pk
|
||||
primary key (Role)
|
||||
);
|
||||
|
||||
INSERT INTO hobby.roles (Role, CreatedBy, CreatedDate) VALUES
|
||||
('Admin', 'Jacob', '2021-12-13 03:25:14'),
|
||||
('regular', 'Colin', '2021-12-13 03:25:14');
|
||||
152
src/dbCode/fullDDL.txt
Normal file
152
src/dbCode/fullDDL.txt
Normal file
@ -0,0 +1,152 @@
|
||||
create database Hobby;
|
||||
|
||||
use hobby;
|
||||
|
||||
create table users
|
||||
(
|
||||
UserName varchar(50) charset utf8mb3 not null
|
||||
primary key,
|
||||
Password varchar(50) charset utf8mb3 null,
|
||||
RoleID int auto_increment,
|
||||
IsActive int default 1 null,
|
||||
CreatedBy varchar(50) charset utf8mb3 null,
|
||||
CreatedDate datetime null,
|
||||
constraint users_UserName_uindex
|
||||
unique (UserName),
|
||||
constraint users_roles_RoleID_fk
|
||||
foreign key (RoleID) references roles (RoleID)
|
||||
);
|
||||
|
||||
INSERT INTO hobby.users (UserName, Password, CreatedBy, CreatedDate) VALUES ('Colin ', 'Waffle', 'Jacob', '2021-12-13 04:27:42');
|
||||
INSERT INTO hobby.users (UserName, Password, CreatedBy, CreatedDate) VALUES ('Danny', 'Spartan', 'Jacob', '2021-12-13 04:29:54');
|
||||
INSERT INTO hobby.users (UserName, Password, CreatedBy, CreatedDate) VALUES ('Jacob', 'Teamhobby1234', 'SystemCreator', '2021-12-13 03:25:14');
|
||||
INSERT INTO hobby.users (UserName, Password, CreatedBy, CreatedDate) VALUES ('Long', 'Joystick', 'Jacob', '2021-12-13 04:29:57');
|
||||
INSERT INTO hobby.users (UserName, Password, CreatedBy, CreatedDate) VALUES ('Rifat', 'ApproveDar', 'Jacob', '2021-12-13 04:29:55');
|
||||
|
||||
|
||||
create table roles
|
||||
(
|
||||
RoleID int auto_increment
|
||||
primary key,
|
||||
Role varchar(50) charset utf8mb3 null,
|
||||
CreatedBy varchar(200) charset utf8mb3 null,
|
||||
CreatedDate datetime null
|
||||
);
|
||||
|
||||
INSERT INTO hobby.roles (Role, CreatedBy, CreatedDate) VALUES ('Admin', 'SystemCreator', '2021-12-13 03:25:14');
|
||||
INSERT INTO hobby.roles (Role, CreatedBy, CreatedDate) VALUES ('regular', 'Colin', '2021-12-13 03:25:14');
|
||||
INSERT INTO hobby.roles (Role, CreatedBy, CreatedDate) VALUES ('regular', 'Colin', '2021-12-13 03:25:14');
|
||||
INSERT INTO hobby.roles (Role, CreatedBy, CreatedDate) VALUES ('regular', 'Jacob', '2021-12-13 03:37:44');
|
||||
INSERT INTO hobby.roles (Role, CreatedBy, CreatedDate) VALUES ('regular', 'Jacob', '2021-12-13 03:37:46');
|
||||
INSERT INTO hobby.roles (Role, CreatedBy, CreatedDate) VALUES ('regular', 'Jacob', '2021-12-13 03:37:47');
|
||||
INSERT INTO hobby.roles (Role, CreatedBy, CreatedDate) VALUES ('regular', 'Jacob', '2021-12-13 03:37:47');
|
||||
INSERT INTO hobby.roles (Role, CreatedBy, CreatedDate) VALUES ('regular', 'Jacob', '2021-12-13 03:37:49');
|
||||
INSERT INTO hobby.roles (Role, CreatedBy, CreatedDate) VALUES ('regular', 'Jacob', '2021-12-13 03:37:50');
|
||||
INSERT INTO hobby.roles (Role, CreatedBy, CreatedDate) VALUES ('regular', 'Jacob', '2021-12-13 03:37:51');
|
||||
|
||||
|
||||
alter table users
|
||||
add constraint users_roles_RoleID_fk
|
||||
foreign key (RoleID) references roles (RoleID);
|
||||
|
||||
SET Global innodb_file_per_table=ON;
|
||||
-- SET GLOBAL innodb_file_format='Barracuda';
|
||||
|
||||
SET GLOBAL innodb_default_row_format='dynamic';
|
||||
|
||||
SET GLOBAL innodb_compression_algorithm='zlib';
|
||||
|
||||
-- Check for system settings
|
||||
SHOW VARIABLES LIKE 'innodb_compression_algorithm';
|
||||
SHOW VARIABLES LIKE 'innodb_default_row_format';
|
||||
SHOW VARIABLES LIKE '%innodb%';
|
||||
|
||||
CREATE TABLE Persons (
|
||||
PersonID int,
|
||||
LastName varchar(255),
|
||||
FirstName varchar(255),
|
||||
Address varchar(255),
|
||||
City varchar(255)
|
||||
);
|
||||
|
||||
CREATE DATABASE testDB;
|
||||
|
||||
-- Hobby DDL
|
||||
-- Log level table
|
||||
create table LogLevel
|
||||
(
|
||||
LvName varchar(50) not null,
|
||||
LvComment varchar(500) not null,
|
||||
constraint LogLevel_pk
|
||||
primary key (LvName)
|
||||
);
|
||||
|
||||
-- Log categories table
|
||||
create table LogCategories
|
||||
(
|
||||
catName varchar(50) not null,
|
||||
catComment varchar(255) not null,
|
||||
constraint LogCategories_pk primary key (catName)
|
||||
);
|
||||
|
||||
-- DDL for log table
|
||||
create table Log
|
||||
(
|
||||
LtimeStamp datetime default CURRENT_TIMESTAMP null,
|
||||
logID int auto_increment not null,
|
||||
LvName varchar(50) not null,
|
||||
catName varchar(50) not null,
|
||||
userOP varchar(50) not null,
|
||||
logMessage varchar(255) not null,
|
||||
|
||||
constraint LogLvName_fk foreign key (LvName) references loglevel (LvName),
|
||||
constraint LogCatName_fk foreign key (catName) references logcategories (catName),
|
||||
constraint Log_pk primary key (logID)
|
||||
|
||||
);
|
||||
|
||||
create table Archive
|
||||
(
|
||||
LtimeStamp datetime null,
|
||||
logID int not null,
|
||||
LvName varchar(50) not null,
|
||||
catName varchar(50) not null,
|
||||
userOP varchar(50) not null,
|
||||
logMessage varchar(255) not null,
|
||||
|
||||
constraint Archive_pk primary key (logID)
|
||||
)
|
||||
ENGINE=InnoDB
|
||||
PAGE_COMPRESSED=1
|
||||
PAGE_COMPRESSION_LEVEL=9;
|
||||
|
||||
drop table archive;
|
||||
|
||||
-- Dummy data for testing purposes
|
||||
-- Log categories data
|
||||
INSERT into logcategories(catName, catComment) values
|
||||
('View', 'view layer'),
|
||||
('Business', 'business layer'),
|
||||
('Server', 'server layer'),
|
||||
('Data', 'data layer');
|
||||
|
||||
-- Log level data
|
||||
INSERT into loglevel(lvname, lvcomment) values
|
||||
('Info', 'some sys flow'),
|
||||
('Debug', 'info for fixing bugs'),
|
||||
('Warning', 'track system failure'),
|
||||
('Error', 'some sys errors');
|
||||
|
||||
-- Log table data
|
||||
INSERT into log(lvname, catname, userop, logmessage) values
|
||||
('Info', 'View', 'create some projects', 'new account created'),
|
||||
('Info', 'Business', 'create some projects', 'new projects made'),
|
||||
('Info', 'View', 'log out', 'log out successful'),
|
||||
('Info', 'Business', 'log in', 'log in successfully'),
|
||||
('Info', 'View', 'search for projects', 'result return');
|
||||
|
||||
select * from logcategories;
|
||||
select * from log;
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user