diff options
| author | Avi Levkovich <avi@twine-s.com> | 2019-01-09 13:45:40 +0200 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2019-01-09 13:45:40 +0200 |
| commit | c2019e2a94afc7f25258ae38478ae74434414a1f (patch) | |
| tree | ee9cf870d5738004ebd92cf841c1bdbd26793984 /Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs | |
| parent | c84c8852f2889235a181ec74f0d2fdf8584f2a7d (diff) | |
| parent | d50d729a2b7d45ca4b22df7ff0d8823825c479b6 (diff) | |
| download | Tango-c2019e2a94afc7f25258ae38478ae74434414a1f.tar.gz Tango-c2019e2a94afc7f25258ae38478ae74434414a1f.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/_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.cs | 106 |
1 files changed, 68 insertions, 38 deletions
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs index 8225d75e1..c9d7ea8b6 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs @@ -11,22 +11,35 @@ using Tango.BL.Builders; using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.Core.Cryptography; -using Tango.MachineService.Helpers; using Tango.MachineService.Models; using Tango.MachineStudio.Common.Authentication; +using System.Data.Entity; using Tango.MachineStudio.Common.Update; +using Tango.Web.Controllers; +using Tango.Web.Helpers; +using Tango.Web.Storage; +using Tango.Web.Authentication; +using Tango.Web.ActiveDirectory; namespace Tango.MachineService.Controllers { public class MachineStudioController : JsonController { + private static TokensManager _tokens_manager; private static List<MachineStudioPendingUpload> _pendingUploads; + private ActiveDirectoryManager _ad_manager; static MachineStudioController() { + _tokens_manager = new TokensManager(); _pendingUploads = new List<MachineStudioPendingUpload>(); } + public MachineStudioController() : base() + { + _ad_manager = new ActiveDirectoryManager(); + } + #region Update [HttpPost] @@ -38,15 +51,7 @@ namespace Tango.MachineService.Controllers using (ObservablesContext db = ObservablesContextHelper.CreateContext()) { - //Load relation first... - db.Roles.ToList(); - db.Permissions.ToList(); - db.UsersRoles.ToList(); - db.RolesPermissions.ToList(); - - var user = db.Users.SingleOrDefault(x => x.Email.ToLower() == request.Email.ToLower() && x.Password == request.Password); - - if (user != null && user.HasPermission(Permissions.RunMachineStudio) || (request.Email == "ForceUpdate")) + if (_tokens_manager.Exists(request.AccessToken)) { var versions = db.MachineStudioVersions.ToList(); @@ -63,28 +68,25 @@ namespace Tango.MachineService.Controllers Version currentVersion = Version.Parse(request.Version); - bool isForcedUpdate = versions.Exists(x => x.ForceUpdate && Version.Parse(x.Version) > currentVersion); - 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 client = StorageHelper.GetStorageBlobClient(); - var container = StorageHelper.GetMachineStudioVersionsContainer(client); + var manager = new StorageManager(); + var container = manager.GetContainer(MachineServiceConfig.MACHINE_STUDIO_VERSIONS_CONTAINER); var blob = container.GetBlockBlobReference(latestVersion.BlobName); - response.BlobAddress = StorageHelper.GenerateBlobReadSignature(blob, TimeSpan.FromMinutes(60)); + response.BlobAddress = blob.GenerateReadSignature(TimeSpan.FromMinutes(60)); response.IsUpdateAvailable = true; response.Version = latestVersion.Version; response.Comments = latestVersion.Comments; - response.ForcedUpdate = isForcedUpdate; response.IsStable = latestVersion.Stable; } } else { - throw new AuthenticationException("Invalid user credentials."); + throw new AuthenticationException("Invalid token."); } } @@ -115,12 +117,12 @@ namespace Tango.MachineService.Controllers { String newVersionFileName = "Machine Studio Version" + " " + currentVersion.ToString() + ".zip"; - var client = StorageHelper.GetStorageBlobClient(); - var container = StorageHelper.GetMachineStudioVersionsContainer(client); - var blob = StorageHelper.CreateEmptyBlob(container, newVersionFileName); + var manager = new StorageManager(); + var container = manager.GetContainer(MachineServiceConfig.MACHINE_STUDIO_VERSIONS_CONTAINER); + var blob = container.CreateEmptyBlob(newVersionFileName); response.Token = Guid.NewGuid().ToString(); - response.BlobAddress = StorageHelper.GenerateBlobWriteSignature(blob, TimeSpan.FromMinutes(30)); + response.BlobAddress = blob.GenerateWriteSignature(TimeSpan.FromMinutes(30)); _pendingUploads.Add(new MachineStudioPendingUpload() { @@ -150,7 +152,7 @@ namespace Tango.MachineService.Controllers [HttpPost] public UploadCompletedResponse NotifyUploadCompleted(UploadCompletedRequest request) { - MachineStudioPendingUpload upload = _pendingUploads.FirstOrDefault(x => x.Token == request.Token); + MachineStudioPendingUpload upload = _pendingUploads.FirstOrDefault(x => x.Token == request.AccessToken); if (upload != null) { @@ -191,52 +193,80 @@ namespace Tango.MachineService.Controllers #endregion + [HttpPost] public LoginResponse Login(LoginRequest request) { - var authContext = new AuthenticationContext("https://login.microsoftonline.com/2ebd63a5-bc2f-41dc-9066-4409ed5e5dd4"); - UserCredential userCredential = new UserCredential(request.Email, request.Password); - AuthenticationResult authResult = authContext.AcquireToken("https://graph.windows.net/", "ec612854-7abc-457b-808a-5d0c5ba80c57", userCredential); + var authResult =_ad_manager.ValidateUserCredentials(request.Email, request.Password); - using (ObservablesContext db = ObservablesContextHelper.CreateContext()) + if (!_ad_manager.CanUserAccessCurrentEnvironment(request.Email)) { + throw new AuthenticationException($"You do not have permissions to access the {MachineServiceConfig.DEPLOYMENT_SLOT.ToDescription()} environment."); + } + using (ObservablesContext db = ObservablesContextHelper.CreateContext()) + { db.Roles.ToList(); db.Permissions.ToList(); db.UsersRoles.ToList(); db.RolesPermissions.ToList(); - var user = db.Users.SingleOrDefault(x => x.Email.ToLower() == request.Email.ToLower() && x.Password == request.Password); + var user = db.Users.SingleOrDefault(x => x.Email.ToLower() == request.Email.ToLower()); + + IHashGenerator g = new BasicHashGenerator(); if (user == null) { //Than add the user !! - - IHashGenerator g = new BasicHashGenerator(); - - BL.Entities.User new_user = new User(); + User new_user = new User(); new_user.Email = request.Email; - new_user.Password = g.Encrypt("Aa123456"); - new_user.Organization = db.Organizations.Single(x => x.Name == "Twine"); - new_user.Address = new Address() { }; + new_user.Password = g.Encrypt(request.Password); + new_user.Organization = db.Organizations.Include(x => x.Address).Single(x => x.Name == "Twine"); + new_user.Address = new_user.Organization.Address.Clone(); new_user.Contact = new Contact() { FirstName = authResult.UserInfo.GivenName, LastName = authResult.UserInfo.FamilyName, + FullName = authResult.UserInfo.GivenName + " " + authResult.UserInfo.FamilyName, + Email = request.Email, }; - new_user.Roles.Add(db.Roles.Single(x => (Roles)x.Code == Roles.User)); + + db.UsersRoles.Add(new UsersRole() + { + User = new_user, + Role = db.Roles.Single(x => (Roles)x.Code == Roles.User), + }); + + db.UsersRoles.Add(new UsersRole() + { + User = new_user, + Role = db.Roles.Single(x => (Roles)x.Code == Roles.MachineStudioUser), + }); + + new_user.LastLogin = DateTime.UtcNow; + db.Users.Add(new_user); + } + else + { + user.LastLogin = DateTime.UtcNow; + user.Password = g.Encrypt(request.Password); } + + db.SaveChanges(); } return new LoginResponse() { DataSource = new Core.DataSource() { - Address = Config.DB_ADDRESS, - Catalog = Config.DB_CATALOG, + Address = MachineServiceConfig.DB_ADDRESS, + Catalog = MachineServiceConfig.DB_CATALOG, Type = Core.DataSourceType.Azure, + IntegratedSecurity = false, UserName = request.Email, Password = request.Password, - } + }, + + Token = _tokens_manager.CreateNew() }; } |
