diff options
| author | Avi Levkovich <avi@twine-s.com> | 2020-07-28 18:15:18 +0300 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2020-07-28 18:15:18 +0300 |
| commit | 2c0ab3af114e0e18f4779bc82c239b91d169fd93 (patch) | |
| tree | 921afe34cd2388cd42ecbd747c96e22fb52ac5a8 /Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs | |
| parent | 5dfd02ae99f1585d3474b33b23449fa42a0afd14 (diff) | |
| parent | 0281068b4adb3f94af50f2c758d3e0fa0fe5f191 (diff) | |
| download | Tango-2c0ab3af114e0e18f4779bc82c239b91d169fd93.tar.gz Tango-2c0ab3af114e0e18f4779bc82c239b91d169fd93.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs')
| -rw-r--r-- | Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs index e471ed20c..387430f89 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs @@ -25,11 +25,15 @@ using Tango.Web.SQLServer; using Tango.Web.Storage; using System.Data.Entity; using static Tango.MachineService.Controllers.FSEController; +using Tango.MachineService.Models; +using Tango.BL.Enumerations; namespace Tango.MachineService.Controllers { public class FSEController : TangoController<TokenObject> { + private static List<FSEPendingUpload> _pendingUploads; + public class TokenObject { public String UserGuid { get; set; } @@ -46,6 +50,7 @@ namespace Tango.MachineService.Controllers static FSEController() { + _pendingUploads = new List<FSEPendingUpload>(); PendingPasswordResets = new List<PasswordReset>(); } @@ -323,5 +328,104 @@ namespace Tango.MachineService.Controllers return new ForgotPasswordResponse(); } + + #region Version Upload + + [HttpPost] + public LatestVersionResponse GetLatestVersion(LatestVersionRequest request) + { + using (ObservablesContext db = ObservablesContextHelper.CreateContext()) + { + var version = db.FseVersions.ToList().OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); + return new LatestVersionResponse() { Version = version != null ? version.Version : "0.0.0.0" }; + } + } + + [HttpPost] + [JwtTokenFilter] + public UploadVersionResponse UploadVersion(UploadVersionRequest request) + { + UploadVersionResponse response = new UploadVersionResponse(); + + using (ObservablesContext db = ObservablesContextHelper.CreateContext()) + { + String userID = RequestToken.Object.UserGuid; + + var user = new UserBuilder(db).Set(userID).WithRolesAndPermissions().Build(); + + if (user != null && user.HasPermission(Permissions.PublishMachineStudioVersions)) + +{ + var latestVersion = db.FseVersions.ToList().OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); + Version local_version = Version.Parse(request.Version); + + if (latestVersion == null || local_version > Version.Parse(latestVersion.Version)) + { + var manager = new BlobStorageManager(); + var container = manager.GetContainer(MachineServiceConfig.FSE_VERSIONS_CONTAINER); + var installerBlob = container.CreateEmptyBlob(request.InstallerBlobName); + + response.Token = Guid.NewGuid().ToString(); + response.InstallerBlobAddress = installerBlob.GenerateWriteSignature(TimeSpan.FromMinutes(30)); + + FSEPendingUpload pending_upload = new FSEPendingUpload() + { + UserGuid = user.Guid, + Comments = request.Comments, + Token = response.Token, + Version = request.Version, + BlobName = "BLOB", + InstallerBlobName = installerBlob.Name + }; + + _pendingUploads.Add(pending_upload); + } + else + { + throw new ArgumentException("New version must be greater than latest version."); + } + } + else + { + throw new AuthenticationException("Invalid user credentials."); + } + } + + return response; + } + + [HttpPost] + [JwtTokenFilter] + public UploadCompletedResponse NotifyVersionUploadCompleted(UploadCompletedRequest request) + { + FSEPendingUpload upload = _pendingUploads.FirstOrDefault(x => x.Token == request.Token); + + if (upload != null) + { + _pendingUploads.RemoveAll(x => x.Token == upload.Token); + + using (ObservablesContext db = ObservablesContextHelper.CreateContext()) + { + db.FseVersions.Add(new FseVersion() + { + Comments = upload.Comments, + BlobName = upload.BlobName, + InstallerBlobName = upload.InstallerBlobName, + UserGuid = upload.UserGuid, + Version = upload.Version, + }); + + db.SaveChanges(); + } + + return new UploadCompletedResponse(); + } + else + { + throw new ArgumentException("Invalid Token."); + } + } + + #endregion } } |
