From 75373ed2e954ffb139bbc7d42b80a73421f33765 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sun, 29 Jul 2018 22:22:08 -0400 Subject: [PATCH] RepositoryController Read --- .../Controllers/RepositoryController.cs | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/Tgstation.Server.Host/Controllers/RepositoryController.cs b/src/Tgstation.Server.Host/Controllers/RepositoryController.cs index fa06d354f4..1b19f662cb 100644 --- a/src/Tgstation.Server.Host/Controllers/RepositoryController.cs +++ b/src/Tgstation.Server.Host/Controllers/RepositoryController.cs @@ -84,7 +84,7 @@ namespace Tgstation.Server.Host.Controllers if (model.AccessUser == null ^ model.AccessToken == null) return BadRequest(new { message = "Either both accessToken and accessUser must be present or neither!" }); - var currentModel = await DatabaseContext.Instances.Where(x => x.Id == Instance.Id).Select(x => x.RepositorySettings).FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false); + var currentModel = await DatabaseContext.RepositorySettings.Where(x => x.InstanceId == Instance.Id).FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false); if (currentModel == default) return StatusCode((int)HttpStatusCode.Gone); @@ -117,8 +117,39 @@ namespace Tgstation.Server.Host.Controllers [TgsAuthorize(RepositoryRights.Delete)] public async Task Delete(CancellationToken cancellationToken) { + var currentModel = await DatabaseContext.RepositorySettings.Where(x => x.InstanceId == Instance.Id).FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false); + + if (currentModel == default) + return StatusCode((int)HttpStatusCode.Gone); + + currentModel.Origin = null; + currentModel.LastOriginCommitSha = null; + currentModel.AccessToken = null; + currentModel.AccessUser = null; + + await DatabaseContext.Save(cancellationToken).ConfigureAwait(false); + await instanceManager.GetInstance(Instance).RepositoryManager.DeleteRepository(cancellationToken).ConfigureAwait(false); return Ok(); } + + /// + [TgsAuthorize(RepositoryRights.Read)] + public override async Task Read(CancellationToken cancellationToken) + { + var currentModel = await DatabaseContext.RepositorySettings.Where(x => x.InstanceId == Instance.Id).FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false); + + if (currentModel == default) + return StatusCode((int)HttpStatusCode.Gone); + + var api = currentModel.ToApi(); + + using (var repo = await instanceManager.GetInstance(Instance).RepositoryManager.LoadRepository(cancellationToken).ConfigureAwait(false)) + { + if (await PopulateApi(api, repo, currentModel.LastOriginCommitSha, cancellationToken).ConfigureAwait(false)) + await DatabaseContext.Save(cancellationToken).ConfigureAwait(false); + return Json(api); + } + } } }