aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Web
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-07-28 15:27:05 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-07-28 15:27:05 +0300
commit7c7aba43ab895d02e0209861550fed3bc12f3904 (patch)
tree11287241a4cc80baa871712240ab82487c563f9f /Software/Visual_Studio/Web
parent55b795f940282378784f0175803fcba62aecc816 (diff)
downloadTango-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')
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs104
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/Models/FSEPendingUpload.cs22
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj3
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">