aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs
diff options
context:
space:
mode:
authorMirta <mirta@twine-s.com>2020-12-30 16:39:52 +0200
committerMirta <mirta@twine-s.com>2020-12-30 16:39:52 +0200
commit00a491d93733d4625ad329b2ba8237f445364b3f (patch)
tree4b24c6fa78d7648f4bb7cefafa464bb0b063fec4 /Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs
parent124ad4150f80c6846fdee41dbbda9848c105f6e5 (diff)
downloadTango-00a491d93733d4625ad329b2ba8237f445364b3f.tar.gz
Tango-00a491d93733d4625ad329b2ba8237f445364b3f.zip
merge
Diffstat (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs')
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs260
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
}
}