Compare commits

..

18 Commits

Author SHA1 Message Date
carteronm e1e8a834b2 push fichiers inutiles 2026-06-11 10:48:28 +02:00
gokhoal 61f3d2889c chiffrement 2026-06-11 10:33:02 +02:00
carteronm 66a7e633a9 Rôles ajoutés 2026-06-11 01:49:21 +02:00
carteronm fff484d4ba Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	Knots/bin/Debug/net8.0/Knots.dll
#	Knots/bin/Debug/net8.0/Knots.exe
#	Knots/bin/Debug/net8.0/Knots.pdb
#	Knots/obj/Debug/net8.0/Knots.AssemblyInfo.cs
#	Knots/obj/Debug/net8.0/Knots.AssemblyInfoInputs.cache
#	Knots/obj/Debug/net8.0/Knots.dll
#	Knots/obj/Debug/net8.0/Knots.pdb
#	Knots/obj/Debug/net8.0/apphost.exe
#	Knots/obj/Debug/net8.0/ref/Knots.dll
#	Knots/obj/Debug/net8.0/refint/Knots.dll
2026-06-11 01:32:33 +02:00
carteronm e69550048b Préparation des rôles 2026-06-11 01:32:20 +02:00
gokhoal a29fb27b0d commit blabla3 2026-06-11 01:30:14 +02:00
gokhoal c23cc4a03a LES MESSAGES MARCHENT 2026-06-11 01:29:27 +02:00
carteronm 1d2f96b2f4 Fin création des groupes 2026-06-11 01:14:32 +02:00
carteronm f1cdc5de19 Modif BDD Discussion 2026-06-11 00:56:32 +02:00
carteronm 4e06dc5f23 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	Knots/bin/Debug/net8.0/Knots.dll
#	Knots/bin/Debug/net8.0/Knots.pdb
#	Knots/obj/Debug/net8.0/Knots.csproj.CoreCompileInputs.cache
#	Knots/obj/Debug/net8.0/Knots.csproj.FileListAbsolute.txt
#	Knots/obj/Debug/net8.0/Knots.dll
#	Knots/obj/Debug/net8.0/Knots.pdb
#	Knots/obj/Debug/net8.0/ref/Knots.dll
#	Knots/obj/Debug/net8.0/refint/Knots.dll
2026-06-11 00:46:04 +02:00
carteronm 779acbe531 Groupe rectification 2026-06-11 00:45:49 +02:00
gokhoal e6021dcc61 envoi et creation messages 2026-06-11 00:44:28 +02:00
gokhoal 4f994ba183 conmmit blabla2 2026-06-11 00:20:02 +02:00
gokhoal 2bb1f730c9 Creatediscussions private et group 2026-06-11 00:19:32 +02:00
gokhoal c92e134698 Revert "Endpoint group"
This reverts commit b7dad57c
2026-06-11 00:15:58 +02:00
gokhoal 0b9e01c925 Revert "endpoint de creation de discussion"
This reverts commit af1b14b0d2.
2026-06-11 00:13:30 +02:00
gokhoal c1bd8a12a9 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	Knots/bin/Debug/net8.0/Knots.dll
#	Knots/bin/Debug/net8.0/Knots.pdb
#	Knots/obj/Debug/net8.0/Knots.assets.cache
#	Knots/obj/Debug/net8.0/Knots.csproj.AssemblyReference.cache
#	Knots/obj/Debug/net8.0/Knots.csproj.CoreCompileInputs.cache
#	Knots/obj/Debug/net8.0/Knots.dll
#	Knots/obj/Debug/net8.0/Knots.pdb
#	Knots/obj/Debug/net8.0/ref/Knots.dll
#	Knots/obj/Debug/net8.0/refint/Knots.dll
#	Knots/obj/project.nuget.cache
#	Knots/obj/project.packagespec.json
#	Knots/obj/rider.project.model.nuget.info
#	Knots/obj/rider.project.restore.info
2026-06-11 00:13:10 +02:00
gokhoal c120d34e62 hub pour websocket 2026-06-11 00:12:29 +02:00
44 changed files with 1150 additions and 262 deletions
+2
View File
@@ -6,4 +6,6 @@ public class GetDiscussionDto
public string Name { get; set; } = string.Empty;
public bool IsGroup { get; set; }
public int? MembersCount { get; set; }
public int? GroupId { get; set; }
}
+1 -1
View File
@@ -7,6 +7,6 @@ public class GetMessageDetailsDto
public DateTime Date { get; set; }
public Boolean Type { get; set; }
public int AuthorId { get; set; }
public int UserId { get; set; }
public string AuthorName { get; set; } = "";
}
@@ -3,11 +3,11 @@ using Knots.DTO.Discussion;
using Knots.Models;
using Microsoft.EntityFrameworkCore;
using System.Security.Claims;
using Knots.Services;
namespace Knots.Endpoints.Discussion;
public class CreateGroupDiscussionEndpoint(KnotsDbContext db)
: Endpoint<CreateGroupDiscussionRequest, GetDiscussionDto>
public class CreateGroupDiscussionEndpoint(KnotsDbContext db, EncryptionService encryption) : Endpoint<CreateGroupDiscussionRequest, GetDiscussionDto>
{
public override void Configure()
{
@@ -18,52 +18,68 @@ public class CreateGroupDiscussionEndpoint(KnotsDbContext db)
{
int currentUserId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
if (req.Usernames == null || req.Usernames.Count == 0)
{
await SendErrorsAsync(400, ct);
return;
}
List<Models.User> targets = await db.Users
.Where(u => req.Usernames.Contains(u.Username!))
.ToListAsync(ct);
if (targets.Count != req.Usernames.Count)
{
await SendNotFoundAsync(ct); // un ou plusieurs utilisateurs introuvables
await SendNotFoundAsync(ct);
return;
}
if (targets.Any(t => t.Id == currentUserId))
{
await SendErrorsAsync(400, ct); // pas de discussion avec soi-même
await SendErrorsAsync(400, ct);
return;
}
List<UserDiscussion> members = targets
.Select(t => new UserDiscussion { UserId = t.Id })
.ToList();
members.Add(new UserDiscussion { UserId = currentUserId });
int totalMembers = targets.Count + 1;
Models.Discussion discussion = new()
{
IsGroup = true,
UserDiscussions = members
Key = new Models.Key { EnKey = encryption.GenerateKey() },
UserDiscussions = targets
.Select(t => new UserDiscussion { UserId = t.Id })
.Append(new UserDiscussion { UserId = currentUserId })
.ToList()
};
db.Discussions.Add(discussion);
await db.SaveChangesAsync(ct); // discussion.Id disponible
Models.Group group = new()
{
Name = req.GroupName,
MembersAmount = totalMembers,
DiscussionId = discussion.Id,
GroupUsers = targets
.Select(t => new GroupUser { UserId = t.Id })
.Append(new GroupUser { UserId = currentUserId })
.ToList()
};
db.Groups.Add(group);
await db.SaveChangesAsync(ct); // group.Id disponible
discussion.GroupId = group.Id;
await db.SaveChangesAsync(ct);
await SendOkAsync(new GetDiscussionDto
{
Id = discussion.Id,
IsGroup = true,
Name = req.GroupName,
MembersCount = members.Count
Name = group.Name,
MembersCount = totalMembers
}, ct);
}
}
@@ -3,10 +3,11 @@ using Knots.DTO.Discussion;
using Knots.Models;
using Microsoft.EntityFrameworkCore;
using System.Security.Claims;
using Knots.Services;
namespace Knots.Endpoints.Discussion;
public class CreatePrivateDiscussionEndpoint(KnotsDbContext db)
public class CreatePrivateDiscussionEndpoint(KnotsDbContext db, EncryptionService encryption)
: Endpoint<CreatePrivateDiscussionRequest, GetDiscussionDto>
{
public override void Configure()
@@ -57,6 +58,7 @@ public class CreatePrivateDiscussionEndpoint(KnotsDbContext db)
Models.Discussion discussion = new()
{
IsGroup = false,
Key = new Models.Key { EnKey = encryption.GenerateKey() },
UserDiscussions =
[
new UserDiscussion { UserId = currentUserId },
@@ -0,0 +1,35 @@
using System.Security.Claims;
using FastEndpoints;
using Microsoft.EntityFrameworkCore;
namespace Knots.Endpoints.Discussion;
public class GetDiscussionMembersEndpoint(KnotsDbContext db) : EndpointWithoutRequest<List<string>>
{
public override void Configure()
{
Get("/discussions/{discussionId}/members");
}
public override async Task HandleAsync(CancellationToken ct)
{
int discussionId = Route<int>("discussionId");
Models.Discussion? discussion = await db.Discussions
.Include(d => d.UserDiscussions)
.ThenInclude(ud => ud.User)
.SingleOrDefaultAsync(d => d.Id == discussionId, ct);
if (discussion is null)
{
await SendNotFoundAsync(ct);
return;
}
List<string> members = discussion.UserDiscussions
.Select(ud => ud.User.Username!)
.ToList();
await SendOkAsync(members, ct);
}
}
@@ -0,0 +1,52 @@
using FastEndpoints;
using Microsoft.EntityFrameworkCore;
namespace Knots.Endpoints.Discussion;
public class GetDiscussionMembersWithRolesEndpoint(KnotsDbContext db) : EndpointWithoutRequest<List<MemberWithRoleDto>>
{
public override void Configure()
{
Get("/discussions/{discussionId}/members/roles");
}
public override async Task HandleAsync(CancellationToken ct)
{
int discussionId = Route<int>("discussionId");
Models.Discussion? discussion = await db.Discussions
.Include(d => d.Group)
.ThenInclude(g => g!.GroupUsers)
.ThenInclude(gu => gu.User)
.Include(d => d.Group)
.ThenInclude(g => g!.GroupUsers)
.ThenInclude(gu => gu.Role)
.SingleOrDefaultAsync(d => d.Id == discussionId, ct);
if (discussion?.Group is null)
{
await SendNotFoundAsync(ct);
return;
}
List<MemberWithRoleDto> members = discussion.Group.GroupUsers
.Select(gu => new MemberWithRoleDto
{
UserId = gu.UserId,
Username = gu.User.Username!,
RoleId = gu.RoleId,
RoleLibelle = gu.Role?.Libelle
})
.ToList();
await SendOkAsync(members, ct);
}
}
public class MemberWithRoleDto
{
public int UserId { get; set; }
public string Username { get; set; } = "";
public int? RoleId { get; set; }
public string? RoleLibelle { get; set; }
}
@@ -27,7 +27,8 @@ public class GetMyDiscussionEndpoint(KnotsDbContext db) : EndpointWithoutRequest
.Where(ud => ud.UserId != userId)
.Select(ud => ud.User.Username)
.FirstOrDefault() ?? "",
MembersCount = null
MembersCount = null,
GroupId = null
});
// Discussions de groupe : l'utilisateur est membre du groupe
@@ -38,7 +39,8 @@ public class GetMyDiscussionEndpoint(KnotsDbContext db) : EndpointWithoutRequest
Id = d.Id,
IsGroup = true,
Name = d.Group!.Name!,
MembersCount = d.Group.MembersAmount
MembersCount = d.Group.MembersAmount,
GroupId = d.Group.Id
});
List<GetDiscussionDto> discussions = await privees.Concat(groupes).ToListAsync(ct);
+18 -10
View File
@@ -2,11 +2,12 @@ using System.Security.Claims;
using FastEndpoints;
using Knots.DTO.Message;
using Knots.DTO.User;
using Knots.Services;
using Microsoft.EntityFrameworkCore;
namespace Knots.Endpoints.Message;
public class GetMessageEndpoint(KnotsDbContext db, AutoMapper.IMapper mapper) : Endpoint<GetDiscussionMessagesRequest, List<GetMessageDetailsDto>>
public class GetMessageEndpoint(KnotsDbContext db, AutoMapper.IMapper mapper, EncryptionService encryption) : Endpoint<GetDiscussionMessagesRequest, List<GetMessageDetailsDto>>
{
public override void Configure()
{
@@ -31,19 +32,26 @@ public class GetMessageEndpoint(KnotsDbContext db, AutoMapper.IMapper mapper) :
return;
}
List<GetMessageDetailsDto> messages = await db.Messages
string? key = await db.Discussions
.Where(d => d.Id == req.DiscussionId)
.Select(d => d.Key!.EnKey)
.SingleAsync(ct);
var rows = await db.Messages
.Where(m => m.DiscussionId == req.DiscussionId)
.OrderBy(m => m.Date)
.Select(m => new GetMessageDetailsDto
{
Id = m.Id,
Contenu = m.Contenu!,
Date = m.Date,
AuthorId = m.UserId,
AuthorName = m.User.Username!
})
.Select(m => new { m.Id, m.Contenu, m.Date, m.UserId, AuthorName = m.User.Username! })
.ToListAsync(ct);
List<GetMessageDetailsDto> messages = rows.Select(m => new GetMessageDetailsDto
{
Id = m.Id,
Contenu = encryption.Decrypt(m.Contenu!, key!),
Date = m.Date,
UserId = m.UserId,
AuthorName = m.AuthorName
}).ToList();
await SendOkAsync(messages, ct);
}
}
@@ -0,0 +1,45 @@
using FastEndpoints;
using Knots.Models;
using Microsoft.EntityFrameworkCore;
namespace Knots.Endpoints.Role;
public class AssignRoleEndpoint(KnotsDbContext db) : Endpoint<AssignRoleRequest>
{
public override void Configure()
{
Post("/groups/{groupId}/members/{userId}/role");
}
public override async Task HandleAsync(AssignRoleRequest req, CancellationToken ct)
{
int groupId = Route<int>("groupId");
int userId = Route<int>("userId");
GroupUser? groupUser = await db.GroupUsers
.SingleOrDefaultAsync(gu => gu.GroupId == groupId && gu.UserId == userId, ct);
if (groupUser is null)
{
await SendNotFoundAsync(ct);
return;
}
bool roleExists = await db.Roles.AnyAsync(r => r.Id == req.RoleId, ct);
if (!roleExists)
{
await SendNotFoundAsync(ct);
return;
}
groupUser.RoleId = req.RoleId;
await db.SaveChangesAsync(ct);
await SendOkAsync(ct);
}
}
public class AssignRoleRequest
{
public int RoleId { get; set; }
}
+18 -8
View File
@@ -1,22 +1,32 @@
using FastEndpoints;
using Knots.DTO.Role;
using Knots.DTO.User;
using Knots.Models;
namespace Knots.Endpoints.Role;
public class CreateRoleEndpoint(KnotsDbContext db, AutoMapper.IMapper mapper) : Endpoint<CreateRoleDto>
public class CreateRoleEndpoint(KnotsDbContext db) : Endpoint<CreateRoleRequest, RoleDto>
{
public override void Configure()
{
Post("/roles");
AllowAnonymous();
}
public override async Task HandleAsync(CreateRoleDto req, CancellationToken ct)
public override async Task HandleAsync(CreateRoleRequest req, CancellationToken ct)
{
Models.Role? role = mapper.Map<Models.Role>(req);
Models.Role role = new() { Libelle = req.Libelle };
db.Roles.Add(role);
await db.SaveChangesAsync(ct);
await SendNoContentAsync(ct);
await SendOkAsync(new RoleDto { Id = role.Id, Libelle = role.Libelle! }, ct);
}
}
public class CreateRoleRequest
{
public string Libelle { get; set; } = "";
}
public class RoleDto
{
public int Id { get; set; }
public string Libelle { get; set; } = "";
}
+60
View File
@@ -0,0 +1,60 @@
using Knots.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using Microsoft.EntityFrameworkCore;
namespace Knots.Hubs;
[Authorize]
public class ChatHub(KnotsDbContext db, AutoMapper.IMapper mapper, EncryptionService encryption) : Hub
{
// Rejoindre une conversation (room)
public async Task JoinConversation(string discussionId)
{
await Groups.AddToGroupAsync(Context.ConnectionId, discussionId);
}
// Quitter une conversation
public async Task LeaveConversation(string discussionId)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, discussionId);
}
// Envoyer un message à une conversation
public async Task SendMessage(string discussionId, string content)
{
int id = int.Parse(discussionId);
Models.Discussion discussion = await db.Discussions
.Include(d => d.Key)
.SingleAsync(d => d.Id == id);
var message = new Models.Message
{
Contenu = encryption.Encrypt(content, discussion.Key!.EnKey!), // chiffré en base
Date = DateTime.UtcNow,
Type = false,
UserId = int.Parse(Context.UserIdentifier!),
DiscussionId = id
};
db.Messages.Add(message);
await db.SaveChangesAsync();
// diffusion en clair, avec les noms de champs attendus par le front
await Clients.Group(discussionId).SendAsync("ReceiveMessage", new
{
id = message.Id,
contenu = content,
date = message.Date,
userId = message.UserId
});
}
// Notifier que l'utilisateur est en train d'écrire
public async Task Typing(string discussionId)
{
await Clients.OthersInGroup(discussionId)
.SendAsync("UserTyping", Context.UserIdentifier);
}
}
+1
View File
@@ -14,6 +14,7 @@
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.3.11" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.28" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.25" />
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.2.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.25" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.25">
<PrivateAssets>all</PrivateAssets>
@@ -1,170 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Knots.Migrations
{
/// <inheritdoc />
public partial class Discussion : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Groups_Discussions_DiscussionId",
table: "Groups");
migrationBuilder.DropForeignKey(
name: "FK_UserDiscussions_Users_UserId",
table: "UserDiscussions");
migrationBuilder.DropIndex(
name: "IX_Groups_DiscussionId",
table: "Groups");
migrationBuilder.DropColumn(
name: "KeyId",
table: "Groups");
migrationBuilder.AddColumn<int>(
name: "GroupId",
table: "Discussions",
type: "int",
nullable: true);
migrationBuilder.CreateTable(
name: "GroupUsers",
columns: table => new
{
GroupId = table.Column<int>(type: "int", nullable: false),
UserId = table.Column<int>(type: "int", nullable: false),
RoleId = table.Column<int>(type: "int", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_GroupUsers", x => new { x.GroupId, x.UserId });
table.ForeignKey(
name: "FK_GroupUsers_Groups_GroupId",
column: x => x.GroupId,
principalTable: "Groups",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_GroupUsers_Roles_RoleId",
column: x => x.RoleId,
principalTable: "Roles",
principalColumn: "Id");
table.ForeignKey(
name: "FK_GroupUsers_Users_UserId",
column: x => x.UserId,
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateIndex(
name: "IX_Groups_DiscussionId",
table: "Groups",
column: "DiscussionId");
migrationBuilder.CreateIndex(
name: "IX_Discussions_GroupId",
table: "Discussions",
column: "GroupId");
migrationBuilder.CreateIndex(
name: "IX_GroupUsers_RoleId",
table: "GroupUsers",
column: "RoleId");
migrationBuilder.CreateIndex(
name: "IX_GroupUsers_UserId",
table: "GroupUsers",
column: "UserId");
migrationBuilder.AddForeignKey(
name: "FK_Discussions_Groups_GroupId",
table: "Discussions",
column: "GroupId",
principalTable: "Groups",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
migrationBuilder.AddForeignKey(
name: "FK_Groups_Discussions_DiscussionId",
table: "Groups",
column: "DiscussionId",
principalTable: "Discussions",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
migrationBuilder.AddForeignKey(
name: "FK_UserDiscussions_Users_UserId",
table: "UserDiscussions",
column: "UserId",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Discussions_Groups_GroupId",
table: "Discussions");
migrationBuilder.DropForeignKey(
name: "FK_Groups_Discussions_DiscussionId",
table: "Groups");
migrationBuilder.DropForeignKey(
name: "FK_UserDiscussions_Users_UserId",
table: "UserDiscussions");
migrationBuilder.DropTable(
name: "GroupUsers");
migrationBuilder.DropIndex(
name: "IX_Groups_DiscussionId",
table: "Groups");
migrationBuilder.DropIndex(
name: "IX_Discussions_GroupId",
table: "Discussions");
migrationBuilder.DropColumn(
name: "GroupId",
table: "Discussions");
migrationBuilder.AddColumn<int>(
name: "KeyId",
table: "Groups",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.CreateIndex(
name: "IX_Groups_DiscussionId",
table: "Groups",
column: "DiscussionId",
unique: true);
migrationBuilder.AddForeignKey(
name: "FK_Groups_Discussions_DiscussionId",
table: "Groups",
column: "DiscussionId",
principalTable: "Discussions",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
name: "FK_UserDiscussions_Users_UserId",
table: "UserDiscussions",
column: "UserId",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
}
@@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace Knots.Migrations
{
[DbContext(typeof(KnotsDbContext))]
[Migration("20260610204450_Discussion")]
partial class Discussion
[Migration("20260610224937_FixGroupDiscussion")]
partial class FixGroupDiscussion
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -124,6 +124,9 @@ namespace Knots.Migrations
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("AuthorId")
.HasColumnType("int");
b.Property<string>("Contenu")
.IsRequired()
.HasMaxLength(1000)
@@ -0,0 +1,21 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Knots.Migrations
{
/// <inheritdoc />
public partial class FixGroupDiscussion : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "AuthorId",
table: "Messages",
type: "int",
nullable: false,
defaultValue: 0);
}
}
}
@@ -121,6 +121,9 @@ namespace Knots.Migrations
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("AuthorId")
.HasColumnType("int");
b.Property<string>("Contenu")
.IsRequired()
.HasMaxLength(1000)
+3
View File
@@ -11,6 +11,9 @@ public class Discussion
public int? GroupId { get; set; }
public Group? Group { get; set; }
public int? KeyId { get; set; }
public Key? Key { get; set; }
public List<Message> Messages { get; set; } = [];
public List<UserDiscussion> UserDiscussions { get; set; } = [];
}
-1
View File
@@ -6,5 +6,4 @@ public class Key
{
[Key] public int Id { get; set; }
[Required, MaxLength(50)] public string? EnKey { get; set; }
public List<Message> Messages { get; set; } = [];
}
-1
View File
@@ -16,5 +16,4 @@ public class Message
public Discussion Discussion { get; set; } = null!;
public Group? Group { get; set; }
public Key? Key { get; set; }
}
+24 -3
View File
@@ -2,6 +2,7 @@ using System.Text;
using Knots;
using FastEndpoints;
using FastEndpoints.Swagger;
using Knots.Hubs;
using Knots.Services;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Http.Json;
@@ -20,7 +21,8 @@ builder.Services.AddCors(options =>
policyBuilder
.WithOrigins("http://localhost:5250", "http://localhost:4200")
.WithMethods("GET", "POST", "PUT", "PATCH", "DELETE")
.AllowAnyHeader();
.AllowAnyHeader()
.AllowCredentials();
});
});
@@ -46,15 +48,33 @@ builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!))
};
options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var accessToken = context.Request.Query["access_token"];
var path = context.HttpContext.Request.Path;
if (!string.IsNullOrEmpty(accessToken) &&
path.StartsWithSegments("/hubs"))
{
context.Token = accessToken;
}
return Task.CompletedTask;
}
};
});
builder.Services.AddAuthorization();
builder.Services.AddSignalR();
builder.Services.AddAutoMapper(cfg => { }, typeof(Program).Assembly);
builder.Services.AddSingleton<EncryptionService>();
// On construit l'application en lui donnant vie
WebApplication app = builder.Build();
@@ -71,5 +91,6 @@ app.UseAuthentication()
}
).UseSwaggerGen();
app.MapHub<ChatHub>("hubs/chat");
app.Run();
+56
View File
@@ -0,0 +1,56 @@
using System.Security.Cryptography;
using System.Text;
namespace Knots.Services;
public class EncryptionService
{
private const int NonceSize = 12; // AesGcm.NonceByteSizes.MaxSize
private const int TagSize = 16; // AesGcm.TagByteSizes.MaxSize
// Génère une clé AES-256 (32 octets) encodée en Base64
public string GenerateKey()
=> Convert.ToBase64String(RandomNumberGenerator.GetBytes(32));
// Chiffre → renvoie Base64(nonce + tag + ciphertext)
public string Encrypt(string plainText, string base64Key)
{
byte[] key = Convert.FromBase64String(base64Key);
byte[] plain = Encoding.UTF8.GetBytes(plainText);
byte[] nonce = RandomNumberGenerator.GetBytes(NonceSize);
byte[] cipher = new byte[plain.Length];
byte[] tag = new byte[TagSize];
using AesGcm aes = new(key, TagSize);
aes.Encrypt(nonce, plain, cipher, tag);
byte[] result = new byte[NonceSize + TagSize + cipher.Length];
Buffer.BlockCopy(nonce, 0, result, 0, NonceSize);
Buffer.BlockCopy(tag, 0, result, NonceSize, TagSize);
Buffer.BlockCopy(cipher, 0, result, NonceSize + TagSize, cipher.Length);
return Convert.ToBase64String(result);
}
// Déchiffre Base64(nonce + tag + ciphertext)
public string Decrypt(string base64Cipher, string base64Key)
{
byte[] key = Convert.FromBase64String(base64Key);
byte[] data = Convert.FromBase64String(base64Cipher);
byte[] nonce = new byte[NonceSize];
byte[] tag = new byte[TagSize];
byte[] cipher = new byte[data.Length - NonceSize - TagSize];
Buffer.BlockCopy(data, 0, nonce, 0, NonceSize);
Buffer.BlockCopy(data, NonceSize, tag, 0, TagSize);
Buffer.BlockCopy(data, NonceSize + TagSize, cipher, 0, cipher.Length);
byte[] plain = new byte[cipher.Length];
using AesGcm aes = new(key, TagSize);
aes.Decrypt(nonce, cipher, tag, plain);
return Encoding.UTF8.GetString(plain);
}
}
@@ -11,7 +11,7 @@ public class CreateMessageDtoValidator : Validator<CreateMessageDto>
RuleFor(x => x.Contenu)
.NotEmpty()
.WithMessage("Le message ne peux pas être vide")
.MaximumLength(1000)
.MaximumLength(2000)
.WithMessage("Le message ne doit pas faire plus de 1000 caractères");
RuleFor(x => x.Date)
+214 -12
View File
@@ -15,6 +15,7 @@
"Microsoft.AspNetCore.Authentication": "2.3.11",
"Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.28",
"Microsoft.AspNetCore.OpenApi": "8.0.25",
"Microsoft.AspNetCore.SignalR": "1.2.11",
"Microsoft.EntityFrameworkCore": "8.0.25",
"Microsoft.EntityFrameworkCore.Design": "8.0.25",
"Microsoft.EntityFrameworkCore.SqlServer": "8.0.25",
@@ -173,6 +174,24 @@
}
}
},
"Microsoft.AspNetCore.Authorization/2.3.0": {
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.0",
"Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.AspNetCore.Authorization.Policy/2.3.0": {
"dependencies": {
"Microsoft.AspNetCore.Authentication.Abstractions": "2.3.9",
"Microsoft.AspNetCore.Authorization": "2.3.0"
}
},
"Microsoft.AspNetCore.Connections.Abstractions/2.3.0": {
"dependencies": {
"Microsoft.AspNetCore.Http.Features": "2.3.0",
"System.IO.Pipelines": "8.0.0"
}
},
"Microsoft.AspNetCore.Cryptography.Internal/2.3.9": {},
"Microsoft.AspNetCore.DataProtection/2.3.10": {
"dependencies": {
@@ -216,6 +235,26 @@
"System.Text.Encodings.Web": "8.0.0"
}
},
"Microsoft.AspNetCore.Http.Connections/1.2.0": {
"dependencies": {
"Microsoft.AspNetCore.Authorization.Policy": "2.3.0",
"Microsoft.AspNetCore.Hosting.Abstractions": "2.3.9",
"Microsoft.AspNetCore.Http": "2.3.10",
"Microsoft.AspNetCore.Http.Connections.Common": "1.2.0",
"Microsoft.AspNetCore.Routing": "2.3.0",
"Microsoft.AspNetCore.WebSockets": "2.3.10",
"Newtonsoft.Json": "13.0.3",
"System.Net.WebSockets.WebSocketProtocol": "5.1.0"
}
},
"Microsoft.AspNetCore.Http.Connections.Common/1.2.0": {
"dependencies": {
"Microsoft.AspNetCore.Connections.Abstractions": "2.3.0",
"Newtonsoft.Json": "13.0.3",
"System.Buffers": "4.6.0",
"System.IO.Pipelines": "8.0.0"
}
},
"Microsoft.AspNetCore.Http.Extensions/2.3.10": {
"dependencies": {
"Microsoft.AspNetCore.Http.Abstractions": "2.3.9",
@@ -240,6 +279,62 @@
}
}
},
"Microsoft.AspNetCore.Routing/2.3.0": {
"dependencies": {
"Microsoft.AspNetCore.Http.Extensions": "2.3.10",
"Microsoft.AspNetCore.Routing.Abstractions": "2.3.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0",
"Microsoft.Extensions.ObjectPool": "8.0.11",
"Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.AspNetCore.Routing.Abstractions/2.3.0": {
"dependencies": {
"Microsoft.AspNetCore.Http.Abstractions": "2.3.9"
}
},
"Microsoft.AspNetCore.SignalR/1.2.11": {
"dependencies": {
"Microsoft.AspNetCore.Http.Connections": "1.2.0",
"Microsoft.AspNetCore.SignalR.Core": "1.2.0",
"Microsoft.AspNetCore.WebSockets": "2.3.10",
"System.IO.Pipelines": "8.0.0"
}
},
"Microsoft.AspNetCore.SignalR.Common/1.2.0": {
"dependencies": {
"Microsoft.AspNetCore.Connections.Abstractions": "2.3.0",
"Microsoft.Extensions.Options": "10.0.0",
"Newtonsoft.Json": "13.0.3",
"System.Buffers": "4.6.0"
}
},
"Microsoft.AspNetCore.SignalR.Core/1.2.0": {
"dependencies": {
"Microsoft.AspNetCore.Authorization": "2.3.0",
"Microsoft.AspNetCore.SignalR.Common": "1.2.0",
"Microsoft.AspNetCore.SignalR.Protocols.Json": "1.2.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0",
"System.IO.Pipelines": "8.0.0",
"System.Reflection.Emit": "4.7.0",
"System.Threading.Channels": "8.0.0"
}
},
"Microsoft.AspNetCore.SignalR.Protocols.Json/1.2.0": {
"dependencies": {
"Microsoft.AspNetCore.SignalR.Common": "1.2.0",
"Newtonsoft.Json": "13.0.3",
"System.IO.Pipelines": "8.0.0"
}
},
"Microsoft.AspNetCore.WebSockets/2.3.10": {
"dependencies": {
"Microsoft.AspNetCore.Http.Extensions": "2.3.10",
"Microsoft.Extensions.Options": "10.0.0",
"System.Net.WebSockets.WebSocketProtocol": "5.1.0"
}
},
"Microsoft.AspNetCore.WebUtilities/2.3.9": {
"dependencies": {
"Microsoft.Net.Http.Headers": "2.3.9",
@@ -424,8 +519,8 @@
"Microsoft.Bcl.AsyncInterfaces": "6.0.0",
"Microsoft.CodeAnalysis.Common": "4.5.0",
"System.Composition": "6.0.0",
"System.IO.Pipelines": "6.0.3",
"System.Threading.Channels": "6.0.0"
"System.IO.Pipelines": "8.0.0",
"System.Threading.Channels": "8.0.0"
},
"runtime": {
"lib/netcoreapp3.1/Microsoft.CodeAnalysis.Workspaces.dll": {
@@ -1218,7 +1313,7 @@
}
}
},
"System.IO.Pipelines/6.0.3": {},
"System.IO.Pipelines/8.0.0": {},
"System.Memory/4.5.4": {},
"System.Memory.Data/1.0.2": {
"dependencies": {
@@ -1232,7 +1327,16 @@
}
}
},
"System.Net.WebSockets.WebSocketProtocol/5.1.0": {
"runtime": {
"lib/net6.0/System.Net.WebSockets.WebSocketProtocol.dll": {
"assemblyVersion": "5.1.0.0",
"fileVersion": "5.100.24.56208"
}
}
},
"System.Numerics.Vectors/4.5.0": {},
"System.Reflection.Emit/4.7.0": {},
"System.Reflection.Metadata/6.0.1": {
"dependencies": {
"System.Collections.Immutable": "6.0.0"
@@ -1327,7 +1431,7 @@
},
"System.Text.Encodings.Web/8.0.0": {},
"System.Text.Json/8.0.5": {},
"System.Threading.Channels/6.0.0": {},
"System.Threading.Channels/8.0.0": {},
"System.Threading.Tasks.Extensions/4.5.4": {},
"System.Windows.Extensions/6.0.0": {
"dependencies": {
@@ -1462,6 +1566,27 @@
"path": "microsoft.aspnetcore.authentication.jwtbearer/8.0.28",
"hashPath": "microsoft.aspnetcore.authentication.jwtbearer.8.0.28.nupkg.sha512"
},
"Microsoft.AspNetCore.Authorization/2.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2/aBgLqBXva/+w8pzRNY8ET43Gi+dr1gv/7ySfbsh23lTK6IAgID5MGUEa1hreNIF+0XpW4tX7QwVe70+YvaPg==",
"path": "microsoft.aspnetcore.authorization/2.3.0",
"hashPath": "microsoft.aspnetcore.authorization.2.3.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Authorization.Policy/2.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-vn31uQ1dA1MIV2WNNDOOOm88V5KgR9esfi0LyQ6eVaGq2h0Yw+R29f5A6qUNJt+RccS3qkYayylAy9tP1wV+7Q==",
"path": "microsoft.aspnetcore.authorization.policy/2.3.0",
"hashPath": "microsoft.aspnetcore.authorization.policy.2.3.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Connections.Abstractions/2.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ULFSa+/L+WiAHVlIFHyg0OmHChU9Hx+K+xnt0hbIU5XmT1EGy0pNDx23QAzDtAy9jxQrTG6MX0MdvMeU4D4c7w==",
"path": "microsoft.aspnetcore.connections.abstractions/2.3.0",
"hashPath": "microsoft.aspnetcore.connections.abstractions.2.3.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Cryptography.Internal/2.3.9": {
"type": "package",
"serviceable": true,
@@ -1511,6 +1636,20 @@
"path": "microsoft.aspnetcore.http.abstractions/2.3.9",
"hashPath": "microsoft.aspnetcore.http.abstractions.2.3.9.nupkg.sha512"
},
"Microsoft.AspNetCore.Http.Connections/1.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VYMCOLvdT0y3O9lk4jUuIs8+re7u5+i+ka6ZZ6fIzSJ94c/JeMnAOOg39EB2i4crPXvLoiSdzKWlNPJgTbCZ2g==",
"path": "microsoft.aspnetcore.http.connections/1.2.0",
"hashPath": "microsoft.aspnetcore.http.connections.1.2.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Http.Connections.Common/1.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-yUA7eg6kv7Wbz5TCW4PqS5/kYE5VxUIEDvoxjw4p1RwS2LGm84F9fBtM0mD6wrRfiv1NUyJ7WBjn3PWd/ccO+w==",
"path": "microsoft.aspnetcore.http.connections.common/1.2.0",
"hashPath": "microsoft.aspnetcore.http.connections.common.1.2.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Http.Extensions/2.3.10": {
"type": "package",
"serviceable": true,
@@ -1532,6 +1671,55 @@
"path": "microsoft.aspnetcore.openapi/8.0.25",
"hashPath": "microsoft.aspnetcore.openapi.8.0.25.nupkg.sha512"
},
"Microsoft.AspNetCore.Routing/2.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-no5/VC0CAQuT4PK4rp2K5fqwuSfzr2mdB6m1XNfWVhHnwzpRQzKAu9flChiT/JTLKwVI0Vq2MSmSW2OFMDCNXg==",
"path": "microsoft.aspnetcore.routing/2.3.0",
"hashPath": "microsoft.aspnetcore.routing.2.3.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Routing.Abstractions/2.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZkFpUrSmp6TocxZLBEX3IBv5dPMbQuMs6L/BPl0WRfn32UVOtNYJQ0bLdh3cL9LMV0rmTW/5R0w8CBYxr0AOUw==",
"path": "microsoft.aspnetcore.routing.abstractions/2.3.0",
"hashPath": "microsoft.aspnetcore.routing.abstractions.2.3.0.nupkg.sha512"
},
"Microsoft.AspNetCore.SignalR/1.2.11": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fq/EW3G4S+1Xo3aX042Geb/mm+cqStB7cw7FmXLhgpXbsO6dXbU/78URRqpiMozAHjpqSK9BVRkhYhnCg5fgew==",
"path": "microsoft.aspnetcore.signalr/1.2.11",
"hashPath": "microsoft.aspnetcore.signalr.1.2.11.nupkg.sha512"
},
"Microsoft.AspNetCore.SignalR.Common/1.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-FZeXIaoWqe145ZPdfiptwkw/sP1BX1UD0706GNBwwoaFiKsNbLEl/Trhj2+idlp3qbX1BEwkQesKNxkopVY5Xg==",
"path": "microsoft.aspnetcore.signalr.common/1.2.0",
"hashPath": "microsoft.aspnetcore.signalr.common.1.2.0.nupkg.sha512"
},
"Microsoft.AspNetCore.SignalR.Core/1.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-eZTuMkSDw1uwjhLhJbMxgW2Cuyxfn0Kfqm8OBmqvuzE9Qc/VVzh8dGrAp2F9Pk7XKTDHmlhc5RTLcPPAZ5PSZw==",
"path": "microsoft.aspnetcore.signalr.core/1.2.0",
"hashPath": "microsoft.aspnetcore.signalr.core.1.2.0.nupkg.sha512"
},
"Microsoft.AspNetCore.SignalR.Protocols.Json/1.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-hNvZ7kQxp5Udqd/IFWViU35bUJvi4xnNzjkF28HRvrdrS7JNsIASTvMqArP6HLQUc3j6nlUOeShNhVmgI1wzHg==",
"path": "microsoft.aspnetcore.signalr.protocols.json/1.2.0",
"hashPath": "microsoft.aspnetcore.signalr.protocols.json.1.2.0.nupkg.sha512"
},
"Microsoft.AspNetCore.WebSockets/2.3.10": {
"type": "package",
"serviceable": true,
"sha512": "sha512-m0wkzmyKxi0J42ldZ6P+YCnEO3Djvoyw4vDoROwPM8J/1/H19/qoYNgYmQkrwOD5OAtc6GFcnifPUOE6XqeQZA==",
"path": "microsoft.aspnetcore.websockets/2.3.10",
"hashPath": "microsoft.aspnetcore.websockets.2.3.10.nupkg.sha512"
},
"Microsoft.AspNetCore.WebUtilities/2.3.9": {
"type": "package",
"serviceable": true,
@@ -2071,12 +2259,12 @@
"path": "system.identitymodel.tokens.jwt/7.1.2",
"hashPath": "system.identitymodel.tokens.jwt.7.1.2.nupkg.sha512"
},
"System.IO.Pipelines/6.0.3": {
"System.IO.Pipelines/8.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ryTgF+iFkpGZY1vRQhfCzX0xTdlV3pyaTTqRu2ETbEv+HlV7O6y7hyQURnghNIXvctl5DuZ//Dpks6HdL/Txgw==",
"path": "system.io.pipelines/6.0.3",
"hashPath": "system.io.pipelines.6.0.3.nupkg.sha512"
"sha512": "sha512-FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==",
"path": "system.io.pipelines/8.0.0",
"hashPath": "system.io.pipelines.8.0.0.nupkg.sha512"
},
"System.Memory/4.5.4": {
"type": "package",
@@ -2092,6 +2280,13 @@
"path": "system.memory.data/1.0.2",
"hashPath": "system.memory.data.1.0.2.nupkg.sha512"
},
"System.Net.WebSockets.WebSocketProtocol/5.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-cVTT/Zw4JuUeX8H0tdWii0OMHsA5MY2PaFYOq/Hstw0jk479jZ+f8baCicWFNzJlCPWAe0uoNCELoB5eNmaMqA==",
"path": "system.net.websockets.websocketprotocol/5.1.0",
"hashPath": "system.net.websockets.websocketprotocol.5.1.0.nupkg.sha512"
},
"System.Numerics.Vectors/4.5.0": {
"type": "package",
"serviceable": true,
@@ -2099,6 +2294,13 @@
"path": "system.numerics.vectors/4.5.0",
"hashPath": "system.numerics.vectors.4.5.0.nupkg.sha512"
},
"System.Reflection.Emit/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==",
"path": "system.reflection.emit/4.7.0",
"hashPath": "system.reflection.emit.4.7.0.nupkg.sha512"
},
"System.Reflection.Metadata/6.0.1": {
"type": "package",
"serviceable": true,
@@ -2190,12 +2392,12 @@
"path": "system.text.json/8.0.5",
"hashPath": "system.text.json.8.0.5.nupkg.sha512"
},
"System.Threading.Channels/6.0.0": {
"System.Threading.Channels/8.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-TY8/9+tI0mNaUMgntOxxaq2ndTkdXqLSxvPmas7XEqOlv9lQtB7wLjYGd756lOaO7Dvb5r/WXhluM+0Xe87v5Q==",
"path": "system.threading.channels/6.0.0",
"hashPath": "system.threading.channels.6.0.0.nupkg.sha512"
"sha512": "sha512-CMaFr7v+57RW7uZfZkPExsPB6ljwzhjACWW1gfU35Y56rk72B/Wu+sTqxVmGSk4SFUlPc3cjeKND0zktziyjBA==",
"path": "system.threading.channels/8.0.0",
"hashPath": "system.threading.channels.8.0.0.nupkg.sha512"
},
"System.Threading.Tasks.Extensions/4.5.4": {
"type": "package",
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Knots")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+af1b14b0d2a889e3bdfbe2f08dac0cf0ef4922f5")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+61f3d2889c45fcfb95557be37845198db85b3972")]
[assembly: System.Reflection.AssemblyProductAttribute("Knots")]
[assembly: System.Reflection.AssemblyTitleAttribute("Knots")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
@@ -1 +1 @@
70071d47fa6a38e032a5e27cb02ec3d498f03b9e5a579b09ce080cdcbf79c5ca
589797db71c3ee2db1d8c966ae2f187808629461cd5e264f494b12d939f74905
Binary file not shown.
@@ -1 +1 @@
053df2e2d5f4b0376cb8e5b4fed7175ebe09f3e8d3a4d8035c42b5a7de1f17a9
8c008e0540a310c319081e4a6b8a7ce2f5c9b271d5260b8b45b33f49b9ad5228
@@ -518,3 +518,5 @@ C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\refint\Knots.dll
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.pdb
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.genruntimeconfig.cache
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\ref\Knots.dll
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Net.WebSockets.WebSocketProtocol.dll
C:\Users\Carte\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Net.WebSockets.WebSocketProtocol.dll
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+4
View File
@@ -77,6 +77,10 @@
"target": "Package",
"version": "[8.0.25, )"
},
"Microsoft.AspNetCore.SignalR": {
"target": "Package",
"version": "[1.2.11, )"
},
"Microsoft.EntityFrameworkCore": {
"target": "Package",
"version": "[8.0.25, )"
+524 -26
View File
@@ -241,6 +241,57 @@
"Microsoft.AspNetCore.App"
]
},
"Microsoft.AspNetCore.Authorization/2.3.0": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.Options": "8.0.2"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.Authorization.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.Authorization.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Authorization.Policy/2.3.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Authentication.Abstractions": "2.3.0",
"Microsoft.AspNetCore.Authorization": "2.3.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.Authorization.Policy.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.Authorization.Policy.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Connections.Abstractions/2.3.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Http.Features": "2.3.0",
"System.IO.Pipelines": "8.0.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.Connections.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.Connections.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Cryptography.Internal/2.3.9": {
"type": "package",
"compile": {
@@ -363,6 +414,48 @@
}
}
},
"Microsoft.AspNetCore.Http.Connections/1.2.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Authorization.Policy": "2.3.0",
"Microsoft.AspNetCore.Hosting.Abstractions": "2.3.0",
"Microsoft.AspNetCore.Http": "2.3.0",
"Microsoft.AspNetCore.Http.Connections.Common": "1.2.0",
"Microsoft.AspNetCore.Routing": "2.3.0",
"Microsoft.AspNetCore.WebSockets": "2.3.0",
"Newtonsoft.Json": "11.0.2",
"System.Net.WebSockets.WebSocketProtocol": "5.1.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Connections.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Connections.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Http.Connections.Common/1.2.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Connections.Abstractions": "2.3.0",
"Newtonsoft.Json": "11.0.2",
"System.Buffers": "4.6.0",
"System.IO.Pipelines": "8.0.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Connections.Common.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Connections.Common.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Http.Extensions/2.3.10": {
"type": "package",
"dependencies": {
@@ -417,6 +510,139 @@
"Microsoft.AspNetCore.App"
]
},
"Microsoft.AspNetCore.Routing/2.3.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Http.Extensions": "2.3.0",
"Microsoft.AspNetCore.Routing.Abstractions": "2.3.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"Microsoft.Extensions.ObjectPool": "8.0.11",
"Microsoft.Extensions.Options": "8.0.2"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.Routing.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.Routing.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Routing.Abstractions/2.3.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Http.Abstractions": "2.3.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.Routing.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.Routing.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.SignalR/1.2.11": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Http.Connections": "1.2.0",
"Microsoft.AspNetCore.SignalR.Core": "1.2.0",
"Microsoft.AspNetCore.WebSockets": "2.3.10",
"System.IO.Pipelines": "8.0.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.SignalR.Common/1.2.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Connections.Abstractions": "2.3.0",
"Microsoft.Extensions.Options": "8.0.2",
"Newtonsoft.Json": "11.0.2",
"System.Buffers": "4.6.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Common.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Common.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.SignalR.Core/1.2.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Authorization": "2.3.0",
"Microsoft.AspNetCore.SignalR.Common": "1.2.0",
"Microsoft.AspNetCore.SignalR.Protocols.Json": "1.2.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"System.IO.Pipelines": "8.0.0",
"System.Reflection.Emit": "4.7.0",
"System.Threading.Channels": "8.0.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Core.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Core.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.SignalR.Protocols.Json/1.2.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.SignalR.Common": "1.2.0",
"Newtonsoft.Json": "11.0.2",
"System.IO.Pipelines": "8.0.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Protocols.Json.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Protocols.Json.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.WebSockets/2.3.10": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Http.Extensions": "2.3.9",
"Microsoft.Extensions.Options": "8.0.2",
"System.Net.WebSockets.WebSocketProtocol": "5.1.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.WebSockets.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.WebSockets.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.WebUtilities/2.3.9": {
"type": "package",
"dependencies": {
@@ -1918,20 +2144,20 @@
}
}
},
"System.IO.Pipelines/6.0.3": {
"System.IO.Pipelines/8.0.0": {
"type": "package",
"compile": {
"lib/net6.0/_._": {
"lib/net8.0/System.IO.Pipelines.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/System.IO.Pipelines.dll": {
"lib/net8.0/System.IO.Pipelines.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/netcoreapp3.1/_._": {}
"buildTransitive/net6.0/_._": {}
}
},
"System.Memory/4.5.4": {
@@ -1960,6 +2186,22 @@
}
}
},
"System.Net.WebSockets.WebSocketProtocol/5.1.0": {
"type": "package",
"compile": {
"lib/net6.0/System.Net.WebSockets.WebSocketProtocol.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/System.Net.WebSockets.WebSocketProtocol.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/net6.0/_._": {}
}
},
"System.Numerics.Vectors/4.5.0": {
"type": "package",
"compile": {
@@ -1969,6 +2211,15 @@
"lib/netcoreapp2.0/_._": {}
}
},
"System.Reflection.Emit/4.7.0": {
"type": "package",
"compile": {
"ref/netcoreapp2.0/_._": {}
},
"runtime": {
"lib/netcoreapp2.0/_._": {}
}
},
"System.Reflection.Metadata/6.0.1": {
"type": "package",
"dependencies": {
@@ -2242,20 +2493,20 @@
"buildTransitive/net6.0/System.Text.Json.targets": {}
}
},
"System.Threading.Channels/6.0.0": {
"System.Threading.Channels/8.0.0": {
"type": "package",
"compile": {
"lib/net6.0/_._": {
"lib/net8.0/System.Threading.Channels.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/System.Threading.Channels.dll": {
"lib/net8.0/System.Threading.Channels.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/netcoreapp3.1/_._": {}
"buildTransitive/net6.0/_._": {}
}
},
"System.Threading.Tasks.Extensions/4.5.4": {
@@ -2558,6 +2809,45 @@
"microsoft.aspnetcore.authentication.jwtbearer.nuspec"
]
},
"Microsoft.AspNetCore.Authorization/2.3.0": {
"sha512": "2/aBgLqBXva/+w8pzRNY8ET43Gi+dr1gv/7ySfbsh23lTK6IAgID5MGUEa1hreNIF+0XpW4tX7QwVe70+YvaPg==",
"type": "package",
"path": "microsoft.aspnetcore.authorization/2.3.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.Authorization.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.Authorization.xml",
"microsoft.aspnetcore.authorization.2.3.0.nupkg.sha512",
"microsoft.aspnetcore.authorization.nuspec"
]
},
"Microsoft.AspNetCore.Authorization.Policy/2.3.0": {
"sha512": "vn31uQ1dA1MIV2WNNDOOOm88V5KgR9esfi0LyQ6eVaGq2h0Yw+R29f5A6qUNJt+RccS3qkYayylAy9tP1wV+7Q==",
"type": "package",
"path": "microsoft.aspnetcore.authorization.policy/2.3.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.Authorization.Policy.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.Authorization.Policy.xml",
"microsoft.aspnetcore.authorization.policy.2.3.0.nupkg.sha512",
"microsoft.aspnetcore.authorization.policy.nuspec"
]
},
"Microsoft.AspNetCore.Connections.Abstractions/2.3.0": {
"sha512": "ULFSa+/L+WiAHVlIFHyg0OmHChU9Hx+K+xnt0hbIU5XmT1EGy0pNDx23QAzDtAy9jxQrTG6MX0MdvMeU4D4c7w==",
"type": "package",
"path": "microsoft.aspnetcore.connections.abstractions/2.3.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.Connections.Abstractions.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.Connections.Abstractions.xml",
"microsoft.aspnetcore.connections.abstractions.2.3.0.nupkg.sha512",
"microsoft.aspnetcore.connections.abstractions.nuspec"
]
},
"Microsoft.AspNetCore.Cryptography.Internal/2.3.9": {
"sha512": "sLHQ3ggo5kPTjR9xUXMeS4+F1uEgdC0ojyNs15RlVVoG3UysV/7n2PutH1r2MJl24QuxZeJqIZVeZB4cptijYw==",
"type": "package",
@@ -2649,6 +2939,32 @@
"microsoft.aspnetcore.http.abstractions.nuspec"
]
},
"Microsoft.AspNetCore.Http.Connections/1.2.0": {
"sha512": "VYMCOLvdT0y3O9lk4jUuIs8+re7u5+i+ka6ZZ6fIzSJ94c/JeMnAOOg39EB2i4crPXvLoiSdzKWlNPJgTbCZ2g==",
"type": "package",
"path": "microsoft.aspnetcore.http.connections/1.2.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Connections.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Connections.xml",
"microsoft.aspnetcore.http.connections.1.2.0.nupkg.sha512",
"microsoft.aspnetcore.http.connections.nuspec"
]
},
"Microsoft.AspNetCore.Http.Connections.Common/1.2.0": {
"sha512": "yUA7eg6kv7Wbz5TCW4PqS5/kYE5VxUIEDvoxjw4p1RwS2LGm84F9fBtM0mD6wrRfiv1NUyJ7WBjn3PWd/ccO+w==",
"type": "package",
"path": "microsoft.aspnetcore.http.connections.common/1.2.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Connections.Common.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Connections.Common.xml",
"microsoft.aspnetcore.http.connections.common.1.2.0.nupkg.sha512",
"microsoft.aspnetcore.http.connections.common.nuspec"
]
},
"Microsoft.AspNetCore.Http.Extensions/2.3.10": {
"sha512": "V0MKSF9zklY3GbWTyqMiTiu95uj5O1T9N8RaLNPAUREgd2GalnYFIRApSJZ+dhhZs/eSK1zsJu7iVXWUWMq67A==",
"type": "package",
@@ -2690,6 +3006,97 @@
"microsoft.aspnetcore.openapi.nuspec"
]
},
"Microsoft.AspNetCore.Routing/2.3.0": {
"sha512": "no5/VC0CAQuT4PK4rp2K5fqwuSfzr2mdB6m1XNfWVhHnwzpRQzKAu9flChiT/JTLKwVI0Vq2MSmSW2OFMDCNXg==",
"type": "package",
"path": "microsoft.aspnetcore.routing/2.3.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.Routing.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.Routing.xml",
"microsoft.aspnetcore.routing.2.3.0.nupkg.sha512",
"microsoft.aspnetcore.routing.nuspec"
]
},
"Microsoft.AspNetCore.Routing.Abstractions/2.3.0": {
"sha512": "ZkFpUrSmp6TocxZLBEX3IBv5dPMbQuMs6L/BPl0WRfn32UVOtNYJQ0bLdh3cL9LMV0rmTW/5R0w8CBYxr0AOUw==",
"type": "package",
"path": "microsoft.aspnetcore.routing.abstractions/2.3.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.Routing.Abstractions.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.Routing.Abstractions.xml",
"microsoft.aspnetcore.routing.abstractions.2.3.0.nupkg.sha512",
"microsoft.aspnetcore.routing.abstractions.nuspec"
]
},
"Microsoft.AspNetCore.SignalR/1.2.11": {
"sha512": "fq/EW3G4S+1Xo3aX042Geb/mm+cqStB7cw7FmXLhgpXbsO6dXbU/78URRqpiMozAHjpqSK9BVRkhYhnCg5fgew==",
"type": "package",
"path": "microsoft.aspnetcore.signalr/1.2.11",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.xml",
"microsoft.aspnetcore.signalr.1.2.11.nupkg.sha512",
"microsoft.aspnetcore.signalr.nuspec"
]
},
"Microsoft.AspNetCore.SignalR.Common/1.2.0": {
"sha512": "FZeXIaoWqe145ZPdfiptwkw/sP1BX1UD0706GNBwwoaFiKsNbLEl/Trhj2+idlp3qbX1BEwkQesKNxkopVY5Xg==",
"type": "package",
"path": "microsoft.aspnetcore.signalr.common/1.2.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Common.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Common.xml",
"microsoft.aspnetcore.signalr.common.1.2.0.nupkg.sha512",
"microsoft.aspnetcore.signalr.common.nuspec"
]
},
"Microsoft.AspNetCore.SignalR.Core/1.2.0": {
"sha512": "eZTuMkSDw1uwjhLhJbMxgW2Cuyxfn0Kfqm8OBmqvuzE9Qc/VVzh8dGrAp2F9Pk7XKTDHmlhc5RTLcPPAZ5PSZw==",
"type": "package",
"path": "microsoft.aspnetcore.signalr.core/1.2.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Core.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Core.xml",
"microsoft.aspnetcore.signalr.core.1.2.0.nupkg.sha512",
"microsoft.aspnetcore.signalr.core.nuspec"
]
},
"Microsoft.AspNetCore.SignalR.Protocols.Json/1.2.0": {
"sha512": "hNvZ7kQxp5Udqd/IFWViU35bUJvi4xnNzjkF28HRvrdrS7JNsIASTvMqArP6HLQUc3j6nlUOeShNhVmgI1wzHg==",
"type": "package",
"path": "microsoft.aspnetcore.signalr.protocols.json/1.2.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Protocols.Json.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.SignalR.Protocols.Json.xml",
"microsoft.aspnetcore.signalr.protocols.json.1.2.0.nupkg.sha512",
"microsoft.aspnetcore.signalr.protocols.json.nuspec"
]
},
"Microsoft.AspNetCore.WebSockets/2.3.10": {
"sha512": "m0wkzmyKxi0J42ldZ6P+YCnEO3Djvoyw4vDoROwPM8J/1/H19/qoYNgYmQkrwOD5OAtc6GFcnifPUOE6XqeQZA==",
"type": "package",
"path": "microsoft.aspnetcore.websockets/2.3.10",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.AspNetCore.WebSockets.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.WebSockets.xml",
"microsoft.aspnetcore.websockets.2.3.10.nupkg.sha512",
"microsoft.aspnetcore.websockets.nuspec"
]
},
"Microsoft.AspNetCore.WebUtilities/2.3.9": {
"sha512": "UKPvdhi+SOMdcw0Wr90Ft62yc1+heR/B70Vs8K0VcO8v6yz53YR7/ytSsNXd4IRmRWEc4ImCBomPbBCngtScTg==",
"type": "package",
@@ -4859,27 +5266,31 @@
"system.identitymodel.tokens.jwt.nuspec"
]
},
"System.IO.Pipelines/6.0.3": {
"sha512": "ryTgF+iFkpGZY1vRQhfCzX0xTdlV3pyaTTqRu2ETbEv+HlV7O6y7hyQURnghNIXvctl5DuZ//Dpks6HdL/Txgw==",
"System.IO.Pipelines/8.0.0": {
"sha512": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==",
"type": "package",
"path": "system.io.pipelines/6.0.3",
"path": "system.io.pipelines/8.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/System.IO.Pipelines.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/System.IO.Pipelines.targets",
"buildTransitive/netcoreapp3.1/_._",
"lib/net461/System.IO.Pipelines.dll",
"lib/net461/System.IO.Pipelines.xml",
"lib/net462/System.IO.Pipelines.dll",
"lib/net462/System.IO.Pipelines.xml",
"lib/net6.0/System.IO.Pipelines.dll",
"lib/net6.0/System.IO.Pipelines.xml",
"lib/netcoreapp3.1/System.IO.Pipelines.dll",
"lib/netcoreapp3.1/System.IO.Pipelines.xml",
"lib/net7.0/System.IO.Pipelines.dll",
"lib/net7.0/System.IO.Pipelines.xml",
"lib/net8.0/System.IO.Pipelines.dll",
"lib/net8.0/System.IO.Pipelines.xml",
"lib/netstandard2.0/System.IO.Pipelines.dll",
"lib/netstandard2.0/System.IO.Pipelines.xml",
"system.io.pipelines.6.0.3.nupkg.sha512",
"system.io.pipelines.8.0.0.nupkg.sha512",
"system.io.pipelines.nuspec",
"useSharedDesignerContext.txt"
]
@@ -4925,6 +5336,29 @@
"system.memory.data.nuspec"
]
},
"System.Net.WebSockets.WebSocketProtocol/5.1.0": {
"sha512": "cVTT/Zw4JuUeX8H0tdWii0OMHsA5MY2PaFYOq/Hstw0jk479jZ+f8baCicWFNzJlCPWAe0uoNCELoB5eNmaMqA==",
"type": "package",
"path": "system.net.websockets.websocketprotocol/5.1.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"PACKAGE.md",
"buildTransitive/net461/System.Net.WebSockets.WebSocketProtocol.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/System.Net.WebSockets.WebSocketProtocol.targets",
"lib/net462/System.Net.WebSockets.WebSocketProtocol.dll",
"lib/net462/System.Net.WebSockets.WebSocketProtocol.xml",
"lib/net6.0/System.Net.WebSockets.WebSocketProtocol.dll",
"lib/net6.0/System.Net.WebSockets.WebSocketProtocol.xml",
"lib/netstandard2.0/System.Net.WebSockets.WebSocketProtocol.dll",
"lib/netstandard2.0/System.Net.WebSockets.WebSocketProtocol.xml",
"system.net.websockets.websocketprotocol.5.1.0.nupkg.sha512",
"system.net.websockets.websocketprotocol.nuspec"
]
},
"System.Numerics.Vectors/4.5.0": {
"sha512": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==",
"type": "package",
@@ -4972,6 +5406,60 @@
"version.txt"
]
},
"System.Reflection.Emit/4.7.0": {
"sha512": "VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==",
"type": "package",
"path": "system.reflection.emit/4.7.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/MonoAndroid10/_._",
"lib/MonoTouch10/_._",
"lib/net45/_._",
"lib/netcore50/System.Reflection.Emit.dll",
"lib/netcoreapp2.0/_._",
"lib/netstandard1.1/System.Reflection.Emit.dll",
"lib/netstandard1.1/System.Reflection.Emit.xml",
"lib/netstandard1.3/System.Reflection.Emit.dll",
"lib/netstandard2.0/System.Reflection.Emit.dll",
"lib/netstandard2.0/System.Reflection.Emit.xml",
"lib/netstandard2.1/_._",
"lib/xamarinios10/_._",
"lib/xamarinmac20/_._",
"lib/xamarintvos10/_._",
"lib/xamarinwatchos10/_._",
"ref/MonoAndroid10/_._",
"ref/MonoTouch10/_._",
"ref/net45/_._",
"ref/netcoreapp2.0/_._",
"ref/netstandard1.1/System.Reflection.Emit.dll",
"ref/netstandard1.1/System.Reflection.Emit.xml",
"ref/netstandard1.1/de/System.Reflection.Emit.xml",
"ref/netstandard1.1/es/System.Reflection.Emit.xml",
"ref/netstandard1.1/fr/System.Reflection.Emit.xml",
"ref/netstandard1.1/it/System.Reflection.Emit.xml",
"ref/netstandard1.1/ja/System.Reflection.Emit.xml",
"ref/netstandard1.1/ko/System.Reflection.Emit.xml",
"ref/netstandard1.1/ru/System.Reflection.Emit.xml",
"ref/netstandard1.1/zh-hans/System.Reflection.Emit.xml",
"ref/netstandard1.1/zh-hant/System.Reflection.Emit.xml",
"ref/netstandard2.0/System.Reflection.Emit.dll",
"ref/netstandard2.0/System.Reflection.Emit.xml",
"ref/netstandard2.1/_._",
"ref/xamarinios10/_._",
"ref/xamarinmac20/_._",
"ref/xamarintvos10/_._",
"ref/xamarinwatchos10/_._",
"runtimes/aot/lib/netcore50/System.Reflection.Emit.dll",
"runtimes/aot/lib/netcore50/System.Reflection.Emit.xml",
"system.reflection.emit.4.7.0.nupkg.sha512",
"system.reflection.emit.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"System.Reflection.Metadata/6.0.1": {
"sha512": "III/lNMSn0ZRBuM9m5Cgbiho5j81u0FAEagFX5ta2DKbljZ3T0IpD8j+BIiHQPeKqJppWS9bGEp6JnKnWKze0g==",
"type": "package",
@@ -5499,29 +5987,34 @@
"useSharedDesignerContext.txt"
]
},
"System.Threading.Channels/6.0.0": {
"sha512": "TY8/9+tI0mNaUMgntOxxaq2ndTkdXqLSxvPmas7XEqOlv9lQtB7wLjYGd756lOaO7Dvb5r/WXhluM+0Xe87v5Q==",
"System.Threading.Channels/8.0.0": {
"sha512": "CMaFr7v+57RW7uZfZkPExsPB6ljwzhjACWW1gfU35Y56rk72B/Wu+sTqxVmGSk4SFUlPc3cjeKND0zktziyjBA==",
"type": "package",
"path": "system.threading.channels/6.0.0",
"path": "system.threading.channels/8.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"PACKAGE.md",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/System.Threading.Channels.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/System.Threading.Channels.targets",
"buildTransitive/netcoreapp3.1/_._",
"lib/net461/System.Threading.Channels.dll",
"lib/net461/System.Threading.Channels.xml",
"lib/net462/System.Threading.Channels.dll",
"lib/net462/System.Threading.Channels.xml",
"lib/net6.0/System.Threading.Channels.dll",
"lib/net6.0/System.Threading.Channels.xml",
"lib/netcoreapp3.1/System.Threading.Channels.dll",
"lib/netcoreapp3.1/System.Threading.Channels.xml",
"lib/net7.0/System.Threading.Channels.dll",
"lib/net7.0/System.Threading.Channels.xml",
"lib/net8.0/System.Threading.Channels.dll",
"lib/net8.0/System.Threading.Channels.xml",
"lib/netstandard2.0/System.Threading.Channels.dll",
"lib/netstandard2.0/System.Threading.Channels.xml",
"lib/netstandard2.1/System.Threading.Channels.dll",
"lib/netstandard2.1/System.Threading.Channels.xml",
"system.threading.channels.6.0.0.nupkg.sha512",
"system.threading.channels.8.0.0.nupkg.sha512",
"system.threading.channels.nuspec",
"useSharedDesignerContext.txt"
]
@@ -5619,6 +6112,7 @@
"Microsoft.AspNetCore.Authentication >= 2.3.11",
"Microsoft.AspNetCore.Authentication.JwtBearer >= 8.0.28",
"Microsoft.AspNetCore.OpenApi >= 8.0.25",
"Microsoft.AspNetCore.SignalR >= 1.2.11",
"Microsoft.EntityFrameworkCore >= 8.0.25",
"Microsoft.EntityFrameworkCore.Design >= 8.0.25",
"Microsoft.EntityFrameworkCore.SqlServer >= 8.0.25",
@@ -5702,6 +6196,10 @@
"target": "Package",
"version": "[8.0.25, )"
},
"Microsoft.AspNetCore.SignalR": {
"target": "Package",
"version": "[1.2.11, )"
},
"Microsoft.EntityFrameworkCore": {
"target": "Package",
"version": "[8.0.25, )"
+17 -3
View File
@@ -1,6 +1,6 @@
{
"version": 2,
"dgSpecHash": "+q/KRRoXVoc=",
"dgSpecHash": "FiT+hK5G+gA=",
"success": true,
"projectFilePath": "C:\\Users\\Carte\\RiderProjects\\Knots\\Knots\\Knots.csproj",
"expectedPackageFiles": [
@@ -18,6 +18,9 @@
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.authentication.abstractions\\2.3.9\\microsoft.aspnetcore.authentication.abstractions.2.3.9.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.authentication.core\\2.3.10\\microsoft.aspnetcore.authentication.core.2.3.10.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.authentication.jwtbearer\\8.0.28\\microsoft.aspnetcore.authentication.jwtbearer.8.0.28.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.authorization\\2.3.0\\microsoft.aspnetcore.authorization.2.3.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.authorization.policy\\2.3.0\\microsoft.aspnetcore.authorization.policy.2.3.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.connections.abstractions\\2.3.0\\microsoft.aspnetcore.connections.abstractions.2.3.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.cryptography.internal\\2.3.9\\microsoft.aspnetcore.cryptography.internal.2.3.9.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.dataprotection\\2.3.10\\microsoft.aspnetcore.dataprotection.2.3.10.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.dataprotection.abstractions\\2.3.9\\microsoft.aspnetcore.dataprotection.abstractions.2.3.9.nupkg.sha512",
@@ -25,9 +28,18 @@
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.hosting.server.abstractions\\2.3.0\\microsoft.aspnetcore.hosting.server.abstractions.2.3.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.http\\2.3.10\\microsoft.aspnetcore.http.2.3.10.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.http.abstractions\\2.3.9\\microsoft.aspnetcore.http.abstractions.2.3.9.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.http.connections\\1.2.0\\microsoft.aspnetcore.http.connections.1.2.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.http.connections.common\\1.2.0\\microsoft.aspnetcore.http.connections.common.1.2.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.http.extensions\\2.3.10\\microsoft.aspnetcore.http.extensions.2.3.10.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.http.features\\2.3.0\\microsoft.aspnetcore.http.features.2.3.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.openapi\\8.0.25\\microsoft.aspnetcore.openapi.8.0.25.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.routing\\2.3.0\\microsoft.aspnetcore.routing.2.3.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.routing.abstractions\\2.3.0\\microsoft.aspnetcore.routing.abstractions.2.3.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.signalr\\1.2.11\\microsoft.aspnetcore.signalr.1.2.11.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.signalr.common\\1.2.0\\microsoft.aspnetcore.signalr.common.1.2.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.signalr.core\\1.2.0\\microsoft.aspnetcore.signalr.core.1.2.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.signalr.protocols.json\\1.2.0\\microsoft.aspnetcore.signalr.protocols.json.1.2.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.websockets\\2.3.10\\microsoft.aspnetcore.websockets.2.3.10.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.aspnetcore.webutilities\\2.3.9\\microsoft.aspnetcore.webutilities.2.3.9.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.bcl.asyncinterfaces\\6.0.0\\microsoft.bcl.asyncinterfaces.6.0.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\microsoft.codeanalysis.analyzers\\3.3.3\\microsoft.codeanalysis.analyzers.3.3.3.nupkg.sha512",
@@ -105,10 +117,12 @@
"C:\\Users\\Carte\\.nuget\\packages\\system.drawing.common\\6.0.0\\system.drawing.common.6.0.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.formats.asn1\\8.0.2\\system.formats.asn1.8.0.2.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.identitymodel.tokens.jwt\\7.1.2\\system.identitymodel.tokens.jwt.7.1.2.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.io.pipelines\\6.0.3\\system.io.pipelines.6.0.3.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.io.pipelines\\8.0.0\\system.io.pipelines.8.0.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.memory\\4.5.4\\system.memory.4.5.4.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.memory.data\\1.0.2\\system.memory.data.1.0.2.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.net.websockets.websocketprotocol\\5.1.0\\system.net.websockets.websocketprotocol.5.1.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.numerics.vectors\\4.5.0\\system.numerics.vectors.4.5.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.reflection.emit\\4.7.0\\system.reflection.emit.4.7.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.reflection.metadata\\6.0.1\\system.reflection.metadata.6.0.1.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.runtime.caching\\6.0.0\\system.runtime.caching.6.0.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512",
@@ -122,7 +136,7 @@
"C:\\Users\\Carte\\.nuget\\packages\\system.text.encoding.codepages\\6.0.0\\system.text.encoding.codepages.6.0.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.text.encodings.web\\8.0.0\\system.text.encodings.web.8.0.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.text.json\\8.0.5\\system.text.json.8.0.5.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.threading.channels\\6.0.0\\system.threading.channels.6.0.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.threading.channels\\8.0.0\\system.threading.channels.8.0.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.threading.tasks.extensions\\4.5.4\\system.threading.tasks.extensions.4.5.4.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\system.windows.extensions\\6.0.0\\system.windows.extensions.6.0.0.nupkg.sha512",
"C:\\Users\\Carte\\.nuget\\packages\\yamldotnet\\16.2.0\\yamldotnet.16.2.0.nupkg.sha512"
+1 -1
View File
@@ -1 +1 @@
"restore":{"projectUniqueName":"C:\\Users\\Carte\\RiderProjects\\Knots\\Knots\\Knots.csproj","projectName":"Knots","projectPath":"C:\\Users\\Carte\\RiderProjects\\Knots\\Knots\\Knots.csproj","packagesPath":"","outputPath":"C:\\Users\\Carte\\RiderProjects\\Knots\\Knots\\obj\\","projectStyle":"PackageReference","fallbackFolders":["C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"],"originalTargetFrameworks":["net8.0"],"sources":{"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"}}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"AutoMapper":{"target":"Package","version":"[16.1.1, )"},"BCrypt.Net-Next":{"target":"Package","version":"[4.2.0, )"},"FastEndpoints":{"target":"Package","version":"[5.33.0, )"},"FastEndpoints.Swagger":{"target":"Package","version":"[5.33.0, )"},"Microsoft.AspNetCore.Authentication":{"target":"Package","version":"[2.3.11, )"},"Microsoft.AspNetCore.Authentication.JwtBearer":{"target":"Package","version":"[8.0.28, )"},"Microsoft.AspNetCore.OpenApi":{"target":"Package","version":"[8.0.25, )"},"Microsoft.EntityFrameworkCore":{"target":"Package","version":"[8.0.25, )"},"Microsoft.EntityFrameworkCore.Design":{"include":"Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive","suppressParent":"All","target":"Package","version":"[8.0.25, )"},"Microsoft.EntityFrameworkCore.SqlServer":{"target":"Package","version":"[8.0.25, )"},"Swashbuckle.AspNetCore":{"target":"Package","version":"[10.1.7, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.AspNetCore.App":{"privateAssets":"none"},"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"C:\\Users\\Carte\\.dotnet\\sdk\\8.0.421/PortableRuntimeIdentifierGraph.json"}}
"restore":{"projectUniqueName":"C:\\Users\\Carte\\RiderProjects\\Knots\\Knots\\Knots.csproj","projectName":"Knots","projectPath":"C:\\Users\\Carte\\RiderProjects\\Knots\\Knots\\Knots.csproj","packagesPath":"","outputPath":"C:\\Users\\Carte\\RiderProjects\\Knots\\Knots\\obj\\","projectStyle":"PackageReference","fallbackFolders":["C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"],"originalTargetFrameworks":["net8.0"],"sources":{"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"}}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"AutoMapper":{"target":"Package","version":"[16.1.1, )"},"BCrypt.Net-Next":{"target":"Package","version":"[4.2.0, )"},"FastEndpoints":{"target":"Package","version":"[5.33.0, )"},"FastEndpoints.Swagger":{"target":"Package","version":"[5.33.0, )"},"Microsoft.AspNetCore.Authentication":{"target":"Package","version":"[2.3.11, )"},"Microsoft.AspNetCore.Authentication.JwtBearer":{"target":"Package","version":"[8.0.28, )"},"Microsoft.AspNetCore.OpenApi":{"target":"Package","version":"[8.0.25, )"},"Microsoft.AspNetCore.SignalR":{"target":"Package","version":"[1.2.11, )"},"Microsoft.EntityFrameworkCore":{"target":"Package","version":"[8.0.25, )"},"Microsoft.EntityFrameworkCore.Design":{"include":"Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive","suppressParent":"All","target":"Package","version":"[8.0.25, )"},"Microsoft.EntityFrameworkCore.SqlServer":{"target":"Package","version":"[8.0.25, )"},"Swashbuckle.AspNetCore":{"target":"Package","version":"[10.1.7, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.AspNetCore.App":{"privateAssets":"none"},"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"C:\\Users\\Carte\\.dotnet\\sdk\\8.0.421/PortableRuntimeIdentifierGraph.json"}}
+1 -1
View File
@@ -1 +1 @@
17811216392449905
17811676816949331
+1 -1
View File
@@ -1 +1 @@
17811216425865089
17811669515789890