Example #1
0
 private void HandleApiStatusRequest(object sender, ApiRequestReceivedEventArgs e)
 {
     lock (_syncRoot)
     {
         e.ApiContext.Result["Notifications"] = JArray.FromObject(_notifications);
     }
 }
Example #2
0
        private void HandleGetStatusRequest(IApiCall apiCall)
        {
            var eventArgs = new ApiRequestReceivedEventArgs(apiCall);

            StatusRequested?.Invoke(this, eventArgs);
            StatusRequestCompleted?.Invoke(this, eventArgs);
        }
Example #3
0
        private void RouteRequest(object sender, ApiRequestReceivedEventArgs e)
        {
            Action <IApiCall> handler;

            lock (_actions)
            {
                if (!_actions.TryGetValue(e.ApiContext.Action, out handler))
                {
                    e.ApiContext.ResultCode = ApiResultCode.ActionNotSupported;
                    return;
                }
            }

            try
            {
                handler(e.ApiContext);
            }
            catch (Exception exception)
            {
                e.ApiContext.ResultCode = ApiResultCode.UnhandledException;
                e.ApiContext.Result     = ExceptionSerializer.SerializeException(exception);
            }
            finally
            {
                e.IsHandled = true;
            }
        }
Example #4
0
        private void OnWebSocketMessageReceived(object sender, WebSocketMessageReceivedEventArgs e)
        {
            var requestMessage = JObject.Parse(((WebSocketTextMessage)e.Message).Text);
            var apiRequest     = requestMessage.ToObject <ApiRequest>();

            var context = new ApiCall(apiRequest.Action, apiRequest.Parameter, apiRequest.ResultHash);

            var eventArgs = new ApiRequestReceivedEventArgs(context);

            RequestReceived?.Invoke(this, eventArgs);

            if (!eventArgs.IsHandled)
            {
                context.ResultCode = ApiResultCode.ActionNotSupported;
            }

            var apiResponse = new ApiResponse
            {
                ResultCode = context.ResultCode,
                Result     = context.Result,
                ResultHash = context.ResultHash
            };

            var jsonResponse = JObject.FromObject(apiResponse);

            jsonResponse["CorrelationId"] = requestMessage["CorrelationId"];

            e.WebSocketClientSession.SendAsync(jsonResponse.ToString()).Wait();
        }
        private void DispatchWebSocketMessage(object sender, WebSocketMessageReceivedEventArgs e)
        {
            var requestMessage = JObject.Parse(((WebSocketTextMessage)e.Message).Text);

            var correlationId = (string)requestMessage["CorrelationId"];
            var uri           = (string)requestMessage["Uri"];
            var request       = (JObject)requestMessage["Content"] ?? new JObject();

            var context   = new ApiContext(uri, request, new JObject());
            var eventArgs = new ApiRequestReceivedEventArgs(context);

            RequestReceived?.Invoke(this, eventArgs);

            if (!eventArgs.IsHandled)
            {
                context.ResultCode = ApiResultCode.UnknownUri;
            }

            var responseMessage = new JObject
            {
                ["CorrelationId"] = correlationId,
                ["ResultCode"]    = context.ResultCode.ToString(),
                ["Content"]       = context.Response
            };

            e.WebSocketClientSession.SendAsync(responseMessage.ToString()).Wait();
        }
Example #6
0
        private void HandleGetConfigurationRequest(IApiCall apiCall)
        {
            var eventArgs = new ApiRequestReceivedEventArgs(apiCall);

            ConfigurationRequested?.Invoke(this, eventArgs);
            ConfigurationRequestCompleted?.Invoke(this, eventArgs);
        }
Example #7
0
        private void HandleStatusRequest(IApiContext apiContext)
        {
            apiContext.UseHash = true;

            var eventArgs = new ApiRequestReceivedEventArgs(apiContext);

            StatusRequested?.Invoke(this, eventArgs);
            StatusRequestCompleted?.Invoke(this, eventArgs);
        }
