Exemple #1
0
        public void ScannerShouldInstantiateScannerControllerWithInjectedDependencies()
        {
            const string TestRoute = "/scannercontroller/get2";

            var test = new TestDependency();

            IoC.RegisterInstance <ITestDependency>(nameof(ITestDependency), test);

            var logger = new TestLogger();

            IoC.RegisterInstance <IChromelyLogger>(nameof(IChromelyLogger), logger);

            var scanner       = new RouteScanner(Assembly.GetExecutingAssembly());
            var routeCommands = scanner.Scan();

            foreach (var route in routeCommands.Item1)
            {
                ServiceRouteProvider.AddRoute(route.Key, route.Value);
            }

            foreach (var command in routeCommands.Item2)
            {
                ServiceRouteProvider.AddCommand(command.Key, command.Value);
            }

            var request = new ChromelyRequest(new RoutePath(Method.GET, TestRoute), null, null);

            var routePath   = new RoutePath(Method.GET, TestRoute);
            var get2        = ServiceRouteProvider.GetRoute(routePath);
            var getResponse = get2.Invoke(request);

            Assert.Equal(TestDependency.TestDependencyResponse, getResponse.Data.ToString());
            Assert.Equal(ScannerControllerWithDependencyInjection.Get2Response, logger.Message);
        }
Exemple #2
0
 private ChromelyResponse Test(ChromelyRequest request)
 {
     return(new ChromelyResponse(request.Id)
     {
         Data = "data"
     });
 }
            /// <summary>
            /// The save.
            /// </summary>
            /// <param name="request">
            /// The request.
            /// </param>
            /// <returns>
            /// The <see cref="ChromelyResponse"/>.
            /// </returns>
            private ChromelyResponse Save(ChromelyRequest request)
            {
                ChromelyResponse response = new ChromelyResponse();

                response.Data = request.PostData;
                return(response);
            }
            /// <summary>
            /// The get 1.
            /// </summary>
            /// <param name="request">
            /// The request.
            /// </param>
            /// <returns>
            /// The <see cref="ChromelyResponse"/>.
            /// </returns>
            private ChromelyResponse Get1(ChromelyRequest request)
            {
                ChromelyResponse response = new ChromelyResponse();

                response.Data = 1000;
                return(response);
            }
            /// <summary>
            /// The get 2.
            /// </summary>
            /// <param name="request">
            /// The request.
            /// </param>
            /// <returns>
            /// The <see cref="ChromelyResponse"/>.
            /// </returns>
            private ChromelyResponse Get2(ChromelyRequest request)
            {
                ChromelyResponse response = new ChromelyResponse();

                response.Data = "Test Get 2";
                return(response);
            }
