From 4a9bd7863ab289635a3cfb2527d41ce091fcae43 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Sun, 18 Oct 2020 23:45:02 +0100 Subject: [PATCH] implements user fs alimentation from web sockets --- src/Yavsc.Abstract/Constants.cs | 2 +- .../Blogspot/FileSystemStream.cs | 13 +++++++++---- src/cli/Commands/Streamer.cs | 4 ++-- src/cli/Program.cs | 5 +++-- src/cli/Settings/ConnectionSettings.cs | 9 +++++++++ src/cli/connectionsettings.Development2.json | 18 ++++++++++++++++++ 6 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 src/cli/connectionsettings.Development2.json diff --git a/src/Yavsc.Abstract/Constants.cs b/src/Yavsc.Abstract/Constants.cs index c14b38b7..ec8b651d 100644 --- a/src/Yavsc.Abstract/Constants.cs +++ b/src/Yavsc.Abstract/Constants.cs @@ -61,6 +61,6 @@ namespace Yavsc public const string LivePath = "/live/cast"; - public const string StreamingPath = "/api/stream/Put"; + public const string StreamingPath = "/api/stream/put"; } } diff --git a/src/Yavsc/ApiControllers/Blogspot/FileSystemStream.cs b/src/Yavsc/ApiControllers/Blogspot/FileSystemStream.cs index e2987e3c..adbbd796 100644 --- a/src/Yavsc/ApiControllers/Blogspot/FileSystemStream.cs +++ b/src/Yavsc/ApiControllers/Blogspot/FileSystemStream.cs @@ -27,8 +27,11 @@ namespace Yavsc.ApiControllers this.logger = loggerFactory.CreateLogger(); this.liveProcessor = liveProcessor; } + + [Authorize, Route("put/{filename}")] public async Task Put([ValidRemoteUserFilePath] string filename) { + logger.LogInformation("Put : " + filename); if (!HttpContext.WebSockets.IsWebSocketRequest) return HttpBadRequest("not a web socket"); if (!HttpContext.User.Identity.IsAuthenticated) @@ -36,10 +39,12 @@ namespace Yavsc.ApiControllers var subdirs = filename.Split('/'); var filePath = subdirs.Length > 1 ? string.Join("/", subdirs.Take(subdirs.Length-1)) : null; var shortFileName = subdirs[subdirs.Length-1]; - if (shortFileName.IsValidShortFileName()) + if (!shortFileName.IsValidShortFileName()) + { + logger.LogInformation("invalid file name : " + filename); return HttpBadRequest("invalid file name"); - - + } + logger.LogInformation("validated: api/stream/Put: "+filename); var userName = User.GetUserName(); var hubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext(); string url = string.Format( @@ -59,7 +64,7 @@ namespace Yavsc.ApiControllers logger.LogInformation($"Saving flow to {destDir}"); var userId = User.GetUserId(); var user = await dbContext.Users.FirstAsync(u => u.Id == userId); - + logger.LogInformation("Accepting stream ..."); await liveProcessor.AcceptStream(HttpContext, user, destDir, shortFileName); return Ok(); } diff --git a/src/cli/Commands/Streamer.cs b/src/cli/Commands/Streamer.cs index 484ca461..5a7b4136 100644 --- a/src/cli/Commands/Streamer.cs +++ b/src/cli/Commands/Streamer.cs @@ -127,7 +127,7 @@ namespace cli { public CommandLineApplication Integrate(CommandLineApplication rootApp) { - CommandLineApplication streamCmd = rootApp.Command("stream", + CommandLineApplication streamCmd = rootApp.Command("nstream", (target) => { target.FullName = "Stream to server"; @@ -172,7 +172,7 @@ namespace cli { async Task DoStream (Stream stream) { _tokenSource = new CancellationTokenSource(); - var url = _cxSettings.StreamingUrl + "/" + HttpUtility.UrlEncode(_destArg.Value); + var url = _cxSettings.NStreamingUrl + "/" + HttpUtility.UrlEncode(_destArg.Value); _logger.LogInformation("Connecting to " + url); await _client.ConnectAsync(new Uri(url), _tokenSource.Token); diff --git a/src/cli/Program.cs b/src/cli/Program.cs index f6e9270f..1d34f595 100644 --- a/src/cli/Program.cs +++ b/src/cli/Program.cs @@ -116,12 +116,13 @@ namespace cli CommandOption rootCommandHelpOption = cliapp.HelpOption("-? | -h | --help"); - (new SendMailCommandProvider()).Integrate(cliapp); - (new GenerateJsonSchema()).Integrate(cliapp); + new SendMailCommandProvider().Integrate(cliapp); + new GenerateJsonSchema().Integrate(cliapp); (new AuthCommander(loggerFactory)).Integrate(cliapp); (new CiBuildCommand()).Integrate(cliapp); (new GenerationCommander()).Integrate(cliapp); (new Streamer(loggerFactory, cxSettings, usercxSettings )).Integrate(cliapp); + new NStreamer(loggerFactory, cxSettings, usercxSettings ).Integrate(cliapp); if (args.Length == 0) { diff --git a/src/cli/Settings/ConnectionSettings.cs b/src/cli/Settings/ConnectionSettings.cs index 7148b019..11c8e321 100644 --- a/src/cli/Settings/ConnectionSettings.cs +++ b/src/cli/Settings/ConnectionSettings.cs @@ -42,5 +42,14 @@ namespace cli return Port==0 ? $"ws://{Authority}"+Constants.LivePath: $"ws://{Authority}:{Port}"+Constants.LivePath; } } + + + [NotMapped] + [JsonIgnore] + public string NStreamingUrl { get { + return Port==0 ? $"ws://{Authority}"+Constants.StreamingPath: + $"ws://{Authority}:{Port}"+Constants.StreamingPath; + } } + } } diff --git a/src/cli/connectionsettings.Development2.json b/src/cli/connectionsettings.Development2.json new file mode 100644 index 00000000..c78dd182 --- /dev/null +++ b/src/cli/connectionsettings.Development2.json @@ -0,0 +1,18 @@ +{ + "UserConnection": { + "UserName": "Paul", + "AccessToken": "IvvrnJye2b7CSFp2Hj3mEEK1-7EMbLLGJATQHAwOlRt5sIcm9aMH85kJMAxDb4yIzL76G7maoIlaWuSyhhS3qfcIB04WcVnCVdmw22ncMs8rk_L0yGuLdNBnF3HuhZXpjD-AjpLJ1TdE0q3c-yakkP_EWTjM9I00a1gGop4bgE_-LAa2uoLeaCj0dbe95OSvVKJWJ4MU0fjlvqAaUx-EC4HYicUMEQvJviR0FyyMKPYYyx4jyu_bgYbhmKX9LoE5VeEDEMsyXZE0fxqdfnflICduUqrprCvQfLoG4DZ8o7ivjoak3-xiP7CFaF1vou89mO1c9BcJYUjcZXPgNYC7K9QHwFC5sPDkOHdijUo9xfieRaaqge5tEHlZAs3H_u-bGWft7xjxHOVUPSRzzYygR27alVSUIt6rt28FoLsEGYQaVK5QNzIbOE0RVU40vQb5a6JzcTcjTtRxCMn3FneKZtilEHb2TooUy4YbmhbnDIKsa0ZMMBEshyEel8oCWz9SITjm24FbdCmUvSKOlkHhIcnSM8oez9qhDlzzcsKzahbNeO-EBINW-6qBlKISQbFmfy-zO134JEkcpfA9NybGcYPZWLWu1IrF9pDzO66X2Rh-H45pHQWRWFodHcoQh0p9ZBNwo5k_EkU731uwQZF5zgGyZnUU2VpxdjorzrpexZXpStzYnYRbGGK7kGAUZH9v16zL-nB4t55Mu12iK9jsUIS7cmqOSTj4mJWFd03dwe4xkNrLgcGSGPebmsfSWYaIk7qAmWMsPKKv_vnOpi-1sZuOgdVyH-RmuyW83IPCUiEAf63a40PuqpVxFiMmbcRqSKvh5TedjWUiEZvBvz786-atYF_b0dxCj8fDQbyWiMj-4Lj7FV4gUJFvrDX4DsRns6wL6Cs3urL4PmKHLEhRma-i589pEKmzinO7l4S2atB6uqMS_xNU7Y0um_GQ51oPk8PxxCggI2aLR4PJbuBGSJBoTDW1OV9HNa_BybrKamN8cuc8IT3LBJiHH_ImHyW1n94C2oFcaUJ1dVVt6JDJqt4EVvFiwk15SlRJMXSLWQWxPKeOTCGb-So2Gcy_DwGu8_AlVL4mOdQI0GiGRkpaWNIF3N6ek-B_7Lz1zxKX7BCx1ISurAzG7jK1FDydovJ2LOHO6QbqVH1JKRdRDCLOKZl3TpcAyOQHDo5rAl84pwf5UROMb5SfVDJtdekb7SRR", + "TokenType": "bearer", + "ExpiresIn": "1199", + "RefreshToken": "CfDJ8LSG6cXzxTtFuur3SY2RDINpvQVezgrIru8TEIfKUpNmUXe5lA4tCQ_nlkklgarH5UocJ6b95NLRon0uvVy5mE-7EY3ld_-bjLgjDnV9oPxY7Xdgb94_5HdDWcyG_Zaw67T0G_t21bvNEgtw0zewbdisPpjKopfH7avQWxlRrMbN9Wboj2ZXYVCbmu2EkeyG5665-B16UEQFF7dVT6qU4qnSldIfhx5ex8Ii5aGg0pDAEnRUNla_iObls2yAf18bmTAfF-34kmClqqLCr7z4Cy65DwQ8EHNA9oIEvgCEuj04IG5wC79vycZrw0NLQWAz7fTahRreD_WsmbIKdUqkvlDjV1W3Dq7KUCi4bAk7oAJuqdl3qZg4SohmQ31IKD08aKSOPa4_jtJ-eKOlT6fdDhpoaP3DyKS09OkvAwbMA86937IrCCFZsGBhHAm-yszHXjVjPCr7gAJYaBjneAUAoseEYK0GaOVGXfhxQcURXtM9TyH3pgHjccOzq300Djv-BpfQZcSZnQf59kulL_gt--451r8UIw3wxQ6BD5fGVF_MrilUluLyhoqoGZJbiHFyL-miKjW7feGFuogVyee0nIO1Me-7T-aTQnn-LivP9avyHab4eGwg1nfUbEspA21vmz2UXkUvKvT-JRGmSxlYineeJURQMcGGbcvr9GbFy1A_vbImUSw_Tx0u7_7jwxkDwlTt5WvGVsFFHsj9vgtNSnWHRzbGhbOSBocg0eWylgmYy3yZtdajRx6xQluRUewP_K66GsmA6xVmekUo0_ZzUPj61VQzTMR-knYE-pCd6V_qGS4qtUNeQ5nPLWT6hRPvnd3kK7CS22ijEErm3LaOY2DogGYIoBLvmdande226KW48hUgQPxsmOLoUl1tXMYsiRqHKAnWlzg4-e_BfRe3YsMUwlNPcqYf0hQ-mE-j4fVo79XJFFSWF8WxYKed-imDYeK9b6bQPP3ZPaqiMy7_d9Fxnb3i2Oo4XQPmrTpDkHbMovslBfBoJW4RSpXo3cn0QqcCDG2KfFS8HIYr68jXnyx7Ws3MeswdyEFSqx-XWmZa" + }, + "Connection": { + "ClientId": "53f4d5da-93a9-4584-82f9-b8fdf243b002", + "ClientSecret": "blouh", + "Authority": "localhost", + "Audience": "localhost", + "SiteAccessSheme": "http", + "Port": 5000, + "Scope": "profile" + } +}