diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-02-18 13:21:20 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-02-18 13:21:20 +0200 |
| commit | ccc6add5ea66565453283d7df0f6fbf2324b9264 (patch) | |
| tree | 99d7693a0022043775644ebd0d03436bec9eb34a /Software/Visual_Studio | |
| parent | 8c203b26d50818a1b16b2a7ec48eca7b082653f4 (diff) | |
| download | Tango-ccc6add5ea66565453283d7df0f6fbf2324b9264.tar.gz Tango-ccc6add5ea66565453283d7df0f6fbf2324b9264.zip | |
Refactored machine studio service.
Diffstat (limited to 'Software/Visual_Studio')
30 files changed, 194 insertions, 138 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/AuthenticationLoginResult.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/AuthenticationLoginResult.cs index 78f5365a5..dd18d75b2 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/AuthenticationLoginResult.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/AuthenticationLoginResult.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Entities; +using Tango.MachineStudio.Common.Web; namespace Tango.MachineStudio.Common.Authentication { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj index 87ccd8249..40d7da460 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj @@ -84,8 +84,8 @@ <Link>GlobalVersionInfo.cs</Link> </Compile> <Compile Include="Authentication\AuthenticationLoginResult.cs" /> - <Compile Include="Authentication\LoginRequest.cs" /> - <Compile Include="Authentication\LoginResponse.cs" /> + <Compile Include="Web\LoginRequest.cs" /> + <Compile Include="Web\LoginResponse.cs" /> <Compile Include="AutoComplete\MachinesProvider.cs" /> <Compile Include="Automation\Developer.cs" /> <Compile Include="Automation\UI.cs" /> @@ -130,19 +130,18 @@ <Compile Include="StudioModuleBase.cs" /> <Compile Include="StudioViewModel.cs" /> <Compile Include="Threading\IDispatcherProvider.cs" /> - <Compile Include="Update\DownloadLatestVersionResponse.cs" /> - <Compile Include="Update\DownloadLatestVersionRequest.cs" /> - <Compile Include="Update\CheckForUpdatesResponse.cs" /> - <Compile Include="Update\CheckForUpdatesRequest.cs" /> - <Compile Include="Update\IMachineStudioUpdateService.cs" /> - <Compile Include="Update\LatestVersionRequest.cs" /> - <Compile Include="Update\LatestVersionResponse.cs" /> - <Compile Include="Update\MachineStudioUpdateService.cs" /> - <None Include="Update\UpdateServiceHelper.cs" /> - <Compile Include="Update\UploadCompletedRequest.cs" /> - <Compile Include="Update\UploadCompletedResponse.cs" /> - <Compile Include="Update\UploadVersionRequest.cs" /> - <Compile Include="Update\UploadVersionResponse.cs" /> + <Compile Include="Web\DownloadLatestVersionResponse.cs" /> + <Compile Include="Web\DownloadLatestVersionRequest.cs" /> + <Compile Include="Web\CheckForUpdatesResponse.cs" /> + <Compile Include="Web\CheckForUpdatesRequest.cs" /> + <Compile Include="Web\IMachineStudioService.cs" /> + <Compile Include="Web\LatestVersionRequest.cs" /> + <Compile Include="Web\LatestVersionResponse.cs" /> + <Compile Include="Web\MachineStudioService.cs" /> + <Compile Include="Web\UploadCompletedRequest.cs" /> + <Compile Include="Web\UploadCompletedResponse.cs" /> + <Compile Include="Web\UploadVersionRequest.cs" /> + <Compile Include="Web\UploadVersionResponse.cs" /> <Compile Include="ValidationRules\Required.cs" /> <Compile Include="Video\DefaultVideoCaptureProvider.cs" /> <Compile Include="Video\IVideoCaptureProvider.cs" /> @@ -327,7 +326,7 @@ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> + <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UpdateServiceHelper.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UpdateServiceHelper.cs deleted file mode 100644 index 067e4470d..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UpdateServiceHelper.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.ServiceModel; -using System.Text; -using System.Threading.Tasks; -using Tango.Settings; - -namespace Tango.MachineStudio.Common.Update -{ - public static class UpdateServiceHelper - { - public static ChannelFactory<IMachineStudioUpdateService> GetUpdateServiceChannel() - { - BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None); - binding.ReceiveTimeout = TimeSpan.FromSeconds(60); - binding.SendTimeout = TimeSpan.FromSeconds(60); - binding.MaxBufferPoolSize = 6553600; - binding.MaxBufferSize = 6553600; - binding.MaxReceivedMessageSize = 6553600; - binding.ReaderQuotas.MaxDepth = 6553600; - binding.ReaderQuotas.MaxStringContentLength = 6553600; - binding.ReaderQuotas.MaxArrayLength = 6553600; - binding.ReaderQuotas.MaxBytesPerRead = 6553600; - - return new ChannelFactory<IMachineStudioUpdateService>(binding, SettingsManager.Default.GetOrCreate<MachineStudioSettings>().UpdateServiceAddress); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesRequest.cs index e31a7f59e..4f9576f50 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesRequest.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class CheckForUpdatesRequest : WebRequestSecureMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesResponse.cs index 450236f79..51608e6c4 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesResponse.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class CheckForUpdatesResponse : WebResponseMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/DownloadLatestVersionRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionRequest.cs index 98aa9f1a4..d63654726 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/DownloadLatestVersionRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionRequest.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class DownloadLatestVersionRequest : WebRequestSecureMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/DownloadLatestVersionResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionResponse.cs index f85999f3d..3209b9a2f 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/DownloadLatestVersionResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionResponse.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class DownloadLatestVersionResponse : WebResponseMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/IMachineStudioUpdateService.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/IMachineStudioService.cs index 375506b90..748df4644 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/IMachineStudioUpdateService.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/IMachineStudioService.cs @@ -5,12 +5,11 @@ using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using System.Threading.Tasks; -using Tango.MachineStudio.Common.Update; using Tango.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { - public interface IMachineStudioUpdateService + public interface IMachineStudioService { DeploymentSlot Environment { get; set; } @@ -23,5 +22,7 @@ namespace Tango.MachineStudio.Common.Update Task<UploadCompletedResponse> NotifyUploadCompleted(UploadCompletedRequest request); Task<LatestVersionResponse> GetLatestVersion(LatestVersionRequest request); + + Task<LoginResponse> Login(LoginRequest request); } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/LatestVersionRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LatestVersionRequest.cs index b4e7bd975..59bb71db4 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/LatestVersionRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LatestVersionRequest.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class LatestVersionRequest : WebRequestMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/LatestVersionResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LatestVersionResponse.cs index b90cbf370..7d43128f1 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/LatestVersionResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LatestVersionResponse.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class LatestVersionResponse : WebResponseMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/LoginRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginRequest.cs index 94fe7f5e2..577f5e208 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/LoginRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginRequest.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Authentication +namespace Tango.MachineStudio.Common.Web { public class LoginRequest : WebRequestMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/LoginResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginResponse.cs index e1d9c615a..0379c458b 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/LoginResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginResponse.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; using Tango.Core; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Authentication +namespace Tango.MachineStudio.Common.Web { public class LoginResponse : WebResponseMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/MachineStudioUpdateService.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioService.cs index 8fdd18abe..8b43146e1 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/MachineStudioUpdateService.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioService.cs @@ -3,19 +3,20 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.MachineStudio.Common.Authentication; using Tango.Settings; using Tango.Transport.Web; using Tango.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { - public class MachineStudioUpdateService : IMachineStudioUpdateService + public class MachineStudioService : IMachineStudioService { private WebTransportClient _client; public DeploymentSlot Environment { get; set; } - public MachineStudioUpdateService() + public MachineStudioService() { Environment = SettingsManager.Default.GetOrCreate<MachineStudioSettings>().DeploymentSlot; _client = new WebTransportClient(); @@ -46,6 +47,11 @@ namespace Tango.MachineStudio.Common.Update return _client.PostJson<DownloadLatestVersionRequest, DownloadLatestVersionResponse>(GetAddress() + "DownloadLatestVersion", request); } + public Task<LoginResponse> Login(LoginRequest request) + { + return _client.PostJson<LoginRequest, LoginResponse>(GetAddress() + "Login", request); + } + private String GetAddress() { return Environment.ToAddress() + "/api/MachineStudio/"; diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadCompletedRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadCompletedRequest.cs index d23d57351..48f5b2a6e 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadCompletedRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadCompletedRequest.cs @@ -6,10 +6,10 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class UploadCompletedRequest : WebRequestSecureMessage { - + public String Token { get; set; } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadCompletedResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadCompletedResponse.cs index 89850e3e5..a290cf642 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadCompletedResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadCompletedResponse.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class UploadCompletedResponse : WebResponseMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadVersionRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadVersionRequest.cs index fedb586ba..33577deb2 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadVersionRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadVersionRequest.cs @@ -6,14 +6,10 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { - public class UploadVersionRequest : WebRequestMessage + public class UploadVersionRequest : WebRequestSecureMessage { - public String Email { get; set; } - - public String Password { get; set; } - public String Version { get; set; } public String Comments { get; set; } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadVersionResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadVersionResponse.cs index 4d13fc6ad..9fb3ab94d 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadVersionResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadVersionResponse.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class UploadVersionResponse : WebResponseMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindow.xaml index a263c76a2..b860994fd 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindow.xaml @@ -80,7 +80,7 @@ <StackPanel HorizontalAlignment="Left"> <TextBlock Text="{Binding PublishArgs.Message}" Foreground="Gray"></TextBlock> - <ProgressBar Width="500" Height="10" Margin="0 5 0 0" Maximum="{Binding PublishArgs.Total}" Value="{Binding PublishArgs.Message}" Foreground="#0288D1"></ProgressBar> + <ProgressBar Width="500" Height="10" Margin="0 5 0 0" Maximum="{Binding PublishArgs.Total}" Value="{Binding PublishArgs.Progress}" Foreground="#0288D1"></ProgressBar> </StackPanel> </DockPanel> </Grid> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindowVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindowVM.cs index f9f2af693..e62f29403 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindowVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindowVM.cs @@ -17,7 +17,7 @@ using Tango.Core.Helpers; using Tango.Core.IO; using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.Publish; -using Tango.MachineStudio.Common.Update; +using Tango.MachineStudio.Common.Web; using Tango.Settings; using Tango.SharedUI; using Tango.Transport.Web; @@ -106,7 +106,7 @@ namespace Tango.MachineStudio.Publisher.UI } catch (Exception ex) { - ShowError(ex.Message); + ShowError(ex.FlattenMessage()); } finally { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs index 9be938fb7..452b706df 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs @@ -15,6 +15,7 @@ using Tango.Settings; using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.StudioApplication; using Tango.Core.Helpers; +using Tango.MachineStudio.Common.Web; namespace Tango.MachineStudio.UI.Authentication { @@ -56,9 +57,9 @@ namespace Tango.MachineStudio.UI.Authentication { var settings = SettingsManager.Default.GetOrCreate<MachineStudioSettings>(); + IMachineStudioService service = new MachineStudioService(); - IWebTransportClient service = new WebTransportClient(); - var response = service.PostJson<LoginRequest, LoginResponse>(settings.GetMachineServiceAddress() + "/api/MachineStudio/Login", new LoginRequest() + var response = service.Login(new LoginRequest() { Email = email, diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Messages/ChangeVersionMessage.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Messages/ChangeVersionMessage.cs index fc616f359..a0fdec8ed 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Messages/ChangeVersionMessage.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Messages/ChangeVersionMessage.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.MachineStudio.Common.Authentication; -using Tango.MachineStudio.Common.Update; +using Tango.MachineStudio.Common.Web; namespace Tango.MachineStudio.UI.Messages { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Messages/ForcedUpdateMessage.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Messages/ForcedUpdateMessage.cs index 38bc82b6e..54b43c6d3 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Messages/ForcedUpdateMessage.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Messages/ForcedUpdateMessage.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Tango.MachineStudio.Common.Update; +using Tango.MachineStudio.Common.Web; namespace Tango.MachineStudio.UI.Messages { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs index 283ea3637..e55d0534e 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs @@ -17,7 +17,7 @@ using Tango.MachineStudio.Common.EventLogging; using Tango.BL.Enumerations; using Tango.MachineStudio.UI.TFS; using Tango.MachineStudio.Common; -using Tango.MachineStudio.Common.Update; +using Tango.MachineStudio.Common.Web; using Tango.Core.DI; using Tango.Settings; using Tango.Core; diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs index 1d03dd389..64043e556 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs @@ -27,7 +27,7 @@ using Tango.MachineStudio.Common.Navigation; using Tango.MachineStudio.Common.Notifications; using Tango.MachineStudio.Common.Speech; using Tango.MachineStudio.Common.StudioApplication; -using Tango.MachineStudio.Common.Update; +using Tango.MachineStudio.Common.Web; using Tango.MachineStudio.UI.StudioApplication; using Tango.MachineStudio.UI.SupervisingController; using Tango.MachineStudio.UI.TFS; @@ -357,7 +357,7 @@ namespace Tango.MachineStudio.UI.ViewModels { if (_authenticationProvider.CurrentUser != null) { - var client = new MachineStudioUpdateService(); + var client = new MachineStudioService(); CheckForUpdatesResponse response = client.CheckForUpdates(new CheckForUpdatesRequest() { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs index 63cff2242..8d4553e32 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs @@ -19,12 +19,13 @@ using Tango.MachineStudio.Common.Authentication; using Tango.MachineStudio.Common.Navigation; using Tango.MachineStudio.Common.Notifications; using Tango.MachineStudio.Common.StudioApplication; -using Tango.MachineStudio.Common.Update; +using Tango.MachineStudio.Common.Web; using Tango.SharedUI; using Tango.MachineStudio.UI.Messages; using Tango.Settings; using Tango.MachineStudio.Common; using Tango.Transport.Web; +using Tango.MachineStudio.Common.Web; namespace Tango.MachineStudio.UI.ViewModels { @@ -168,7 +169,7 @@ namespace Tango.MachineStudio.UI.ViewModels Status = UpdateStatus.CheckingForUpdate; - var client = new MachineStudioUpdateService(); + var client = new MachineStudioService(); DownloadLatestVersionResponse response = await client.DownloadLatestVersion(new DownloadLatestVersionRequest() { @@ -215,7 +216,7 @@ namespace Tango.MachineStudio.UI.ViewModels { Thread.Sleep(2000); - var client = new MachineStudioUpdateService(); + var client = new MachineStudioService(); CheckForUpdatesResponse response = client.CheckForUpdates(new CheckForUpdatesRequest() { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/AboutView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/AboutView.xaml index 696cc051f..d9cb20d03 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/AboutView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/AboutView.xaml @@ -60,8 +60,6 @@ <TextBlock><Run Text="{Binding DataSource.Address,Mode=OneWay}"></Run> <Run>(</Run><Run Foreground="Gray" Text="{Binding DataSource.Catalog,Mode=OneWay}"></Run><Run>)</Run> </TextBlock> - <TextBlock FontWeight="SemiBold">Allow BETA Updates:</TextBlock> - <ToggleButton IsChecked="{Binding MachineStudioSettings.AcceptBetaRelease,Mode=TwoWay}" HorizontalAlignment="Left" VerticalAlignment="Bottom"></ToggleButton> </controls:TableGrid> <DockPanel Margin="0 0 0 0"> diff --git a/Software/Visual_Studio/Tango.Web/Authentication/TokensManager.cs b/Software/Visual_Studio/Tango.Web/Authentication/TokensManager.cs index 20fc8ab50..4f23c9667 100644 --- a/Software/Visual_Studio/Tango.Web/Authentication/TokensManager.cs +++ b/Software/Visual_Studio/Tango.Web/Authentication/TokensManager.cs @@ -1,30 +1,41 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Security.Authentication; using System.Text; using System.Threading.Tasks; namespace Tango.Web.Authentication { - public class TokensManager + public class TokensManager<T> { - private List<String> _tokens; + private Dictionary<String, T> _tokens; public TokensManager() { - _tokens = new List<string>(); + _tokens = new Dictionary<String, T>(); } - public String CreateNew() + public String CreateNew(T userID) { String token = Guid.NewGuid().ToString(); - _tokens.Add(token); + _tokens.Add(token, userID); return token; } public bool Exists(String token) { - return _tokens.Contains(token); + return _tokens.ContainsKey(token); + } + + public T GetUserID(String token) + { + if (!_tokens.ContainsKey(token)) + { + throw new AuthenticationException("Invalid token."); + } + + return _tokens[token]; } } } diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs index 660b98576..b2e3aa150 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/MachineStudioController.cs @@ -14,35 +14,53 @@ using Tango.Core.Cryptography; using Tango.MachineService.Models; using Tango.MachineStudio.Common.Authentication; using System.Data.Entity; -using Tango.MachineStudio.Common.Update; +using Tango.MachineStudio.Common.Web; using Tango.Web.Controllers; using Tango.Web.Helpers; using Tango.Web.Storage; using Tango.Web.Authentication; using Tango.Web.ActiveDirectory; +using Tango.MachineService.Filters; namespace Tango.MachineService.Controllers { public class MachineStudioController : JsonController { - private static TokensManager _tokens_manager; private static List<MachineStudioPendingUpload> _pendingUploads; private ActiveDirectoryManager _ad_manager; + public static TokensManager<String> TokensManager { get; set; } + + #region Constructors + + /// <summary> + /// Initializes the <see cref="MachineStudioController"/> class. + /// </summary> static MachineStudioController() { - _tokens_manager = new TokensManager(); + TokensManager = new TokensManager<string>(); _pendingUploads = new List<MachineStudioPendingUpload>(); } + /// <summary> + /// Initializes a new instance of the <see cref="MachineStudioController"/> class. + /// </summary> public MachineStudioController() : base() { _ad_manager = new ActiveDirectoryManager(); } - #region Update + #endregion + + #region Actions + /// <summary> + /// Checks for updates. + /// </summary> + /// <param name="request">The request.</param> + /// <returns></returns> [HttpPost] + [MachineStudioLoginFilter] public CheckForUpdatesResponse CheckForUpdates(CheckForUpdatesRequest request) { LogManager.Log("Request received..."); @@ -51,41 +69,40 @@ namespace Tango.MachineService.Controllers using (ObservablesContext db = ObservablesContextHelper.CreateContext()) { - if (_tokens_manager.Exists(request.AccessToken)) - { - var versions = db.MachineStudioVersions.ToList(); + var versions = db.MachineStudioVersions.ToList(); - MachineStudioVersion latestVersion = null; + MachineStudioVersion latestVersion = null; - latestVersion = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); + latestVersion = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); - Version currentVersion = Version.Parse(request.Version); + Version currentVersion = Version.Parse(request.Version); - String comments = String.Join(Environment.NewLine, versions.OrderBy(x => Version.Parse(x.Version)).Where(x => Version.Parse(x.Version) > currentVersion).Select(x => x.Comments)); + 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 manager = new StorageManager(); - var container = manager.GetContainer(MachineServiceConfig.MACHINE_STUDIO_VERSIONS_CONTAINER); - var blob = container.GetBlockBlobReference(latestVersion.BlobName); + if (latestVersion != null && Version.Parse(latestVersion.Version) > currentVersion) + { + var manager = new StorageManager(); + var container = manager.GetContainer(MachineServiceConfig.MACHINE_STUDIO_VERSIONS_CONTAINER); + var blob = container.GetBlockBlobReference(latestVersion.BlobName); - response.BlobAddress = blob.GenerateReadSignature(TimeSpan.FromMinutes(60)); + response.BlobAddress = blob.GenerateReadSignature(TimeSpan.FromMinutes(60)); - response.IsUpdateAvailable = true; - response.Version = latestVersion.Version; - response.Comments = latestVersion.Comments; - } - } - else - { - throw new AuthenticationException("Invalid token."); + response.IsUpdateAvailable = true; + response.Version = latestVersion.Version; + response.Comments = latestVersion.Comments; } } return response; } + /// <summary> + /// Downloads the latest version. + /// </summary> + /// <param name="request">The request.</param> + /// <returns></returns> [HttpPost] + [MachineStudioLoginFilter] public DownloadLatestVersionResponse DownloadLatestVersion(DownloadLatestVersionRequest request) { LogManager.Log("Request received..."); @@ -94,32 +111,33 @@ namespace Tango.MachineService.Controllers using (ObservablesContext db = ObservablesContextHelper.CreateContext()) { - if (_tokens_manager.Exists(request.AccessToken)) - { - var versions = db.MachineStudioVersions.ToList(); + var versions = db.MachineStudioVersions.ToList(); - MachineStudioVersion latestVersion = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); + MachineStudioVersion latestVersion = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); - if (latestVersion != null) - { - var manager = new StorageManager(); - var container = manager.GetContainer(MachineServiceConfig.MACHINE_STUDIO_VERSIONS_CONTAINER); - var blob = container.GetBlockBlobReference(latestVersion.BlobName); - - response.BlobAddress = blob.GenerateReadSignature(TimeSpan.FromMinutes(60)); - response.Version = latestVersion.Version; - } - } - else + if (latestVersion != null) { - throw new AuthenticationException("Invalid token."); + var manager = new StorageManager(); + var container = manager.GetContainer(MachineServiceConfig.MACHINE_STUDIO_VERSIONS_CONTAINER); + var blob = container.GetBlockBlobReference(latestVersion.BlobName); + + response.BlobAddress = blob.GenerateReadSignature(TimeSpan.FromMinutes(60)); + response.Version = latestVersion.Version; } } return response; } + /// <summary> + /// Uploads a version. + /// </summary> + /// <param name="request">The request.</param> + /// <returns></returns> + /// <exception cref="System.ArgumentException">New version must be greater than latest version.</exception> + /// <exception cref="AuthenticationException">Invalid user credentials.</exception> [HttpPost] + [MachineStudioLoginFilter] public UploadVersionResponse UploadVersion(UploadVersionRequest request) { UploadVersionResponse response = new UploadVersionResponse(); @@ -132,7 +150,9 @@ namespace Tango.MachineService.Controllers db.UsersRoles.ToList(); db.RolesPermissions.ToList(); - var user = db.Users.SingleOrDefault(x => x.Email.ToLower() == request.Email.ToLower() && x.Password == request.Password); + String userID = TokensManager.GetUserID(request.AccessToken); + + var user = db.Users.SingleOrDefault(x => x.Guid == userID); if (user != null && user.HasPermission(Permissions.PublishMachineStudioVersions)) { @@ -173,10 +193,17 @@ namespace Tango.MachineService.Controllers return response; } + /// <summary> + /// Notifies about a version upload completion. + /// </summary> + /// <param name="request">The request.</param> + /// <returns></returns> + /// <exception cref="System.ArgumentException">Invalid Token.</exception> [HttpPost] + [MachineStudioLoginFilter] public UploadCompletedResponse NotifyUploadCompleted(UploadCompletedRequest request) { - MachineStudioPendingUpload upload = _pendingUploads.FirstOrDefault(x => x.Token == request.AccessToken); + MachineStudioPendingUpload upload = _pendingUploads.FirstOrDefault(x => x.Token == request.Token); if (upload != null) { @@ -203,6 +230,11 @@ namespace Tango.MachineService.Controllers } } + /// <summary> + /// Gets the latest version. + /// </summary> + /// <param name="request">The request.</param> + /// <returns></returns> [HttpPost] public LatestVersionResponse GetLatestVersion(LatestVersionRequest request) { @@ -213,8 +245,12 @@ namespace Tango.MachineService.Controllers } } - #endregion - + /// <summary> + /// Login to the service. + /// </summary> + /// <param name="request">The request.</param> + /// <returns></returns> + /// <exception cref="AuthenticationException"></exception> [HttpPost] public LoginResponse Login(LoginRequest request) { @@ -235,6 +271,8 @@ namespace Tango.MachineService.Controllers bool versionChangeRequired = false; String requiredVersion = null; + User user = null; + using (ObservablesContext db = ObservablesContextHelper.CreateContext()) { db.Roles.ToList(); @@ -242,7 +280,7 @@ namespace Tango.MachineService.Controllers db.UsersRoles.ToList(); db.RolesPermissions.ToList(); - var user = db.Users.SingleOrDefault(x => x.Email.ToLower() == request.Email.ToLower()); + user = db.Users.SingleOrDefault(x => x.Email.ToLower() == request.Email.ToLower()); IHashGenerator g = new BasicHashGenerator(); @@ -309,11 +347,12 @@ namespace Tango.MachineService.Controllers Password = request.Password, }, - Token = _tokens_manager.CreateNew(), + Token = TokensManager.CreateNew(user.Guid), VersionChangeRequired = versionChangeRequired, RequiredVersion = requiredVersion, }; } + #endregion } } diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Filters/MachineStudioLoginFilter.cs b/Software/Visual_Studio/Web/Tango.MachineService/Filters/MachineStudioLoginFilter.cs new file mode 100644 index 000000000..3c5798e82 --- /dev/null +++ b/Software/Visual_Studio/Web/Tango.MachineService/Filters/MachineStudioLoginFilter.cs @@ -0,0 +1,31 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Security.Authentication; +using System.Web; +using System.Web.Http; +using System.Web.Http.Controllers; +using System.Web.Http.Filters; +using Tango.Transport.Web; + +namespace Tango.MachineService.Filters +{ + public class MachineStudioLoginFilter : ActionFilterAttribute + { + public override void OnActionExecuting(HttpActionContext actionContext) + { + var json = actionContext.Request.Content.ReadAsStringAsync().Result; + WebRequestSecureMessage msg = JsonConvert.DeserializeObject<WebRequestSecureMessage>(json); + + if (!Controllers.MachineStudioController.TokensManager.Exists(msg.AccessToken)) + { + throw new HttpResponseException(actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, new AuthenticationException("Invalid Token."))); + } + + base.OnActionExecuting(actionContext); + } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj b/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj index 048e051c5..ab3215f6b 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj +++ b/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj @@ -275,6 +275,7 @@ </Compile> <Compile Include="App_Start\BundleConfig.cs" /> <Compile Include="App_Start\FilterConfig.cs" /> + <Compile Include="Filters\MachineStudioLoginFilter.cs" /> <Compile Include="MachineServiceConfig.cs" /> <Compile Include="Controllers\MachineStudioController.cs" /> <Compile Include="Models\MachineStudioPendingUpload.cs" /> @@ -377,7 +378,7 @@ <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile> </WebProjectProperties> </FlavorProperties> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> + <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> |
