aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Web/Tango.MachineService/Controllers
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Controllers')
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs133
1 files changed, 86 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..b2e3aa150 100644
--- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs
+++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs
@@ -14,35 +14,53 @@ 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>();
_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 +69,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 +111,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 +150,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.GetUserID(request.AccessToken);
+
+ var user = db.Users.SingleOrDefault(x => x.Guid == userID);
if (user != null && user.HasPermission(Permissions.PublishMachineStudioVersions))
{
@@ -173,10 +193,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 +230,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 +245,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 +271,8 @@ namespace Tango.MachineService.Controllers
bool versionChangeRequired = false;
String requiredVersion = null;
+ User user = null;
+
using (ObservablesContext db = ObservablesContextHelper.CreateContext())
{
db.Roles.ToList();
@@ -242,7 +280,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 +347,12 @@ namespace Tango.MachineService.Controllers
Password = request.Password,
},
- Token = _tokens_manager.CreateNew(),
+ Token = TokensManager.CreateNew(user.Guid),
VersionChangeRequired = versionChangeRequired,
RequiredVersion = requiredVersion,
};
}
+ #endregion
}
}