diff --git a/.gitignore b/game/.gitignore
similarity index 100%
rename from .gitignore
rename to game/.gitignore
diff --git a/README.txt b/game/README.txt
similarity index 100%
rename from README.txt
rename to game/README.txt
diff --git a/assets/audio/jump.ogg b/game/assets/audio/jump.ogg
similarity index 100%
rename from assets/audio/jump.ogg
rename to game/assets/audio/jump.ogg
diff --git a/assets/audio/jump.ogg.import b/game/assets/audio/jump.ogg.import
similarity index 100%
rename from assets/audio/jump.ogg.import
rename to game/assets/audio/jump.ogg.import
diff --git a/assets/audio/silly-menu-hover-test.ogg b/game/assets/audio/silly-menu-hover-test.ogg
similarity index 100%
rename from assets/audio/silly-menu-hover-test.ogg
rename to game/assets/audio/silly-menu-hover-test.ogg
diff --git a/assets/audio/silly-menu-hover-test.ogg.import b/game/assets/audio/silly-menu-hover-test.ogg.import
similarity index 100%
rename from assets/audio/silly-menu-hover-test.ogg.import
rename to game/assets/audio/silly-menu-hover-test.ogg.import
diff --git a/assets/audio/silly-test.ogg b/game/assets/audio/silly-test.ogg
similarity index 100%
rename from assets/audio/silly-test.ogg
rename to game/assets/audio/silly-test.ogg
diff --git a/assets/audio/silly-test.ogg.import b/game/assets/audio/silly-test.ogg.import
similarity index 100%
rename from assets/audio/silly-test.ogg.import
rename to game/assets/audio/silly-test.ogg.import
diff --git a/assets/fonts/PlayfairDisplay-VariableFont_wght.ttf b/game/assets/fonts/PlayfairDisplay-VariableFont_wght.ttf
similarity index 100%
rename from assets/fonts/PlayfairDisplay-VariableFont_wght.ttf
rename to game/assets/fonts/PlayfairDisplay-VariableFont_wght.ttf
diff --git a/assets/fonts/PlayfairDisplay-VariableFont_wght.ttf.import b/game/assets/fonts/PlayfairDisplay-VariableFont_wght.ttf.import
similarity index 100%
rename from assets/fonts/PlayfairDisplay-VariableFont_wght.ttf.import
rename to game/assets/fonts/PlayfairDisplay-VariableFont_wght.ttf.import
diff --git a/assets/images/pp_start_bg.png b/game/assets/images/pp_start_bg.png
similarity index 100%
rename from assets/images/pp_start_bg.png
rename to game/assets/images/pp_start_bg.png
diff --git a/assets/images/pp_start_bg.png.import b/game/assets/images/pp_start_bg.png.import
similarity index 100%
rename from assets/images/pp_start_bg.png.import
rename to game/assets/images/pp_start_bg.png.import
diff --git a/assets/test.tscn b/game/assets/test.tscn
similarity index 100%
rename from assets/test.tscn
rename to game/assets/test.tscn
diff --git a/audio/bus_layout.tres b/game/audio/bus_layout.tres
similarity index 100%
rename from audio/bus_layout.tres
rename to game/audio/bus_layout.tres
diff --git a/export_presets.cfg b/game/export_presets.cfg
similarity index 100%
rename from export_presets.cfg
rename to game/export_presets.cfg
diff --git a/icon.svg b/game/icon.svg
similarity index 100%
rename from icon.svg
rename to game/icon.svg
diff --git a/icon.svg.import b/game/icon.svg.import
similarity index 100%
rename from icon.svg.import
rename to game/icon.svg.import
diff --git a/project.godot b/game/project.godot
similarity index 100%
rename from project.godot
rename to game/project.godot
diff --git a/scenes/Levels/level.tscn b/game/scenes/Levels/level.tscn
similarity index 100%
rename from scenes/Levels/level.tscn
rename to game/scenes/Levels/level.tscn
diff --git a/scenes/Levels/menu.gd b/game/scenes/Levels/menu.gd
similarity index 100%
rename from scenes/Levels/menu.gd
rename to game/scenes/Levels/menu.gd
diff --git a/scenes/Levels/menu.gd.uid b/game/scenes/Levels/menu.gd.uid
similarity index 100%
rename from scenes/Levels/menu.gd.uid
rename to game/scenes/Levels/menu.gd.uid
diff --git a/scenes/UI/Settings.gd b/game/scenes/UI/Settings.gd
similarity index 100%
rename from scenes/UI/Settings.gd
rename to game/scenes/UI/Settings.gd
diff --git a/scenes/UI/Settings.gd.uid b/game/scenes/UI/Settings.gd.uid
similarity index 100%
rename from scenes/UI/Settings.gd.uid
rename to game/scenes/UI/Settings.gd.uid
diff --git a/scenes/UI/Settings.tscn b/game/scenes/UI/Settings.tscn
similarity index 100%
rename from scenes/UI/Settings.tscn
rename to game/scenes/UI/Settings.tscn
diff --git a/scenes/UI/menu_music.gd b/game/scenes/UI/menu_music.gd
similarity index 100%
rename from scenes/UI/menu_music.gd
rename to game/scenes/UI/menu_music.gd
diff --git a/scenes/UI/menu_music.gd.uid b/game/scenes/UI/menu_music.gd.uid
similarity index 100%
rename from scenes/UI/menu_music.gd.uid
rename to game/scenes/UI/menu_music.gd.uid
diff --git a/scenes/UI/menu_music.tscn b/game/scenes/UI/menu_music.tscn
similarity index 100%
rename from scenes/UI/menu_music.tscn
rename to game/scenes/UI/menu_music.tscn
diff --git a/scenes/UI/menu_sfx.gd b/game/scenes/UI/menu_sfx.gd
similarity index 100%
rename from scenes/UI/menu_sfx.gd
rename to game/scenes/UI/menu_sfx.gd
diff --git a/scenes/UI/menu_sfx.gd.uid b/game/scenes/UI/menu_sfx.gd.uid
similarity index 100%
rename from scenes/UI/menu_sfx.gd.uid
rename to game/scenes/UI/menu_sfx.gd.uid
diff --git a/scenes/UI/menu_sfx.tscn b/game/scenes/UI/menu_sfx.tscn
similarity index 100%
rename from scenes/UI/menu_sfx.tscn
rename to game/scenes/UI/menu_sfx.tscn
diff --git a/scenes/UI/start_screen.gd b/game/scenes/UI/start_screen.gd
similarity index 100%
rename from scenes/UI/start_screen.gd
rename to game/scenes/UI/start_screen.gd
diff --git a/scenes/UI/start_screen.gd.uid b/game/scenes/UI/start_screen.gd.uid
similarity index 100%
rename from scenes/UI/start_screen.gd.uid
rename to game/scenes/UI/start_screen.gd.uid
diff --git a/scenes/UI/start_screen.tscn b/game/scenes/UI/start_screen.tscn
similarity index 100%
rename from scenes/UI/start_screen.tscn
rename to game/scenes/UI/start_screen.tscn
diff --git a/scenes/block.tscn b/game/scenes/block.tscn
similarity index 100%
rename from scenes/block.tscn
rename to game/scenes/block.tscn
diff --git a/scenes/player.gd b/game/scenes/player.gd
similarity index 100%
rename from scenes/player.gd
rename to game/scenes/player.gd
diff --git a/scenes/player.gd.uid b/game/scenes/player.gd.uid
similarity index 100%
rename from scenes/player.gd.uid
rename to game/scenes/player.gd.uid
diff --git a/themes/button_theme.tres b/game/themes/button_theme.tres
similarity index 100%
rename from themes/button_theme.tres
rename to game/themes/button_theme.tres
diff --git a/themes/title_font_theme.tres b/game/themes/title_font_theme.tres
similarity index 100%
rename from themes/title_font_theme.tres
rename to game/themes/title_font_theme.tres
diff --git a/gitea/workflows/k8s-smoke-test.yml b/gitea/workflows/k8s-smoke-test.yml
new file mode 100644
index 0000000..9de0860
--- /dev/null
+++ b/gitea/workflows/k8s-smoke-test.yml
@@ -0,0 +1,18 @@
+name: k8s smoke test
+
+on:
+ push:
+ branches:
+ - main
+ workflow_dispatch:
+
+jobs:
+ test:
+ runs-on: self-hosted
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v4
+
+ - name: Test kubectl connectivity
+ run: |
+ kubectl --kubeconfig ${{ secrets.KUBECONFIG }} get nodes
diff --git a/microservices/.gitignore b/microservices/.gitignore
new file mode 100644
index 0000000..8c2b884
--- /dev/null
+++ b/microservices/.gitignore
@@ -0,0 +1,14 @@
+# ---> VisualStudioCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+!.vscode/*.code-snippets
+
+# Local History for Visual Studio Code
+.history/
+
+# Built Visual Studio Code Extensions
+*.vsix
+
diff --git a/microservices/Auth/Auth.csproj b/microservices/Auth/Auth.csproj
new file mode 100644
index 0000000..9d1ed49
--- /dev/null
+++ b/microservices/Auth/Auth.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net9.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
diff --git a/microservices/Auth/Auth.http b/microservices/Auth/Auth.http
new file mode 100644
index 0000000..6abfe4f
--- /dev/null
+++ b/microservices/Auth/Auth.http
@@ -0,0 +1,6 @@
+@Auth_HostAddress = http://localhost:5279
+
+GET {{Auth_HostAddress}}/weatherforecast/
+Accept: application/json
+
+###
diff --git a/microservices/Auth/Controllers/AuthController.cs b/microservices/Auth/Controllers/AuthController.cs
new file mode 100644
index 0000000..b3fefec
--- /dev/null
+++ b/microservices/Auth/Controllers/AuthController.cs
@@ -0,0 +1,113 @@
+using Auth.Models;
+using Auth.Services;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.IdentityModel.Tokens;
+using System.IdentityModel.Tokens.Jwt;
+using System.Security.Claims;
+using System.Text;
+
+namespace Auth.Controllers;
+
+[ApiController]
+[Route("api/[controller]")]
+public class AuthController : ControllerBase
+{
+ private readonly UserService _users;
+ private readonly IConfiguration _cfg;
+ private readonly BlacklistService _blacklist;
+
+ public AuthController(UserService users, IConfiguration cfg, BlacklistService blacklist)
+ {
+ _users = users; _cfg = cfg; _blacklist = blacklist;
+ }
+
+ [HttpPost("register")]
+ public async Task Register([FromBody] RegisterRequest req)
+ {
+ if (string.IsNullOrWhiteSpace(req.Username) || string.IsNullOrWhiteSpace(req.Password))
+ return BadRequest("Username and password required");
+
+ if (await _users.GetByUsernameAsync(req.Username) != null)
+ return BadRequest("User already exists");
+
+ var hash = BCrypt.Net.BCrypt.HashPassword(req.Password);
+ var user = new User { Username = req.Username, PasswordHash = hash, Role = "USER", Email = req.Email };
+ await _users.CreateAsync(user);
+ return Ok("User created");
+ }
+
+ [HttpPost("login")]
+ public async Task Login([FromBody] LoginRequest req)
+ {
+ var user = await _users.GetByUsernameAsync(req.Username);
+ if (user == null || !BCrypt.Net.BCrypt.Verify(req.Password, user.PasswordHash))
+ return Unauthorized();
+
+ var (accessToken, jti, expUtc) = GenerateJwtToken(user);
+ user.RefreshToken = Guid.NewGuid().ToString("N");
+ user.RefreshTokenExpiry = DateTime.UtcNow.AddDays(7);
+ await _users.UpdateAsync(user);
+
+ return Ok(new { accessToken, refreshToken = user.RefreshToken, user.Username, user.Role, jti, exp = expUtc });
+ }
+
+ [HttpPost("refresh")]
+ public async Task Refresh([FromBody] RefreshRequest req)
+ {
+ var user = await _users.GetByUsernameAsync(req.Username);
+ if (user == null || user.RefreshToken != req.RefreshToken || user.RefreshTokenExpiry < DateTime.UtcNow)
+ return Unauthorized("Invalid or expired refresh token");
+
+ var (accessToken, _, expUtc) = GenerateJwtToken(user);
+ return Ok(new { accessToken, exp = expUtc });
+ }
+
+ [HttpPost("logout")]
+ [Authorize(Roles = "USER,SUPER")]
+ public async Task Logout()
+ {
+ var token = HttpContext.Request.Headers["Authorization"].FirstOrDefault()?.Replace("Bearer ", "");
+ if (string.IsNullOrWhiteSpace(token)) return BadRequest("Token missing");
+ var jwt = new JwtSecurityTokenHandler().ReadJwtToken(token);
+ await _blacklist.AddToBlacklistAsync(jwt.Id, jwt.ValidTo);
+ return Ok("Logged out.");
+ }
+
+ [HttpPost("role")]
+ [Authorize(Roles = "SUPER")]
+ public async Task ChangeUserRole([FromBody] ChangeRoleRequest req)
+ {
+ if (req.NewRole is not ("USER" or "SUPER")) return BadRequest("Role must be 'USER' or 'SUPER'");
+ var user = await _users.GetByUsernameAsync(req.Username);
+ if (user is null) return NotFound("User not found");
+ user.Role = req.NewRole;
+ await _users.UpdateAsync(user);
+ return Ok($"{req.Username}'s role updated to {req.NewRole}");
+ }
+
+ [HttpGet("users")]
+ [Authorize(Roles = "SUPER")]
+ public async Task GetAllUsers() => Ok(await _users.GetAllAsync());
+
+ private (string token, string jti, DateTime expUtc) GenerateJwtToken(User user)
+ {
+ var key = Encoding.UTF8.GetBytes(_cfg["Jwt:Key"]!);
+ var issuer = _cfg["Jwt:Issuer"] ?? "GameAuthApi";
+ var audience = _cfg["Jwt:Audience"] ?? issuer;
+
+ var creds = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256);
+ var jti = Guid.NewGuid().ToString("N");
+ var claims = new[]
+ {
+ new Claim(ClaimTypes.Name, user.Username),
+ new Claim(ClaimTypes.NameIdentifier, user.Id),
+ new Claim(ClaimTypes.Role, user.Role),
+ new Claim(JwtRegisteredClaimNames.Jti, jti)
+ };
+
+ var exp = DateTime.UtcNow.AddMinutes(15);
+ var token = new JwtSecurityToken(issuer, audience, claims, expires: exp, signingCredentials: creds);
+ return (new JwtSecurityTokenHandler().WriteToken(token), jti, exp);
+ }
+}
diff --git a/microservices/Auth/Dockerfile b/microservices/Auth/Dockerfile
new file mode 100644
index 0000000..934b2d7
--- /dev/null
+++ b/microservices/Auth/Dockerfile
@@ -0,0 +1,21 @@
+FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
+WORKDIR /src
+
+# Copy project file first to take advantage of Docker layer caching
+COPY ["Auth.csproj", "./"]
+RUN dotnet restore "Auth.csproj"
+
+# Copy the remaining source and publish
+COPY . .
+RUN dotnet publish "Auth.csproj" -c Release -o /app/publish /p:UseAppHost=false
+
+FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS final
+WORKDIR /app
+COPY --from=build /app/publish .
+
+ENV ASPNETCORE_URLS=http://+:8080 \
+ ASPNETCORE_ENVIRONMENT=Production
+
+EXPOSE 8080
+
+ENTRYPOINT ["dotnet", "Auth.dll"]
diff --git a/microservices/Auth/Models/Dto.cs b/microservices/Auth/Models/Dto.cs
new file mode 100644
index 0000000..5fc1e3b
--- /dev/null
+++ b/microservices/Auth/Models/Dto.cs
@@ -0,0 +1,6 @@
+namespace Auth.Models;
+
+public class RegisterRequest { public string Username { get; set; } = ""; public string Password { get; set; } = ""; public string? Email { get; set; } }
+public class LoginRequest { public string Username { get; set; } = ""; public string Password { get; set; } = ""; }
+public class ChangeRoleRequest { public string Username { get; set; } = ""; public string NewRole { get; set; } = ""; }
+public class RefreshRequest { public string Username { get; set; } = ""; public string RefreshToken { get; set; } = ""; }
diff --git a/microservices/Auth/Models/User.cs b/microservices/Auth/Models/User.cs
new file mode 100644
index 0000000..cb767ce
--- /dev/null
+++ b/microservices/Auth/Models/User.cs
@@ -0,0 +1,16 @@
+using MongoDB.Bson;
+using MongoDB.Bson.Serialization.Attributes;
+
+namespace Auth.Models;
+
+public class User
+{
+ [BsonId] [BsonRepresentation(BsonType.ObjectId)]
+ public string Id { get; set; } = default!;
+ public string Username { get; set; } = default!;
+ public string PasswordHash { get; set; } = default!;
+ public string Role { get; set; } = "USER";
+ public string? Email { get; set; }
+ public string? RefreshToken { get; set; }
+ public DateTime? RefreshTokenExpiry { get; set; }
+}
diff --git a/microservices/Auth/Program.cs b/microservices/Auth/Program.cs
new file mode 100644
index 0000000..9de164e
--- /dev/null
+++ b/microservices/Auth/Program.cs
@@ -0,0 +1,86 @@
+using Auth.Services;
+using Microsoft.AspNetCore.Authentication.JwtBearer;
+using Microsoft.IdentityModel.Tokens;
+using Microsoft.OpenApi.Models;
+using System.Security.Claims;
+using System.Text;
+
+var builder = WebApplication.CreateBuilder(args);
+builder.Services.AddControllers();
+
+// DI
+builder.Services.AddSingleton();
+builder.Services.AddSingleton();
+
+// Swagger + JWT auth in Swagger
+builder.Services.AddEndpointsApiExplorer();
+builder.Services.AddSwaggerGen(c =>
+{
+ c.SwaggerDoc("v1", new OpenApiInfo { Title = "Auth API", Version = "v1" });
+ c.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme
+ {
+ Type = SecuritySchemeType.Http,
+ Scheme = "bearer",
+ BearerFormat = "JWT",
+ Description = "Paste your access token here (no 'Bearer ' prefix needed)."
+ });
+ c.AddSecurityRequirement(new OpenApiSecurityRequirement
+ {
+ {
+ new OpenApiSecurityScheme
+ {
+ Reference = new OpenApiReference
+ { Type = ReferenceType.SecurityScheme, Id = "bearerAuth" }
+ },
+ Array.Empty()
+ }
+ });
+});
+
+// AuthN/JWT
+var cfg = builder.Configuration;
+var jwtKey = cfg["Jwt:Key"] ?? throw new Exception("Jwt:Key missing");
+var issuer = cfg["Jwt:Issuer"] ?? "GameAuthApi";
+var aud = cfg["Jwt:Audience"] ?? issuer;
+
+builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
+ .AddJwtBearer(o =>
+ {
+ o.TokenValidationParameters = new TokenValidationParameters
+ {
+ ValidateIssuer = true, ValidIssuer = issuer,
+ ValidateAudience = true, ValidAudience = aud,
+ ValidateIssuerSigningKey = true,
+ IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtKey)),
+ ValidateLifetime = true,
+ ClockSkew = TimeSpan.FromSeconds(30)
+ };
+ o.Events = new JwtBearerEvents
+ {
+ OnTokenValidated = async ctx =>
+ {
+ var jti = ctx.Principal?.FindFirstValue(System.IdentityModel.Tokens.Jwt.JwtRegisteredClaimNames.Jti);
+ if (!string.IsNullOrEmpty(jti))
+ {
+ var bl = ctx.HttpContext.RequestServices.GetRequiredService();
+ if (await bl.IsBlacklistedAsync(jti)) ctx.Fail("Token revoked");
+ }
+ }
+ };
+ });
+
+builder.Services.AddAuthorization();
+
+var app = builder.Build();
+
+app.MapGet("/healthz", () => Results.Ok("ok"));
+app.UseSwagger();
+app.UseSwaggerUI(o =>
+{
+ o.SwaggerEndpoint("/swagger/v1/swagger.json", "Auth API v1");
+ o.RoutePrefix = "swagger";
+});
+app.UseAuthentication();
+app.UseAuthorization();
+app.MapControllers();
+app.Run();
diff --git a/microservices/Auth/Properties/launchSettings.json b/microservices/Auth/Properties/launchSettings.json
new file mode 100644
index 0000000..dcb9958
--- /dev/null
+++ b/microservices/Auth/Properties/launchSettings.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://json.schemastore.org/launchsettings.json",
+ "profiles": {
+ "http": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": false,
+ "applicationUrl": "http://localhost:5279",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "https": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": false,
+ "applicationUrl": "https://localhost:7295;http://localhost:5279",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/microservices/Auth/Services/BlacklistService.cs b/microservices/Auth/Services/BlacklistService.cs
new file mode 100644
index 0000000..27707f4
--- /dev/null
+++ b/microservices/Auth/Services/BlacklistService.cs
@@ -0,0 +1,36 @@
+using MongoDB.Bson.Serialization.Attributes;
+using MongoDB.Driver;
+
+namespace Auth.Services;
+
+public class BlacklistedToken
+{
+ [BsonId] public string Jti { get; set; } = default!;
+ public DateTime ExpiresAt { get; set; }
+}
+
+public class BlacklistService
+{
+ private readonly IMongoCollection _col;
+
+ public BlacklistService(IConfiguration cfg)
+ {
+ var cs = cfg["MongoDB:ConnectionString"] ?? "mongodb://127.0.0.1:27017";
+ var dbName = cfg["MongoDB:DatabaseName"] ?? "GameDb";
+ var client = new MongoClient(cs);
+ var db = client.GetDatabase(dbName);
+ _col = db.GetCollection("BlacklistedTokens");
+
+ // TTL index so revocations expire automatically
+ var keys = Builders.IndexKeys.Ascending(x => x.ExpiresAt);
+ _col.Indexes.CreateOne(new CreateIndexModel(keys, new CreateIndexOptions { ExpireAfter = TimeSpan.Zero }));
+ }
+
+ public Task AddToBlacklistAsync(string jti, DateTime expiresAt) =>
+ _col.ReplaceOneAsync(x => x.Jti == jti,
+ new BlacklistedToken { Jti = jti, ExpiresAt = expiresAt },
+ new ReplaceOptions { IsUpsert = true });
+
+ public Task IsBlacklistedAsync(string jti) =>
+ _col.Find(x => x.Jti == jti).AnyAsync();
+}
diff --git a/microservices/Auth/Services/UserService.cs b/microservices/Auth/Services/UserService.cs
new file mode 100644
index 0000000..8ecc2c2
--- /dev/null
+++ b/microservices/Auth/Services/UserService.cs
@@ -0,0 +1,32 @@
+using Auth.Models;
+using MongoDB.Driver;
+
+namespace Auth.Services;
+
+public class UserService
+{
+ private readonly IMongoCollection _col;
+
+ public UserService(IConfiguration cfg)
+ {
+ var cs = cfg["MongoDB:ConnectionString"] ?? "mongodb://127.0.0.1:27017";
+ var dbName = cfg["MongoDB:DatabaseName"] ?? "GameDb";
+ var client = new MongoClient(cs);
+ var db = client.GetDatabase(dbName);
+ _col = db.GetCollection("Users");
+
+ var keys = Builders.IndexKeys.Ascending(u => u.Username);
+ _col.Indexes.CreateOne(new CreateIndexModel(keys, new CreateIndexOptions { Unique = true }));
+ }
+
+ public Task GetByUsernameAsync(string username) =>
+ _col.Find(u => u.Username == username).FirstOrDefaultAsync();
+
+ public Task CreateAsync(User user) => _col.InsertOneAsync(user);
+
+ public Task UpdateAsync(User user) =>
+ _col.ReplaceOneAsync(u => u.Id == user.Id, user);
+
+ public Task> GetAllAsync() =>
+ _col.Find(FilterDefinition.Empty).ToListAsync();
+}
diff --git a/microservices/Auth/appsettings.Development.json b/microservices/Auth/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/microservices/Auth/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/microservices/Auth/appsettings.json b/microservices/Auth/appsettings.json
new file mode 100644
index 0000000..60fb5db
--- /dev/null
+++ b/microservices/Auth/appsettings.json
@@ -0,0 +1,7 @@
+{
+ "Kestrel": { "Endpoints": { "Http": { "Url": "http://0.0.0.0:5000" } } },
+ "MongoDB": { "ConnectionString": "mongodb://192.168.86.50:27017", "DatabaseName": "GameDb" },
+ "Jwt": { "Key": "SuperUltraSecureJwtKeyWithAtLeast32Chars!!", "Issuer": "GameAuthApi", "Audience": "game-auth-api" },
+ "Logging": { "LogLevel": { "Default": "Information" } },
+ "AllowedHosts": "*"
+}
diff --git a/microservices/Auth/obj/Auth.csproj.nuget.dgspec.json b/microservices/Auth/obj/Auth.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..ebcf21d
--- /dev/null
+++ b/microservices/Auth/obj/Auth.csproj.nuget.dgspec.json
@@ -0,0 +1,88 @@
+{
+ "format": 1,
+ "restore": {
+ "C:\\Users\\hz-vm\\Desktop\\micro-services\\Auth\\Auth.csproj": {}
+ },
+ "projects": {
+ "C:\\Users\\hz-vm\\Desktop\\micro-services\\Auth\\Auth.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\hz-vm\\Desktop\\micro-services\\Auth\\Auth.csproj",
+ "projectName": "Auth",
+ "projectPath": "C:\\Users\\hz-vm\\Desktop\\micro-services\\Auth\\Auth.csproj",
+ "packagesPath": "C:\\Users\\hz-vm\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\hz-vm\\Desktop\\micro-services\\Auth\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\hz-vm\\AppData\\Roaming\\NuGet\\NuGet.Config"
+ ],
+ "originalTargetFrameworks": [
+ "net9.0"
+ ],
+ "sources": {
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net9.0": {
+ "targetAlias": "net9.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ },
+ "restoreAuditProperties": {
+ "enableAudit": "true",
+ "auditLevel": "low",
+ "auditMode": "direct"
+ },
+ "SdkAnalysisLevel": "9.0.200"
+ },
+ "frameworks": {
+ "net9.0": {
+ "targetAlias": "net9.0",
+ "dependencies": {
+ "Bcrypt.Net-Next": {
+ "target": "Package",
+ "version": "[4.0.3, )"
+ },
+ "Microsoft.AspNetCore.Authentication.JwtBearer": {
+ "target": "Package",
+ "version": "[9.0.8, )"
+ },
+ "Microsoft.AspNetCore.OpenApi": {
+ "target": "Package",
+ "version": "[9.0.4, )"
+ },
+ "MongoDB.Driver": {
+ "target": "Package",
+ "version": "[3.4.3, )"
+ }
+ },
+ "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:\\Program Files\\dotnet\\sdk\\9.0.203/PortableRuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/microservices/Auth/obj/Auth.csproj.nuget.g.props b/microservices/Auth/obj/Auth.csproj.nuget.g.props
new file mode 100644
index 0000000..f256e82
--- /dev/null
+++ b/microservices/Auth/obj/Auth.csproj.nuget.g.props
@@ -0,0 +1,15 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\hz-vm\.nuget\packages\
+ PackageReference
+ 6.13.2
+
+
+
+
+
\ No newline at end of file
diff --git a/microservices/Auth/obj/Auth.csproj.nuget.g.targets b/microservices/Auth/obj/Auth.csproj.nuget.g.targets
new file mode 100644
index 0000000..3dc06ef
--- /dev/null
+++ b/microservices/Auth/obj/Auth.csproj.nuget.g.targets
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/microservices/Auth/obj/project.assets.json b/microservices/Auth/obj/project.assets.json
new file mode 100644
index 0000000..92d6bd8
--- /dev/null
+++ b/microservices/Auth/obj/project.assets.json
@@ -0,0 +1,1101 @@
+{
+ "version": 3,
+ "targets": {
+ "net9.0": {
+ "BCrypt.Net-Next/4.0.3": {
+ "type": "package",
+ "compile": {
+ "lib/net6.0/BCrypt.Net-Next.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net6.0/BCrypt.Net-Next.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "DnsClient/1.6.1": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.Win32.Registry": "5.0.0"
+ },
+ "compile": {
+ "lib/net5.0/DnsClient.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net5.0/DnsClient.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Microsoft.AspNetCore.Authentication.JwtBearer/9.0.8": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.0.1"
+ },
+ "compile": {
+ "lib/net9.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll": {
+ "related": ".xml"
+ }
+ },
+ "frameworkReferences": [
+ "Microsoft.AspNetCore.App"
+ ]
+ },
+ "Microsoft.AspNetCore.OpenApi/9.0.4": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.OpenApi": "1.6.17"
+ },
+ "compile": {
+ "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": {
+ "related": ".xml"
+ }
+ },
+ "frameworkReferences": [
+ "Microsoft.AspNetCore.App"
+ ]
+ },
+ "Microsoft.Extensions.Logging.Abstractions/2.0.0": {
+ "type": "package",
+ "compile": {
+ "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Microsoft.IdentityModel.Abstractions/8.0.1": {
+ "type": "package",
+ "compile": {
+ "lib/net9.0/Microsoft.IdentityModel.Abstractions.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.IdentityModel.Abstractions.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Microsoft.IdentityModel.JsonWebTokens/8.0.1": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.IdentityModel.Tokens": "8.0.1"
+ },
+ "compile": {
+ "lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Microsoft.IdentityModel.Logging/8.0.1": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.IdentityModel.Abstractions": "8.0.1"
+ },
+ "compile": {
+ "lib/net9.0/Microsoft.IdentityModel.Logging.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.IdentityModel.Logging.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Microsoft.IdentityModel.Protocols/8.0.1": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.IdentityModel.Tokens": "8.0.1"
+ },
+ "compile": {
+ "lib/net9.0/Microsoft.IdentityModel.Protocols.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.IdentityModel.Protocols.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Microsoft.IdentityModel.Protocols.OpenIdConnect/8.0.1": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.IdentityModel.Protocols": "8.0.1",
+ "System.IdentityModel.Tokens.Jwt": "8.0.1"
+ },
+ "compile": {
+ "lib/net9.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Microsoft.IdentityModel.Tokens/8.0.1": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.IdentityModel.Logging": "8.0.1"
+ },
+ "compile": {
+ "lib/net9.0/Microsoft.IdentityModel.Tokens.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.IdentityModel.Tokens.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Microsoft.NETCore.Platforms/5.0.0": {
+ "type": "package",
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ }
+ },
+ "Microsoft.OpenApi/1.6.17": {
+ "type": "package",
+ "compile": {
+ "lib/netstandard2.0/Microsoft.OpenApi.dll": {
+ "related": ".pdb;.xml"
+ }
+ },
+ "runtime": {
+ "lib/netstandard2.0/Microsoft.OpenApi.dll": {
+ "related": ".pdb;.xml"
+ }
+ }
+ },
+ "Microsoft.Win32.Registry/5.0.0": {
+ "type": "package",
+ "dependencies": {
+ "System.Security.AccessControl": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ },
+ "compile": {
+ "ref/netstandard2.0/Microsoft.Win32.Registry.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtimeTargets": {
+ "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "MongoDB.Bson/3.4.3": {
+ "type": "package",
+ "dependencies": {
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0"
+ },
+ "compile": {
+ "lib/net6.0/MongoDB.Bson.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net6.0/MongoDB.Bson.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "MongoDB.Driver/3.4.3": {
+ "type": "package",
+ "dependencies": {
+ "DnsClient": "1.6.1",
+ "Microsoft.Extensions.Logging.Abstractions": "2.0.0",
+ "MongoDB.Bson": "3.4.3",
+ "SharpCompress": "0.30.1",
+ "Snappier": "1.0.0",
+ "System.Buffers": "4.5.1",
+ "ZstdSharp.Port": "0.7.3"
+ },
+ "compile": {
+ "lib/net6.0/MongoDB.Driver.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net6.0/MongoDB.Driver.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "SharpCompress/0.30.1": {
+ "type": "package",
+ "compile": {
+ "lib/net5.0/SharpCompress.dll": {}
+ },
+ "runtime": {
+ "lib/net5.0/SharpCompress.dll": {}
+ }
+ },
+ "Snappier/1.0.0": {
+ "type": "package",
+ "compile": {
+ "lib/net5.0/Snappier.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net5.0/Snappier.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "System.Buffers/4.5.1": {
+ "type": "package",
+ "compile": {
+ "ref/netcoreapp2.0/_._": {}
+ },
+ "runtime": {
+ "lib/netcoreapp2.0/_._": {}
+ }
+ },
+ "System.IdentityModel.Tokens.Jwt/8.0.1": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.IdentityModel.JsonWebTokens": "8.0.1",
+ "Microsoft.IdentityModel.Tokens": "8.0.1"
+ },
+ "compile": {
+ "lib/net9.0/System.IdentityModel.Tokens.Jwt.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net9.0/System.IdentityModel.Tokens.Jwt.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "System.Memory/4.5.5": {
+ "type": "package",
+ "compile": {
+ "ref/netcoreapp2.1/_._": {}
+ },
+ "runtime": {
+ "lib/netcoreapp2.1/_._": {}
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe/5.0.0": {
+ "type": "package",
+ "compile": {
+ "ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "System.Security.AccessControl/5.0.0": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ },
+ "compile": {
+ "ref/netstandard2.0/System.Security.AccessControl.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/netstandard2.0/System.Security.AccessControl.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtimeTargets": {
+ "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "System.Security.Principal.Windows/5.0.0": {
+ "type": "package",
+ "compile": {
+ "ref/netcoreapp3.0/System.Security.Principal.Windows.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/netstandard2.0/System.Security.Principal.Windows.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtimeTargets": {
+ "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
+ "assetType": "runtime",
+ "rid": "unix"
+ },
+ "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "ZstdSharp.Port/0.7.3": {
+ "type": "package",
+ "compile": {
+ "lib/net7.0/ZstdSharp.dll": {}
+ },
+ "runtime": {
+ "lib/net7.0/ZstdSharp.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "BCrypt.Net-Next/4.0.3": {
+ "sha512": "W+U9WvmZQgi5cX6FS5GDtDoPzUCV4LkBLkywq/kRZhuDwcbavOzcDAr3LXJFqHUi952Yj3LEYoWW0jbEUQChsA==",
+ "type": "package",
+ "path": "bcrypt.net-next/4.0.3",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "bcrypt.net-next.4.0.3.nupkg.sha512",
+ "bcrypt.net-next.nuspec",
+ "ico.png",
+ "lib/net20/BCrypt.Net-Next.dll",
+ "lib/net20/BCrypt.Net-Next.xml",
+ "lib/net35/BCrypt.Net-Next.dll",
+ "lib/net35/BCrypt.Net-Next.xml",
+ "lib/net462/BCrypt.Net-Next.dll",
+ "lib/net462/BCrypt.Net-Next.xml",
+ "lib/net472/BCrypt.Net-Next.dll",
+ "lib/net472/BCrypt.Net-Next.xml",
+ "lib/net48/BCrypt.Net-Next.dll",
+ "lib/net48/BCrypt.Net-Next.xml",
+ "lib/net5.0/BCrypt.Net-Next.dll",
+ "lib/net5.0/BCrypt.Net-Next.xml",
+ "lib/net6.0/BCrypt.Net-Next.dll",
+ "lib/net6.0/BCrypt.Net-Next.xml",
+ "lib/netstandard2.0/BCrypt.Net-Next.dll",
+ "lib/netstandard2.0/BCrypt.Net-Next.xml",
+ "lib/netstandard2.1/BCrypt.Net-Next.dll",
+ "lib/netstandard2.1/BCrypt.Net-Next.xml",
+ "readme.md"
+ ]
+ },
+ "DnsClient/1.6.1": {
+ "sha512": "4H/f2uYJOZ+YObZjpY9ABrKZI+JNw3uizp6oMzTXwDw6F+2qIPhpRl/1t68O/6e98+vqNiYGu+lswmwdYUy3gg==",
+ "type": "package",
+ "path": "dnsclient/1.6.1",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "dnsclient.1.6.1.nupkg.sha512",
+ "dnsclient.nuspec",
+ "icon.png",
+ "lib/net45/DnsClient.dll",
+ "lib/net45/DnsClient.xml",
+ "lib/net471/DnsClient.dll",
+ "lib/net471/DnsClient.xml",
+ "lib/net5.0/DnsClient.dll",
+ "lib/net5.0/DnsClient.xml",
+ "lib/netstandard1.3/DnsClient.dll",
+ "lib/netstandard1.3/DnsClient.xml",
+ "lib/netstandard2.0/DnsClient.dll",
+ "lib/netstandard2.0/DnsClient.xml",
+ "lib/netstandard2.1/DnsClient.dll",
+ "lib/netstandard2.1/DnsClient.xml"
+ ]
+ },
+ "Microsoft.AspNetCore.Authentication.JwtBearer/9.0.8": {
+ "sha512": "pEuE/xaXHk2Rr2YiTraS7i2MNoTXSnX79VlJcdKx9MczrhDfBO4tHdF4HWOo542WPbjSeZx2PFjmHygo0XnK3Q==",
+ "type": "package",
+ "path": "microsoft.aspnetcore.authentication.jwtbearer/9.0.8",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "PACKAGE.md",
+ "THIRD-PARTY-NOTICES.TXT",
+ "lib/net9.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll",
+ "lib/net9.0/Microsoft.AspNetCore.Authentication.JwtBearer.xml",
+ "microsoft.aspnetcore.authentication.jwtbearer.9.0.8.nupkg.sha512",
+ "microsoft.aspnetcore.authentication.jwtbearer.nuspec"
+ ]
+ },
+ "Microsoft.AspNetCore.OpenApi/9.0.4": {
+ "sha512": "GfZWPbZz1aAtEO3wGCkpeyRc0gzr/+VRHnUgY/YjqVPDlHbeKWCXw3IxKarQdo9myC2O1QBf652Mo50QqbXYRg==",
+ "type": "package",
+ "path": "microsoft.aspnetcore.openapi/9.0.4",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "PACKAGE.md",
+ "THIRD-PARTY-NOTICES.TXT",
+ "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll",
+ "lib/net9.0/Microsoft.AspNetCore.OpenApi.xml",
+ "microsoft.aspnetcore.openapi.9.0.4.nupkg.sha512",
+ "microsoft.aspnetcore.openapi.nuspec"
+ ]
+ },
+ "Microsoft.Extensions.Logging.Abstractions/2.0.0": {
+ "sha512": "6ZCllUYGFukkymSTx3Yr0G/ajRxoNJp7/FqSxSB4fGISST54ifBhgu4Nc0ItGi3i6DqwuNd8SUyObmiC++AO2Q==",
+ "type": "package",
+ "path": "microsoft.extensions.logging.abstractions/2.0.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll",
+ "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml",
+ "microsoft.extensions.logging.abstractions.2.0.0.nupkg.sha512",
+ "microsoft.extensions.logging.abstractions.nuspec"
+ ]
+ },
+ "Microsoft.IdentityModel.Abstractions/8.0.1": {
+ "sha512": "OtlIWcyX01olfdevPKZdIPfBEvbcioDyBiE/Z2lHsopsMD7twcKtlN9kMevHmI5IIPhFpfwCIiR6qHQz1WHUIw==",
+ "type": "package",
+ "path": "microsoft.identitymodel.abstractions/8.0.1",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net462/Microsoft.IdentityModel.Abstractions.dll",
+ "lib/net462/Microsoft.IdentityModel.Abstractions.xml",
+ "lib/net472/Microsoft.IdentityModel.Abstractions.dll",
+ "lib/net472/Microsoft.IdentityModel.Abstractions.xml",
+ "lib/net6.0/Microsoft.IdentityModel.Abstractions.dll",
+ "lib/net6.0/Microsoft.IdentityModel.Abstractions.xml",
+ "lib/net8.0/Microsoft.IdentityModel.Abstractions.dll",
+ "lib/net8.0/Microsoft.IdentityModel.Abstractions.xml",
+ "lib/net9.0/Microsoft.IdentityModel.Abstractions.dll",
+ "lib/net9.0/Microsoft.IdentityModel.Abstractions.xml",
+ "lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.dll",
+ "lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.xml",
+ "microsoft.identitymodel.abstractions.8.0.1.nupkg.sha512",
+ "microsoft.identitymodel.abstractions.nuspec"
+ ]
+ },
+ "Microsoft.IdentityModel.JsonWebTokens/8.0.1": {
+ "sha512": "s6++gF9x0rQApQzOBbSyp4jUaAlwm+DroKfL8gdOHxs83k8SJfUXhuc46rDB3rNXBQ1MVRxqKUrqFhO/M0E97g==",
+ "type": "package",
+ "path": "microsoft.identitymodel.jsonwebtokens/8.0.1",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net462/Microsoft.IdentityModel.JsonWebTokens.dll",
+ "lib/net462/Microsoft.IdentityModel.JsonWebTokens.xml",
+ "lib/net472/Microsoft.IdentityModel.JsonWebTokens.dll",
+ "lib/net472/Microsoft.IdentityModel.JsonWebTokens.xml",
+ "lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll",
+ "lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.xml",
+ "lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll",
+ "lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.xml",
+ "lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.dll",
+ "lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.xml",
+ "lib/netstandard2.0/Microsoft.IdentityModel.JsonWebTokens.dll",
+ "lib/netstandard2.0/Microsoft.IdentityModel.JsonWebTokens.xml",
+ "microsoft.identitymodel.jsonwebtokens.8.0.1.nupkg.sha512",
+ "microsoft.identitymodel.jsonwebtokens.nuspec"
+ ]
+ },
+ "Microsoft.IdentityModel.Logging/8.0.1": {
+ "sha512": "UCPF2exZqBXe7v/6sGNiM6zCQOUXXQ9+v5VTb9gPB8ZSUPnX53BxlN78v2jsbIvK9Dq4GovQxo23x8JgWvm/Qg==",
+ "type": "package",
+ "path": "microsoft.identitymodel.logging/8.0.1",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net462/Microsoft.IdentityModel.Logging.dll",
+ "lib/net462/Microsoft.IdentityModel.Logging.xml",
+ "lib/net472/Microsoft.IdentityModel.Logging.dll",
+ "lib/net472/Microsoft.IdentityModel.Logging.xml",
+ "lib/net6.0/Microsoft.IdentityModel.Logging.dll",
+ "lib/net6.0/Microsoft.IdentityModel.Logging.xml",
+ "lib/net8.0/Microsoft.IdentityModel.Logging.dll",
+ "lib/net8.0/Microsoft.IdentityModel.Logging.xml",
+ "lib/net9.0/Microsoft.IdentityModel.Logging.dll",
+ "lib/net9.0/Microsoft.IdentityModel.Logging.xml",
+ "lib/netstandard2.0/Microsoft.IdentityModel.Logging.dll",
+ "lib/netstandard2.0/Microsoft.IdentityModel.Logging.xml",
+ "microsoft.identitymodel.logging.8.0.1.nupkg.sha512",
+ "microsoft.identitymodel.logging.nuspec"
+ ]
+ },
+ "Microsoft.IdentityModel.Protocols/8.0.1": {
+ "sha512": "uA2vpKqU3I2mBBEaeJAWPTjT9v1TZrGWKdgK6G5qJd03CLx83kdiqO9cmiK8/n1erkHzFBwU/RphP83aAe3i3g==",
+ "type": "package",
+ "path": "microsoft.identitymodel.protocols/8.0.1",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net462/Microsoft.IdentityModel.Protocols.dll",
+ "lib/net462/Microsoft.IdentityModel.Protocols.xml",
+ "lib/net472/Microsoft.IdentityModel.Protocols.dll",
+ "lib/net472/Microsoft.IdentityModel.Protocols.xml",
+ "lib/net6.0/Microsoft.IdentityModel.Protocols.dll",
+ "lib/net6.0/Microsoft.IdentityModel.Protocols.xml",
+ "lib/net8.0/Microsoft.IdentityModel.Protocols.dll",
+ "lib/net8.0/Microsoft.IdentityModel.Protocols.xml",
+ "lib/net9.0/Microsoft.IdentityModel.Protocols.dll",
+ "lib/net9.0/Microsoft.IdentityModel.Protocols.xml",
+ "lib/netstandard2.0/Microsoft.IdentityModel.Protocols.dll",
+ "lib/netstandard2.0/Microsoft.IdentityModel.Protocols.xml",
+ "microsoft.identitymodel.protocols.8.0.1.nupkg.sha512",
+ "microsoft.identitymodel.protocols.nuspec"
+ ]
+ },
+ "Microsoft.IdentityModel.Protocols.OpenIdConnect/8.0.1": {
+ "sha512": "AQDbfpL+yzuuGhO/mQhKNsp44pm5Jv8/BI4KiFXR7beVGZoSH35zMV3PrmcfvSTsyI6qrcR898NzUauD6SRigg==",
+ "type": "package",
+ "path": "microsoft.identitymodel.protocols.openidconnect/8.0.1",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net462/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll",
+ "lib/net462/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml",
+ "lib/net472/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll",
+ "lib/net472/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml",
+ "lib/net6.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll",
+ "lib/net6.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml",
+ "lib/net8.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll",
+ "lib/net8.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml",
+ "lib/net9.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll",
+ "lib/net9.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml",
+ "lib/netstandard2.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll",
+ "lib/netstandard2.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml",
+ "microsoft.identitymodel.protocols.openidconnect.8.0.1.nupkg.sha512",
+ "microsoft.identitymodel.protocols.openidconnect.nuspec"
+ ]
+ },
+ "Microsoft.IdentityModel.Tokens/8.0.1": {
+ "sha512": "kDimB6Dkd3nkW2oZPDkMkVHfQt3IDqO5gL0oa8WVy3OP4uE8Ij+8TXnqg9TOd9ufjsY3IDiGz7pCUbnfL18tjg==",
+ "type": "package",
+ "path": "microsoft.identitymodel.tokens/8.0.1",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net462/Microsoft.IdentityModel.Tokens.dll",
+ "lib/net462/Microsoft.IdentityModel.Tokens.xml",
+ "lib/net472/Microsoft.IdentityModel.Tokens.dll",
+ "lib/net472/Microsoft.IdentityModel.Tokens.xml",
+ "lib/net6.0/Microsoft.IdentityModel.Tokens.dll",
+ "lib/net6.0/Microsoft.IdentityModel.Tokens.xml",
+ "lib/net8.0/Microsoft.IdentityModel.Tokens.dll",
+ "lib/net8.0/Microsoft.IdentityModel.Tokens.xml",
+ "lib/net9.0/Microsoft.IdentityModel.Tokens.dll",
+ "lib/net9.0/Microsoft.IdentityModel.Tokens.xml",
+ "lib/netstandard2.0/Microsoft.IdentityModel.Tokens.dll",
+ "lib/netstandard2.0/Microsoft.IdentityModel.Tokens.xml",
+ "microsoft.identitymodel.tokens.8.0.1.nupkg.sha512",
+ "microsoft.identitymodel.tokens.nuspec"
+ ]
+ },
+ "Microsoft.NETCore.Platforms/5.0.0": {
+ "sha512": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
+ "type": "package",
+ "path": "microsoft.netcore.platforms/5.0.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "lib/netstandard1.0/_._",
+ "microsoft.netcore.platforms.5.0.0.nupkg.sha512",
+ "microsoft.netcore.platforms.nuspec",
+ "runtime.json",
+ "useSharedDesignerContext.txt",
+ "version.txt"
+ ]
+ },
+ "Microsoft.OpenApi/1.6.17": {
+ "sha512": "Le+kehlmrlQfuDFUt1zZ2dVwrhFQtKREdKBo+rexOwaCoYP0/qpgT9tLxCsZjsgR5Itk1UKPcbgO+FyaNid/bA==",
+ "type": "package",
+ "path": "microsoft.openapi/1.6.17",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "README.md",
+ "lib/netstandard2.0/Microsoft.OpenApi.dll",
+ "lib/netstandard2.0/Microsoft.OpenApi.pdb",
+ "lib/netstandard2.0/Microsoft.OpenApi.xml",
+ "microsoft.openapi.1.6.17.nupkg.sha512",
+ "microsoft.openapi.nuspec"
+ ]
+ },
+ "Microsoft.Win32.Registry/5.0.0": {
+ "sha512": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
+ "type": "package",
+ "path": "microsoft.win32.registry/5.0.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "lib/net46/Microsoft.Win32.Registry.dll",
+ "lib/net461/Microsoft.Win32.Registry.dll",
+ "lib/net461/Microsoft.Win32.Registry.xml",
+ "lib/netstandard1.3/Microsoft.Win32.Registry.dll",
+ "lib/netstandard2.0/Microsoft.Win32.Registry.dll",
+ "lib/netstandard2.0/Microsoft.Win32.Registry.xml",
+ "microsoft.win32.registry.5.0.0.nupkg.sha512",
+ "microsoft.win32.registry.nuspec",
+ "ref/net46/Microsoft.Win32.Registry.dll",
+ "ref/net461/Microsoft.Win32.Registry.dll",
+ "ref/net461/Microsoft.Win32.Registry.xml",
+ "ref/netstandard1.3/Microsoft.Win32.Registry.dll",
+ "ref/netstandard1.3/Microsoft.Win32.Registry.xml",
+ "ref/netstandard1.3/de/Microsoft.Win32.Registry.xml",
+ "ref/netstandard1.3/es/Microsoft.Win32.Registry.xml",
+ "ref/netstandard1.3/fr/Microsoft.Win32.Registry.xml",
+ "ref/netstandard1.3/it/Microsoft.Win32.Registry.xml",
+ "ref/netstandard1.3/ja/Microsoft.Win32.Registry.xml",
+ "ref/netstandard1.3/ko/Microsoft.Win32.Registry.xml",
+ "ref/netstandard1.3/ru/Microsoft.Win32.Registry.xml",
+ "ref/netstandard1.3/zh-hans/Microsoft.Win32.Registry.xml",
+ "ref/netstandard1.3/zh-hant/Microsoft.Win32.Registry.xml",
+ "ref/netstandard2.0/Microsoft.Win32.Registry.dll",
+ "ref/netstandard2.0/Microsoft.Win32.Registry.xml",
+ "runtimes/win/lib/net46/Microsoft.Win32.Registry.dll",
+ "runtimes/win/lib/net461/Microsoft.Win32.Registry.dll",
+ "runtimes/win/lib/net461/Microsoft.Win32.Registry.xml",
+ "runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll",
+ "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll",
+ "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.xml",
+ "useSharedDesignerContext.txt",
+ "version.txt"
+ ]
+ },
+ "MongoDB.Bson/3.4.3": {
+ "sha512": "ZB2nCdlWtmDGItkDFh2E2kfYlXaItG414t9Np7CZhpftLypemYnxtdI52H+0b8RPqoUJD7bUvrf598sDTJd5iA==",
+ "type": "package",
+ "path": "mongodb.bson/3.4.3",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "README.md",
+ "lib/net472/MongoDB.Bson.dll",
+ "lib/net472/MongoDB.Bson.xml",
+ "lib/net6.0/MongoDB.Bson.dll",
+ "lib/net6.0/MongoDB.Bson.xml",
+ "lib/netstandard2.1/MongoDB.Bson.dll",
+ "lib/netstandard2.1/MongoDB.Bson.xml",
+ "mongodb.bson.3.4.3.nupkg.sha512",
+ "mongodb.bson.nuspec",
+ "packageIcon.png"
+ ]
+ },
+ "MongoDB.Driver/3.4.3": {
+ "sha512": "yE6XQiDoFwTH4Xq/STJCbzsz+74RuzCXU45g9gaWFlLyy95xG8utuj+e64uXSbONtzabbp1O/8vfA3/HJXL6Pg==",
+ "type": "package",
+ "path": "mongodb.driver/3.4.3",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "README.md",
+ "lib/net472/MongoDB.Driver.dll",
+ "lib/net472/MongoDB.Driver.xml",
+ "lib/net6.0/MongoDB.Driver.dll",
+ "lib/net6.0/MongoDB.Driver.xml",
+ "lib/netstandard2.1/MongoDB.Driver.dll",
+ "lib/netstandard2.1/MongoDB.Driver.xml",
+ "mongodb.driver.3.4.3.nupkg.sha512",
+ "mongodb.driver.nuspec",
+ "packageIcon.png"
+ ]
+ },
+ "SharpCompress/0.30.1": {
+ "sha512": "XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==",
+ "type": "package",
+ "path": "sharpcompress/0.30.1",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net461/SharpCompress.dll",
+ "lib/net5.0/SharpCompress.dll",
+ "lib/netcoreapp3.1/SharpCompress.dll",
+ "lib/netstandard2.0/SharpCompress.dll",
+ "lib/netstandard2.1/SharpCompress.dll",
+ "sharpcompress.0.30.1.nupkg.sha512",
+ "sharpcompress.nuspec"
+ ]
+ },
+ "Snappier/1.0.0": {
+ "sha512": "rFtK2KEI9hIe8gtx3a0YDXdHOpedIf9wYCEYtBEmtlyiWVX3XlCNV03JrmmAi/Cdfn7dxK+k0sjjcLv4fpHnqA==",
+ "type": "package",
+ "path": "snappier/1.0.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "COPYING.txt",
+ "lib/net5.0/Snappier.dll",
+ "lib/net5.0/Snappier.xml",
+ "lib/netcoreapp3.0/Snappier.dll",
+ "lib/netcoreapp3.0/Snappier.xml",
+ "lib/netstandard2.0/Snappier.dll",
+ "lib/netstandard2.0/Snappier.xml",
+ "lib/netstandard2.1/Snappier.dll",
+ "lib/netstandard2.1/Snappier.xml",
+ "snappier.1.0.0.nupkg.sha512",
+ "snappier.nuspec"
+ ]
+ },
+ "System.Buffers/4.5.1": {
+ "sha512": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
+ "type": "package",
+ "path": "system.buffers/4.5.1",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "lib/net461/System.Buffers.dll",
+ "lib/net461/System.Buffers.xml",
+ "lib/netcoreapp2.0/_._",
+ "lib/netstandard1.1/System.Buffers.dll",
+ "lib/netstandard1.1/System.Buffers.xml",
+ "lib/netstandard2.0/System.Buffers.dll",
+ "lib/netstandard2.0/System.Buffers.xml",
+ "lib/uap10.0.16299/_._",
+ "ref/net45/System.Buffers.dll",
+ "ref/net45/System.Buffers.xml",
+ "ref/netcoreapp2.0/_._",
+ "ref/netstandard1.1/System.Buffers.dll",
+ "ref/netstandard1.1/System.Buffers.xml",
+ "ref/netstandard2.0/System.Buffers.dll",
+ "ref/netstandard2.0/System.Buffers.xml",
+ "ref/uap10.0.16299/_._",
+ "system.buffers.4.5.1.nupkg.sha512",
+ "system.buffers.nuspec",
+ "useSharedDesignerContext.txt",
+ "version.txt"
+ ]
+ },
+ "System.IdentityModel.Tokens.Jwt/8.0.1": {
+ "sha512": "GJw3bYkWpOgvN3tJo5X4lYUeIFA2HD293FPUhKmp7qxS+g5ywAb34Dnd3cDAFLkcMohy5XTpoaZ4uAHuw0uSPQ==",
+ "type": "package",
+ "path": "system.identitymodel.tokens.jwt/8.0.1",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net462/System.IdentityModel.Tokens.Jwt.dll",
+ "lib/net462/System.IdentityModel.Tokens.Jwt.xml",
+ "lib/net472/System.IdentityModel.Tokens.Jwt.dll",
+ "lib/net472/System.IdentityModel.Tokens.Jwt.xml",
+ "lib/net6.0/System.IdentityModel.Tokens.Jwt.dll",
+ "lib/net6.0/System.IdentityModel.Tokens.Jwt.xml",
+ "lib/net8.0/System.IdentityModel.Tokens.Jwt.dll",
+ "lib/net8.0/System.IdentityModel.Tokens.Jwt.xml",
+ "lib/net9.0/System.IdentityModel.Tokens.Jwt.dll",
+ "lib/net9.0/System.IdentityModel.Tokens.Jwt.xml",
+ "lib/netstandard2.0/System.IdentityModel.Tokens.Jwt.dll",
+ "lib/netstandard2.0/System.IdentityModel.Tokens.Jwt.xml",
+ "system.identitymodel.tokens.jwt.8.0.1.nupkg.sha512",
+ "system.identitymodel.tokens.jwt.nuspec"
+ ]
+ },
+ "System.Memory/4.5.5": {
+ "sha512": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "type": "package",
+ "path": "system.memory/4.5.5",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "lib/net461/System.Memory.dll",
+ "lib/net461/System.Memory.xml",
+ "lib/netcoreapp2.1/_._",
+ "lib/netstandard1.1/System.Memory.dll",
+ "lib/netstandard1.1/System.Memory.xml",
+ "lib/netstandard2.0/System.Memory.dll",
+ "lib/netstandard2.0/System.Memory.xml",
+ "ref/netcoreapp2.1/_._",
+ "system.memory.4.5.5.nupkg.sha512",
+ "system.memory.nuspec",
+ "useSharedDesignerContext.txt",
+ "version.txt"
+ ]
+ },
+ "System.Runtime.CompilerServices.Unsafe/5.0.0": {
+ "sha512": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==",
+ "type": "package",
+ "path": "system.runtime.compilerservices.unsafe/5.0.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "lib/net45/System.Runtime.CompilerServices.Unsafe.dll",
+ "lib/net45/System.Runtime.CompilerServices.Unsafe.xml",
+ "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll",
+ "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.xml",
+ "lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll",
+ "lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml",
+ "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll",
+ "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml",
+ "ref/net461/System.Runtime.CompilerServices.Unsafe.dll",
+ "ref/net461/System.Runtime.CompilerServices.Unsafe.xml",
+ "ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll",
+ "ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml",
+ "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll",
+ "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml",
+ "ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.dll",
+ "ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.xml",
+ "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512",
+ "system.runtime.compilerservices.unsafe.nuspec",
+ "useSharedDesignerContext.txt",
+ "version.txt"
+ ]
+ },
+ "System.Security.AccessControl/5.0.0": {
+ "sha512": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
+ "type": "package",
+ "path": "system.security.accesscontrol/5.0.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "lib/net46/System.Security.AccessControl.dll",
+ "lib/net461/System.Security.AccessControl.dll",
+ "lib/net461/System.Security.AccessControl.xml",
+ "lib/netstandard1.3/System.Security.AccessControl.dll",
+ "lib/netstandard2.0/System.Security.AccessControl.dll",
+ "lib/netstandard2.0/System.Security.AccessControl.xml",
+ "lib/uap10.0.16299/_._",
+ "ref/net46/System.Security.AccessControl.dll",
+ "ref/net461/System.Security.AccessControl.dll",
+ "ref/net461/System.Security.AccessControl.xml",
+ "ref/netstandard1.3/System.Security.AccessControl.dll",
+ "ref/netstandard1.3/System.Security.AccessControl.xml",
+ "ref/netstandard1.3/de/System.Security.AccessControl.xml",
+ "ref/netstandard1.3/es/System.Security.AccessControl.xml",
+ "ref/netstandard1.3/fr/System.Security.AccessControl.xml",
+ "ref/netstandard1.3/it/System.Security.AccessControl.xml",
+ "ref/netstandard1.3/ja/System.Security.AccessControl.xml",
+ "ref/netstandard1.3/ko/System.Security.AccessControl.xml",
+ "ref/netstandard1.3/ru/System.Security.AccessControl.xml",
+ "ref/netstandard1.3/zh-hans/System.Security.AccessControl.xml",
+ "ref/netstandard1.3/zh-hant/System.Security.AccessControl.xml",
+ "ref/netstandard2.0/System.Security.AccessControl.dll",
+ "ref/netstandard2.0/System.Security.AccessControl.xml",
+ "ref/uap10.0.16299/_._",
+ "runtimes/win/lib/net46/System.Security.AccessControl.dll",
+ "runtimes/win/lib/net461/System.Security.AccessControl.dll",
+ "runtimes/win/lib/net461/System.Security.AccessControl.xml",
+ "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll",
+ "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.xml",
+ "runtimes/win/lib/netstandard1.3/System.Security.AccessControl.dll",
+ "runtimes/win/lib/uap10.0.16299/_._",
+ "system.security.accesscontrol.5.0.0.nupkg.sha512",
+ "system.security.accesscontrol.nuspec",
+ "useSharedDesignerContext.txt",
+ "version.txt"
+ ]
+ },
+ "System.Security.Principal.Windows/5.0.0": {
+ "sha512": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==",
+ "type": "package",
+ "path": "system.security.principal.windows/5.0.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "lib/net46/System.Security.Principal.Windows.dll",
+ "lib/net461/System.Security.Principal.Windows.dll",
+ "lib/net461/System.Security.Principal.Windows.xml",
+ "lib/netstandard1.3/System.Security.Principal.Windows.dll",
+ "lib/netstandard2.0/System.Security.Principal.Windows.dll",
+ "lib/netstandard2.0/System.Security.Principal.Windows.xml",
+ "lib/uap10.0.16299/_._",
+ "ref/net46/System.Security.Principal.Windows.dll",
+ "ref/net461/System.Security.Principal.Windows.dll",
+ "ref/net461/System.Security.Principal.Windows.xml",
+ "ref/netcoreapp3.0/System.Security.Principal.Windows.dll",
+ "ref/netcoreapp3.0/System.Security.Principal.Windows.xml",
+ "ref/netstandard1.3/System.Security.Principal.Windows.dll",
+ "ref/netstandard1.3/System.Security.Principal.Windows.xml",
+ "ref/netstandard1.3/de/System.Security.Principal.Windows.xml",
+ "ref/netstandard1.3/es/System.Security.Principal.Windows.xml",
+ "ref/netstandard1.3/fr/System.Security.Principal.Windows.xml",
+ "ref/netstandard1.3/it/System.Security.Principal.Windows.xml",
+ "ref/netstandard1.3/ja/System.Security.Principal.Windows.xml",
+ "ref/netstandard1.3/ko/System.Security.Principal.Windows.xml",
+ "ref/netstandard1.3/ru/System.Security.Principal.Windows.xml",
+ "ref/netstandard1.3/zh-hans/System.Security.Principal.Windows.xml",
+ "ref/netstandard1.3/zh-hant/System.Security.Principal.Windows.xml",
+ "ref/netstandard2.0/System.Security.Principal.Windows.dll",
+ "ref/netstandard2.0/System.Security.Principal.Windows.xml",
+ "ref/uap10.0.16299/_._",
+ "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.dll",
+ "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.xml",
+ "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll",
+ "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.xml",
+ "runtimes/win/lib/net46/System.Security.Principal.Windows.dll",
+ "runtimes/win/lib/net461/System.Security.Principal.Windows.dll",
+ "runtimes/win/lib/net461/System.Security.Principal.Windows.xml",
+ "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.dll",
+ "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.xml",
+ "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll",
+ "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.xml",
+ "runtimes/win/lib/netstandard1.3/System.Security.Principal.Windows.dll",
+ "runtimes/win/lib/uap10.0.16299/_._",
+ "system.security.principal.windows.5.0.0.nupkg.sha512",
+ "system.security.principal.windows.nuspec",
+ "useSharedDesignerContext.txt",
+ "version.txt"
+ ]
+ },
+ "ZstdSharp.Port/0.7.3": {
+ "sha512": "U9Ix4l4cl58Kzz1rJzj5hoVTjmbx1qGMwzAcbv1j/d3NzrFaESIurQyg+ow4mivCgkE3S413y+U9k4WdnEIkRA==",
+ "type": "package",
+ "path": "zstdsharp.port/0.7.3",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net461/ZstdSharp.dll",
+ "lib/net5.0/ZstdSharp.dll",
+ "lib/net6.0/ZstdSharp.dll",
+ "lib/net7.0/ZstdSharp.dll",
+ "lib/netcoreapp3.1/ZstdSharp.dll",
+ "lib/netstandard2.0/ZstdSharp.dll",
+ "lib/netstandard2.1/ZstdSharp.dll",
+ "zstdsharp.port.0.7.3.nupkg.sha512",
+ "zstdsharp.port.nuspec"
+ ]
+ }
+ },
+ "projectFileDependencyGroups": {
+ "net9.0": [
+ "Bcrypt.Net-Next >= 4.0.3",
+ "Microsoft.AspNetCore.Authentication.JwtBearer >= 9.0.8",
+ "Microsoft.AspNetCore.OpenApi >= 9.0.4",
+ "MongoDB.Driver >= 3.4.3"
+ ]
+ },
+ "packageFolders": {
+ "C:\\Users\\hz-vm\\.nuget\\packages\\": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\hz-vm\\Desktop\\micro-services\\Auth\\Auth.csproj",
+ "projectName": "Auth",
+ "projectPath": "C:\\Users\\hz-vm\\Desktop\\micro-services\\Auth\\Auth.csproj",
+ "packagesPath": "C:\\Users\\hz-vm\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\hz-vm\\Desktop\\micro-services\\Auth\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\hz-vm\\AppData\\Roaming\\NuGet\\NuGet.Config"
+ ],
+ "originalTargetFrameworks": [
+ "net9.0"
+ ],
+ "sources": {
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net9.0": {
+ "targetAlias": "net9.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ },
+ "restoreAuditProperties": {
+ "enableAudit": "true",
+ "auditLevel": "low",
+ "auditMode": "direct"
+ },
+ "SdkAnalysisLevel": "9.0.200"
+ },
+ "frameworks": {
+ "net9.0": {
+ "targetAlias": "net9.0",
+ "dependencies": {
+ "Bcrypt.Net-Next": {
+ "target": "Package",
+ "version": "[4.0.3, )"
+ },
+ "Microsoft.AspNetCore.Authentication.JwtBearer": {
+ "target": "Package",
+ "version": "[9.0.8, )"
+ },
+ "Microsoft.AspNetCore.OpenApi": {
+ "target": "Package",
+ "version": "[9.0.4, )"
+ },
+ "MongoDB.Driver": {
+ "target": "Package",
+ "version": "[3.4.3, )"
+ }
+ },
+ "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:\\Program Files\\dotnet\\sdk\\9.0.203/PortableRuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/microservices/Auth/obj/project.nuget.cache b/microservices/Auth/obj/project.nuget.cache
new file mode 100644
index 0000000..cc6e98c
--- /dev/null
+++ b/microservices/Auth/obj/project.nuget.cache
@@ -0,0 +1,34 @@
+{
+ "version": 2,
+ "dgSpecHash": "eAAcl+OtbvI=",
+ "success": true,
+ "projectFilePath": "C:\\Users\\hz-vm\\Desktop\\micro-services\\Auth\\Auth.csproj",
+ "expectedPackageFiles": [
+ "C:\\Users\\hz-vm\\.nuget\\packages\\bcrypt.net-next\\4.0.3\\bcrypt.net-next.4.0.3.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\dnsclient\\1.6.1\\dnsclient.1.6.1.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.aspnetcore.authentication.jwtbearer\\9.0.8\\microsoft.aspnetcore.authentication.jwtbearer.9.0.8.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.aspnetcore.openapi\\9.0.4\\microsoft.aspnetcore.openapi.9.0.4.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\2.0.0\\microsoft.extensions.logging.abstractions.2.0.0.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.identitymodel.abstractions\\8.0.1\\microsoft.identitymodel.abstractions.8.0.1.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.identitymodel.jsonwebtokens\\8.0.1\\microsoft.identitymodel.jsonwebtokens.8.0.1.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.identitymodel.logging\\8.0.1\\microsoft.identitymodel.logging.8.0.1.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.identitymodel.protocols\\8.0.1\\microsoft.identitymodel.protocols.8.0.1.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.identitymodel.protocols.openidconnect\\8.0.1\\microsoft.identitymodel.protocols.openidconnect.8.0.1.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.identitymodel.tokens\\8.0.1\\microsoft.identitymodel.tokens.8.0.1.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.netcore.platforms\\5.0.0\\microsoft.netcore.platforms.5.0.0.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.openapi\\1.6.17\\microsoft.openapi.1.6.17.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\microsoft.win32.registry\\5.0.0\\microsoft.win32.registry.5.0.0.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\mongodb.bson\\3.4.3\\mongodb.bson.3.4.3.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\mongodb.driver\\3.4.3\\mongodb.driver.3.4.3.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\sharpcompress\\0.30.1\\sharpcompress.0.30.1.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\snappier\\1.0.0\\snappier.1.0.0.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\system.identitymodel.tokens.jwt\\8.0.1\\system.identitymodel.tokens.jwt.8.0.1.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\system.memory\\4.5.5\\system.memory.4.5.5.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\5.0.0\\system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\system.security.accesscontrol\\5.0.0\\system.security.accesscontrol.5.0.0.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\system.security.principal.windows\\5.0.0\\system.security.principal.windows.5.0.0.nupkg.sha512",
+ "C:\\Users\\hz-vm\\.nuget\\packages\\zstdsharp.port\\0.7.3\\zstdsharp.port.0.7.3.nupkg.sha512"
+ ],
+ "logs": []
+}
\ No newline at end of file
diff --git a/microservices/README.md b/microservices/README.md
new file mode 100644
index 0000000..1b199f0
--- /dev/null
+++ b/microservices/README.md
@@ -0,0 +1,2 @@
+# micro-services
+
diff --git a/microservices/micro-services.sln b/microservices/micro-services.sln
new file mode 100644
index 0000000..20d3799
--- /dev/null
+++ b/microservices/micro-services.sln
@@ -0,0 +1,24 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.2.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Auth", "Auth\Auth.csproj", "{334F3B23-EFE8-6F1A-5E5F-9A2275D56E28}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {334F3B23-EFE8-6F1A-5E5F-9A2275D56E28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {334F3B23-EFE8-6F1A-5E5F-9A2275D56E28}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {334F3B23-EFE8-6F1A-5E5F-9A2275D56E28}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {334F3B23-EFE8-6F1A-5E5F-9A2275D56E28}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {F82C87CC-7411-493D-A138-491A81FBCC32}
+ EndGlobalSection
+EndGlobal