Example #8
0
        private void HandleApiConfigurationRequest(object sender, ApiRequestReceivedEventArgs e)
        {
            var areas = new JObject();

            foreach (var area in _areas.GetAll())
            {
                areas[area.Id.Value] = ExportAreaConfiguration(area);
            }

            e.Context.Response["Areas"] = areas;
        }
Example #9
0
        private void HandleApiStatusRequest(object sender, ApiRequestReceivedEventArgs e)
        {
            var automations = new JObject();

            foreach (var automation in _automations.GetAll())
            {
                automations[automation.Id.Value] = automation.ExportStatusToJsonObject();
            }

            e.Context.Response["Automations"] = automations;
        }
Example #10
0
        private void HandleApiConfigurationRequest(object sender, ApiRequestReceivedEventArgs e)
        {
            var areas = new JObject();

            foreach (var area in GetAreas())
            {
                areas[area.Id] = ExportAreaConfiguration(area);
            }

            e.ApiContext.Result["Areas"] = areas;
        }
Example #11
0
        private CloudConnectorApiContext ProcessCloudMessage(CloudRequestMessage cloudMessage)
        {
            var apiContext = new CloudConnectorApiContext(cloudMessage);
            var eventArgs  = new ApiRequestReceivedEventArgs(apiContext);

            RequestReceived?.Invoke(this, eventArgs);

            if (!eventArgs.IsHandled)
            {
                apiContext.ResultCode = ApiResultCode.ActionNotSupported;
            }

            return(apiContext);
        }
Example #12
0
        private void HandleApiStatusRequest(object sender, ApiRequestReceivedEventArgs e)
        {
            var components = new JObject();

            foreach (var component in _components.GetAll())
            {
                var status = component.ExportStatus();
                status["Settings"] = _settingsService.GetRawSettings(component.Id);

                components[component.Id.Value] = status;
            }

            e.Context.Response["Components"] = components;
        }
        private void DispatchHttpRequest(HttpContext httpContext)
        {
            var apiContext = CreateApiContext(httpContext);

            if (apiContext == null)
            {
                httpContext.Response.StatusCode = HttpStatusCode.BadRequest;
                return;
            }

            var eventArgs = new ApiRequestReceivedEventArgs(apiContext);

            RequestReceived?.Invoke(this, eventArgs);

            if (!eventArgs.IsHandled)
            {
                httpContext.Response.StatusCode = HttpStatusCode.BadRequest;
                return;
            }

            if (eventArgs.Context.Response == null)
            {
                eventArgs.Context.Response = new JObject();
            }

            httpContext.Response.StatusCode = ConvertResultCode(eventArgs.Context.ResultCode);

            if (apiContext.UseHash)
            {
                var serverHash = GenerateHash(apiContext.Response.ToString());
                eventArgs.Context.Response["$Hash"] = serverHash;

                var serverHashWithQuotes = "\"" + serverHash + "\"";

                string clientHash;
                if (httpContext.Request.Headers.TryGetValue(HttpHeaderNames.IfNoneMatch, out clientHash))
                {
                    if (clientHash.Equals(serverHashWithQuotes))
                    {
                        httpContext.Response.StatusCode = HttpStatusCode.NotModified;
                        return;
                    }
                }

                httpContext.Response.Headers[HttpHeaderNames.ETag] = serverHashWithQuotes;
            }

            httpContext.Response.Body = new JsonBody(eventArgs.Context.Response);
        }
Example #14
0
        private void RouteRequest(object sender, ApiRequestReceivedEventArgs e)
        {
            var uri = e.Context.Uri.Trim();

            Action <IApiContext> handler;

            if (_routes.TryGetValue(uri, out handler))
            {
                e.IsHandled = true;
                HandleRequest(e.Context, handler);

                return;
            }

            e.Context.ResultCode = ApiResultCode.UnknownUri;
        }