Exemple #6
0
        private ChromelyResponse ExportAllConversations(ChromelyRequest request)
        {
            IDictionary <string, object> parameters = request.Parameters;
            string  postDataJson = (string)request.PostData.EnsureJson();
            JObject data         = JObject.Parse(postDataJson);

            ConversationService conversationService = ConversationService.getInstance();

            List <ConversationAsset> conversations = conversationService.LoadConversations();

            foreach (ConversationAsset conversationAsset in conversations)
            {
                conversationService.SaveConversation(conversationAsset, FileFormat.JSON);
            }

            try {
                string conversationAssetString = data["conversationAsset"].ToString();

                if (conversationAssetString != "")
                {
                    ConversationAsset conversationAsset = JsonConvert.DeserializeObject <ConversationAsset>(conversationAssetString);
                    conversationService.SaveConversation(conversationAsset, FileFormat.JSON);
                }
            } catch (Exception e) {
                Log.Error(e);
            }

            List <ConversationAsset> updatedConversations = conversationService.LoadConversations();
            string           conversationsJson            = JsonConvert.SerializeObject(updatedConversations);
            ChromelyResponse response = new ChromelyResponse();

            response.Data = conversationsJson;
            return(response);
        }
        public Task <ChromelyResponse> RunAsync(ChromelyRequest request)
        {
            var parameters = request.Parameters ?? request.RoutePath.Path.GetParameters()?.ToObjectDictionary();
            var postData   = request.PostData;

            return(ExcuteRouteAsync(request.RoutePath, parameters, postData));
        }
        public ChromelyResponse AddProduct(ChromelyRequest req)
        {
            JObject data = (JObject)JsonConvert.DeserializeObject(req.PostData.ToJson());

            //Console.WriteLine(data);
            try
            {
                new Repository <Product>().AddThenWrite(new Product(
                                                            data["price"].Value <double>(),
                                                            data["name"].Value <string>(),
                                                            data["type"].Value <string>()
                                                            ));
            } catch (FormatException)
            {
                return(Response.ParseError(req.Id));
            } catch (InvalidOperationException)
            {
                return(Response.TransactionProtocolViolation(req.Id));
            } catch (ValidationException exception)
            {
                return(Response.ValidationError(req.Id, exception));
            }
            return(new Response
            {
                status = 204
            }.ChromelyWrapper(req.Id));
        }
 private ChromelyResponse GetArguments(ChromelyRequest request)
 {
     return(new ChromelyResponse()
     {
         Data = "Hello World Arguments"
     });
 }
        public ChromelyResponse GetProducts(ChromelyRequest req)
        {
            Dictionary <int, Product> rawData;

            try
            {
                rawData = new Repository <Product>().Data;
            } catch (InvalidOperationException)
            {
                return(Response.TransactionProtocolViolation(req.Id));
            }
            List <Product> data = new List <Product>();

            foreach (Product prod in rawData.Values)
            {
                if (prod.GetType() == typeof(Product))
                {
                    data.Add(prod);
                }
            }
            return(new Response
            {
                status = 200,
                data = JsonConvert.SerializeObject(data)
            }.ChromelyWrapper(req.Id));
        }
        public ChromelyResponse GetMovieById(ChromelyRequest req)
        {
            int id;

            try
            {
                id = ((JObject)JsonConvert.DeserializeObject(req.PostData.ToJson())).Value <int>("id");
            } catch (FormatException)
            {
                return(Response.ParseError(req.Id));
            }
            try
            {
                return(new Response
                {
                    status = 200,
                    data = JsonConvert.SerializeObject(new Repository <Product>().Data[id])
                }.ChromelyWrapper(req.Id));
            } catch (InvalidOperationException)
            {
                return(Response.TransactionProtocolViolation(req.Id));
            } catch (KeyNotFoundException)
            {
                return(new Response
                {
                    status = 400,
                    statusText = $"No movie found for id {id}."
                }.ChromelyWrapper(req.Id));
            }
        }
        public ChromelyResponse GetMovieById(ChromelyRequest req)
        {
            JObject jParse = ((JObject)JsonConvert.DeserializeObject(req.PostData.ToJson()));
            int     id;

            try
            {
                id = jParse.Value <int>("id");
            }
            catch (FormatException) {
                return(Response.ParseError(req.Id));
            }
            Movie data;

            try
            {
                data = new Repository <Movie>().Data[id];
            }
            catch (KeyNotFoundException)
            {
                return(new Response
                {
                    status = 204,
                    statusText = $"No movie found for {id}"
                }.ChromelyWrapper(req.Id));
            }
            return(new Response
            {
                status = 200,
                data = JsonConvert.SerializeObject(data)
            }.ChromelyWrapper(req.Id));
        }
Exemple #13
0
        private ChromelyResponse GetAudioDevices(ChromelyRequest request)
        {
            List <Object> devices = new List <Object>();

            var enumerator = new MMDeviceEnumerator();

            var outputDevices = enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active);

            foreach (MMDevice e in outputDevices)
            {
                //Console.WriteLine($"{e.DataFlow} {e.FriendlyName} {e.DeviceFriendlyName} {e.State}");
                devices.Add(new { ID = e.ID, Flow = e.DataFlow.ToString(), FriendlyName = e.FriendlyName, DeviceFriendlyName = e.DeviceFriendlyName, State = e.State.ToString() });
            }

            var current = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
            //Console.WriteLine($"{current.DataFlow} {current.FriendlyName} {current.DeviceFriendlyName} {current.State}");

            var sessions = current.AudioSessionManager.Sessions;


            /* for (int i = 0; i < sessions.Count; i++)
             * {
             * Console.WriteLine($"Info -> DN: {sessions[i].DisplayName} ID: {sessions[i].GetSessionIdentifier} VOL: {sessions[i].SimpleAudioVolume.Volume}");
             * var process = FindLivingProcess(sessions[i].GetProcessID);
             * Console.WriteLine(process.ProcessName);
             * } */

            return(new ChromelyResponse(request.Id)
            {
                Data = devices
            });
        }
