diff options
Diffstat (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs')
| -rw-r--r-- | Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs | 65 |
1 files changed, 61 insertions, 4 deletions
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs index c9d7ea8b6..21e3e7eb2 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs @@ -94,6 +94,40 @@ namespace Tango.MachineService.Controllers } [HttpPost] + public DownloadLatestVersionResponse DownloadLatestVersion(DownloadLatestVersionRequest request) + { + LogManager.Log("Request received..."); + + DownloadLatestVersionResponse response = new DownloadLatestVersionResponse(); + + using (ObservablesContext db = ObservablesContextHelper.CreateContext()) + { + if (_tokens_manager.Exists(request.AccessToken)) + { + var versions = db.MachineStudioVersions.ToList(); + + MachineStudioVersion latestVersion = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); + + if (latestVersion != null) + { + var manager = new StorageManager(); + var container = manager.GetContainer(MachineServiceConfig.MACHINE_STUDIO_VERSIONS_CONTAINER); + var blob = container.GetBlockBlobReference(latestVersion.BlobName); + + response.BlobAddress = blob.GenerateReadSignature(TimeSpan.FromMinutes(60)); + response.Version = latestVersion.Version; + } + } + else + { + throw new AuthenticationException("Invalid token."); + } + } + + return response; + } + + [HttpPost] public UploadVersionResponse UploadVersion(UploadVersionRequest request) { UploadVersionResponse response = new UploadVersionResponse(); @@ -196,13 +230,23 @@ namespace Tango.MachineService.Controllers [HttpPost] public LoginResponse Login(LoginRequest request) { - var authResult =_ad_manager.ValidateUserCredentials(request.Email, request.Password); + var authResult = _ad_manager.ValidateUserCredentials(request.Email, request.Password); if (!_ad_manager.CanUserAccessCurrentEnvironment(request.Email)) { throw new AuthenticationException($"You do not have permissions to access the {MachineServiceConfig.DEPLOYMENT_SLOT.ToDescription()} environment."); } + Version client_version; + + if (!Version.TryParse(request.Version, out client_version)) + { + client_version = new Version("1.0.0.0"); + } + + bool versionChangeRequired = false; + String requiredVersion = null; + using (ObservablesContext db = ObservablesContextHelper.CreateContext()) { db.Roles.ToList(); @@ -232,8 +276,8 @@ namespace Tango.MachineService.Controllers db.UsersRoles.Add(new UsersRole() { - User = new_user, - Role = db.Roles.Single(x => (Roles)x.Code == Roles.User), + User = new_user, + Role = db.Roles.Single(x => (Roles)x.Code == Roles.User), }); db.UsersRoles.Add(new UsersRole() @@ -252,6 +296,17 @@ namespace Tango.MachineService.Controllers } db.SaveChanges(); + + if (MachineServiceConfig.ENFORCE_MACHINE_STUDIO_VERSION) + { + var latest_version = db.MachineStudioVersions.ToList().OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); + + if (latest_version != null && Version.Parse(latest_version.Version) != client_version) + { + versionChangeRequired = true; + requiredVersion = latest_version.Version; + } + } } return new LoginResponse() @@ -266,7 +321,9 @@ namespace Tango.MachineService.Controllers Password = request.Password, }, - Token = _tokens_manager.CreateNew() + Token = _tokens_manager.CreateNew(), + VersionChangeRequired = versionChangeRequired, + RequiredVersion = requiredVersion, }; } |
