Example #1
0
        /// <summary>
        /// Makes the HTTP request (Sync).
        /// </summary>
        /// <param name="path">URL path.</param>
        /// <param name="method">HTTP method.</param>
        /// <param name="queryParams">Query parameters.</param>
        /// <param name="postBody">HTTP body (POST request).</param>
        /// <param name="headerParams">Header parameters.</param>
        /// <param name="formParams">Form parameters.</param>
        /// <param name="fileParams">File parameters.</param>
        /// <param name="pathParams">Path parameters.</param>
        /// <param name="contentType">Content Type of the request</param>
        /// <returns>Object</returns>
        public Object CallApi(
            String path, RestSharp.Method method, List <KeyValuePair <String, String> > queryParams, Object postBody,
            Dictionary <String, String> headerParams, Dictionary <String, String> formParams,
            Dictionary <String, FileParameter> fileParams, Dictionary <String, String> pathParams,
            String contentType)
        {
            RequestSignature.InjectSecurityHeaders(headerParams: ref headerParams,
                                                   method: method,
                                                   postBody: postBody,
                                                   path: path,
                                                   pathParams: pathParams,
                                                   queryParams: queryParams);

            var request = PrepareRequest(
                path, method, queryParams, postBody, headerParams, formParams, fileParams,
                pathParams, contentType);

            // set timeout

            RestClient.Timeout = Configuration.Timeout;
            // set user agent
            RestClient.UserAgent = Configuration.UserAgent;

            InterceptRequest(request);
            var response = RestClient.Execute(request);

            InterceptResponse(request, response);

            return((Object)response);
        }
Example #2
0
 internal Request(string moduleName, RequestSignature signature, Guid languageId = default(Guid))
 {
     ModuleName = moduleName;
     Signature = signature;
     LanguageId = languageId;
     _resolvedAddresses = new List<Address>();
 }
Example #3
0
        public async Task <Credentials> Reauthorize()
        {
            if (credentials == null || credentials?.RefreshToken.Length == 0)
            {
                return(await Authorize().ConfigureAwait(false));
            }

            RequestSignature sig = GenerateRequestSignature();

            Response.ApiResponse <Credentials> response = await api.RefreshAccessToken(
                credentials.RefreshToken,
                sig.Signature,
                sig.Timestamp)
                                                          .ConfigureAwait(false);

            if (!response.IsSuccess)
            {
                throw new ResponseException(response.ResponseMessage, response.ResponseCode);
            }

            credentials           = response.Result;
            credentials.Timestamp = response.Timestamp;

            return(credentials);
        }
Example #4
0
        private List <RequestSignature> PrepareUsers(ItemsList itemsList)
        {
            _log.AppendLine("Adding signers to Envelope");

            if (itemsList.Rows.Count <= 0)
            {
                throw new Exception("Empty signers list");
            }

            var users = new List <RequestSignature>();

            foreach (var row in itemsList.Rows)
            {
                var user = new RequestSignature();
                user.signer_email_address = row.GetCellValue(Configuration.Users.SignersList.SignerMailColumnID).ToString();
                user.signer_identity_data = new SignerIdentityData()
                {
                    first_name      = TextHelper.GetPairName(row.GetCellValue(Configuration.Users.SignersList.SignerNameColumnID).ToString()).Split(' ').First(),
                    last_name       = TextHelper.GetPairName(row.GetCellValue(Configuration.Users.SignersList.SignerNameColumnID).ToString()).Split(' ').Last(),
                    mobile_number   = Configuration.Users.PhoneAutorization ? row.GetCellValue(Configuration.Users.SignersList.SignerPhoneNumberColumnID).ToString() : "",
                    provider        = Configuration.Users.PhoneAutorization ? Configuration.Users.Provider : "",
                    issuing_country = Configuration.Users.PhoneAutorization ? Configuration.Users.IssuingCountry : ""
                };

                users.Add(user);
            }

            return(users);
        }
Example #5
0
        internal static void Resolve(Process process, Resolver resolver, RequestSignature signature, string[] expectedSignatures)
        {
            var request = new Request(null, signature);

            resolver.EnableResolution(process, request);
            VerifySignatures(request, expectedSignatures);
        }