Exemple #14
0
        /// <summary>
        /// Parse analysis arguments in the given request
        /// </summary>
        /// <param name="request">Request</param>
        /// <returns>Arguments</returns>
        private static AnalysisArguments ParseAnalysisRequest(ChromelyRequest request)
        {
            // Parse postData
            var arguments = JsonSerializer.Deserialize <AnalysisArguments>(request.PostData?.ToString() ?? "{}");

            // Check value
            if (float.IsNaN(arguments.Start) || float.IsNaN(arguments.End) || float.IsNaN(arguments.Step))
            {
                throw new Exception("Analysis parameters contain NaN numbers");
            }

            // Assert range
            if (arguments.Start > arguments.End)
            {
                throw new Exception($"Invalid analysis range from {arguments.Start} to {arguments.End}");
            }

            // Assert step
            if (arguments.Step <= 0)
            {
                throw new Exception($"Invalid analysis step: {arguments.Step}");
            }

            return(arguments);
        }
Exemple #15
0
        public ChromelyResponse Run(ChromelyRequest request)
        {
            if (request.RoutePath == null)
            {
                return(GetBadRequestResponse(request.Id));
            }

            if (string.IsNullOrEmpty(request.RoutePath.Path))
            {
                return(GetBadRequestResponse(request.Id));
            }

            if (request.RoutePath.Path.ToLower().Equals("/info"))
            {
                return(GetInfo(request.Id));
            }

            var route = ServiceRouteProvider.GetActionRoute(_container, request.RoutePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {request.RoutePath} is null or invalid.");
            }

            var parameters = request.Parameters ?? request.RoutePath.Path.GetParameters()?.ToObjectDictionary();
            var postData   = request.PostData;

            return(ExecuteRoute(request.Id, request.RoutePath, parameters, postData, request.RawJson));
        }
Exemple #16
0
        /// <summary>
        /// The save movies.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <returns>
        /// The <see cref="ChromelyResponse"/>.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// ArgumentNullException - request is null exception.
        /// </exception>
        /// <exception cref="Exception">
        /// Exception - post data is null exception.
        /// </exception>
        private ChromelyResponse SaveMovies(ChromelyRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (request.PostData == null)
            {
                throw new Exception("Post data is null or invalid.");
            }

            var response     = new ChromelyResponse(request.Id);
            var postDataJson = request.PostData.ToJson();

            var options = new JsonSerializerOptions();

            options.ReadCommentHandling = JsonCommentHandling.Skip;
            options.AllowTrailingCommas = true;
            var movies       = JsonSerializer.Deserialize <List <MovieInfo> >(postDataJson, options);
            var rowsReceived = movies != null ? movies.Count : 0;

            response.Data = $"{DateTime.Now}: {rowsReceived} rows of data successfully saved.";

            return(response);
        }
Exemple #17
0
        public ChromelyResponse Update(ChromelyRequest req)
        {
            var index = int.Parse(req.Parameters["index"]);
            var text  = req.PostData.ToString();

            if (index >= 0 && index < lines.Length)
            {
                var trace = new List <LineTrace>();
                if (req.Parameters.ContainsKey("autoReplace") && req.Parameters["autoReplace"] == "1")
                {
                    var oldText = lines[index].Text;
                    for (var i = 0; i < lines.Length; i++)
                    {
                        if (lines[i].Text == oldText)
                        {
                            trace.Add(new LineTrace(i, lines[i]));
                            lines[i].Text = text.Replace(Environment.NewLine, "\n");
                            ExecuteScript($"window.$app.setLine({i},\"{text}\")");
                        }
                    }
                }
                trace.Add(new LineTrace(index, lines[index]));
                lines[index].Text = text.Replace(Environment.NewLine, "\n");
                PushHistory(trace.ToArray());
            }

            return(Response.OK);
        }
        public ChromelyResponse GetScreenTimeById(ChromelyRequest req)
        {
            int id;

            try
            {
                id = ((JObject)JsonConvert.DeserializeObject(req.PostData.ToJson())).Value <int>("id");
            } catch (FormatException)
            {
                return(Response.ParseError(req.Id));
            }
            try
            {
                return(new Response
                {
                    status = 200,
                    data = JsonConvert.SerializeObject(new Repository <ScreenTime>().Data[id])
                }.ChromelyWrapper(req.Id));
            } catch (KeyNotFoundException)
            {
                return(new Response
                {
                    status = 400,
                    statusText = "No ScreenTime found for the given id."
                }.ChromelyWrapper(req.Id));
            }
        }
