Compare commits
27 Commits
33987f080e
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
| e1e8a834b2 | |||
| 61f3d2889c | |||
| 66a7e633a9 | |||
| fff484d4ba | |||
| e69550048b | |||
| a29fb27b0d | |||
| c23cc4a03a | |||
| 1d2f96b2f4 | |||
| f1cdc5de19 | |||
| 4e06dc5f23 | |||
| 779acbe531 | |||
| e6021dcc61 | |||
| 4f994ba183 | |||
| 2bb1f730c9 | |||
| c92e134698 | |||
| 0b9e01c925 | |||
| c1bd8a12a9 | |||
| c120d34e62 | |||
| b7dad57cee | |||
| af1b14b0d2 | |||
| 7cfb3909b6 | |||
| ff317cc944 | |||
| 79a926bc2d | |||
| 431e96d9e4 | |||
| eb70f4b3de | |||
| 690d85009e | |||
| cec4437f2f |
@@ -5,5 +5,7 @@ public class GetDiscussionDto
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public bool IsGroup { get; set; }
|
||||
public int MembersCount { get; set; }
|
||||
public int? MembersCount { get; set; }
|
||||
|
||||
public int? GroupId { get; set; }
|
||||
}
|
||||
@@ -6,4 +6,7 @@ public class GetMessageDetailsDto
|
||||
public string? Contenu { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public Boolean Type { get; set; }
|
||||
|
||||
public int UserId { get; set; }
|
||||
public string AuthorName { get; set; } = "";
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
using FastEndpoints;
|
||||
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, EncryptionService encryption) : Endpoint<CreateGroupDiscussionRequest, GetDiscussionDto>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Post("/discussions/group");
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(CreateGroupDiscussionRequest req, CancellationToken ct)
|
||||
{
|
||||
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);
|
||||
return;
|
||||
}
|
||||
|
||||
if (targets.Any(t => t.Id == currentUserId))
|
||||
{
|
||||
await SendErrorsAsync(400, ct);
|
||||
return;
|
||||
}
|
||||
|
||||
int totalMembers = targets.Count + 1;
|
||||
|
||||
Models.Discussion discussion = new()
|
||||
{
|
||||
IsGroup = true,
|
||||
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 = group.Name,
|
||||
MembersCount = totalMembers
|
||||
}, ct);
|
||||
}
|
||||
}
|
||||
|
||||
public class CreateGroupDiscussionRequest
|
||||
{
|
||||
public string GroupName { get; set; } = "";
|
||||
public List<string> Usernames { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
using FastEndpoints;
|
||||
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, EncryptionService encryption)
|
||||
: Endpoint<CreatePrivateDiscussionRequest, GetDiscussionDto>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Post("/discussions/private");
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(CreatePrivateDiscussionRequest req, CancellationToken ct)
|
||||
{
|
||||
int currentUserId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
|
||||
|
||||
// 1. retrouver l'utilisateur cible par son nom
|
||||
Models.User? target = await db.Users
|
||||
.SingleOrDefaultAsync(u => u.Username == req.Username, ct);
|
||||
|
||||
if (target is null)
|
||||
{
|
||||
await SendNotFoundAsync(ct); // utilisateur introuvable
|
||||
return;
|
||||
}
|
||||
|
||||
if (target.Id == currentUserId)
|
||||
{
|
||||
await SendErrorsAsync(400, ct); // pas de discussion avec soi-même
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. vérifier qu'une discussion privée entre les deux n'existe pas déjà
|
||||
Models.Discussion? existing = await db.Discussions
|
||||
.Where(d => d.GroupId == null
|
||||
&& d.UserDiscussions.Any(ud => ud.UserId == currentUserId)
|
||||
&& d.UserDiscussions.Any(ud => ud.UserId == target.Id))
|
||||
.FirstOrDefaultAsync(ct);
|
||||
|
||||
if (existing is not null)
|
||||
{
|
||||
await SendOkAsync(new GetDiscussionDto
|
||||
{
|
||||
Id = existing.Id,
|
||||
IsGroup = false,
|
||||
Name = target.Username!,
|
||||
MembersCount = null
|
||||
}, ct);
|
||||
return;
|
||||
}
|
||||
|
||||
// 3. créer la discussion + les deux participants
|
||||
Models.Discussion discussion = new()
|
||||
{
|
||||
IsGroup = false,
|
||||
Key = new Models.Key { EnKey = encryption.GenerateKey() },
|
||||
UserDiscussions =
|
||||
[
|
||||
new UserDiscussion { UserId = currentUserId },
|
||||
new UserDiscussion { UserId = target.Id }
|
||||
]
|
||||
};
|
||||
|
||||
db.Discussions.Add(discussion);
|
||||
await db.SaveChangesAsync(ct);
|
||||
|
||||
await SendOkAsync(new GetDiscussionDto
|
||||
{
|
||||
Id = discussion.Id,
|
||||
IsGroup = false,
|
||||
Name = target.Username!,
|
||||
MembersCount = null
|
||||
}, ct);
|
||||
}
|
||||
}
|
||||
|
||||
public class CreatePrivateDiscussionRequest
|
||||
{
|
||||
public string Username { get; set; } = "";
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
using System.Security.Claims;
|
||||
using FastEndpoints;
|
||||
using Knots.DTO.Discussion;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Knots.Endpoints.Discussion;
|
||||
|
||||
public class GetMyDiscussionEndpoint(KnotsDbContext db) : EndpointWithoutRequest<List<GetDiscussionDto>>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/discussions/my");
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(CancellationToken ct)
|
||||
{
|
||||
int userId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
|
||||
|
||||
// Discussions privées : l'utilisateur est l'un des participants
|
||||
IQueryable<GetDiscussionDto> privees = db.Discussions
|
||||
.Where(d => d.GroupId == null && d.UserDiscussions.Any(ud => ud.UserId == userId))
|
||||
.Select(d => new GetDiscussionDto
|
||||
{
|
||||
Id = d.Id,
|
||||
IsGroup = false,
|
||||
Name = d.UserDiscussions
|
||||
.Where(ud => ud.UserId != userId)
|
||||
.Select(ud => ud.User.Username)
|
||||
.FirstOrDefault() ?? "",
|
||||
MembersCount = null,
|
||||
GroupId = null
|
||||
});
|
||||
|
||||
// Discussions de groupe : l'utilisateur est membre du groupe
|
||||
IQueryable<GetDiscussionDto> groupes = db.Discussions
|
||||
.Where(d => d.Group != null && d.Group.GroupUsers.Any(gu => gu.UserId == userId))
|
||||
.Select(d => new GetDiscussionDto
|
||||
{
|
||||
Id = d.Id,
|
||||
IsGroup = true,
|
||||
Name = d.Group!.Name!,
|
||||
MembersCount = d.Group.MembersAmount,
|
||||
GroupId = d.Group.Id
|
||||
});
|
||||
|
||||
List<GetDiscussionDto> discussions = await privees.Concat(groupes).ToListAsync(ct);
|
||||
|
||||
await SendOkAsync(discussions, ct);
|
||||
}
|
||||
}
|
||||
@@ -1,29 +1,62 @@
|
||||
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 <GetMessageDetailsDto>
|
||||
public class GetMessageEndpoint(KnotsDbContext db, AutoMapper.IMapper mapper, EncryptionService encryption) : Endpoint<GetDiscussionMessagesRequest, List<GetMessageDetailsDto>>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/messages/{@Id}");
|
||||
Get("/discussions/{DiscussionId}/messages");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(GetMessageDetailsDto req, CancellationToken ct)
|
||||
public override async Task HandleAsync(GetDiscussionMessagesRequest req, CancellationToken ct)
|
||||
{
|
||||
Models.Message? databaseMessage = await db.Messages.SingleOrDefaultAsync(x => x.Id == req.Id, cancellationToken: ct);
|
||||
|
||||
if (databaseMessage == null)
|
||||
int userId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
|
||||
|
||||
// l'utilisateur participe-t-il à cette discussion (privée ou via le groupe) ?
|
||||
bool autorise = await db.Discussions
|
||||
.Where(d => d.Id == req.DiscussionId)
|
||||
.AnyAsync(d =>
|
||||
d.UserDiscussions.Any(ud => ud.UserId == userId) ||
|
||||
(d.Group != null && d.Group.GroupUsers.Any(gu => gu.UserId == userId)), ct);
|
||||
|
||||
if (!autorise)
|
||||
{
|
||||
await SendNotFoundAsync(ct);
|
||||
await SendForbiddenAsync(ct);
|
||||
return;
|
||||
}
|
||||
|
||||
var messageDto = mapper.Map<GetMessageDetailsDto>(databaseMessage);
|
||||
await SendOkAsync(messageDto, ct);
|
||||
|
||||
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 { 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);
|
||||
}
|
||||
}
|
||||
|
||||
public class GetDiscussionMessagesRequest
|
||||
{
|
||||
public int DiscussionId { get; set; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; } = "";
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
+48
-28
@@ -5,13 +5,14 @@ namespace Knots;
|
||||
|
||||
public class KnotsDbContext : DbContext
|
||||
{
|
||||
public DbSet<Discussion> Discussions { get; set; }
|
||||
public DbSet<UserDiscussion> UserDiscussions { get; set; }
|
||||
public DbSet<Group> Groups { get; set; }
|
||||
public DbSet<Key> Keys { get; set; }
|
||||
public DbSet<Message> Messages { get; set; }
|
||||
public DbSet<Role> Roles { get; set; }
|
||||
public DbSet<User> Users { get; set; }
|
||||
public DbSet<User> Users => Set<User>();
|
||||
public DbSet<Discussion> Discussions => Set<Discussion>();
|
||||
public DbSet<Group> Groups => Set<Group>();
|
||||
public DbSet<Message> Messages => Set<Message>();
|
||||
public DbSet<Role> Roles => Set<Role>();
|
||||
public DbSet<Key> Keys => Set<Key>();
|
||||
public DbSet<UserDiscussion> UserDiscussions => Set<UserDiscussion>();
|
||||
public DbSet<GroupUser> GroupUsers => Set<GroupUser>();
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
@@ -26,34 +27,53 @@ public class KnotsDbContext : DbContext
|
||||
optionsBuilder.UseSqlServer(connectionString);
|
||||
}
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<GroupUser>()
|
||||
.HasKey(gu => new { gu.GroupId, gu.UserId });
|
||||
|
||||
modelBuilder.Entity<GroupUser>()
|
||||
.HasOne(gu => gu.Group)
|
||||
.WithMany(g => g.GroupUsers)
|
||||
.HasForeignKey(gu => gu.GroupId)
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
modelBuilder.Entity<GroupUser>()
|
||||
.HasOne(gu => gu.User)
|
||||
.WithMany()
|
||||
.HasForeignKey(gu => gu.UserId)
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
modelBuilder.Entity<GroupUser>()
|
||||
.HasOne(gu => gu.Role)
|
||||
.WithMany(r => r.GroupUsers)
|
||||
.HasForeignKey(gu => gu.RoleId);
|
||||
|
||||
modelBuilder.Entity<Discussion>()
|
||||
.HasOne(d => d.Group)
|
||||
.WithMany()
|
||||
.HasForeignKey(d => d.GroupId)
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
modelBuilder.Entity<Group>()
|
||||
.HasOne(g => g.Discussion)
|
||||
.WithMany()
|
||||
.HasForeignKey(g => g.DiscussionId)
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
modelBuilder.Entity<UserDiscussion>()
|
||||
.HasKey(ud => new { ud.UserId, ud.DiscussionId });
|
||||
|
||||
modelBuilder.Entity<UserDiscussion>()
|
||||
.HasOne(ud => ud.User)
|
||||
.WithMany(u => u.UserDiscussions)
|
||||
.HasForeignKey(ud => ud.UserId);
|
||||
|
||||
modelBuilder.Entity<UserDiscussion>()
|
||||
.HasOne(ud => ud.Discussion)
|
||||
.WithMany(d => d.UserDiscussions)
|
||||
.HasForeignKey(ud => ud.DiscussionId);
|
||||
|
||||
modelBuilder.Entity<Message>()
|
||||
.HasOne(m => m.Discussion)
|
||||
.WithMany(d => d.Messages)
|
||||
.HasForeignKey(m => m.DiscussionId);
|
||||
.HasForeignKey(ud => ud.DiscussionId)
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
modelBuilder.Entity<Message>()
|
||||
.HasOne(m => m.User)
|
||||
.WithMany(u => u.Messages)
|
||||
.HasForeignKey(m => m.UserId);
|
||||
|
||||
modelBuilder.Entity<Group>()
|
||||
.HasOne(g => g.Discussion)
|
||||
.WithOne(d => d.Group)
|
||||
.HasForeignKey<Group>(g => g.DiscussionId);
|
||||
modelBuilder.Entity<UserDiscussion>()
|
||||
.HasOne(ud => ud.User)
|
||||
.WithMany(u => u.UserDiscussions)
|
||||
.HasForeignKey(ud => ud.UserId)
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,380 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Knots;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Knots.Migrations
|
||||
{
|
||||
[DbContext(typeof(KnotsDbContext))]
|
||||
[Migration("20260610224937_FixGroupDiscussion")]
|
||||
partial class FixGroupDiscussion
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.25")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Discussion", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<DateTime>("CreatedAt")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<int?>("GroupId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<bool>("IsGroup")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("GroupId");
|
||||
|
||||
b.ToTable("Discussions");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Group", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<int>("DiscussionId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("MembersAmount")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(50)
|
||||
.HasColumnType("nvarchar(50)");
|
||||
|
||||
b.Property<string>("ProfilePicture")
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("DiscussionId");
|
||||
|
||||
b.ToTable("Groups");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.GroupUser", b =>
|
||||
{
|
||||
b.Property<int>("GroupId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("UserId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int?>("RoleId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("GroupId", "UserId");
|
||||
|
||||
b.HasIndex("RoleId");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
|
||||
b.ToTable("GroupUsers");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Key", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("EnKey")
|
||||
.IsRequired()
|
||||
.HasMaxLength(50)
|
||||
.HasColumnType("nvarchar(50)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Keys");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Message", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<int>("AuthorId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<string>("Contenu")
|
||||
.IsRequired()
|
||||
.HasMaxLength(1000)
|
||||
.HasColumnType("nvarchar(1000)");
|
||||
|
||||
b.Property<DateTime>("Date")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<int>("DiscussionId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int?>("GroupId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int?>("KeyId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<bool>("Type")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<int>("UserId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("DiscussionId");
|
||||
|
||||
b.HasIndex("GroupId");
|
||||
|
||||
b.HasIndex("KeyId");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
|
||||
b.ToTable("Messages");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Role", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Libelle")
|
||||
.IsRequired()
|
||||
.HasMaxLength(50)
|
||||
.HasColumnType("nvarchar(50)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Roles");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.User", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Description")
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("nvarchar(200)");
|
||||
|
||||
b.Property<string>("Email")
|
||||
.IsRequired()
|
||||
.HasMaxLength(70)
|
||||
.HasColumnType("nvarchar(70)");
|
||||
|
||||
b.Property<string>("Password")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("ProfilePicture")
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<int?>("RoleId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<string>("Tel")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Username")
|
||||
.IsRequired()
|
||||
.HasMaxLength(50)
|
||||
.HasColumnType("nvarchar(50)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("RoleId");
|
||||
|
||||
b.ToTable("Users");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.UserDiscussion", b =>
|
||||
{
|
||||
b.Property<int>("UserId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("DiscussionId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("UserId", "DiscussionId");
|
||||
|
||||
b.HasIndex("DiscussionId");
|
||||
|
||||
b.ToTable("UserDiscussions");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Discussion", b =>
|
||||
{
|
||||
b.HasOne("Knots.Models.Group", "Group")
|
||||
.WithMany()
|
||||
.HasForeignKey("GroupId")
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
b.Navigation("Group");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Group", b =>
|
||||
{
|
||||
b.HasOne("Knots.Models.Discussion", "Discussion")
|
||||
.WithMany()
|
||||
.HasForeignKey("DiscussionId")
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Discussion");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.GroupUser", b =>
|
||||
{
|
||||
b.HasOne("Knots.Models.Group", "Group")
|
||||
.WithMany("GroupUsers")
|
||||
.HasForeignKey("GroupId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("Knots.Models.Role", "Role")
|
||||
.WithMany("GroupUsers")
|
||||
.HasForeignKey("RoleId");
|
||||
|
||||
b.HasOne("Knots.Models.User", "User")
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Group");
|
||||
|
||||
b.Navigation("Role");
|
||||
|
||||
b.Navigation("User");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Message", b =>
|
||||
{
|
||||
b.HasOne("Knots.Models.Discussion", "Discussion")
|
||||
.WithMany("Messages")
|
||||
.HasForeignKey("DiscussionId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("Knots.Models.Group", "Group")
|
||||
.WithMany()
|
||||
.HasForeignKey("GroupId");
|
||||
|
||||
b.HasOne("Knots.Models.Key", "Key")
|
||||
.WithMany("Messages")
|
||||
.HasForeignKey("KeyId");
|
||||
|
||||
b.HasOne("Knots.Models.User", "User")
|
||||
.WithMany("Messages")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Discussion");
|
||||
|
||||
b.Navigation("Group");
|
||||
|
||||
b.Navigation("Key");
|
||||
|
||||
b.Navigation("User");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.User", b =>
|
||||
{
|
||||
b.HasOne("Knots.Models.Role", "Role")
|
||||
.WithMany("Users")
|
||||
.HasForeignKey("RoleId");
|
||||
|
||||
b.Navigation("Role");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.UserDiscussion", b =>
|
||||
{
|
||||
b.HasOne("Knots.Models.Discussion", "Discussion")
|
||||
.WithMany("UserDiscussions")
|
||||
.HasForeignKey("DiscussionId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("Knots.Models.User", "User")
|
||||
.WithMany("UserDiscussions")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Discussion");
|
||||
|
||||
b.Navigation("User");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Discussion", b =>
|
||||
{
|
||||
b.Navigation("Messages");
|
||||
|
||||
b.Navigation("UserDiscussions");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Group", b =>
|
||||
{
|
||||
b.Navigation("GroupUsers");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Key", b =>
|
||||
{
|
||||
b.Navigation("Messages");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Role", b =>
|
||||
{
|
||||
b.Navigation("GroupUsers");
|
||||
|
||||
b.Navigation("Users");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.User", b =>
|
||||
{
|
||||
b.Navigation("Messages");
|
||||
|
||||
b.Navigation("UserDiscussions");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -33,11 +33,16 @@ namespace Knots.Migrations
|
||||
b.Property<DateTime>("CreatedAt")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<int?>("GroupId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<bool>("IsGroup")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("GroupId");
|
||||
|
||||
b.ToTable("Discussions");
|
||||
});
|
||||
|
||||
@@ -52,9 +57,6 @@ namespace Knots.Migrations
|
||||
b.Property<int>("DiscussionId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("KeyId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("MembersAmount")
|
||||
.HasColumnType("int");
|
||||
|
||||
@@ -68,12 +70,31 @@ namespace Knots.Migrations
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("DiscussionId")
|
||||
.IsUnique();
|
||||
b.HasIndex("DiscussionId");
|
||||
|
||||
b.ToTable("Groups");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.GroupUser", b =>
|
||||
{
|
||||
b.Property<int>("GroupId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("UserId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int?>("RoleId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("GroupId", "UserId");
|
||||
|
||||
b.HasIndex("RoleId");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
|
||||
b.ToTable("GroupUsers");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Key", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
@@ -100,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)
|
||||
@@ -212,17 +236,52 @@ namespace Knots.Migrations
|
||||
b.ToTable("UserDiscussions");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Discussion", b =>
|
||||
{
|
||||
b.HasOne("Knots.Models.Group", "Group")
|
||||
.WithMany()
|
||||
.HasForeignKey("GroupId")
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
b.Navigation("Group");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Group", b =>
|
||||
{
|
||||
b.HasOne("Knots.Models.Discussion", "Discussion")
|
||||
.WithOne("Group")
|
||||
.HasForeignKey("Knots.Models.Group", "DiscussionId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.WithMany()
|
||||
.HasForeignKey("DiscussionId")
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Discussion");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.GroupUser", b =>
|
||||
{
|
||||
b.HasOne("Knots.Models.Group", "Group")
|
||||
.WithMany("GroupUsers")
|
||||
.HasForeignKey("GroupId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("Knots.Models.Role", "Role")
|
||||
.WithMany("GroupUsers")
|
||||
.HasForeignKey("RoleId");
|
||||
|
||||
b.HasOne("Knots.Models.User", "User")
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Group");
|
||||
|
||||
b.Navigation("Role");
|
||||
|
||||
b.Navigation("User");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Message", b =>
|
||||
{
|
||||
b.HasOne("Knots.Models.Discussion", "Discussion")
|
||||
@@ -274,7 +333,7 @@ namespace Knots.Migrations
|
||||
b.HasOne("Knots.Models.User", "User")
|
||||
.WithMany("UserDiscussions")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Discussion");
|
||||
@@ -284,13 +343,16 @@ namespace Knots.Migrations
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Discussion", b =>
|
||||
{
|
||||
b.Navigation("Group");
|
||||
|
||||
b.Navigation("Messages");
|
||||
|
||||
b.Navigation("UserDiscussions");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Group", b =>
|
||||
{
|
||||
b.Navigation("GroupUsers");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Key", b =>
|
||||
{
|
||||
b.Navigation("Messages");
|
||||
@@ -298,6 +360,8 @@ namespace Knots.Migrations
|
||||
|
||||
modelBuilder.Entity("Knots.Models.Role", b =>
|
||||
{
|
||||
b.Navigation("GroupUsers");
|
||||
|
||||
b.Navigation("Users");
|
||||
});
|
||||
|
||||
|
||||
@@ -8,7 +8,12 @@ public class Discussion
|
||||
public bool IsGroup { get; set; } = false;
|
||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||
|
||||
public Group? Group { get; set; }
|
||||
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,5 +1,4 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Net.Mime;
|
||||
|
||||
namespace Knots.Models;
|
||||
|
||||
@@ -9,11 +8,9 @@ public class Group
|
||||
[Required, MaxLength(50)] public string? Name { get; set; }
|
||||
[Required] public int MembersAmount { get; set; }
|
||||
public string? ProfilePicture { get; set; }
|
||||
public int KeyId { get; set; }
|
||||
|
||||
List<Message> Messages { get; set; }
|
||||
List<User> Users { get; set; }
|
||||
|
||||
public int DiscussionId { get; set; }
|
||||
|
||||
public List<GroupUser> GroupUsers { get; set; } = [];
|
||||
|
||||
public int DiscussionId { get; set; }
|
||||
public Discussion Discussion { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace Knots.Models;
|
||||
|
||||
public class GroupUser
|
||||
{
|
||||
public int GroupId { get; set; }
|
||||
public Group Group { get; set; } = null!;
|
||||
|
||||
public int UserId { get; set; }
|
||||
public User User { get; set; } = null!;
|
||||
|
||||
public int? RoleId { get; set; }
|
||||
public Role? Role { get; set; }
|
||||
}
|
||||
@@ -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; } = [];
|
||||
}
|
||||
@@ -12,9 +12,8 @@ public class Message
|
||||
public int UserId { get; set; }
|
||||
public User User { get; set; } = null!;
|
||||
|
||||
public int DiscussionId { get; set; } // ← ajouté
|
||||
public int DiscussionId { get; set; }
|
||||
public Discussion Discussion { get; set; } = null!;
|
||||
|
||||
public Group? Group { get; set; }
|
||||
public Key? Key { get; set; }
|
||||
}
|
||||
@@ -6,5 +6,6 @@ public class Role
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[Required, MaxLength(50)] public string? Libelle { get; set; }
|
||||
public List<User> Users { get; set; } = [];
|
||||
public List<User> Users { get; set; } = [];
|
||||
public List<GroupUser> GroupUsers { get; set; } = [];
|
||||
}
|
||||
@@ -12,7 +12,7 @@ public class User
|
||||
[Required, Length(10, 10)] public string? Tel { get; set; }
|
||||
public string? ProfilePicture { get; set; }
|
||||
public List<Message> Messages { get; set; } = [];
|
||||
public List<UserDiscussion> UserDiscussions { get; set; } = [];
|
||||
public int? RoleId { get; set; }
|
||||
public Role? Role { get; set; }
|
||||
public List<UserDiscussion> UserDiscussions { get; set; } = [];
|
||||
}
|
||||
+24
-3
@@ -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();
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
Binary file not shown.
@@ -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+c5b5ac6b8422fe615bcd0191662be81a4d8be446")]
|
||||
[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 @@
|
||||
23c94b3f83af2124768bfc3c866ceb4f88529a8fc5c81d7607aabff563024342
|
||||
589797db71c3ee2db1d8c966ae2f187808629461cd5e264f494b12d939f74905
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
c1cb850b5d9c875b4681da352b045d223ada8633b3374461e153190b03e4f465
|
||||
8c008e0540a310c319081e4a6b8a7ce2f5c9b271d5260b8b45b33f49b9ad5228
|
||||
|
||||
@@ -344,3 +344,179 @@ C:\Users\Carte\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Security.Crypto
|
||||
C:\Users\Carte\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Security.Cryptography.Xml.dll
|
||||
C:\Users\Carte\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win\lib\net8.0\System.Security.Cryptography.Pkcs.dll
|
||||
C:\Users\Carte\RiderProjects\Knots\Knots\bin\Debug\net8.0\BCrypt-Net-Next.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\appsettings.Development.json
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\appsettings.json
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Knots.exe
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Knots.deps.json
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Knots.runtimeconfig.json
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Knots.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Knots.pdb
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\AutoMapper.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Azure.Core.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Azure.Identity.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\BCrypt-Net-Next.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\FastEndpoints.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\FastEndpoints.Attributes.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\FastEndpoints.Messaging.Core.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\FastEndpoints.Swagger.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\FluentValidation.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Humanizer.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.AspNetCore.Authentication.JwtBearer.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.AspNetCore.OpenApi.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Bcl.AsyncInterfaces.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.CodeAnalysis.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.CodeAnalysis.Workspaces.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Data.SqlClient.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Abstractions.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Design.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Relational.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.SqlServer.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.Caching.Memory.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.DependencyModel.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.Diagnostics.Abstractions.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.Hosting.Abstractions.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.Logging.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.Logging.Abstractions.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.ObjectPool.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.Options.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.Primitives.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Extensions.WebEncoders.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Identity.Client.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Identity.Client.Extensions.Msal.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.IdentityModel.Abstractions.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.IdentityModel.JsonWebTokens.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.IdentityModel.Logging.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.IdentityModel.Protocols.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.IdentityModel.Tokens.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.OpenApi.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.SqlServer.Server.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Microsoft.Win32.SystemEvents.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Mono.TextTemplating.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Namotion.Reflection.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Newtonsoft.Json.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\NJsonSchema.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\NJsonSchema.Annotations.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\NJsonSchema.NewtonsoftJson.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\NJsonSchema.Yaml.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\NSwag.Annotations.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\NSwag.AspNetCore.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\NSwag.Core.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\NSwag.Core.Yaml.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\NSwag.Generation.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\NSwag.Generation.AspNetCore.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Swashbuckle.AspNetCore.Swagger.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Swashbuckle.AspNetCore.SwaggerGen.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\Swashbuckle.AspNetCore.SwaggerUI.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.ClientModel.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.CodeDom.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Composition.AttributedModel.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Composition.Convention.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Composition.Hosting.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Composition.Runtime.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Composition.TypedParts.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Configuration.ConfigurationManager.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Diagnostics.DiagnosticSource.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Drawing.Common.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.IdentityModel.Tokens.Jwt.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Memory.Data.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Runtime.Caching.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Security.Cryptography.Pkcs.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Security.Cryptography.ProtectedData.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Security.Cryptography.Xml.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Security.Permissions.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\System.Windows.Extensions.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\YamlDotNet.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\unix\lib\net6.0\Microsoft.Data.SqlClient.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win\lib\net6.0\Microsoft.Data.SqlClient.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win-arm\native\Microsoft.Data.SqlClient.SNI.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win-arm64\native\Microsoft.Data.SqlClient.SNI.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win-x64\native\Microsoft.Data.SqlClient.SNI.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win-x86\native\Microsoft.Data.SqlClient.SNI.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win\lib\net6.0\Microsoft.Win32.SystemEvents.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\unix\lib\net6.0\System.Drawing.Common.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win\lib\net6.0\System.Drawing.Common.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win\lib\net6.0\System.Runtime.Caching.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win\lib\net8.0\System.Security.Cryptography.Pkcs.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win\lib\net6.0\System.Security.Cryptography.ProtectedData.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\bin\Debug\net8.0\runtimes\win\lib\net6.0\System.Windows.Extensions.dll
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.csproj.AssemblyReference.cache
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.GeneratedMSBuildEditorConfig.editorconfig
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.AssemblyInfoInputs.cache
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.AssemblyInfo.cs
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.csproj.CoreCompileInputs.cache
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.MvcApplicationPartsAssemblyInfo.cs
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.MvcApplicationPartsAssemblyInfo.cache
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\staticwebassets.build.json
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\staticwebassets.development.json
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\staticwebassets\msbuild.Knots.Microsoft.AspNetCore.StaticWebAssets.props
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\staticwebassets\msbuild.build.Knots.props
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\staticwebassets\msbuild.buildMultiTargeting.Knots.props
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\staticwebassets\msbuild.buildTransitive.Knots.props
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\staticwebassets.pack.json
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\scopedcss\bundle\Knots.styles.css
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.csproj.Up2Date
|
||||
C:\Users\dogge\RiderProjects\Knots\Knots\obj\Debug\net8.0\Knots.dll
|
||||
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.
@@ -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
@@ -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, )"
|
||||
|
||||
@@ -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 @@
|
||||
"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 @@
|
||||
17810953948669773
|
||||
17811676816949331
|
||||
@@ -1 +1 @@
|
||||
17810992112196919
|
||||
17811669515789890
|
||||
Generated
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"name": "Knots",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {}
|
||||
}
|
||||
Reference in New Issue
Block a user