Example #6
0

        
Example #7
0
        private static void VerifySignature(string str, RequestSignature expectedSignature)
        {
            var actualSignature = MemberSignatureParser.Parse(str);

            if (expectedSignature == null)
            {
                Assert.Null(actualSignature);
            }
            else
            {
                Assert.NotNull(actualSignature);
                Assert.Equal(expectedSignature.MemberName, actualSignature.MemberName, NameComparer.Instance);
                if (expectedSignature.Parameters.IsDefault)
                {
                    Assert.True(actualSignature.Parameters.IsDefault);
                }
                else
                {
                    AssertEx.Equal(
                        expectedSignature.Parameters,
                        actualSignature.Parameters,
                        comparer: ParameterComparer.Instance,
                        itemInspector: p => p.Type.GetDebuggerDisplay());
                }
            }
        }
        public static RequestSignature GetSignature(this HttpRequest request)
        {
            var context = request.HttpContext;
            var logger  = context.RequestServices.GetRequiredService <ILogger <RequestSignature> >();

            // First we check if we have already saved a signature on the context
            if (context.Items.TryGetValue(typeof(RequestSignature), out var contextItem))
            {
                if (contextItem is RequestSignature contextSignature)
                {
                    return(contextSignature);
                }
            }

            // Try to retrieve from header
            if (!request.Headers.TryGetValue("X-Request-Signature", out var headerValues))
            {
                return(null);
            }

            var jws = headerValues.ToString();

            // Verify header is set
            if (string.IsNullOrWhiteSpace(jws))
            {
                return(null);
            }

            logger.LogTrace($"X-Request-Signature: {jws}");

            RequestSignature signature;

            try
            {
                var token = new JwtSecurityToken(jws);

                signature = new RequestSignature(request, token);
            }
            catch (Exception e)
            {
                signature = new RequestSignature();
            }

            // Save to context
            context.Items[typeof(RequestSignature)] = signature;

            return(signature);
        }
Example #9
0
        public void RequestSignatureParseFromHeaderValParsesHeaderCorrectly()
        {
            var headerVal = "Signature keyId=\"/SmartThings/89:94:9a:9a:51:24:2d:6d:40:21:63:44:9c:b1:88:14\",signature=\"jskjdfhksdjhf!-9807987bkHKGHKu6gM52ueBRUSEm2H4xEyr4+cQ7zVN-87687HJHjgjhgJGJjj87687HJHjgjhgJGJjjNV7bI8DUz/c-87687HJHjgjhgJGJjjiG/-87687HJHjgjhgJGJjjfHaiutAW7GnzOmjGOfvsNX0xT/PMO-87687HJHjgjhgJGJjjtrD9GfudTljxaFRuFp/-87687HJHjgjhgJGJjj/-87687HJHjgjhgJGJjj-87687HJHjgjhgJGJjjDsIOSHXMSwxLQntMl0UvfMytejT4p2X/yJXlqHlBd/-87687HJHjgjhgJGJjjImx7dJ2Fnw==\",headers=\"(request-target) digest date\",algorithm=\"rsa-sha256\"";
            var sig       = RequestSignature.ParseFromHeaderVal(headerVal);

            Assert.NotNull(sig);
            var expected = "/SmartThings/89:94:9a:9a:51:24:2d:6d:40:21:63:44:9c:b1:88:14";

            Assert.Equal(sig.KeyId, expected);
            expected = "jskjdfhksdjhf!-9807987bkHKGHKu6gM52ueBRUSEm2H4xEyr4+cQ7zVN-87687HJHjgjhgJGJjj87687HJHjgjhgJGJjjNV7bI8DUz/c-87687HJHjgjhgJGJjjiG/-87687HJHjgjhgJGJjjfHaiutAW7GnzOmjGOfvsNX0xT/PMO-87687HJHjgjhgJGJjjtrD9GfudTljxaFRuFp/-87687HJHjgjhgJGJjj/-87687HJHjgjhgJGJjj-87687HJHjgjhgJGJjjDsIOSHXMSwxLQntMl0UvfMytejT4p2X/yJXlqHlBd/-87687HJHjgjhgJGJjjImx7dJ2Fnw==";
            Assert.Equal(sig.Signature, expected);
            Assert.Contains("(request-target)", sig.Headers);
            Assert.Contains("digest", sig.Headers);
            Assert.Contains("date", sig.Headers);
            expected = "rsa-sha256";
            Assert.Equal(sig.Algorithm, expected);
        }
Example #10
0
        public async Task <Credentials> Authorize()
        {
            RequestSignature sig = GenerateRequestSignature();

            Response.ApiResponse <Credentials> response = await api.GetAccessToken(
                sig.Signature,
                sig.Timestamp)
                                                          .ConfigureAwait(false);

            if (!response.IsSuccess)
            {
                throw new ResponseException(response.ResponseMessage, response.ResponseCode);
            }

            credentials           = response.Result;
            credentials.Timestamp = response.Timestamp;

            return(credentials);
        }
        private List <RequestSignature> PrepareUser()
        {
            _log.AppendLine("Adding signer to Envelope");

            var users = new List <RequestSignature>();

            var user = new RequestSignature();

            user.signer_email_address = Configuration.Users.SignerMail;
            user.signer_identity_data = new SignerIdentityData()
            {
                first_name      = TextHelper.GetPairName(Configuration.Users.SignerName).Split(' ').First(),
                last_name       = TextHelper.GetPairName(Configuration.Users.SignerName).Split(' ').Last(),
                mobile_number   = Configuration.Users.PhoneAutorization ? Configuration.Users.SignerPhoneNumber : "",
                provider        = Configuration.Users.PhoneAutorization ? Configuration.Users.Provider : "",
                issuing_country = Configuration.Users.PhoneAutorization ? Configuration.Users.IssuingCountry : ""
            };

            users.Add(user);

            return(users);
        }
