diff options
Diffstat (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs')
| -rw-r--r-- | Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs | 110 |
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 } } |
