aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2019-01-09 13:45:40 +0200
committerAvi Levkovich <avi@twine-s.com>2019-01-09 13:45:40 +0200
commitc2019e2a94afc7f25258ae38478ae74434414a1f (patch)
treeee9cf870d5738004ebd92cf841c1bdbd26793984 /Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs
parentc84c8852f2889235a181ec74f0d2fdf8584f2a7d (diff)
parentd50d729a2b7d45ca4b22df7ff0d8823825c479b6 (diff)
downloadTango-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.cs106
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()
};
}