aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs')
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs110
1 files changed, 87 insertions, 23 deletions
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs
index 603517caa..af861923c 100644
--- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs
+++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs
@@ -13,32 +13,51 @@ using Tango.Core;
using Tango.Core.DB;
using Tango.Logging;
using Tango.MachineService.Models;
-using Tango.PPC.Common.MachineSetup;
-using Tango.PPC.Common.MachineUpdate;
-using Tango.PPC.Common.Update;
+using Tango.PPC.Common.Web;
using Tango.Web.Controllers;
using Tango.Web.Helpers;
using Tango.Web.SMO;
using Tango.Web.Storage;
using System.Data.Entity;
+using Tango.Web.Authentication;
+using Tango.Web.ActiveDirectory;
+using Tango.Core.Cryptography;
+using Tango.MachineService.Filters;
namespace Tango.MachineService.Controllers
{
public class PPCController : JsonController
{
private static List<PPCPendingUpload> _pendingUploads;
+ private ActiveDirectoryManager _ad_manager;
+
+ public class TokenObject
+ {
+ public LoginMode Mode { get; set; }
+ public String UserGuid { get; set; }
+ public String MachineGuid { get; set; }
+ }
+
+ public static TokensManager<TokenObject> TokensManager { get; set; }
#region Constructors
static PPCController()
{
+ TokensManager = new TokensManager<TokenObject>();
_pendingUploads = new List<PPCPendingUpload>();
}
+ public PPCController()
+ {
+ _ad_manager = new ActiveDirectoryManager();
+ }
+
#endregion
#region Setup & Update
+ [PPCLoginFilter]
[HttpPost]
public MachineSetupResponse MachineSetup(MachineSetupRequest request)
{
@@ -49,9 +68,9 @@ namespace Tango.MachineService.Controllers
using (ObservablesContext db = ObservablesContextHelper.CreateContext())
{
db.Configuration.LazyLoadingEnabled = false;
- String serial_number = request.SerialNumber;
+ String machine_guid = TokensManager.GetTokenObject(request.AccessToken).MachineGuid;
- var machine = db.Machines.SingleOrDefault(x => x.SerialNumber == serial_number);
+ var machine = db.Machines.SingleOrDefault(x => x.Guid == machine_guid);
if (machine == null)
{
@@ -112,6 +131,7 @@ namespace Tango.MachineService.Controllers
return response;
}
+ [PPCLoginFilter]
[HttpPost]
public DownloadUpdateResponse MachineUpdate(DownloadUpdateRequest request)
{
@@ -120,9 +140,9 @@ namespace Tango.MachineService.Controllers
using (ObservablesContext db = ObservablesContextHelper.CreateContext())
{
db.Configuration.LazyLoadingEnabled = false;
- String serial_number = request.SerialNumber;
+ String machine_guid = TokensManager.GetTokenObject(request.AccessToken).MachineGuid;
- var machine = db.Machines.SingleOrDefault(x => x.SerialNumber == serial_number);
+ var machine = db.Machines.SingleOrDefault(x => x.Guid == machine_guid);
if (machine == null)
{
@@ -170,6 +190,7 @@ namespace Tango.MachineService.Controllers
return response;
}
+ [PPCLoginFilter]
[HttpPost]
public CheckForUpdateResponse CheckForUpdate(CheckForUpdateRequest request)
{
@@ -177,9 +198,9 @@ namespace Tango.MachineService.Controllers
using (ObservablesContext db = ObservablesContextHelper.CreateContext())
{
- db.Configuration.LazyLoadingEnabled = false;
+ String machine_guid = TokensManager.GetTokenObject(request.AccessToken).MachineGuid;
- var machine = db.Machines.SingleOrDefault(x => x.SerialNumber == request.SerialNumber);
+ var machine = db.Machines.SingleOrDefault(x => x.Guid == machine_guid);
if (machine == null)
{
@@ -201,6 +222,7 @@ namespace Tango.MachineService.Controllers
return response;
}
+ [PPCLoginFilter]
[HttpPost]
public UpdateDBResponse UpdateDB(UpdateDBRequest request)
{
@@ -208,10 +230,10 @@ namespace Tango.MachineService.Controllers
using (ObservablesContext db = ObservablesContextHelper.CreateContext())
{
- db.Configuration.LazyLoadingEnabled = false;
- String serial_number = request.SerialNumber;
- var machine = db.Machines.SingleOrDefault(x => x.SerialNumber == serial_number);
+ String machine_guid = TokensManager.GetTokenObject(request.AccessToken).MachineGuid;
+
+ var machine = db.Machines.SingleOrDefault(x => x.Guid == machine_guid);
if (machine == null)
{
@@ -274,6 +296,7 @@ namespace Tango.MachineService.Controllers
return response;
}
+ [PPCLoginFilter]
[HttpPost]
public UploadVersionResponse UploadVersion(UploadVersionRequest request)
{
@@ -287,7 +310,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);
+ var user_guid = TokensManager.GetTokenObject(request.AccessToken).UserGuid;
+
+ var user = db.Users.SingleOrDefault(x => x.Guid == user_guid);
if (user != null && user.HasPermission(Permissions.PublishPPCVersions))
{
@@ -339,10 +364,11 @@ namespace Tango.MachineService.Controllers
return response;
}
+ [PPCLoginFilter]
[HttpPost]
public UploadCompletedResponse NotifyUploadCompleted(UploadCompletedRequest request)
{
- PPCPendingUpload upload = _pendingUploads.FirstOrDefault(x => x.Token == request.AccessToken);
+ PPCPendingUpload upload = _pendingUploads.FirstOrDefault(x => x.Token == request.Token);
if (upload != null)
{
@@ -382,20 +408,58 @@ namespace Tango.MachineService.Controllers
}
}
- #endregion
-
[HttpPost]
- public Machine PersonTest(Person p)
+ public LoginResponse Login(LoginRequest request)
{
- using (var db = ObservablesContextHelper.CreateContext())
+ LoginResponse response = new LoginResponse();
+
+ using (ObservablesContext db = ObservablesContextHelper.CreateContext())
{
- var machine = new MachineBuilder(db)
- .Set(x => x.SerialNumber == "1111")
- .WithOrganization()
- .WithConfiguration().Build();
+ if (request.Mode == LoginMode.User)
+ {
+ 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.");
+ }
- return machine;
+ BasicHashGenerator hash = new BasicHashGenerator();
+ String pass = hash.Encrypt(request.Password);
+
+ var user = db.Users.SingleOrDefault(x => x.Email.ToLower() == request.Email.ToLower() && x.Password == pass);
+
+ if (user == null)
+ {
+ throw new AuthenticationException("Domain user found but the database entry validation failed.");
+ }
+
+ response.AccessToken = TokensManager.CreateNew(new TokenObject()
+ {
+ Mode = LoginMode.User,
+ UserGuid = user.Guid,
+ });
+ }
+ else if (request.Mode == LoginMode.Machine)
+ {
+ var machine = db.Machines.SingleOrDefault(x => x.SerialNumber == request.SerialNumber);
+
+ if (machine == null)
+ {
+ throw new AuthenticationException("Invalid serial number.");
+ }
+
+ response.AccessToken = TokensManager.CreateNew(new TokenObject()
+ {
+ Mode = LoginMode.Machine,
+ UserGuid = machine.Guid,
+ });
+ }
}
+
+ return response;
}
+
+ #endregion
}
}