Exemple #19
0
        public ChromelyResponse RunPatcher(ChromelyRequest req)
        {
            var  body   = req.PostData.ToString().ToJson <Dictionary <string, object> >();
            var  source = body["source"].ToString();
            var  dest   = body["dest"].ToString();
            var  loc1   = new LocalizationFile(source);
            var  loc2   = new LocalizationFile(dest);
            var  line1  = loc1.Process();
            var  line2  = loc2.ProcessWithIndexer(out var indexer);
            long index  = 0;

            for (var i = 0; i < line1.Length; i++)
            {
                index = indexer.GetIndex(line1[i]);
                if (index >= 0 && index < line2.Length)
                {
                    if (line1[i].HasSameAddress(line2[index]))
                    {
                        if (line1[i].Text != line2[index].Text)
                        {
                            line2[index].Text = line1[i].Text;
                        }
                    }
                }
            }
            File.WriteAllLines(dest, line2.Select(x => x.ToString()), Encoding.Unicode);
            return(Response.OK);
        }
Exemple #20
0
        /// <summary>
        /// The execute.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <returns>
        /// The <see cref="ChromelyResponse"/>.
        /// </returns>
        private ChromelyResponse Execute(ChromelyRequest request)
        {
            var response = new ChromelyResponse(request.Id)
            {
                ReadyState = (int)ReadyState.ResponseIsReady,
                Status     = (int)System.Net.HttpStatusCode.OK,
                StatusText = "OK",
                Data       = DateTime.Now.ToLongDateString()
            };

            try
            {
                var scriptInfo = new ScriptInfo(request.PostData);
                var frame      = FrameHandler.GetFrame(scriptInfo.FrameName);
                if (frame == null)
                {
                    response.Data = $"Frame {scriptInfo.FrameName} does not exist.";
                    return(response);
                }

                frame.ExecuteJavaScript(scriptInfo.Script, null, 0);
                response.Data = "Executed script :" + scriptInfo.Script;
                return(response);
            }
            catch (Exception e)
            {
                response.Data       = e.Message;
                response.ReadyState = (int)ReadyState.RequestReceived;
                response.Status     = (int)System.Net.HttpStatusCode.BadRequest;
                response.StatusText = "Error";
            }

            return(response);
        }
Exemple #21
0
    private async Task <IChromelyResponse> ExecuteRouteAsync(string requestId, string routeUrl, IDictionary <string, object>?parameters, object?postData, string?requestData)
    {
        var route = _routeProvider.GetRoute(routeUrl);

        if (route is null)
        {
            return(_chromelyErrorHandler.HandleRouteNotFound(requestId, routeUrl));
        }

        IChromelyResponse response;
        var request = new ChromelyRequest(requestId, routeUrl, parameters, postData, requestData);

        if (route.IsAsync)
        {
            response = await route.InvokeAsync(request);
        }
        else
        {
            response = route.Invoke(request);
        }

        response.ReadyState = (int)ReadyState.ResponseIsReady;
        response.Status     = (response.Status == 0) ? (int)HttpStatusCode.OK : response.Status;
        response.StatusText = (string.IsNullOrWhiteSpace(response.StatusText) && (response.Status == (int)HttpStatusCode.OK)) ? "OK" : response.StatusText;

        return(response);
    }
Exemple #22
0
        /// <summary>
        /// The execute.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <returns>
        /// The <see cref="ChromelyResponse"/>.
        /// </returns>
        private ChromelyResponse Execute(ChromelyRequest request)
        {
            var response = new ChromelyResponse(request.Id)
            {
                ReadyState = (int)ReadyState.ResponseIsReady,
                Status     = (int)System.Net.HttpStatusCode.OK,
                StatusText = "OK",
                Data       = DateTime.Now.ToLongDateString()
            };

            try
            {
                var scriptInfo     = new ScriptInfo(request.PostData);
                var scriptExecutor = _config?.JavaScriptExecutor;
                if (scriptExecutor == null)
                {
                    response.Data = $"Frame {scriptInfo.FrameName} does not exist.";
                    return(response);
                }

                scriptExecutor.ExecuteScript(scriptInfo.Script);
                response.Data = "Executed script :" + scriptInfo.Script;
                return(response);
            }
            catch (Exception e)
            {
                Logger.Instance.Log.Error(e);
                response.Data       = e.Message;
                response.ReadyState = (int)ReadyState.RequestReceived;
                response.Status     = (int)System.Net.HttpStatusCode.BadRequest;
                response.StatusText = "Error";
            }

            return(response);
        }
