From 6b59b18966fa95b24d8813752f5a1ba1fd730660 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Mon, 17 Feb 2020 01:34:51 +0200 Subject: Started basic design of FSE skeletons. --- .../Controllers/FSEController.cs | 113 +++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Controllers') diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs new file mode 100644 index 000000000..abcd1c41f --- /dev/null +++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/FSEController.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Security.Authentication; +using System.Web.Http; +using Tango.BL.Builders; +using Tango.BL.Entities; +using Tango.Core; +using Tango.Core.Cryptography; +using Tango.FSE.Web.Messages; +using Tango.Web.Controllers; +using Tango.Web.Helpers; +using Tango.Web.Security; +using Tango.Web.SQLServer; + +namespace Tango.MachineService.Controllers +{ + public class FSEController : TangoController + { + public class TokenObject + { + public String UserGuid { get; set; } + } + + /// + /// Login to the service. + /// + /// The request. + /// + /// + [HttpPost] + public LoginResponse Login(LoginRequest request) + { + User user = null; + DataSource dataSource = null; + IHashGenerator hash = new BasicHashGenerator(); + + Version client_version; + + if (!Version.TryParse(request.Version, out client_version)) + { + client_version = new Version("1.0.0.0"); + } + + bool versionChangeRequired = false; + String requiredVersion = null; + + var password = hash.Encrypt(request.Password); + + using (var db = ObservablesContextHelper.CreateContext()) + { + user = new UserBuilder(db).Set(x => x.Email.ToLower() == request.Email.ToLower() && x.Password == password).WithRolesAndPermissions().WithDeleted().Build(); + + if (user == null) + { + throw new AuthenticationException("Invalid email or password."); + } + + if (user.Deleted) + { + throw new AuthenticationException("Your account has been disabled. Please contact your administrator."); + } + + user.LastLogin = DateTime.UtcNow; + db.SaveChanges(); + } + + SQLServerManager sqlServer = new SQLServerManager(); + var accessToken = sqlServer.GetAccessToken(); + + dataSource = new DataSource() + { + Address = MachineServiceConfig.DB_ADDRESS, + Catalog = MachineServiceConfig.DB_CATALOG, + Type = DataSourceType.AccessToken, + IntegratedSecurity = false, + AccessToken = accessToken.AccessToken, + AccessTokenExpiration = accessToken.ExpiresOn.UtcDateTime + }; + + + //Enforce Machine Studio Version ? + //if (MachineServiceConfig.ENFORCE_MACHINE_STUDIO_VERSION) + //{ + // using (var db = ObservablesContextHelper.CreateContext()) + // { + // 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; + // } + // } + //} + + //Return data source + return new LoginResponse() + { + DataSource = dataSource, + AccessToken = WebToken.CreateNew(MachineServiceConfig.JWT_TOKEN_SECRET, new TokenObject() + { + UserGuid = user.Guid, + }, DateTime.UtcNow.AddDays(1)).AccessToken, + VersionChangeRequired = versionChangeRequired, + RequiredVersion = requiredVersion, + PasswordChangeRequired = user.PasswordChangeRequired + }; + } + } +} -- cgit v1.3.1