fix: Use forigen key contrail
This commit is contained in:
parent
b14dcd9d21
commit
0d0c1c15df
@ -103,7 +103,7 @@ public class AuthenticationController(
|
||||
var exp = DateTime.UtcNow.AddDays(tokenService.RefreshTokenLifeTime);
|
||||
var refKey = new AppUserRefreshKey
|
||||
{
|
||||
UserId = user.Id,
|
||||
User = user,
|
||||
RefreshToken = refreshToken,
|
||||
ExpireIn = exp,
|
||||
};
|
||||
@ -139,7 +139,7 @@ public class AuthenticationController(
|
||||
|
||||
// Find valid expired refresh token
|
||||
var refreshToken = principal.FindFirst(FlawlessClaimsType.RefreshToken)?.Value;
|
||||
var tk = await set.FirstOrDefaultAsync(k => k.RefreshToken == refreshToken && k.UserId.ToString() == user.Id.ToString());
|
||||
var tk = await set.FirstOrDefaultAsync(k => k.RefreshToken == refreshToken && k.User == user);
|
||||
if (tk == null) return BadRequest(new FailedResponse("Token is ban. Please login again."));
|
||||
|
||||
// Renew keys
|
||||
@ -152,7 +152,7 @@ public class AuthenticationController(
|
||||
set.Remove(tk);
|
||||
set.Add(new AppUserRefreshKey
|
||||
{
|
||||
UserId = user.Id,
|
||||
User = user,
|
||||
RefreshToken = refreshToken,
|
||||
ExpireIn = exp,
|
||||
});
|
||||
@ -174,7 +174,7 @@ public class AuthenticationController(
|
||||
u.RenewSecurityStamp();
|
||||
|
||||
// Do not let tokens can be refresh
|
||||
await dbContext.RefreshTokens.Where(k => k.UserId == u.Id).ExecuteDeleteAsync();
|
||||
await dbContext.RefreshTokens.Where(k => k.User == u).ExecuteDeleteAsync();
|
||||
await dbContext.SaveChangesAsync();
|
||||
|
||||
return Ok();
|
||||
|
||||
@ -173,7 +173,7 @@ public class RepositoryInnieController(
|
||||
var grantIssue = await ValidateRepositoryAsync(userName, repositoryName, user, RepositoryRole.Owner);
|
||||
if (grantIssue is not Repository rp) return (IActionResult) grantIssue;
|
||||
|
||||
await webhookService.AddWebhookAsync(rp.Id, request.TargetUrl, request.EventType, request.Secret);
|
||||
await webhookService.AddWebhookAsync(rp, request.TargetUrl, request.EventType, request.Secret);
|
||||
return Created();
|
||||
}
|
||||
|
||||
@ -184,7 +184,7 @@ public class RepositoryInnieController(
|
||||
var grantIssue = await ValidateRepositoryAsync(userName, repositoryName, user, RepositoryRole.Developer);
|
||||
if (grantIssue is not Repository rp) return (ActionResult) grantIssue;
|
||||
|
||||
return Ok(await webhookService.GetWebhooksAsync(rp.Id));
|
||||
return Ok(await webhookService.GetWebhooksAsync(rp));
|
||||
}
|
||||
|
||||
[HttpPost("webhooks/{webhookId}/toggle")]
|
||||
@ -194,7 +194,7 @@ public class RepositoryInnieController(
|
||||
var grantIssue = await ValidateRepositoryAsync(userName, repositoryName, user, RepositoryRole.Owner);
|
||||
if (grantIssue is not Repository rp) return (ActionResult) grantIssue;
|
||||
|
||||
await webhookService.ToggleWebhookAsync(rp.Id, webhookId, activate);
|
||||
await webhookService.ToggleWebhookAsync(rp, webhookId, activate);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
@ -205,7 +205,7 @@ public class RepositoryInnieController(
|
||||
var grantIssue = await ValidateRepositoryAsync(userName, repositoryName, user, RepositoryRole.Owner);
|
||||
if (grantIssue is not Repository rp) return (ActionResult) grantIssue;
|
||||
|
||||
await webhookService.DeleteWebhookAsync(rp.Id, webhookId);
|
||||
await webhookService.DeleteWebhookAsync(rp, webhookId);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@ public class AppUserRefreshKey
|
||||
public required string RefreshToken { get; set; }
|
||||
|
||||
[Required]
|
||||
public required Guid UserId { get; set; }
|
||||
public required AppUser User { get; set; }
|
||||
|
||||
[Required]
|
||||
public required DateTime ExpireIn { get; set; }
|
||||
|
||||
@ -8,7 +8,7 @@ public class Webhook
|
||||
[Key]
|
||||
public int Id { get; set; }
|
||||
|
||||
public required Guid RepositoryId { get; set; }
|
||||
public required Repository Repository { get; set; }
|
||||
|
||||
public required string TargetUrl { get; set; }
|
||||
|
||||
|
||||
@ -14,14 +14,13 @@ public class WebhookService(
|
||||
IHttpClientFactory httpFactory,
|
||||
ILogger<WebhookService> logger)
|
||||
{
|
||||
public async Task AddWebhookAsync(Guid repoId, string targetUrl, WebhookEventType eventType, string? secret)
|
||||
public async Task AddWebhookAsync(Repository repo, string targetUrl, WebhookEventType eventType, string? secret)
|
||||
{
|
||||
// 新增参数校验
|
||||
if (string.IsNullOrWhiteSpace(targetUrl) || !Uri.TryCreate(targetUrl, UriKind.Absolute, out _))
|
||||
throw new ArgumentException("No valid target URL provided");
|
||||
|
||||
var webhook = new Webhook {
|
||||
RepositoryId = repoId,
|
||||
Repository = repo,
|
||||
TargetUrl = targetUrl,
|
||||
EventType = eventType,
|
||||
Secret = secret,
|
||||
@ -32,10 +31,13 @@ public class WebhookService(
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public async Task ToggleWebhookAsync(Guid repoId, int webhookId, bool activated)
|
||||
public async Task ToggleWebhookAsync(Repository repo, int webhookId, bool activated)
|
||||
{
|
||||
var hook = await context.Webhooks.FindAsync(webhookId);
|
||||
if (hook == null || hook.RepositoryId != repoId) return;
|
||||
var hook = await context.Webhooks
|
||||
.Include(x => x.Repository)
|
||||
.FirstOrDefaultAsync(x => x.Id == webhookId);
|
||||
|
||||
if (hook == null || hook.Repository != repo) return;
|
||||
|
||||
if (hook.IsActive == activated) return;
|
||||
|
||||
@ -44,28 +46,31 @@ public class WebhookService(
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public async Task DeleteWebhookAsync(Guid repoId, int webhookId)
|
||||
public async Task DeleteWebhookAsync(Repository repo, int webhookId)
|
||||
{
|
||||
var hook = await context.Webhooks.FindAsync(webhookId);
|
||||
if (hook == null || hook.RepositoryId != repoId) return;
|
||||
var hook = await context.Webhooks
|
||||
.Include(x => x.Repository)
|
||||
.FirstOrDefaultAsync(x => x.Id == webhookId);
|
||||
|
||||
if (hook == null || hook.Repository != repo) return;
|
||||
|
||||
context.Webhooks.Remove(hook);
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<Webhook>> GetWebhooksAsync(Guid repoId)
|
||||
public async Task<IEnumerable<Webhook>> GetWebhooksAsync(Repository repo)
|
||||
{
|
||||
return await context.Webhooks
|
||||
.Where(w => w.RepositoryId == repoId)
|
||||
.Where(w => w.Repository == repo)
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
public async Task TriggerWebhooksAsync(Guid repoId, WebhookEventType eventType, object payload)
|
||||
public async Task TriggerWebhooksAsync(Repository repo, WebhookEventType eventType, object payload)
|
||||
{
|
||||
if (!settings.UseWebHook) return;
|
||||
|
||||
var hooks = await context.Webhooks
|
||||
.Where(w => w.RepositoryId == repoId && w.EventType == eventType && w.IsActive)
|
||||
.Where(w => w.Repository == repo && w.EventType == eventType && w.IsActive)
|
||||
.ToListAsync();
|
||||
|
||||
using var client = httpFactory.CreateClient();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user