Exemple #23
0
        /// <summary>
        /// The on web socket message.
        /// </summary>
        /// <param name="server">
        /// The server.
        /// </param>
        /// <param name="connectionId">
        /// The connection id.
        /// </param>
        /// <param name="data">
        /// The data.
        /// </param>
        /// <param name="dataSize">
        /// The data size.
        /// </param>
        protected override void OnWebSocketMessage(CefServer server, int connectionId, IntPtr data, long dataSize)
        {
            Task.Factory.StartNew(() =>
            {
                IntPtr tempPtr   = IntPtr.Zero;
                IntPtr outIntPtr = IntPtr.Zero;

                try
                {
                    var managedArray = new byte[dataSize];
                    Marshal.Copy(data, managedArray, 0, (int)dataSize);
                    tempPtr = Marshal.AllocHGlobal(managedArray.Length);
                    Marshal.Copy(managedArray, 0, tempPtr, managedArray.Length);

                    var requestString = Encoding.UTF8.GetString(managedArray);

                    var jsonData = JsonMapper.ToObject <JsonData>(requestString);
                    var request  = new ChromelyRequest(jsonData);

                    var response = RequestTaskRunner.Run(request);
                    WebsocketMessageSender.Send(connectionId, response);
                }
                catch (Exception exception)
                {
                    Log.Error(exception);
                }
                finally
                {
                    // Free the unmanaged memory.
                    Marshal.FreeHGlobal(tempPtr);
                    Marshal.FreeHGlobal(outIntPtr);
                }
            });
        }
Exemple #24
0
 public static ChromelyResponse Response <TData>(this ChromelyRequest self, TData body)
 {
     return(new ChromelyResponse(self.Id)
     {
         Data = body
     });
 }
        private ChromelyResponse GetDirectories(ChromelyRequest request)
        {
            try {
                IDictionary <string, object> requestParams = request.Parameters;
                string path         = (string)requestParams["path"];
                bool   includeFiles = (bool)requestParams["includeFiles"];

                FileSystemService  fileSystemService = FileSystemService.getInstance();
                List <FsDirectory> directories       = fileSystemService.GetDirectories(path);
                List <FsFile>      files             = new List <FsFile>();

                if (includeFiles)
                {
                    files = fileSystemService.GetFiles(path);
                }

                FsView fsView = new FsView();
                fsView.directories = directories;
                fsView.files       = files;

                string fsJson = JsonConvert.SerializeObject(fsView);

                ChromelyResponse response = new ChromelyResponse();
                response.Data = fsJson;
                return(response);
            } catch (Exception e) {
                Log.Error(e);
                return(null);
            }
        }
            /// <summary>
            /// The get 1.
            /// </summary>
            /// <param name="request">
            /// The request.
            /// </param>
            /// <returns>
            /// The <see cref="ChromelyResponse"/>.
            /// </returns>
            private ChromelyResponse Get1(ChromelyRequest request)
            {
                var response = new ChromelyResponse {
                    Data = 1000
                };

                return(response);
            }
 public ChromelyResponse GetScreenTimes(ChromelyRequest request)
 {
     return(new Response
     {
         status = 200,
         data = JsonConvert.SerializeObject(new Repository <ScreenTime>().Data)
     }.ChromelyWrapper(request.Id));
 }
            /// <summary>
            /// The get 2.
            /// </summary>
            /// <param name="request">
            /// The request.
            /// </param>
            /// <returns>
            /// The <see cref="ChromelyResponse"/>.
            /// </returns>
            private ChromelyResponse Get2(ChromelyRequest request)
            {
                var response = new ChromelyResponse {
                    Data = "Test Get 2"
                };

                return(response);
            }
            /// <summary>
            /// The save.
            /// </summary>
            /// <param name="request">
            /// The request.
            /// </param>
            /// <returns>
            /// The <see cref="ChromelyResponse"/>.
            /// </returns>
            private ChromelyResponse Save(ChromelyRequest request)
            {
                var response = new ChromelyResponse {
                    Data = request.PostData
                };

                return(response);
            }
 public ChromelyResponse GetProducts(ChromelyRequest req)
 {
     return(new Response
     {
         status = 200,
         data = JsonConvert.SerializeObject(new Repository <Kijkwijzer>().Data)
     }.ChromelyWrapper(req.Id));
 }