Example #15
0
        private void DispatchRequest(HttpContext httpContext)
        {
            var apiContext = CreateContext(httpContext);

            if (apiContext == null)
            {
                httpContext.Response.StatusCode = HttpStatusCode.BadRequest;
                return;
            }

            var eventArgs = new ApiRequestReceivedEventArgs(apiContext);

            RequestReceived?.Invoke(this, eventArgs);

            if (!eventArgs.IsHandled)
            {
                httpContext.Response.StatusCode = HttpStatusCode.BadRequest;
                return;
            }

            if (eventArgs.Context.Response == null)
            {
                eventArgs.Context.Response = new JsonObject();
            }

            httpContext.Response.StatusCode = ConvertResultCode(eventArgs.Context.ResultCode);

            if (apiContext.CallType == ApiCallType.Request)
            {
                var serverHash           = apiContext.Response.GetNamedObject("Meta", new JsonObject()).GetNamedString("Hash", string.Empty);
                var serverHashWithQuotes = "\"" + serverHash + "\"";

                string clientHash;
                if (httpContext.Request.Headers.TryGetValue(HttpHeaderNames.IfNoneMatch, out clientHash))
                {
                    if (clientHash.Equals(serverHashWithQuotes))
                    {
                        httpContext.Response.StatusCode = HttpStatusCode.NotModified;
                        return;
                    }
                }

                httpContext.Response.Headers[HttpHeaderNames.ETag] = serverHashWithQuotes;
            }

            httpContext.Response.Body = new JsonBody(eventArgs.Context.Response);
        }
        private void HandleApiStatusRequest(object sender, ApiRequestReceivedEventArgs e)
        {
            var automations = new JObject();

            foreach (var automation in _automations.Values.ToList())
            {
                var status = new JObject
                {
                    ["Settings"] = _settingsService.GetRawSettings(automation),
                    //["State"] = JToken.FromObject(automation.GetState().Serialize())
                };

                automations[automation.Id] = status;
            }

            e.ApiContext.Result["Automations"] = automations;
        }
Example #17
0
        private void HandleApiStatusRequest(object sender, ApiRequestReceivedEventArgs e)
        {
            var components = new JObject();

            foreach (var component in GetComponents().ToList())
            {
                var status = new JObject
                {
                    ["Settings"] = _settingsService.GetRawSettings(component),
                    ["State"]    = JToken.FromObject(component.GetState().Serialize())
                };

                components[component.Id] = status;
            }

            e.ApiContext.Result["Components"] = components;
        }
Example #18
0
        private void DistpachMessage(object sender, MessageReceivedEventArgs e)
        {
            var apiRequest = e.Body.ToObject <ApiRequest>();

            var correlationId = (string)e.Body["CorrelationId"];

            var context   = new QueueBasedApiContext(correlationId, apiRequest.Action, apiRequest.Parameter, apiRequest.ResultHash);
            var eventArgs = new ApiRequestReceivedEventArgs(context);

            RequestReceived?.Invoke(this, eventArgs);

            if (!eventArgs.IsHandled)
            {
                context.ResultCode = ApiResultCode.ActionNotSupported;
            }

            SendResponseMessage(context).Wait();
        }
        private void DistpachMessage(object sender, MessageReceivedEventArgs e)
        {
            var correlationId = (string)e.Body["CorrelationId"];
            var uri           = (string)e.Body["Uri"];
            var request       = (JObject)e.Body["Content"] ?? new JObject();

            var context   = new QueueBasedApiContext(correlationId, uri, request, new JObject());
            var eventArgs = new ApiRequestReceivedEventArgs(context);

            RequestReceived?.Invoke(this, eventArgs);

            if (!eventArgs.IsHandled)
            {
                context.ResultCode = ApiResultCode.UnknownUri;
            }

            SendResponseMessage(context).Wait();
        }