Example #12
0
        public async Task <DeviceInfo> GetDeviceInfo(string deviceId)
        {
            if (credentials == null || credentials?.AccessToken.Length == 0)
            {
                throw new UnauthorizedException("Unauthorized");
            }

            RequestSignature sig = GenerateRequestSignature(credentials.AccessToken);

            Response.ApiResponse <DeviceInfo> response = await api.GetDeviceInfo(
                sig.Signature,
                sig.Timestamp,
                credentials.AccessToken,
                deviceId)
                                                         .ConfigureAwait(false);

            if (!response.IsSuccess)
            {
                throw new ResponseException(response.ResponseMessage, response.ResponseCode);
            }

            return(response.Result);
        }
Example #13
0
        public async Task <CommandResponse> SendCommands(string deviceId, Commands commands)
        {
            if (credentials == null || credentials?.AccessToken.Length == 0)
            {
                throw new UnauthorizedException("Unauthorized");
            }

            RequestSignature sig      = GenerateRequestSignature(credentials.AccessToken);
            CommandResponse  response = await api.SendCommands(
                sig.Signature,
                sig.Timestamp,
                credentials.AccessToken,
                deviceId,
                commands)
                                        .ConfigureAwait(false);

            if (!response.IsSuccess)
            {
                throw new ResponseException(response.ResponseMessage, response.ResponseCode);
            }

            return(response);
        }
Example #14
0
        private List <RequestSignature> PrepareUsers(ItemsList itemsList)
        {
            if (itemsList.Rows.Count <= 0)
            {
                throw new Exception("Empty signers list");
            }

            var users = new List <RequestSignature>();

            foreach (var row in itemsList.Rows)
            {
                var user = new RequestSignature();
                user.signer_email_address = row.GetCellValue(Configuration.Users.SignersList.SignerMailColumnID).ToString();
                user.signer_identity_data = new SignerIdentityData()
                {
                    first_name = TextHelper.GetPairName(row.GetCellValue(Configuration.Users.SignersList.SignerNameColumnID).ToString()).Split(' ').First(),
                    last_name  = TextHelper.GetPairName(row.GetCellValue(Configuration.Users.SignersList.SignerNameColumnID).ToString()).Split(' ').Last(),
                };

                users.Add(user);
            }

            return(users);
        }
Example #15
0
        public void RequestSignature_Time()
        {
            // Verify that time checks work

            ArgCollection args = new ArgCollection();
            SymmetricKey  key  = Crypto.GenerateSymmetricKey();
            string        signature;

            args.Clear();
            args["arg1"] = "hello";
            args["arg2"] = "world";
            args["arg3"] = "test";

            // Verify a request with no arguments.

            signature = RequestSignature.Generate(key, args);
            Thread.Sleep(2000);
            Assert.IsTrue(RequestSignature.TryVerify(key, signature, args, null, TimeSpan.FromSeconds(4)));

            args.Clear();
            signature = RequestSignature.Generate(key, args);
            Thread.Sleep(6000);
            Assert.IsFalse(RequestSignature.TryVerify(key, signature, args, null, TimeSpan.FromSeconds(4)));
        }
Example #16
0
 internal static void VerifySignature(RequestSignature actualSignature, RequestSignature expectedSignature)
 {
     if (expectedSignature == null)
     {
         Assert.Null(actualSignature);
     }
     else
     {
         Assert.NotNull(actualSignature);
         Assert.Equal(expectedSignature.MemberName, actualSignature.MemberName, NameComparer.Instance);
         if (expectedSignature.Parameters.IsDefault)
         {
             Assert.True(actualSignature.Parameters.IsDefault);
         }
         else
         {
             AssertEx.Equal(
                 expectedSignature.Parameters,
                 actualSignature.Parameters,
                 comparer: ParameterComparer.Instance,
                 itemInspector: p => p.Type.GetDebuggerDisplay());
         }
     }
 }
        protected virtual bool VerifySignature(HttpContext context, SignatureValidationOptions validationOptions, out RequestSignature signature, out string reason)
        {
            var services = context.RequestServices;
            var options  = services.GetRequiredService <TransportSecuritySettings>();

            signature = context.Request.GetSignature();
            reason    = string.Empty;

            if (signature == null)
            {
                reason = "Request signature not present";
                return(!options.SignatureRequred);
            }

            if (validationOptions.VerifyRequest && !signature.IsValid)
            {
                reason = "Request signature not valid";
                return(false);
            }

            if (validationOptions.VerifyCertificate &&
                !VerifyCertificate(signature.Token, signature.Certificate, out reason))
            {
                return(false);
            }

            return(true);
        }
