From 1d1bb1bf4fc46d9970fdac7b3bb401df1f8e618d Mon Sep 17 00:00:00 2001 From: hz Date: Sun, 23 Nov 2025 00:40:39 -0600 Subject: [PATCH] Adding gitea runner and microservices --- .gitignore => game/.gitignore | 0 README.txt => game/README.txt | 0 {assets => game/assets}/audio/jump.ogg | Bin {assets => game/assets}/audio/jump.ogg.import | 0 .../assets}/audio/silly-menu-hover-test.ogg | Bin .../audio/silly-menu-hover-test.ogg.import | 0 {assets => game/assets}/audio/silly-test.ogg | Bin .../assets}/audio/silly-test.ogg.import | 0 .../PlayfairDisplay-VariableFont_wght.ttf | Bin ...ayfairDisplay-VariableFont_wght.ttf.import | 0 .../assets}/images/pp_start_bg.png | Bin .../assets}/images/pp_start_bg.png.import | 0 {assets => game/assets}/test.tscn | 0 {audio => game/audio}/bus_layout.tres | 0 export_presets.cfg => game/export_presets.cfg | 0 icon.svg => game/icon.svg | 0 icon.svg.import => game/icon.svg.import | 0 project.godot => game/project.godot | 0 {scenes => game/scenes}/Levels/level.tscn | 0 {scenes => game/scenes}/Levels/menu.gd | 0 {scenes => game/scenes}/Levels/menu.gd.uid | 0 {scenes => game/scenes}/UI/Settings.gd | 0 {scenes => game/scenes}/UI/Settings.gd.uid | 0 {scenes => game/scenes}/UI/Settings.tscn | 0 {scenes => game/scenes}/UI/menu_music.gd | 0 {scenes => game/scenes}/UI/menu_music.gd.uid | 0 {scenes => game/scenes}/UI/menu_music.tscn | 0 {scenes => game/scenes}/UI/menu_sfx.gd | 0 {scenes => game/scenes}/UI/menu_sfx.gd.uid | 0 {scenes => game/scenes}/UI/menu_sfx.tscn | 0 {scenes => game/scenes}/UI/start_screen.gd | 0 .../scenes}/UI/start_screen.gd.uid | 0 {scenes => game/scenes}/UI/start_screen.tscn | 0 {scenes => game/scenes}/block.tscn | 0 {scenes => game/scenes}/player.gd | 0 {scenes => game/scenes}/player.gd.uid | 0 {themes => game/themes}/button_theme.tres | 0 {themes => game/themes}/title_font_theme.tres | 0 gitea/workflows/k8s-smoke-test.yml | 18 + microservices/.gitignore | 14 + microservices/Auth/Auth.csproj | 17 + microservices/Auth/Auth.http | 6 + .../Auth/Controllers/AuthController.cs | 113 ++ microservices/Auth/Dockerfile | 21 + microservices/Auth/Models/Dto.cs | 6 + microservices/Auth/Models/User.cs | 16 + microservices/Auth/Program.cs | 86 ++ .../Auth/Properties/launchSettings.json | 23 + .../Auth/Services/BlacklistService.cs | 36 + microservices/Auth/Services/UserService.cs | 32 + .../Auth/appsettings.Development.json | 8 + microservices/Auth/appsettings.json | 7 + .../Auth/obj/Auth.csproj.nuget.dgspec.json | 88 ++ .../Auth/obj/Auth.csproj.nuget.g.props | 15 + .../Auth/obj/Auth.csproj.nuget.g.targets | 2 + microservices/Auth/obj/project.assets.json | 1101 +++++++++++++++++ microservices/Auth/obj/project.nuget.cache | 34 + microservices/README.md | 2 + microservices/micro-services.sln | 24 + 59 files changed, 1669 insertions(+) rename .gitignore => game/.gitignore (100%) rename README.txt => game/README.txt (100%) rename {assets => game/assets}/audio/jump.ogg (100%) rename {assets => game/assets}/audio/jump.ogg.import (100%) rename {assets => game/assets}/audio/silly-menu-hover-test.ogg (100%) rename {assets => game/assets}/audio/silly-menu-hover-test.ogg.import (100%) rename {assets => game/assets}/audio/silly-test.ogg (100%) rename {assets => game/assets}/audio/silly-test.ogg.import (100%) rename {assets => game/assets}/fonts/PlayfairDisplay-VariableFont_wght.ttf (100%) rename {assets => game/assets}/fonts/PlayfairDisplay-VariableFont_wght.ttf.import (100%) rename {assets => game/assets}/images/pp_start_bg.png (100%) rename {assets => game/assets}/images/pp_start_bg.png.import (100%) rename {assets => game/assets}/test.tscn (100%) rename {audio => game/audio}/bus_layout.tres (100%) rename export_presets.cfg => game/export_presets.cfg (100%) rename icon.svg => game/icon.svg (100%) rename icon.svg.import => game/icon.svg.import (100%) rename project.godot => game/project.godot (100%) rename {scenes => game/scenes}/Levels/level.tscn (100%) rename {scenes => game/scenes}/Levels/menu.gd (100%) rename {scenes => game/scenes}/Levels/menu.gd.uid (100%) rename {scenes => game/scenes}/UI/Settings.gd (100%) rename {scenes => game/scenes}/UI/Settings.gd.uid (100%) rename {scenes => game/scenes}/UI/Settings.tscn (100%) rename {scenes => game/scenes}/UI/menu_music.gd (100%) rename {scenes => game/scenes}/UI/menu_music.gd.uid (100%) rename {scenes => game/scenes}/UI/menu_music.tscn (100%) rename {scenes => game/scenes}/UI/menu_sfx.gd (100%) rename {scenes => game/scenes}/UI/menu_sfx.gd.uid (100%) rename {scenes => game/scenes}/UI/menu_sfx.tscn (100%) rename {scenes => game/scenes}/UI/start_screen.gd (100%) rename {scenes => game/scenes}/UI/start_screen.gd.uid (100%) rename {scenes => game/scenes}/UI/start_screen.tscn (100%) rename {scenes => game/scenes}/block.tscn (100%) rename {scenes => game/scenes}/player.gd (100%) rename {scenes => game/scenes}/player.gd.uid (100%) rename {themes => game/themes}/button_theme.tres (100%) rename {themes => game/themes}/title_font_theme.tres (100%) create mode 100644 gitea/workflows/k8s-smoke-test.yml create mode 100644 microservices/.gitignore create mode 100644 microservices/Auth/Auth.csproj create mode 100644 microservices/Auth/Auth.http create mode 100644 microservices/Auth/Controllers/AuthController.cs create mode 100644 microservices/Auth/Dockerfile create mode 100644 microservices/Auth/Models/Dto.cs create mode 100644 microservices/Auth/Models/User.cs create mode 100644 microservices/Auth/Program.cs create mode 100644 microservices/Auth/Properties/launchSettings.json create mode 100644 microservices/Auth/Services/BlacklistService.cs create mode 100644 microservices/Auth/Services/UserService.cs create mode 100644 microservices/Auth/appsettings.Development.json create mode 100644 microservices/Auth/appsettings.json create mode 100644 microservices/Auth/obj/Auth.csproj.nuget.dgspec.json create mode 100644 microservices/Auth/obj/Auth.csproj.nuget.g.props create mode 100644 microservices/Auth/obj/Auth.csproj.nuget.g.targets create mode 100644 microservices/Auth/obj/project.assets.json create mode 100644 microservices/Auth/obj/project.nuget.cache create mode 100644 microservices/README.md create mode 100644 microservices/micro-services.sln 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