Example #20
0
        private void HandleExecuteRequest(IApiCall apiCall)
        {
            if (apiCall.Parameter == null || string.IsNullOrEmpty(apiCall.Action))
            {
                apiCall.ResultCode = ApiResultCode.InvalidParameter;
                return;
            }

            var apiRequest = apiCall.Parameter.ToObject <ApiRequest>();

            if (apiRequest == null)
            {
                apiCall.ResultCode = ApiResultCode.InvalidParameter;
                return;
            }

            if (apiRequest.Action.Equals("Execute", StringComparison.OrdinalIgnoreCase))
            {
                apiCall.ResultCode = ApiResultCode.ActionNotSupported;
                return;
            }

            var innerApiContext = new ApiCall(apiRequest.Action, apiRequest.Parameter ?? new JObject(), apiRequest.ResultHash);

            var eventArgs = new ApiRequestReceivedEventArgs(innerApiContext);

            RouteRequest(this, eventArgs);

            apiCall.ResultCode = innerApiContext.ResultCode;
            apiCall.Result     = innerApiContext.Result;
            apiCall.ResultHash = innerApiContext.ResultHash;

            if (apiCall.ResultHash != null)
            {
                var newHash = GenerateHash(apiCall.Result.ToString());
                if (apiCall.ResultHash.Equals(newHash))
                {
                    apiCall.Result = new JObject();
                }

                apiCall.ResultHash = newHash;
            }
        }
Example #21
0
        private void OnApiRequestReceived(HttpContext context)
        {
            IApiCall apiCall = CreateApiContext(context);

            if (apiCall == null)
            {
                context.Response.StatusCode = HttpStatusCode.BadRequest;
                return;
            }

            var eventArgs = new ApiRequestReceivedEventArgs(apiCall);

            RequestReceived?.Invoke(this, eventArgs);

            if (!eventArgs.IsHandled)
            {
                context.Response.StatusCode = HttpStatusCode.BadRequest;
                return;
            }

            context.Response.StatusCode = HttpStatusCode.Ok;
            if (eventArgs.ApiContext.Result == null)
            {
                eventArgs.ApiContext.Result = new JObject();
            }

            var apiResponse = new ApiResponse
            {
                ResultCode = apiCall.ResultCode,
                Result     = apiCall.Result,
                ResultHash = apiCall.ResultHash
            };

            var json = JsonConvert.SerializeObject(apiResponse);

            context.Response.Body     = Encoding.UTF8.GetBytes(json);
            context.Response.MimeType = MimeTypeProvider.Json;
        }
Example #22
0
        private void DistpachMessage(object sender, MessageReceivedEventArgs e)
        {
            Stopwatch processingStopwatch = Stopwatch.StartNew();

            string uri = e.Body.GetNamedString("Uri", string.Empty);

            if (string.IsNullOrEmpty(uri))
            {
                Log.Warning("Received Azure queue message with missing or invalid URI property.");
                return;
            }

            string callTypeSource = e.Body.GetNamedString("CallType", string.Empty);

            ApiCallType callType;

            if (!Enum.TryParse(callTypeSource, true, out callType))
            {
                Log.Warning("Received Azure queue message with missing or invalid CallType property.");
                return;
            }

            var request = e.Body.GetNamedObject("Content", new JsonObject());

            var context   = new QueueBasedApiContext(e.BrokerProperties, e.Body, processingStopwatch, callType, uri, request, new JsonObject());
            var eventArgs = new ApiRequestReceivedEventArgs(context);

            RequestReceived?.Invoke(this, eventArgs);

            if (!eventArgs.IsHandled)
            {
                Log.Warning("Received Azure queue message is not handled.");
                Log.Warning("Received Azure queue message is not handled.");
                return;
            }

            SendResponseMessage(context).Wait();
        }
        private void RouteRequest(object sender, ApiRequestReceivedEventArgs e)
        {
            string uri = e.Context.Uri.Trim();

            Action <IApiContext> handler;

            if (e.Context.CallType == ApiCallType.Request && _requestRoutes.TryGetValue(uri, out handler))
            {
                e.IsHandled = true;
                HandleRequest(e.Context, handler);

                return;
            }

            if (e.Context.CallType == ApiCallType.Command && _commandRoutes.TryGetValue(uri, out handler))
            {
                e.IsHandled = true;
                HandleRequest(e.Context, handler);

                return;
            }

            e.Context.ResultCode = ApiResultCode.UnknownUri;
        }
Example #24
0
 private void ExposeStatus(object sender, ApiRequestReceivedEventArgs e)
 {
 }