diff options
Diffstat (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs')
| -rw-r--r-- | Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs | 260 |
1 files changed, 76 insertions, 184 deletions
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs index 5f697f979..dd8401570 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs @@ -23,10 +23,6 @@ using Tango.Web.ActiveDirectory; using Tango.MachineService.Filters; using Tango.MachineService.Security; using Tango.Web.SQLServer; -using Tango.Core; -using Tango.Web.SMO; -using Tango.Core.DB; -using System.Threading.Tasks; namespace Tango.MachineService.Controllers { @@ -40,6 +36,12 @@ namespace Tango.MachineService.Controllers public String UserGuid { get; set; } } + public class RefreshTokenObject + { + public String Email { get; set; } + public String Password { get; set; } + } + #region Constructors /// <summary> @@ -89,7 +91,7 @@ namespace Tango.MachineService.Controllers 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) + if (latestVersion != null && Version.Parse(latestVersion.Version) > currentVersion) { var manager = new BlobStorageManager(); var container = manager.GetContainer(MachineServiceConfig.MACHINE_STUDIO_VERSIONS_CONTAINER); @@ -97,11 +99,6 @@ namespace Tango.MachineService.Controllers response.BlobAddress = blob.GenerateReadSignature(TimeSpan.FromMinutes(60)); - if (!String.IsNullOrWhiteSpace(MachineServiceConfig.CDN_ENDPOINT)) - { - response.CdnAddress = MachineServiceConfig.CDN_ENDPOINT + blob.Uri.AbsolutePath; - } - response.IsUpdateAvailable = true; response.Version = latestVersion.Version; response.Comments = latestVersion.Comments; @@ -120,6 +117,8 @@ namespace Tango.MachineService.Controllers [JwtTokenFilter] public DownloadLatestVersionResponse DownloadLatestVersion(DownloadLatestVersionRequest request) { + LogManager.Log("Request received..."); + DownloadLatestVersionResponse response = new DownloadLatestVersionResponse(); using (ObservablesContext db = ObservablesContextHelper.CreateContext()) @@ -134,11 +133,6 @@ namespace Tango.MachineService.Controllers var container = manager.GetContainer(MachineServiceConfig.MACHINE_STUDIO_VERSIONS_CONTAINER); var blob = container.GetBlockBlobReference(latestVersion.BlobName); - if (!String.IsNullOrWhiteSpace(MachineServiceConfig.CDN_ENDPOINT)) - { - response.CdnAddress = MachineServiceConfig.CDN_ENDPOINT + blob.Uri.AbsolutePath; - } - response.BlobAddress = blob.GenerateReadSignature(TimeSpan.FromMinutes(60)); response.Version = latestVersion.Version; } @@ -277,10 +271,12 @@ namespace Tango.MachineService.Controllers [HttpPost] public LoginResponse Login(LoginRequest request) { - AuthenticationResult authResult = null; - User user = null; - DataSource dataSource = null; - IHashGenerator hash = new BasicHashGenerator(); + 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."); + } Version client_version; @@ -291,122 +287,84 @@ namespace Tango.MachineService.Controllers bool versionChangeRequired = false; String requiredVersion = null; - bool isPasswordOK = false; - try - { - authResult = _ad_manager.ValidateUserCredentials(request.Email, request.Password); - isPasswordOK = true; - } - catch { } + User user = null; - //Login via Active Directory - if (request.Method == LoginMethod.ActiveDirectory) + using (ObservablesContext db = ObservablesContextHelper.CreateContext()) { - try - { - authResult = _ad_manager.ValidateUserCredentials(request.Email, request.Password); - } - catch (Exception ex) - { - throw new AuthenticationException(ex.FlattenMessage()); - } - - if (!_ad_manager.CanUserAccessCurrentEnvironment(request.Email)) - { - throw new AuthenticationException($"You do not have permissions to access the {MachineServiceConfig.DEPLOYMENT_SLOT.ToDescription()} environment."); - } + db.Roles.ToList(); + db.Permissions.ToList(); + db.UsersRoles.ToList(); + db.RolesPermissions.ToList(); - using (ObservablesContext db = ObservablesContextHelper.CreateContext()) - { - db.Roles.ToList(); - db.Permissions.ToList(); - db.UsersRoles.ToList(); - db.RolesPermissions.ToList(); + user = new UserBuilder(db).Set(x => x.Email.ToLower() == request.Email.ToLower()).WithRolesAndPermissions().WithDeleted().Build(); - user = new UserBuilder(db).Set(x => x.Email.ToLower() == request.Email.ToLower()).WithRolesAndPermissions().WithDeleted().Build(); + IHashGenerator g = new BasicHashGenerator(); - if (user == null) + if (user == null) + { + //Than add the user !! + User new_user = new User(); + new_user.Email = request.Email; + 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() { - user = new User(); - user.Email = request.Email; - user.Password = hash.Encrypt(request.Password); - user.Organization = db.Organizations.Include(x => x.Address).Single(x => x.Name == "Twine"); - user.Address = user.Organization.Address.Clone(); - user.Contact = new Contact() - { - FirstName = authResult.UserInfo.GivenName, - LastName = authResult.UserInfo.FamilyName, - FullName = authResult.UserInfo.GivenName + " " + authResult.UserInfo.FamilyName, - Email = request.Email, - }; - - db.UsersRoles.Add(new UsersRole() - { - User = user, - Role = db.Roles.Single(x => (Roles)x.Code == Roles.User), - }); + FirstName = authResult.UserInfo.GivenName, + LastName = authResult.UserInfo.FamilyName, + FullName = authResult.UserInfo.GivenName + " " + authResult.UserInfo.FamilyName, + Email = request.Email, + }; - db.UsersRoles.Add(new UsersRole() - { - User = user, - Role = db.Roles.Single(x => (Roles)x.Code == Roles.MachineStudioUser), - }); + db.UsersRoles.Add(new UsersRole() + { + User = new_user, + Role = db.Roles.Single(x => (Roles)x.Code == Roles.User), + }); - user.Password = hash.Encrypt(request.Password); + db.UsersRoles.Add(new UsersRole() + { + User = new_user, + Role = db.Roles.Single(x => (Roles)x.Code == Roles.MachineStudioUser), + }); - db.Users.Add(user); - } - else + new_user.LastLogin = DateTime.UtcNow; + db.Users.Add(new_user); + } + else + { + if (user.Deleted) { - if (user.Deleted) - { - throw new AuthenticationException("Your account has been disabled. Please contact your administrator."); - } + throw new AuthenticationException("Your account has been disabled. Please contact your administrator."); } user.LastLogin = DateTime.UtcNow; - - db.SaveChanges(); + user.Password = g.Encrypt(request.Password); } - dataSource = new DataSource() - { - Address = MachineServiceConfig.DB_ADDRESS, - Catalog = MachineServiceConfig.DB_CATALOG, - Type = Core.DataSourceType.Azure, - IntegratedSecurity = false, - UserName = request.Email, - Password = request.Password, - }; - } - //Login via Database standard user - else - { - var password = hash.Encrypt(request.Password); + db.SaveChanges(); - using (var db = ObservablesContextHelper.CreateContext()) + if (MachineServiceConfig.ENFORCE_MACHINE_STUDIO_VERSION) { - user = new UserBuilder(db).Set(x => x.Email.ToLower() == request.Email.ToLower() && (isPasswordOK || x.Password == password)).WithRolesAndPermissions().WithDeleted().Build(); - - if (user == null) - { - throw new AuthenticationException("Invalid email or password."); - } + var latest_version = db.MachineStudioVersions.ToList().OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); - if (user.Deleted) + if (latest_version != null && Version.Parse(latest_version.Version) != client_version) { - throw new AuthenticationException("Your account has been disabled. Please contact your administrator."); + versionChangeRequired = true; + requiredVersion = latest_version.Version; } - - user.LastLogin = DateTime.UtcNow; - db.SaveChanges(); } + } + Core.DataSource dataSource = null; + + if (MachineServiceConfig.USE_DB_ACCESS_TOKENS) + { SQLServerManager sqlServer = new SQLServerManager(); var accessToken = sqlServer.GetAccessToken(); - dataSource = new DataSource() + dataSource = new Core.DataSource() { Address = MachineServiceConfig.DB_ADDRESS, Catalog = MachineServiceConfig.DB_CATALOG, @@ -416,23 +374,19 @@ namespace Tango.MachineService.Controllers AccessTokenExpiration = accessToken.ExpiresOn.UtcDateTime }; } - - //Enforce Machine Studio Version ? - if (MachineServiceConfig.ENFORCE_MACHINE_STUDIO_VERSION) + else { - using (var db = ObservablesContextHelper.CreateContext()) + dataSource = new Core.DataSource() { - var latest_version = db.MachineStudioVersions.ToList().OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); - - if (latest_version != null && Version.Parse(latest_version.Version) != client_version) - { - versionChangeRequired = true; - requiredVersion = latest_version.Version; - } - } + Address = MachineServiceConfig.DB_ADDRESS, + Catalog = MachineServiceConfig.DB_CATALOG, + Type = Core.DataSourceType.Azure, + IntegratedSecurity = false, + UserName = request.Email, + Password = request.Password, + }; } - //Return data source return new LoginResponse() { DataSource = dataSource, @@ -442,7 +396,6 @@ namespace Tango.MachineService.Controllers }, DateTime.UtcNow.AddDays(1)).AccessToken, VersionChangeRequired = versionChangeRequired, RequiredVersion = requiredVersion, - PasswordChangeRequired = request.Method == LoginMethod.StandardUser && user.PasswordChangeRequired }; } @@ -462,67 +415,6 @@ namespace Tango.MachineService.Controllers }; } - [HttpPost] - [JwtTokenFilter] - public DownloadLatestPPCVersionResponse DownloadLatestPPCVersion(DownloadLatestPPCVersionRequest request) - { - DownloadLatestPPCVersionResponse response = new DownloadLatestPPCVersionResponse(); - - using (ObservablesContext db = ObservablesContextHelper.CreateContext()) - { - var machine = db.Machines.SingleOrDefault(x => x.SerialNumber == request.SerialNumber); - - if (machine == null) - { - throw new AuthenticationException("The specified serial number could not be found."); - } - - var machine_version = db.MachineVersions.SingleOrDefault(x => x.Guid == machine.MachineVersionGuid); - - var latest_machine_version = db.TangoVersions.Where(x => x.MachineVersionGuid == machine_version.Guid).ToList().OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); - - response.Version = latest_machine_version.Version; - - var manager = new BlobStorageManager(); - var container = manager.GetContainer(MachineServiceConfig.TANGO_VERSIONS_CONTAINER); - var blob = container.GetBlockBlobReference(latest_machine_version.BlobName); - - response.BlobAddress = blob.GenerateReadSignature(TimeSpan.FromMinutes(60)); - - if (!String.IsNullOrWhiteSpace(MachineServiceConfig.CDN_ENDPOINT)) - { - response.CdnAddress = MachineServiceConfig.CDN_ENDPOINT + blob.Uri.AbsolutePath; - } - - DbCredentials credentials = new DbCredentials(); - - using (SmoManager smo = new SmoManager()) - { - credentials = smo.CreateRandomLoginAndUser(); - - Task.Delay(TimeSpan.FromMinutes(PPCController.SQL_TEMP_CREDENTIALS_EXP_MINUTS)).ContinueWith((x) => - { - using (SmoManager m = new SmoManager()) - { - m.DeleteLoginAndUser(credentials.UserName); - } - }); - } - - response.DataSource = new DataSource() - { - Address = MachineServiceConfig.DB_ADDRESS, - Catalog = MachineServiceConfig.DB_CATALOG, - UserName = credentials.UserName, - Password = credentials.Password, - IntegratedSecurity = false, - Type = DataSourceType.SQLServer, - }; - } - - return response; - } - #endregion } } |
