aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2019-02-19 11:19:21 +0200
committerShlomo Hecht <shlomo@twine-s.com>2019-02-19 11:19:21 +0200
commit93e6a6bfa7238826dcdea989e279ec3450067f83 (patch)
tree212b5023935862346a7de311e37cf1ef727efcd5 /Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs
parente99efd9d9b7b67a76db82a9a40525f96bcf064c0 (diff)
parent3fcd0dbc6650749421f0390a60154c52254682e6 (diff)
downloadTango-93e6a6bfa7238826dcdea989e279ec3450067f83.tar.gz
Tango-93e6a6bfa7238826dcdea989e279ec3450067f83.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs')
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs134
1 files changed, 87 insertions, 47 deletions
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs
index 660b98576..82082ca2f 100644
--- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs
+++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs
@@ -14,35 +14,54 @@ using Tango.Core.Cryptography;
using Tango.MachineService.Models;
using Tango.MachineStudio.Common.Authentication;
using System.Data.Entity;
-using Tango.MachineStudio.Common.Update;
+using Tango.MachineStudio.Common.Web;
using Tango.Web.Controllers;
using Tango.Web.Helpers;
using Tango.Web.Storage;
using Tango.Web.Authentication;
using Tango.Web.ActiveDirectory;
+using Tango.MachineService.Filters;
namespace Tango.MachineService.Controllers
{
public class MachineStudioController : JsonController
{
- private static TokensManager _tokens_manager;
private static List<MachineStudioPendingUpload> _pendingUploads;
private ActiveDirectoryManager _ad_manager;
+ public static TokensManager<String> TokensManager { get; set; }
+
+ #region Constructors
+
+ /// <summary>
+ /// Initializes the <see cref="MachineStudioController"/> class.
+ /// </summary>
static MachineStudioController()
{
- _tokens_manager = new TokensManager();
+ TokensManager = new TokensManager<string>();
+ TokensManager.ExpirationTime = TimeSpan.FromDays(10);
_pendingUploads = new List<MachineStudioPendingUpload>();
}
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MachineStudioController"/> class.
+ /// </summary>
public MachineStudioController() : base()
{
_ad_manager = new ActiveDirectoryManager();
}
- #region Update
+ #endregion
+
+ #region Actions
+ /// <summary>
+ /// Checks for updates.
+ /// </summary>
+ /// <param name="request">The request.</param>
+ /// <returns></returns>
[HttpPost]
+ [MachineStudioLoginFilter]
public CheckForUpdatesResponse CheckForUpdates(CheckForUpdatesRequest request)
{
LogManager.Log("Request received...");
@@ -51,41 +70,40 @@ namespace Tango.MachineService.Controllers
using (ObservablesContext db = ObservablesContextHelper.CreateContext())
{
- if (_tokens_manager.Exists(request.AccessToken))
- {
- var versions = db.MachineStudioVersions.ToList();
+ var versions = db.MachineStudioVersions.ToList();
- MachineStudioVersion latestVersion = null;
+ MachineStudioVersion latestVersion = null;
- latestVersion = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault();
+ latestVersion = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault();
- Version currentVersion = Version.Parse(request.Version);
+ Version currentVersion = Version.Parse(request.Version);
- String comments = String.Join(Environment.NewLine, versions.OrderBy(x => Version.Parse(x.Version)).Where(x => Version.Parse(x.Version) > currentVersion).Select(x => x.Comments));
+ String comments = String.Join(Environment.NewLine, versions.OrderBy(x => Version.Parse(x.Version)).Where(x => Version.Parse(x.Version) > currentVersion).Select(x => x.Comments));
- if (latestVersion != null && Version.Parse(latestVersion.Version) > currentVersion)
- {
- var manager = new StorageManager();
- var container = manager.GetContainer(MachineServiceConfig.MACHINE_STUDIO_VERSIONS_CONTAINER);
- var blob = container.GetBlockBlobReference(latestVersion.BlobName);
+ if (latestVersion != null && Version.Parse(latestVersion.Version) > currentVersion)
+ {
+ 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.BlobAddress = blob.GenerateReadSignature(TimeSpan.FromMinutes(60));
- response.IsUpdateAvailable = true;
- response.Version = latestVersion.Version;
- response.Comments = latestVersion.Comments;
- }
- }
- else
- {
- throw new AuthenticationException("Invalid token.");
+ response.IsUpdateAvailable = true;
+ response.Version = latestVersion.Version;
+ response.Comments = latestVersion.Comments;
}
}
return response;
}
+ /// <summary>
+ /// Downloads the latest version.
+ /// </summary>
+ /// <param name="request">The request.</param>
+ /// <returns></returns>
[HttpPost]
+ [MachineStudioLoginFilter]
public DownloadLatestVersionResponse DownloadLatestVersion(DownloadLatestVersionRequest request)
{
LogManager.Log("Request received...");
@@ -94,32 +112,33 @@ namespace Tango.MachineService.Controllers
using (ObservablesContext db = ObservablesContextHelper.CreateContext())
{
- if (_tokens_manager.Exists(request.AccessToken))
- {
- var versions = db.MachineStudioVersions.ToList();
+ var versions = db.MachineStudioVersions.ToList();
- MachineStudioVersion latestVersion = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault();
+ 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
+ if (latestVersion != null)
{
- throw new AuthenticationException("Invalid token.");
+ 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;
}
}
return response;
}
+ /// <summary>
+ /// Uploads a version.
+ /// </summary>
+ /// <param name="request">The request.</param>
+ /// <returns></returns>
+ /// <exception cref="System.ArgumentException">New version must be greater than latest version.</exception>
+ /// <exception cref="AuthenticationException">Invalid user credentials.</exception>
[HttpPost]
+ [MachineStudioLoginFilter]
public UploadVersionResponse UploadVersion(UploadVersionRequest request)
{
UploadVersionResponse response = new UploadVersionResponse();
@@ -132,7 +151,9 @@ namespace Tango.MachineService.Controllers
db.UsersRoles.ToList();
db.RolesPermissions.ToList();
- var user = db.Users.SingleOrDefault(x => x.Email.ToLower() == request.Email.ToLower() && x.Password == request.Password);
+ String userID = TokensManager.GetTokenObject(request.AccessToken);
+
+ var user = db.Users.SingleOrDefault(x => x.Guid == userID);
if (user != null && user.HasPermission(Permissions.PublishMachineStudioVersions))
{
@@ -173,10 +194,17 @@ namespace Tango.MachineService.Controllers
return response;
}
+ /// <summary>
+ /// Notifies about a version upload completion.
+ /// </summary>
+ /// <param name="request">The request.</param>
+ /// <returns></returns>
+ /// <exception cref="System.ArgumentException">Invalid Token.</exception>
[HttpPost]
+ [MachineStudioLoginFilter]
public UploadCompletedResponse NotifyUploadCompleted(UploadCompletedRequest request)
{
- MachineStudioPendingUpload upload = _pendingUploads.FirstOrDefault(x => x.Token == request.AccessToken);
+ MachineStudioPendingUpload upload = _pendingUploads.FirstOrDefault(x => x.Token == request.Token);
if (upload != null)
{
@@ -203,6 +231,11 @@ namespace Tango.MachineService.Controllers
}
}
+ /// <summary>
+ /// Gets the latest version.
+ /// </summary>
+ /// <param name="request">The request.</param>
+ /// <returns></returns>
[HttpPost]
public LatestVersionResponse GetLatestVersion(LatestVersionRequest request)
{
@@ -213,8 +246,12 @@ namespace Tango.MachineService.Controllers
}
}
- #endregion
-
+ /// <summary>
+ /// Login to the service.
+ /// </summary>
+ /// <param name="request">The request.</param>
+ /// <returns></returns>
+ /// <exception cref="AuthenticationException"></exception>
[HttpPost]
public LoginResponse Login(LoginRequest request)
{
@@ -235,6 +272,8 @@ namespace Tango.MachineService.Controllers
bool versionChangeRequired = false;
String requiredVersion = null;
+ User user = null;
+
using (ObservablesContext db = ObservablesContextHelper.CreateContext())
{
db.Roles.ToList();
@@ -242,7 +281,7 @@ namespace Tango.MachineService.Controllers
db.UsersRoles.ToList();
db.RolesPermissions.ToList();
- var user = db.Users.SingleOrDefault(x => x.Email.ToLower() == request.Email.ToLower());
+ user = db.Users.SingleOrDefault(x => x.Email.ToLower() == request.Email.ToLower());
IHashGenerator g = new BasicHashGenerator();
@@ -309,11 +348,12 @@ namespace Tango.MachineService.Controllers
Password = request.Password,
},
- Token = _tokens_manager.CreateNew(),
+ WebToken = TokensManager.GetOrCreate(user.Guid),
VersionChangeRequired = versionChangeRequired,
RequiredVersion = requiredVersion,
};
}
+ #endregion
}
}