functional

This commit is contained in:
QkoSad
2024-11-29 19:35:10 +02:00
parent fd82786671
commit 8e4317abde
34 changed files with 714 additions and 25 deletions
+99
View File
@@ -0,0 +1,99 @@
using System.Net;
using System.Text;
using MySql.Data.MySqlClient;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
namespace Server
{
public class CreateLog
{
private static string secretKey = "stronk-key-much-sercret-much-more-stronk-stronk-key-much-sercret-much-more-stronk";
public static bool ValidateToken(string token)
{
try
{
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));
var tokenHandler = new JwtSecurityTokenHandler();
var validationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidIssuer = "TimeLogServer",
ValidAudience = "TimeLogWebsite",
IssuerSigningKey = key
};
var principal = tokenHandler.ValidateToken(token, validationParameters, out SecurityToken validatedToken);
return validatedToken != null;
}
catch
{
return false;
}
}
public static void run(MySqlConnection conn, HttpListenerRequest request, HttpListenerResponse response)
{
try
{
var headers = request.Headers;
string? token = headers["token"];
if (!ValidateToken(token))
{
throw new Exception("Invalid token");
}
// open connection
conn.Open();
// prepare SQL query
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = @"INSERT INTO Timelog(user,project,date,time) VALUES(@user,@project,@date,@time);";
var queryString = request.QueryString;
string? user = queryString["user"];
string? project = queryString["project"];
string? time = queryString["time"];
string? date = queryString["date"];
// TODO validate somehow that the user who send the date is the
// same user who has token, validate the project belongs to the
// user
int myInt;
bool isValid = int.TryParse(time, out myInt);
if (!string.IsNullOrEmpty(time) && isValid && myInt > 0) { }
if (!string.IsNullOrEmpty(date)) // use regex to validate{ }
if (string.IsNullOrEmpty(user)) // select * from User Where user=@user;
{ }
if (!string.IsNullOrEmpty(project))// select * from Project Where project=@project;
{ }
cmd.Parameters.AddWithValue("@user", user);
cmd.Parameters.AddWithValue("@project", project);
cmd.Parameters.AddWithValue("@time", time);
cmd.Parameters.AddWithValue("@date", date);
// execute query and read results
cmd.ExecuteNonQuery();
response.StatusCode = (int)HttpStatusCode.OK;
response.StatusDescription = "Status OK";
}
catch (Exception ex)
{
string errorMessage = $"Error: {ex.Message}";
byte[] buffer = Encoding.UTF8.GetBytes(errorMessage);
response.ContentType = "text/plain";
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
}
finally
{
// close db connection
conn.Close();
}
}
}
}
+5 -1
View File
@@ -124,7 +124,11 @@ BEGIN
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
}
conn.Close();
finally
{
// close db connection
conn.Close();
}
}
}
}
+7 -4
View File
@@ -6,7 +6,7 @@ using Newtonsoft.Json;
namespace Server
{
// there should be a better way to deal with data comming from sql
public class All
public class Log
{
public object? f_name { get; set; }
public object? l_name { get; set; }
@@ -62,10 +62,10 @@ namespace Server
// execute query and read results
MySqlDataReader reader = cmd.ExecuteReader();
List<All> entries = new List<All>();
List<Log> entries = new List<Log>();
while (reader.Read())
{
entries.Add(new All
entries.Add(new Log
{
f_name = reader["f_name"],
l_name = reader["l_name"],
@@ -93,7 +93,10 @@ namespace Server
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
}
conn.Close();
finally
{
conn.Close();
}
}
}
}
+4 -1
View File
@@ -76,7 +76,10 @@ namespace Server
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
}
conn.Close();
finally
{
conn.Close();
}
}
}
}
+5 -2
View File
@@ -51,8 +51,11 @@ namespace Server
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
}
// close db connection
conn.Close();
finally
{
// close db connection
conn.Close();
}
}
}
}
+124
View File
@@ -0,0 +1,124 @@
using System.Net;
using System.Text;
using MySql.Data.MySqlClient;
using Newtonsoft.Json;
using System.Security.Claims;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using System.Security.Cryptography;
namespace Server
{
public class Login
{
private static string secretKey = "stronk-key-much-sercret-much-more-stronk-stronk-key-much-sercret-much-more-stronk";
public static string GenerateToken(string user)
{
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "TimeLogServer",
audience: "TimeLogWebsite",
claims: new[]
{
new Claim(ClaimTypes.Name, user)
},
expires: DateTime.Now.AddHours(2),
signingCredentials: creds
);
return new JwtSecurityTokenHandler().WriteToken(token);
}
public static bool VerifyPassword(string enteredPassword, string storedHash)
{
byte[] hashBytes = Convert.FromBase64String(storedHash);
// Extract the salt from the stored hash
byte[] salt = new byte[16];
Array.Copy(hashBytes, 0, salt, 0, 16);
// Hash the entered password with the stored salt
using (var pbkdf2 = new Rfc2898DeriveBytes(enteredPassword, salt, 10000, HashAlgorithmName.SHA256))
{
byte[] newHash = pbkdf2.GetBytes(32);
// Compare the computed hash with the stored hash
for (int i = 0; i < 32; i++)
{
if (newHash[i] != hashBytes[i + 16])
return false;
}
return true;
}
}
public static void run(MySqlConnection conn, HttpListenerRequest request, HttpListenerResponse response)
{
try
{
conn.Open();
// prepare SQL query
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = @"SELECT u.id,password FROM User u
INNER JOIN Password p ON p.user=u.id
WHERE mail=@mail";
var queryString = request.QueryString;
string? mail = queryString["mail"];
string? password = queryString["password"];
cmd.Parameters.AddWithValue("@mail", mail);
cmd.Parameters.AddWithValue("@password", password);
// execute query and read results
MySqlDataReader reader = cmd.ExecuteReader();
string? userId = "";
string? hashedPass = "";
string? jsonResponse;
while (reader.Read())
{
userId = Convert.ToString(reader["id"]);
hashedPass = Convert.ToString(reader["password"]);
}
// check username
if (string.IsNullOrEmpty(userId) && string.IsNullOrEmpty(hashedPass))
{
throw new Exception("Error:Invalid Username or Password");
}
//check password
if (string.IsNullOrEmpty(password)
|| string.IsNullOrEmpty(hashedPass)
|| VerifyPassword(password, Convert.ToString(hashedPass)))
{
throw new Exception("Error:Invalid Username or Password");
}
jsonResponse = JsonConvert.SerializeObject(GenerateToken(userId));
// prepare response
byte[] buffer = Encoding.UTF8.GetBytes(jsonResponse);
response.ContentType = "application/json";
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
}
catch (Exception ex)
{
string errorMessage = $"Error: {ex.Message}";
byte[] buffer = Encoding.UTF8.GetBytes(errorMessage);
response.ContentType = "text/plain";
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
}
finally
{
// close db connection
conn.Close();
}
}
}
}
+13
View File
@@ -18,6 +18,9 @@ namespace Server
listener.Prefixes.Add("http://localhost:5000/api/getuser/");
listener.Prefixes.Add("http://localhost:5000/api/reset/");
listener.Prefixes.Add("http://localhost:5000/api/createp/");
listener.Prefixes.Add("http://localhost:5000/api/register/");
listener.Prefixes.Add("http://localhost:5000/api/login/");
listener.Prefixes.Add("http://localhost:5000/api/createlog/");
// listen
listener.Start();
@@ -61,6 +64,16 @@ namespace Server
case "/api/createp":
CreateProcedure.run(conn, request, response);
break;
case "/api/register":
Register.run(conn, request, response);
break;
case "/api/login":
Console.WriteLine("111");
Login.run(conn, request, response);
break;
case "/api/createlog":
CreateLog.run(conn, request, response);
break;
default:
response.StatusCode = 404;
string errorMessage = "Not Found";
+95
View File
@@ -0,0 +1,95 @@
using System.Net;
using System.Text;
using MySql.Data.MySqlClient;
using System.Security.Cryptography;
namespace Server
{
public class Register
{
public static string HashPassword(string password)
{
// Generate a salt
using (var rng = new RNGCryptoServiceProvider())
{
byte[] salt = new byte[16];
rng.GetBytes(salt);
// Create a PBKDF2 instance to hash the password
using (var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 10000, HashAlgorithmName.SHA256))
{
byte[] hash = pbkdf2.GetBytes(32);
// Combine the salt and the hash together
byte[] hashBytes = new byte[48]; // 16 (salt) + 32 (hash)
Array.Copy(salt, 0, hashBytes, 0, 16);
Array.Copy(hash, 0, hashBytes, 16, 32);
// Return the final hash as a Base64 encoded string
return Convert.ToBase64String(hashBytes);
}
}
}
public static void run(MySqlConnection conn, HttpListenerRequest request, HttpListenerResponse response)
{
try
{
// TODO: if one of the queries fails the others should be reverted in
var queryString = request.QueryString;
string? f_name = queryString["f_name"];
string? l_name = queryString["l_name"];
string? mail = queryString["mail"];
string? password = queryString["password"];
// validate parameters
if (string.IsNullOrEmpty(f_name) || f_name.Length > 30 || f_name.Length < 2 ||
string.IsNullOrEmpty(l_name) || l_name.Length > 30 || l_name.Length < 2 ||
string.IsNullOrEmpty(mail) || mail.Length > 50 || mail.Length < 6 ||
string.IsNullOrEmpty(password) || password.Length > 30 || password.Length < 10)
{
throw new Exception("Wrong parameters");
}
// open connection
conn.Open();
// prepare SQL query
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
// Insert into User
cmd.CommandText = "INSERT INTO User(f_name,l_name,mail) VALUES(@f_name,@l_name,@mail)";
cmd.Parameters.AddWithValue("@f_name", f_name);
cmd.Parameters.AddWithValue("@l_name", l_name);
cmd.Parameters.AddWithValue("@mail", mail);
cmd.ExecuteNonQuery();
// Get user ID
cmd.CommandText = "SELECT id FROM User WHERE mail=@mail;";
MySqlDataReader reader = cmd.ExecuteReader();
reader.Read();
var id = reader["id"];
reader.Close();
// Insert into password
cmd.CommandText = "INSERT INTO Password(user,password) VALUES(@id,@password)";
cmd.Parameters.AddWithValue("@password", HashPassword(password));
cmd.Parameters.AddWithValue("@id", id);
cmd.ExecuteNonQuery();
response.StatusCode = (int)HttpStatusCode.OK;
response.StatusDescription = "Status OK";
}
catch (Exception ex)
{
string errorMessage = $"Error: {ex.Message}";
byte[] buffer = Encoding.UTF8.GetBytes(errorMessage);
response.ContentType = "text/plain";
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
}
finally
{
// close db connection
conn.Close();
}
}
}
}
+1
View File
@@ -10,6 +10,7 @@
<ItemGroup>
<PackageReference Include="MySql.Data" Version="9.1.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.2.1" />
</ItemGroup>
</Project>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -9,7 +9,8 @@
"TimelogBackend/1.0.0": {
"dependencies": {
"MySql.Data": "9.1.0",
"Newtonsoft.Json": "13.0.3"
"Newtonsoft.Json": "13.0.3",
"System.IdentityModel.Tokens.Jwt": "8.2.1"
},
"runtime": {
"TimelogBackend.dll": {}
@@ -60,6 +61,47 @@
}
}
},
"Microsoft.IdentityModel.Abstractions/8.2.1": {
"runtime": {
"lib/net8.0/Microsoft.IdentityModel.Abstractions.dll": {
"assemblyVersion": "8.2.1.0",
"fileVersion": "8.2.1.51115"
}
}
},
"Microsoft.IdentityModel.JsonWebTokens/8.2.1": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.2.1"
},
"runtime": {
"lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
"assemblyVersion": "8.2.1.0",
"fileVersion": "8.2.1.51115"
}
}
},
"Microsoft.IdentityModel.Logging/8.2.1": {
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "8.2.1"
},
"runtime": {
"lib/net8.0/Microsoft.IdentityModel.Logging.dll": {
"assemblyVersion": "8.2.1.0",
"fileVersion": "8.2.1.51115"
}
}
},
"Microsoft.IdentityModel.Tokens/8.2.1": {
"dependencies": {
"Microsoft.IdentityModel.Logging": "8.2.1"
},
"runtime": {
"lib/net8.0/Microsoft.IdentityModel.Tokens.dll": {
"assemblyVersion": "8.2.1.0",
"fileVersion": "8.2.1.51115"
}
}
},
"Microsoft.NETCore.Platforms/1.1.0": {},
"Microsoft.NETCore.Targets/1.1.0": {},
"MySql.Data/9.1.0": {
@@ -156,6 +198,18 @@
}
}
},
"System.IdentityModel.Tokens.Jwt/8.2.1": {
"dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "8.2.1",
"Microsoft.IdentityModel.Tokens": "8.2.1"
},
"runtime": {
"lib/net8.0/System.IdentityModel.Tokens.Jwt.dll": {
"assemblyVersion": "8.2.1.0",
"fileVersion": "8.2.1.51115"
}
}
},
"System.IO/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
@@ -311,6 +365,34 @@
"path": "k4os.hash.xxhash/1.0.8",
"hashPath": "k4os.hash.xxhash.1.0.8.nupkg.sha512"
},
"Microsoft.IdentityModel.Abstractions/8.2.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-8sMlmHhh5HdP3+yCSCUpJpN1yYrJ6J/V39df9siY8PeMckRMrSBRL/TMs/Jex6P1ly/Ie2mFqvhcPHHrNmCd/w==",
"path": "microsoft.identitymodel.abstractions/8.2.1",
"hashPath": "microsoft.identitymodel.abstractions.8.2.1.nupkg.sha512"
},
"Microsoft.IdentityModel.JsonWebTokens/8.2.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Oo0SBOzK6p3YIUcc1YTJCaYezVUa5HyUJ/AAB35QwxhhD6Blei5tNjNYDR0IbqHdb5EPUIiKcIbQGoj2b1mIbg==",
"path": "microsoft.identitymodel.jsonwebtokens/8.2.1",
"hashPath": "microsoft.identitymodel.jsonwebtokens.8.2.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Logging/8.2.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-EgSEAtBoWBynACdhKnMlVAFGGWqOIdmbpW7Vvx2SQ7u7ogZ50NcEGSoGljEsQoGIRYpo0UxXYktKcYMp+G/Bcg==",
"path": "microsoft.identitymodel.logging/8.2.1",
"hashPath": "microsoft.identitymodel.logging.8.2.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Tokens/8.2.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-oQeLWCATuVXOCdIvouM4GG2xl1YNng+uAxYwu7CG6RuW+y+1+slXrOBq5csTU2pnV2SH3B1GmugDf6Jv/lexjw==",
"path": "microsoft.identitymodel.tokens/8.2.1",
"hashPath": "microsoft.identitymodel.tokens.8.2.1.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/1.1.0": {
"type": "package",
"serviceable": true,
@@ -367,6 +449,13 @@
"path": "system.diagnostics.eventlog/8.0.0",
"hashPath": "system.diagnostics.eventlog.8.0.0.nupkg.sha512"
},
"System.IdentityModel.Tokens.Jwt/8.2.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-GVQmbjr2N8awFWPTWyThLxgKnFINObG1P+oX7vFrBY8um3V7V7Dh3wnxaGxNH6v6lSTeVQrY+SaUUBX9H3TPcw==",
"path": "system.identitymodel.tokens.jwt/8.2.1",
"hashPath": "system.identitymodel.tokens.jwt.8.2.1.nupkg.sha512"
},
"System.IO/4.3.0": {
"type": "package",
"serviceable": true,
Binary file not shown.
Binary file not shown.
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("TimelogBackend")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+06ea52ead66c1038b248ca644ce0e0a29ee0065f")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+fd827866717246f0c1dc8296a83443554438188d")]
[assembly: System.Reflection.AssemblyProductAttribute("TimelogBackend")]
[assembly: System.Reflection.AssemblyTitleAttribute("TimelogBackend")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
@@ -1 +1 @@
b1cc7558bcbf1cf4d6ac3236c7ebc2c474885e8b8b600c803a037c8c84382d4c
390f35c991a10d59ca8975ac0af5ba18c35e466fb3f3b2889f5d0ac9b979b12e
@@ -8,6 +8,6 @@ build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = TimelogBackend
build_property.ProjectDir = /home/arch/projects/wip/timelog-interview/backendCs/
build_property.ProjectDir = /home/arch/projects/wip/timelog-interview-login/backendCs/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
@@ -1 +1 @@
8cb7b4e3896ea6e4199194b8ade89330b75c191994f715b16fe2d035c7102d40
21bef44b038939ad13b38cbd16140c4addb86bff3c9dfbda0b0851a88a920ccc
@@ -74,3 +74,46 @@
/home/arch/projects/wip/timelog-interview/backendCs/obj/Debug/net8.0/TimelogBackend.pdb
/home/arch/projects/wip/timelog-interview/backendCs/obj/Debug/net8.0/TimelogBackend.genruntimeconfig.cache
/home/arch/projects/wip/timelog-interview/backendCs/obj/Debug/net8.0/ref/TimelogBackend.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/TimelogBackend
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/TimelogBackend.deps.json
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/TimelogBackend.runtimeconfig.json
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/TimelogBackend.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/TimelogBackend.pdb
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/BouncyCastle.Cryptography.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/Google.Protobuf.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/K4os.Compression.LZ4.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/K4os.Compression.LZ4.Streams.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/K4os.Hash.xxHash.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/MySql.Data.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/Newtonsoft.Json.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/System.Configuration.ConfigurationManager.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/System.Diagnostics.EventLog.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/System.IO.Pipelines.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/System.Security.Cryptography.ProtectedData.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/System.Security.Permissions.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/System.Windows.Extensions.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/ZstdSharp.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/runtimes/win-x64/native/comerr64.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/runtimes/win-x64/native/gssapi64.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/runtimes/win-x64/native/k5sprt64.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/runtimes/win-x64/native/krb5_64.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/runtimes/win-x64/native/krbcc64.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/runtimes/win/lib/net8.0/System.Windows.Extensions.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/obj/Debug/net8.0/TimelogBackend.csproj.AssemblyReference.cache
/home/arch/projects/wip/timelog-interview-login/backendCs/obj/Debug/net8.0/TimelogBackend.GeneratedMSBuildEditorConfig.editorconfig
/home/arch/projects/wip/timelog-interview-login/backendCs/obj/Debug/net8.0/TimelogBackend.AssemblyInfoInputs.cache
/home/arch/projects/wip/timelog-interview-login/backendCs/obj/Debug/net8.0/TimelogBackend.AssemblyInfo.cs
/home/arch/projects/wip/timelog-interview-login/backendCs/obj/Debug/net8.0/TimelogBackend.csproj.CoreCompileInputs.cache
/home/arch/projects/wip/timelog-interview-login/backendCs/obj/Debug/net8.0/TimelogBackend.csproj.CopyComplete
/home/arch/projects/wip/timelog-interview-login/backendCs/obj/Debug/net8.0/TimelogBackend.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/obj/Debug/net8.0/refint/TimelogBackend.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/obj/Debug/net8.0/TimelogBackend.pdb
/home/arch/projects/wip/timelog-interview-login/backendCs/obj/Debug/net8.0/TimelogBackend.genruntimeconfig.cache
/home/arch/projects/wip/timelog-interview-login/backendCs/obj/Debug/net8.0/ref/TimelogBackend.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/Microsoft.IdentityModel.Abstractions.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/Microsoft.IdentityModel.Logging.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/Microsoft.IdentityModel.Tokens.dll
/home/arch/projects/wip/timelog-interview-login/backendCs/bin/Debug/net8.0/System.IdentityModel.Tokens.Jwt.dll
Binary file not shown.
@@ -1 +1 @@
b9db7be95623da1c56ce81f0a2fe43bd17220a8c9689f0c3bac4131258accda2
cabec8eef32bfb7a5e67f2b4ed57839edd7c13e8479c77f87a2d35ec66b02abb
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,17 +1,17 @@
{
"format": 1,
"restore": {
"/home/arch/projects/wip/timelog-interview/backendCs/TimelogBackend.csproj": {}
"/home/arch/projects/wip/timelog-interview-login/backendCs/TimelogBackend.csproj": {}
},
"projects": {
"/home/arch/projects/wip/timelog-interview/backendCs/TimelogBackend.csproj": {
"/home/arch/projects/wip/timelog-interview-login/backendCs/TimelogBackend.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/arch/projects/wip/timelog-interview/backendCs/TimelogBackend.csproj",
"projectUniqueName": "/home/arch/projects/wip/timelog-interview-login/backendCs/TimelogBackend.csproj",
"projectName": "TimelogBackend",
"projectPath": "/home/arch/projects/wip/timelog-interview/backendCs/TimelogBackend.csproj",
"projectPath": "/home/arch/projects/wip/timelog-interview-login/backendCs/TimelogBackend.csproj",
"packagesPath": "/home/arch/.nuget/packages/",
"outputPath": "/home/arch/projects/wip/timelog-interview/backendCs/obj/",
"outputPath": "/home/arch/projects/wip/timelog-interview-login/backendCs/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/arch/.nuget/NuGet/NuGet.Config"
@@ -45,6 +45,10 @@
"Newtonsoft.Json": {
"target": "Package",
"version": "[13.0.3, )"
},
"System.IdentityModel.Tokens.Jwt": {
"target": "Package",
"version": "[8.2.1, )"
}
},
"imports": [
+207 -4
View File
@@ -72,6 +72,67 @@
}
}
},
"Microsoft.IdentityModel.Abstractions/8.2.1": {
"type": "package",
"compile": {
"lib/net8.0/Microsoft.IdentityModel.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/Microsoft.IdentityModel.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.IdentityModel.JsonWebTokens/8.2.1": {
"type": "package",
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.2.1"
},
"compile": {
"lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
"related": ".xml"
}
}
},
"Microsoft.IdentityModel.Logging/8.2.1": {
"type": "package",
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "8.2.1"
},
"compile": {
"lib/net8.0/Microsoft.IdentityModel.Logging.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/Microsoft.IdentityModel.Logging.dll": {
"related": ".xml"
}
}
},
"Microsoft.IdentityModel.Tokens/8.2.1": {
"type": "package",
"dependencies": {
"Microsoft.IdentityModel.Logging": "8.2.1"
},
"compile": {
"lib/net8.0/Microsoft.IdentityModel.Tokens.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/Microsoft.IdentityModel.Tokens.dll": {
"related": ".xml"
}
}
},
"Microsoft.NETCore.Platforms/1.1.0": {
"type": "package",
"compile": {
@@ -224,6 +285,23 @@
}
}
},
"System.IdentityModel.Tokens.Jwt/8.2.1": {
"type": "package",
"dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "8.2.1",
"Microsoft.IdentityModel.Tokens": "8.2.1"
},
"compile": {
"lib/net8.0/System.IdentityModel.Tokens.Jwt.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/System.IdentityModel.Tokens.Jwt.dll": {
"related": ".xml"
}
}
},
"System.IO/4.3.0": {
"type": "package",
"dependencies": {
@@ -597,6 +675,102 @@
"lib/netstandard2.1/K4os.Hash.xxHash.xml"
]
},
"Microsoft.IdentityModel.Abstractions/8.2.1": {
"sha512": "8sMlmHhh5HdP3+yCSCUpJpN1yYrJ6J/V39df9siY8PeMckRMrSBRL/TMs/Jex6P1ly/Ie2mFqvhcPHHrNmCd/w==",
"type": "package",
"path": "microsoft.identitymodel.abstractions/8.2.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net462/Microsoft.IdentityModel.Abstractions.dll",
"lib/net462/Microsoft.IdentityModel.Abstractions.xml",
"lib/net472/Microsoft.IdentityModel.Abstractions.dll",
"lib/net472/Microsoft.IdentityModel.Abstractions.xml",
"lib/net6.0/Microsoft.IdentityModel.Abstractions.dll",
"lib/net6.0/Microsoft.IdentityModel.Abstractions.xml",
"lib/net8.0/Microsoft.IdentityModel.Abstractions.dll",
"lib/net8.0/Microsoft.IdentityModel.Abstractions.xml",
"lib/net9.0/Microsoft.IdentityModel.Abstractions.dll",
"lib/net9.0/Microsoft.IdentityModel.Abstractions.xml",
"lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.dll",
"lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.xml",
"microsoft.identitymodel.abstractions.8.2.1.nupkg.sha512",
"microsoft.identitymodel.abstractions.nuspec"
]
},
"Microsoft.IdentityModel.JsonWebTokens/8.2.1": {
"sha512": "Oo0SBOzK6p3YIUcc1YTJCaYezVUa5HyUJ/AAB35QwxhhD6Blei5tNjNYDR0IbqHdb5EPUIiKcIbQGoj2b1mIbg==",
"type": "package",
"path": "microsoft.identitymodel.jsonwebtokens/8.2.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net462/Microsoft.IdentityModel.JsonWebTokens.dll",
"lib/net462/Microsoft.IdentityModel.JsonWebTokens.xml",
"lib/net472/Microsoft.IdentityModel.JsonWebTokens.dll",
"lib/net472/Microsoft.IdentityModel.JsonWebTokens.xml",
"lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll",
"lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.xml",
"lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll",
"lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.xml",
"lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.dll",
"lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.xml",
"lib/netstandard2.0/Microsoft.IdentityModel.JsonWebTokens.dll",
"lib/netstandard2.0/Microsoft.IdentityModel.JsonWebTokens.xml",
"microsoft.identitymodel.jsonwebtokens.8.2.1.nupkg.sha512",
"microsoft.identitymodel.jsonwebtokens.nuspec"
]
},
"Microsoft.IdentityModel.Logging/8.2.1": {
"sha512": "EgSEAtBoWBynACdhKnMlVAFGGWqOIdmbpW7Vvx2SQ7u7ogZ50NcEGSoGljEsQoGIRYpo0UxXYktKcYMp+G/Bcg==",
"type": "package",
"path": "microsoft.identitymodel.logging/8.2.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net462/Microsoft.IdentityModel.Logging.dll",
"lib/net462/Microsoft.IdentityModel.Logging.xml",
"lib/net472/Microsoft.IdentityModel.Logging.dll",
"lib/net472/Microsoft.IdentityModel.Logging.xml",
"lib/net6.0/Microsoft.IdentityModel.Logging.dll",
"lib/net6.0/Microsoft.IdentityModel.Logging.xml",
"lib/net8.0/Microsoft.IdentityModel.Logging.dll",
"lib/net8.0/Microsoft.IdentityModel.Logging.xml",
"lib/net9.0/Microsoft.IdentityModel.Logging.dll",
"lib/net9.0/Microsoft.IdentityModel.Logging.xml",
"lib/netstandard2.0/Microsoft.IdentityModel.Logging.dll",
"lib/netstandard2.0/Microsoft.IdentityModel.Logging.xml",
"microsoft.identitymodel.logging.8.2.1.nupkg.sha512",
"microsoft.identitymodel.logging.nuspec"
]
},
"Microsoft.IdentityModel.Tokens/8.2.1": {
"sha512": "oQeLWCATuVXOCdIvouM4GG2xl1YNng+uAxYwu7CG6RuW+y+1+slXrOBq5csTU2pnV2SH3B1GmugDf6Jv/lexjw==",
"type": "package",
"path": "microsoft.identitymodel.tokens/8.2.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net462/Microsoft.IdentityModel.Tokens.dll",
"lib/net462/Microsoft.IdentityModel.Tokens.xml",
"lib/net472/Microsoft.IdentityModel.Tokens.dll",
"lib/net472/Microsoft.IdentityModel.Tokens.xml",
"lib/net6.0/Microsoft.IdentityModel.Tokens.dll",
"lib/net6.0/Microsoft.IdentityModel.Tokens.xml",
"lib/net8.0/Microsoft.IdentityModel.Tokens.dll",
"lib/net8.0/Microsoft.IdentityModel.Tokens.xml",
"lib/net9.0/Microsoft.IdentityModel.Tokens.dll",
"lib/net9.0/Microsoft.IdentityModel.Tokens.xml",
"lib/netstandard2.0/Microsoft.IdentityModel.Tokens.dll",
"lib/netstandard2.0/Microsoft.IdentityModel.Tokens.xml",
"microsoft.identitymodel.tokens.8.2.1.nupkg.sha512",
"microsoft.identitymodel.tokens.nuspec"
]
},
"Microsoft.NETCore.Platforms/1.1.0": {
"sha512": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
"type": "package",
@@ -818,6 +992,30 @@
"useSharedDesignerContext.txt"
]
},
"System.IdentityModel.Tokens.Jwt/8.2.1": {
"sha512": "GVQmbjr2N8awFWPTWyThLxgKnFINObG1P+oX7vFrBY8um3V7V7Dh3wnxaGxNH6v6lSTeVQrY+SaUUBX9H3TPcw==",
"type": "package",
"path": "system.identitymodel.tokens.jwt/8.2.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net462/System.IdentityModel.Tokens.Jwt.dll",
"lib/net462/System.IdentityModel.Tokens.Jwt.xml",
"lib/net472/System.IdentityModel.Tokens.Jwt.dll",
"lib/net472/System.IdentityModel.Tokens.Jwt.xml",
"lib/net6.0/System.IdentityModel.Tokens.Jwt.dll",
"lib/net6.0/System.IdentityModel.Tokens.Jwt.xml",
"lib/net8.0/System.IdentityModel.Tokens.Jwt.dll",
"lib/net8.0/System.IdentityModel.Tokens.Jwt.xml",
"lib/net9.0/System.IdentityModel.Tokens.Jwt.dll",
"lib/net9.0/System.IdentityModel.Tokens.Jwt.xml",
"lib/netstandard2.0/System.IdentityModel.Tokens.Jwt.dll",
"lib/netstandard2.0/System.IdentityModel.Tokens.Jwt.xml",
"system.identitymodel.tokens.jwt.8.2.1.nupkg.sha512",
"system.identitymodel.tokens.jwt.nuspec"
]
},
"System.IO/4.3.0": {
"sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
"type": "package",
@@ -1649,7 +1847,8 @@
"projectFileDependencyGroups": {
"net8.0": [
"MySql.Data >= 9.1.0",
"Newtonsoft.Json >= 13.0.3"
"Newtonsoft.Json >= 13.0.3",
"System.IdentityModel.Tokens.Jwt >= 8.2.1"
]
},
"packageFolders": {
@@ -1658,11 +1857,11 @@
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/arch/projects/wip/timelog-interview/backendCs/TimelogBackend.csproj",
"projectUniqueName": "/home/arch/projects/wip/timelog-interview-login/backendCs/TimelogBackend.csproj",
"projectName": "TimelogBackend",
"projectPath": "/home/arch/projects/wip/timelog-interview/backendCs/TimelogBackend.csproj",
"projectPath": "/home/arch/projects/wip/timelog-interview-login/backendCs/TimelogBackend.csproj",
"packagesPath": "/home/arch/.nuget/packages/",
"outputPath": "/home/arch/projects/wip/timelog-interview/backendCs/obj/",
"outputPath": "/home/arch/projects/wip/timelog-interview-login/backendCs/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/arch/.nuget/NuGet/NuGet.Config"
@@ -1696,6 +1895,10 @@
"Newtonsoft.Json": {
"target": "Package",
"version": "[13.0.3, )"
},
"System.IdentityModel.Tokens.Jwt": {
"target": "Package",
"version": "[8.2.1, )"
}
},
"imports": [
+7 -2
View File
@@ -1,14 +1,18 @@
{
"version": 2,
"dgSpecHash": "05fTwHDwROQn3aS1fZFUfkni+eNLFijwdR49kiMZyADYQWkBGYKVh4QK8CMaBFfif3DNASYK7goRXVy8COyb4A==",
"dgSpecHash": "lhoNhBuhv5pZb43QtTahPtHclYQU5heHEQPyTVS7gTLS0zI+oKRmmyzvVbe56/iHd4Yw20shJvPbIdrCOp+Qug==",
"success": true,
"projectFilePath": "/home/arch/projects/wip/timelog-interview/backendCs/TimelogBackend.csproj",
"projectFilePath": "/home/arch/projects/wip/timelog-interview-login/backendCs/TimelogBackend.csproj",
"expectedPackageFiles": [
"/home/arch/.nuget/packages/bouncycastle.cryptography/2.3.1/bouncycastle.cryptography.2.3.1.nupkg.sha512",
"/home/arch/.nuget/packages/google.protobuf/3.26.1/google.protobuf.3.26.1.nupkg.sha512",
"/home/arch/.nuget/packages/k4os.compression.lz4/1.3.8/k4os.compression.lz4.1.3.8.nupkg.sha512",
"/home/arch/.nuget/packages/k4os.compression.lz4.streams/1.3.8/k4os.compression.lz4.streams.1.3.8.nupkg.sha512",
"/home/arch/.nuget/packages/k4os.hash.xxhash/1.0.8/k4os.hash.xxhash.1.0.8.nupkg.sha512",
"/home/arch/.nuget/packages/microsoft.identitymodel.abstractions/8.2.1/microsoft.identitymodel.abstractions.8.2.1.nupkg.sha512",
"/home/arch/.nuget/packages/microsoft.identitymodel.jsonwebtokens/8.2.1/microsoft.identitymodel.jsonwebtokens.8.2.1.nupkg.sha512",
"/home/arch/.nuget/packages/microsoft.identitymodel.logging/8.2.1/microsoft.identitymodel.logging.8.2.1.nupkg.sha512",
"/home/arch/.nuget/packages/microsoft.identitymodel.tokens/8.2.1/microsoft.identitymodel.tokens.8.2.1.nupkg.sha512",
"/home/arch/.nuget/packages/microsoft.netcore.platforms/1.1.0/microsoft.netcore.platforms.1.1.0.nupkg.sha512",
"/home/arch/.nuget/packages/microsoft.netcore.targets/1.1.0/microsoft.netcore.targets.1.1.0.nupkg.sha512",
"/home/arch/.nuget/packages/mysql.data/9.1.0/mysql.data.9.1.0.nupkg.sha512",
@@ -17,6 +21,7 @@
"/home/arch/.nuget/packages/system.configuration.configurationmanager/8.0.0/system.configuration.configurationmanager.8.0.0.nupkg.sha512",
"/home/arch/.nuget/packages/system.diagnostics.diagnosticsource/8.0.1/system.diagnostics.diagnosticsource.8.0.1.nupkg.sha512",
"/home/arch/.nuget/packages/system.diagnostics.eventlog/8.0.0/system.diagnostics.eventlog.8.0.0.nupkg.sha512",
"/home/arch/.nuget/packages/system.identitymodel.tokens.jwt/8.2.1/system.identitymodel.tokens.jwt.8.2.1.nupkg.sha512",
"/home/arch/.nuget/packages/system.io/4.3.0/system.io.4.3.0.nupkg.sha512",
"/home/arch/.nuget/packages/system.io.pipelines/6.0.3/system.io.pipelines.6.0.3.nupkg.sha512",
"/home/arch/.nuget/packages/system.reflection/4.3.0/system.reflection.4.3.0.nupkg.sha512",
View File