diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-07-28 15:27:05 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-07-28 15:27:05 +0300 |
| commit | 7c7aba43ab895d02e0209861550fed3bc12f3904 (patch) | |
| tree | 11287241a4cc80baa871712240ab82487c563f9f /Software/Visual_Studio/Web | |
| parent | 55b795f940282378784f0175803fcba62aecc816 (diff) | |
| download | Tango-7c7aba43ab895d02e0209861550fed3bc12f3904.tar.gz Tango-7c7aba43ab895d02e0209861550fed3bc12f3904.zip | |
Implemented Tango FSE Publish Utils.
Added FSE to AzureUtils on environment upgrade.
Diffstat (limited to 'Software/Visual_Studio/Web')
3 files changed, 128 insertions, 1 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 } } diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Models/FSEPendingUpload.cs b/Software/Visual_Studio/Web/Tango.MachineService/Models/FSEPendingUpload.cs new file mode 100644 index 000000000..7bb74d045 --- /dev/null +++ b/Software/Visual_Studio/Web/Tango.MachineService/Models/FSEPendingUpload.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace Tango.MachineService.Models +{ + public class FSEPendingUpload + { + public String Token { get; set; } + + public String Version { get; set; } + + public String UserGuid { get; set; } + + public String Comments { get; set; } + + public String BlobName { get; set; } + + public String InstallerBlobName { get; set; } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj b/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj index 9b25a25a8..c662b1e87 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj +++ b/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj @@ -327,6 +327,7 @@ <Compile Include="Controllers\MachineStudioController.cs" /> <Compile Include="Models\DownloadModel.cs" /> <Compile Include="Models\LoginRequest.cs" /> + <Compile Include="Models\FSEPendingUpload.cs" /> <Compile Include="Models\MachineStudioPendingUpload.cs" /> <Compile Include="Models\PPCPendingUpdate.cs" /> <Compile Include="Models\PPCPendingUpload.cs" /> @@ -489,7 +490,7 @@ <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile> </WebProjectProperties> </FlavorProperties> - <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> + <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> </VisualStudio> </ProjectExtensions> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> |
