Пример #1
0
        public ActionResult PostInfluxTelemetry([FromBody] InfluxTelemetry telemetryPackage)
        {
            // verify in coming data
            if (telemetryPackage?.NodeId == null ||
                string.IsNullOrWhiteSpace(telemetryPackage.Signature) ||
                telemetryPackage.Payload == null ||
                telemetryPackage.Payload.Count == 0)
            {
                Console.WriteLine("bad request");
                return(BadRequest());
            }

            // Get Node key from keystore
            string nodeKey;

            try
            {
                nodeKey = _keyStore.GetKeyForNode(telemetryPackage.NodeId);
            }
            catch (KeyNotFoundException)
            {
                Console.WriteLine($"Node Unknown: {telemetryPackage.NodeId}");
                return(StatusCode(403));
            }

            // Verify Signature
            string signedPayload  = string.Join("", telemetryPackage.Payload);
            bool   signatureValid = SignatureVerifier.IsSignatureValid(signedPayload, telemetryPackage.Signature, nodeKey);

            if (!signatureValid)
            {
                Console.WriteLine($"Bad signature from node: {telemetryPackage.NodeId}");
                return(StatusCode(403));
            }

            Console.WriteLine($"Accepted telemetry from {telemetryPackage.NodeId} [{telemetryPackage.Payload.Count} metrics]");
            // Signature valid - record to db
            if (_influx.Enqueue(telemetryPackage.Payload, true))
            {
                return(Accepted());
            }
            else
            {
                return(StatusCode(400));
            }
        }