protecting api

This commit is contained in:
Paul Schneider
2021-04-08 03:08:20 +01:00
parent 3b7e286a5b
commit 5b6d74d8ee
6 changed files with 46 additions and 7 deletions

View File

@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using NuGet.Packaging;
@ -12,21 +14,29 @@ namespace nuget_host.Controllers
public class PackagesController : Controller
{
private ILogger<PackagesController> logger;
private IDataProtector protector;
public PackagesController(ILoggerFactory loggerFactory)
public PackagesController(ILoggerFactory loggerFactory, IDataProtectionProvider provider)
{
logger = loggerFactory.CreateLogger<PackagesController>();
protector = provider.CreateProtector("Packages.v1");
}
[HttpPut("packages/{*spec}")]
public IActionResult Put(string spec)
{
string path = null;
if (string.IsNullOrEmpty(spec))
{
var clientVersionId = Request.Headers["X-NuGet-Client-Version"];
var apiKey = Request.Headers["X-NuGet-ApiKey"];
ViewData["nuget client "] = "nuget {clientVersionId}";
var clearkey = protector.Unprotect(apiKey);
if (clearkey!= Startup.RootApiKeySecret)
return Unauthorized();
foreach (var file in Request.Form.Files)
{
string initpath = "package.nupkg";
@ -109,5 +119,12 @@ namespace nuget_host.Controllers
}
return Ok(ViewData);
}
[Authorize]
[HttpGet("api/get-key/{*apikey}")]
public IActionResult GetApiKey(string apiKey)
{
return Ok(protector.Protect(apiKey));
}
}
}