Example #18
0
 internal Request(string moduleName, RequestSignature signature)
 {
     ModuleName = moduleName;
     Signature = signature;
     _resolvedAddresses = new List<Address>();
 }
Example #19
0
        public void RequestSignature_Args()
        {
            ArgCollection args = new ArgCollection();
            SymmetricKey  key  = Crypto.GenerateSymmetricKey();
            string        signature;

            // Verify a request with no arguments.

            args.Clear();
            signature = RequestSignature.Generate(key, args);
            RequestSignature.Verify(key, signature, args, null, graceInterval);

            // Verify a request with a few arguments

            args.Clear();
            args["arg1"] = "hello";
            args["arg2"] = "world";
            args["arg3"] = "test";

            signature = RequestSignature.Generate(key, args);
            Assert.IsTrue(RequestSignature.TryVerify(key, signature, args, null, graceInterval));

            // Verify that argument normaization works by reversing the
            // orher of the arguments added.

            args.Clear();
            args["arg3"] = "test";
            args["arg2"] = "world";
            args["arg1"] = "hello";
            Assert.IsTrue(RequestSignature.TryVerify(key, signature, args, null, graceInterval));

            // Test with the signature as part of the arguments.

            args["signature"] = signature;
            Assert.IsTrue(RequestSignature.TryVerify(key, signature, args, "signature", graceInterval));

            // Tamper with one of the argument values and verify failure

            args["arg2"] = "xxx";
            Assert.IsFalse(RequestSignature.TryVerify(key, signature, args, null, graceInterval));

            // Do it again

            args["arg2"] = "WORLD";

            ExtendedAssert.Throws <SecurityException>(
                () =>
            {
                RequestSignature.Verify(key, signature, args, null, graceInterval);
                Assert.Fail("SecurityException expected");
            });

            // Change the shared key and verify failure

            args.Clear();
            args["arg1"] = "hello";
            args["arg2"] = "world";
            args["arg3"] = "test";

            signature = RequestSignature.Generate(key, args);
            Assert.IsFalse(RequestSignature.TryVerify(Crypto.GenerateSymmetricKey(), signature, args, null, graceInterval));
        }
Example #20
0
 internal Request(string moduleName, RequestSignature signature)
 {
     ModuleName         = moduleName;
     Signature          = signature;
     _resolvedAddresses = new List <Address>();
 }
Example #21
0
 private static void VerifySignature(string str, RequestSignature expectedSignature)
 {
     var actualSignature = MemberSignatureParser.Parse(str);
     VerifySignature(actualSignature, expectedSignature);
 }
        private static void VerifySignature(string str, RequestSignature expectedSignature)
        {
            var actualSignature = MemberSignatureParser.Parse(str);

            VerifySignature(actualSignature, expectedSignature);
        }
        public async Task <ViewModels.RequestOfPermit> GetSection(Models.HotWorksPermit hotWorksPermit)
        {
            var requestTime = RequestTime.NullableTime;

            if (requestTime == null)
            {
                requestTime = TimeSpan.Zero;
            }

            ViewModels.RequestOfPermit request = new ViewModels.RequestOfPermit
            {
                RequestMinutes   = RequestMinutesEntry.Text,
                RequestPrintName = RequestName.Text,
                RequestCompany   = RequestCompany.Text,
                RequestJobTitle  = RequestJobTitle.Text,
                RequestDate      = RequestDatePicker.Date,
                RequestTime      = requestTime
            };

            if (hotWorksPermit != null)
            {
                var worksPermitObject = JsonConvert.DeserializeObject <HotWorkPermitViewModel>(hotWorksPermit.Content);

                if (worksPermitObject.RequestOfPermit.RequestSigned != null)
                {
                    request.RequestSigned = worksPermitObject.RequestOfPermit.RequestSigned;
                }
                else
                {
                    var image = await RequestSignature.GetImageStreamAsync(SignatureImageFormat.Png);

                    if (image != null)
                    {
                        byte[] arr;

                        using (var ms = new MemoryStream())
                        {
                            await image.CopyToAsync(ms);

                            arr = ms.ToArray();
                        }

                        request.RequestSigned = arr;
                    }
                }
            }
            else
            {
                var image = await RequestSignature.GetImageStreamAsync(SignatureImageFormat.Png);

                if (image != null)
                {
                    byte[] arr;

                    using (var ms = new MemoryStream())
                    {
                        await image.CopyToAsync(ms);

                        arr = ms.ToArray();
                    }

                    request.RequestSigned = arr;
                }
            }

            return(request);
        }