public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            if (request is ExtendedRequest extendedRequest)
            {
                var name = extendedRequest.RequestName;
                var val = extendedRequest.RequestValue;
                var berValuePtr = IntPtr.Zero;

                if (val != null && val.Length != 0)
                {
                    var berValue = new Native.Native.berval()
                    {
                        bv_len = val.Length,
                        bv_val = Marshal.AllocHGlobal(val.Length)
                    };
                    Marshal.Copy(val, 0, berValue.bv_val, val.Length);
                    Marshal.StructureToPtr(berValue, berValuePtr, true);
                }

                return Native.ldap_extended_operation(handle, name, berValuePtr, IntPtr.Zero, IntPtr.Zero,
                    ref messageId);
            }

            return 0;
        }
        public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            if (request is AddRequest addRequest)
            {
                var entry = addRequest.LdapEntry;
                if (string.IsNullOrWhiteSpace(entry.Dn))
                {
                    throw new ArgumentNullException(nameof(entry.Dn));
                }

                if (entry.Attributes == null)
                {
                    entry.Attributes = new Dictionary <string, List <string> >();
                }

                var attrs = entry.Attributes.Select(ToLdapMod).ToList();

                var ptr = Marshal.AllocHGlobal(IntPtr.Size * (attrs.Count + 1)); // alloc memory for list with last element null
                MarshalUtils.StructureArrayToPtr(attrs, ptr, true);

                return(Native.ldap_add_ext(handle,
                                           addRequest.LdapEntry.Dn,
                                           ptr,
                                           IntPtr.Zero,
                                           IntPtr.Zero,
                                           ref messageId
                                           ));
            }

            return(0);
        }
        public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            if (request is ModifyRequest modifyRequest)
            {
                if (string.IsNullOrWhiteSpace(modifyRequest.DistinguishedName))
                {
                    throw new ArgumentNullException(nameof(modifyRequest.DistinguishedName));
                }

                var attrs = modifyRequest.Attributes.Select(ToLdapMod).ToList();

                var ptr = Marshal.AllocHGlobal(IntPtr.Size *
                                               (attrs.Count + 1)); // alloc memory for list with last element null
                MarshalUtils.StructureArrayToPtr(attrs, ptr, true);

                var result = Native.ldap_modify_ext(handle,
                                                    modifyRequest.DistinguishedName,
                                                    ptr,
                                                    IntPtr.Zero,
                                                    IntPtr.Zero,
                                                    ref messageId
                                                    );
                attrs.ForEach(_ =>
                {
                    MarshalUtils.BerValuesFree(_.mod_vals_u.modv_bvals);
                    Marshal.FreeHGlobal(_.mod_vals_u.modv_bvals);
                    Marshal.FreeHGlobal(_.mod_type);
                });
                Marshal.FreeHGlobal(ptr);

                return(result);
            }

            return(0);
        }
        public RequestHandler Resolve(DirectoryRequest request)
        {
            switch (request)
            {
            case AddRequest _:
                return(new AddRequestHandler());

            case ModifyRequest _:
                return(new ModifyRequestHandler());

            case SearchRequest _:
                return(new SearchRequestHandler());

            case DeleteRequest _:
                return(new DeleteRequestHandler());

            case ModifyDNRequest _:
                return(new ModifyDnRequestHandler());

            case CompareRequest _:
                return(new CompareRequestHandler());

            case ExtendedRequest _:
                return(new ExtendedRequestHandler());

            case TransportLayerSecurityRequest _:
                return(new TransportLayerSecurityRequestHandler());

            case AbandonRequest _:
                return(new AbandonRequestHandler());

            default:
                throw new LdapException(new LdapExceptionData("Not supported operation of request: " + request?.GetType()));
            }
        }
Exemple #5
0
        public void CanGetXmlRepresentationOfRequest()
        {
            var directoryRequest = new DirectoryRequest("ABCD", null);
            var xml = directoryRequest.ToXml(new SignatureProviders.SignatureProvider(PrivateCertificate, PublicCertificate));

            Assert.IsNotNullOrEmpty(xml);
        }
        protected override int SendRequest(SafeHandle handle, DirectoryRequest request, IntPtr serverControlArray, IntPtr clientControlArray, ref int messageId)
        {
            if (request is AddRequest addRequest)
            {
                if (string.IsNullOrWhiteSpace(addRequest.DistinguishedName))
                {
                    throw new ArgumentNullException(nameof(addRequest.DistinguishedName));
                }

                var attrs = addRequest.Attributes.Select(ToLdapMod).ToList();

                var ptr = MarshalUtils.AllocHGlobalIntPtrArray(addRequest.Attributes.Count + 1);
                MarshalUtils.StructureArrayToPtr(attrs, ptr, true);

                var result = Native.ldap_add_ext(handle,
                                                 addRequest.DistinguishedName,
                                                 ptr,
                                                 serverControlArray,
                                                 clientControlArray,
                                                 ref messageId
                                                 );

                attrs.ForEach(_ =>
                {
                    MarshalUtils.BerValuesFree(_.mod_vals_u.modv_bvals);
                    Marshal.FreeHGlobal(_.mod_vals_u.modv_bvals);
                    Marshal.FreeHGlobal(_.mod_type);
                });
                Marshal.FreeHGlobal(ptr);

                return(result);
            }

            return(0);
        }
Exemple #7
0
        private void DelayLdapIfNeeded(DirectoryRequest request)
        {
            SearchRequest searchRequest = request as SearchRequest;

            if (searchRequest != null)
            {
                if (this.appConfig.DelayLdapSearchRequest != TimeSpan.MinValue)
                {
                    Connection.DelayLdapOrTimeout(this.appConfig.DelayLdapSearchRequest);
                    return;
                }
            }
            else if (this.appConfig.DelayLdapUpdateRequest != TimeSpan.MinValue && !string.IsNullOrEmpty(this.appConfig.DelayLdapUpdateRequestContainingString))
            {
                AddRequest addRequest = request as AddRequest;
                if (addRequest != null && !string.IsNullOrEmpty(addRequest.DistinguishedName) && addRequest.DistinguishedName.IndexOf(this.appConfig.DelayLdapUpdateRequestContainingString, StringComparison.OrdinalIgnoreCase) != -1)
                {
                    Connection.DelayLdapOrTimeout(this.appConfig.DelayLdapUpdateRequest);
                    return;
                }
                DeleteRequest deleteRequest = request as DeleteRequest;
                if (deleteRequest != null && !string.IsNullOrEmpty(deleteRequest.DistinguishedName) && deleteRequest.DistinguishedName.IndexOf(this.appConfig.DelayLdapUpdateRequestContainingString, StringComparison.OrdinalIgnoreCase) != -1)
                {
                    Connection.DelayLdapOrTimeout(this.appConfig.DelayLdapUpdateRequest);
                    return;
                }
                ModifyRequest modifyRequest = request as ModifyRequest;
                if (modifyRequest != null && !string.IsNullOrEmpty(modifyRequest.DistinguishedName) && modifyRequest.DistinguishedName.IndexOf(this.appConfig.DelayLdapUpdateRequestContainingString, StringComparison.OrdinalIgnoreCase) != -1)
                {
                    Connection.DelayLdapOrTimeout(this.appConfig.DelayLdapUpdateRequest);
                }
            }
        }
Exemple #8
0
        protected override int SendRequest(SafeHandle handle, DirectoryRequest request, IntPtr serverControlArray, IntPtr clientControlArray, ref int messageId)
        {
            if (request is CompareRequest compareRequest)
            {
                if (string.IsNullOrEmpty(compareRequest.DistinguishedName) ||
                    string.IsNullOrEmpty(compareRequest.Assertion?.Name) ||
                    compareRequest.Assertion.GetRawValues().Count != 1
                    )
                {
                    throw new LdapException(new LdapExceptionData("Wrong assertion"));
                }

                var value       = compareRequest.Assertion.GetRawValues().Single();
                var stringValue = value as string;
                var berValuePtr = IntPtr.Zero;
                if (value is byte[] binaryValue && binaryValue.Length != 0)
                {
                    berValuePtr = MarshalUtils.ByteArrayToBerValue(binaryValue);
                }

                var result = Native.Compare(handle, compareRequest.DistinguishedName, compareRequest.Assertion.Name, stringValue, berValuePtr, serverControlArray, clientControlArray, ref messageId);
                MarshalUtils.BerValFree(berValuePtr);
                return(result);
            }

            return(0);
        }
        protected override int SendRequest(SafeHandle handle, DirectoryRequest request, IntPtr serverControlArray, IntPtr clientControlArray, ref int messageId)
        {
            if (request is SearchRequest searchRequest)
            {
                _request = searchRequest;
                var attributes      = GetAttributesPtr(searchRequest);
                var searchTimeLimit = (int)(searchRequest.TimeLimit.Ticks / TimeSpan.TicksPerSecond);
                var res             = Native.Search(
                    handle,
                    searchRequest.DistinguishedName,
                    (int)searchRequest.Scope,
                    searchRequest.Filter,
                    attributes,
                    searchRequest.AttributesOnly ? 1 : 0,
                    serverControlArray,
                    clientControlArray,
                    searchTimeLimit,
                    searchRequest.SizeLimit,
                    ref messageId);

                _response.MessageId = messageId;

                FreeAttributes(attributes);
                return(res);
            }

            return(0);
        }
Exemple #10
0
        public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            var returnValue = 0;
            var message     = IntPtr.Zero;

            return(Native.ldap_start_tls_s(handle, ref returnValue, ref message, IntPtr.Zero, IntPtr.Zero));
        }
Exemple #11
0
        /// <summary>
        /// Get directory containing list of issuers (you should cache the response!)
        /// </summary>
        public DirectoryResponse SendDirectoryRequest()
        {
            // Set up dependencies for http request
            var directoryRequest = new DirectoryRequest(_configuration.MerchantId, _configuration.MerchantSubId);

            // Execute http request
            return((DirectoryResponse)_iDealHttpRequest.SendRequest(directoryRequest, _signatureProvider, _configuration.AcquirerUrl, _iDealHttpResponseHandler));
        }
Exemple #12
0
        public void CanCreateDirectoryRequest()
        {
            var directoryRequest = new DirectoryRequest("100", 2);

            Assert.AreEqual("100", directoryRequest.MerchantId);
            Assert.AreEqual(2, directoryRequest.MerchantSubId);
            Assert.AreEqual(directoryRequest.CreateDateTimeStamp + "1002", directoryRequest.MessageDigest);
        }
Exemple #13
0
        protected override int SendRequest(SafeHandle handle, DirectoryRequest request, IntPtr serverControls, IntPtr clientControls,
                                           ref int messageId)
        {
            var returnValue = 0;
            var message     = IntPtr.Zero;

            return(Native.ldap_start_tls_s(handle, ref returnValue, ref message, serverControls, clientControls));
        }
Exemple #14
0
 public override DirectoryResponse SendRequest(DirectoryRequest request)
 {
     if (ExceptionToThrow != null)
     {
         throw ExceptionToThrow;
     }
     SentRequests.Add(request);
     return(RequestResponses[request.GetType()]);
 }
Exemple #15
0
        private void RefreshSortControlWithDefaultLCID(DirectoryRequest request)
        {
            DirectoryControl value = this.FindControlInCollection(this.DirectoryControls, typeof(SortRequestControl));

            this.DirectoryControls.Remove(value);
            this.lcid = LcidMapper.DefaultLcid;
            this.AddSortControl();
            request.Controls.Clear();
            request.Controls.AddRange(this.DirectoryControls);
        }
Exemple #16
0
        public static byte[] getDirectoryInfo(Command command)
        {
            DirectoryInfo    parent   = new DirectoryInfo(Util.Conversion.bytesToString(command.data));
            List <Object>    children = FileSystemOperations.getFileSystemEntries(Util.Conversion.bytesToString(command.data));
            DirectoryRequest request  = new DirectoryRequest
            {
                parent   = parent,
                children = children
            };

            return(Util.Serialization.serialize(request));
        }
        public async Task FileTree()
        {
            var filesRequest = new DirectoryRequest
            {
                Directory = testFilesDirectory,
            };

            var result = await client.PostAsync("directory/file-tree", TestExtensions.SerializeRequest(filesRequest));

            var treeString = await result.Content.ReadAsStringAsync();

            testOutputHelper.WriteLine(treeString);
        }
Exemple #18
0
        public virtual int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            var serverControlArray = AllocControls(request.Controls, true);
            var clientControlArray = AllocControls(request.Controls, false);

            try
            {
                return(SendRequest(handle, request, serverControlArray, clientControlArray, ref messageId));
            }
            finally
            {
                FreeControls(serverControlArray);
                FreeControls(clientControlArray);
            }
        }
Exemple #19
0
        public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            if (request is DeleteRequest deleteRequest)
            {
                var dn = deleteRequest.DistinguishedName;
                if (string.IsNullOrWhiteSpace(dn))
                {
                    throw new ArgumentNullException(nameof(dn));
                }
                return(Native.ldap_delete_ext(handle,
                                              dn,
                                              IntPtr.Zero,
                                              IntPtr.Zero,
                                              ref messageId
                                              ));
            }

            return(0);
        }
        protected override int SendRequest(SafeHandle handle, DirectoryRequest request, IntPtr serverControlArray, IntPtr clientControlArray, ref int messageId)
        {
            if (request is DeleteRequest deleteRequest)
            {
                var dn = deleteRequest.DistinguishedName;
                if (string.IsNullOrWhiteSpace(dn))
                {
                    throw new ArgumentNullException(nameof(dn));
                }

                return(Native.ldap_delete_ext(handle,
                                              dn,
                                              serverControlArray,
                                              clientControlArray,
                                              ref messageId
                                              ));
            }

            return(0);
        }
Exemple #21
0
        protected virtual DirectoryResponse SendRequest(DirectoryRequest request)
        {
            DirectoryResponse result;

            try
            {
                result = this.connection.SendRequest(request, LdapTargetConnection.requestTimeout);
            }
            catch (DirectoryOperationException ex)
            {
                ExTraceGlobals.ConnectionTracer.TraceError <string, ResultCode>((long)this.GetHashCode(), "DirectoryOperationException with response {0}, resultcode {1}", ex.Response.ErrorMessage, ex.Response.ResultCode);
                throw new ExDirectoryException(ex);
            }
            catch (DirectoryException ex2)
            {
                ExTraceGlobals.ConnectionTracer.TraceError <string>((long)this.GetHashCode(), "DirectoryException {0}", ex2.Message);
                throw new ExDirectoryException(ex2);
            }
            return(result);
        }
        public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            if (request is SearchRequest searchRequest)
            {
                return(Native.ldap_search_ext(
                           handle,
                           searchRequest.DistinguishedName,
                           (int)searchRequest.Scope,
                           searchRequest.Filter,
                           null,
                           (int)LdapForNet.Native.Native.LdapSearchAttributesOnly.False,
                           IntPtr.Zero,
                           IntPtr.Zero,
                           IntPtr.Zero,
                           (int)LdapForNet.Native.Native.LdapSizeLimit.LDAP_NO_LIMIT,
                           ref messageId));
            }

            return(0);
        }
        public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            if (request is AddRequest addRequest)
            {
                var entry = addRequest.LdapEntry;
                if (string.IsNullOrWhiteSpace(entry.Dn))
                {
                    throw new ArgumentNullException(nameof(entry.Dn));
                }

                if (entry.Attributes == null)
                {
                    entry.Attributes = new Dictionary <string, List <string> >();
                }

                var attrs = entry.Attributes.Select(ToLdapMod).ToList();

                var ptr = MarshalUtils.AllocHGlobalIntPtrArray(entry.Attributes.Count + 1);
                MarshalUtils.StructureArrayToPtr(attrs, ptr, true);

                var result = Native.ldap_add_ext(handle,
                                                 addRequest.LdapEntry.Dn,
                                                 ptr,
                                                 IntPtr.Zero,
                                                 IntPtr.Zero,
                                                 ref messageId
                                                 );

                attrs.ForEach(_ =>
                {
                    MarshalUtils.BerValuesFree(_.mod_vals_u.modv_bvals);
                    Marshal.FreeHGlobal(_.mod_vals_u.modv_bvals);
                    Marshal.FreeHGlobal(_.mod_type);
                });
                Marshal.FreeHGlobal(ptr);

                return(result);
            }

            return(0);
        }
Exemple #24
0
        public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            if (request is ExtendedRequest extendedRequest)
            {
                var name        = extendedRequest.RequestName;
                var val         = extendedRequest.RequestValue;
                var berValuePtr = IntPtr.Zero;

                if (val != null && val.Length != 0)
                {
                    berValuePtr = MarshalUtils.ByteArrayToBerValue(val);
                }

                var result = Native.ldap_extended_operation(handle, name, berValuePtr, IntPtr.Zero, IntPtr.Zero,
                                                            ref messageId);
                MarshalUtils.BerValFree(berValuePtr);
                return(result);
            }

            return(0);
        }
Exemple #25
0
        internal virtual DirectoryResponse SendRequest(DirectoryRequest request)
        {
            DirectoryResponse result;

            try
            {
                if (this.appConfig != null && this.appConfig.DelayLdapEnabled)
                {
                    this.DelayLdapIfNeeded(request);
                }
                result = this.connection.SendRequest(request, Connection.requestTimeout);
            }
            catch (DirectoryOperationException e)
            {
                throw new ExDirectoryException(e);
            }
            catch (DirectoryException e2)
            {
                throw new ExDirectoryException(e2);
            }
            return(result);
        }
Exemple #26
0
        public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            if (request is ModifyDNRequest modifyDnRequest)
            {
                var dn = modifyDnRequest.DistinguishedName;
                if (string.IsNullOrWhiteSpace(dn))
                {
                    throw new ArgumentNullException(nameof(dn));
                }
                return(Native.ldap_rename(handle,
                                          dn,
                                          modifyDnRequest.NewName,
                                          modifyDnRequest.NewParentDistinguishedName,
                                          modifyDnRequest.DeleteOldRdn?1:0,
                                          IntPtr.Zero,
                                          IntPtr.Zero,
                                          ref messageId
                                          ));
            }

            return(0);
        }
Exemple #27
0
        public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            if (request is CompareRequest compareRequest)
            {
                if (compareRequest.LdapEntry.Attributes == null ||
                    compareRequest.LdapEntry.Attributes?.Count != 1 ||
                    compareRequest.LdapEntry.Attributes.Single().Value.Count != 1
                    )
                {
                    throw new LdapException("Wrong assertion");
                }

                var assertion = compareRequest.LdapEntry.Attributes.Single();
                var name      = assertion.Key;
                var value     = assertion.Value[0];
                //TODO implement for bytes assertion

                return(Native.Compare(handle, compareRequest.LdapEntry.Dn, name, value, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, ref messageId));
            }

            return(0);
        }
Exemple #28
0
        public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId)
        {
            if (request is SearchRequest searchRequest)
            {
                var attributes      = GetAttributesPtr(searchRequest);
                var searchTimeLimit = (int)(searchRequest.TimeLimit.Ticks / TimeSpan.TicksPerSecond);
                var res             = Native.Search(
                    handle,
                    searchRequest.DistinguishedName,
                    (int)searchRequest.Scope,
                    searchRequest.Filter,
                    attributes,
                    searchRequest.AttributesOnly ? 1 : 0,
                    IntPtr.Zero,
                    IntPtr.Zero,
                    searchTimeLimit,
                    searchRequest.SizeLimit,
                    ref messageId);
                FreeAttributes(attributes);
                return(res);
            }

            return(0);
        }
	public int Add(DirectoryRequest request) {}
	public DirectoryResponse SendRequest(DirectoryRequest request, System.TimeSpan requestTimeout) {}
	public void CopyTo(DirectoryRequest[] value, int i) {}
	public virtual DirectoryResponse SendRequest(DirectoryRequest request) {}
	public void Remove(DirectoryRequest value) {}
 public override DirectoryResponse SendRequest(DirectoryRequest request) => throw new NotImplementedException();
	public void Insert(int index, DirectoryRequest value) {}
	public int IndexOf(DirectoryRequest value) {}
	public bool Contains(DirectoryRequest value) {}
Exemple #38
0
        public static void Main(string[] args)
        {
            X509Certificate2 signingCertificate = new X509Certificate2("private.p12", "Password", X509KeyStorageFlags.Exportable);
            X509Certificate2 issuerCertificate  = new X509Certificate2("idealcheckout.cer");

            string merchantId = "123456789";
            string idealUrl   = "https://www.ideal-checkout.nl:443/simulator/";
            string returlUrl  = "http://localhost:7878/idealreturn";

            var idealLib = new DirectoryRequest();

            idealLib.SigningCertificate = signingCertificate;
            idealLib.IssuerCertificate  = issuerCertificate;
            idealLib.MerchantId         = merchantId;
            idealLib.MerchantSubId      = "0";
            idealLib.IDealURL           = idealUrl;
            var issuerResult = idealLib.GetIssuers().Result;

            if (issuerResult.IsError)
            {
                Console.WriteLine(issuerResult.Error.ErrorMessage);
                Console.WriteLine(issuerResult.Error.ConsumerMessage);
                Console.ReadKey();
                return;
            }

            foreach (var bank in issuerResult.Issuers)
            {
                Console.WriteLine(bank.IssuerId + " -> " + bank.IssuerName);
            }

            var tranactionLib = new TransactionRequest();

            tranactionLib.SigningCertificate = signingCertificate;
            tranactionLib.IssuerCertificate  = issuerCertificate;
            tranactionLib.MerchantId         = merchantId;
            tranactionLib.MerchantSubId      = "0";
            tranactionLib.IDealURL           = idealUrl;
            tranactionLib.ReturnUrl          = returlUrl;
            tranactionLib.Amount             = 2.95M;
            tranactionLib.Description        = "Test Order";
            tranactionLib.EntranceCode       = Guid.NewGuid().ToString();
            tranactionLib.PurchaseId         = "12332365";

            var request = tranactionLib.Request(issuerResult.Issuers[0].IssuerId).Result;

            if (request.IsError)
            {
                Console.WriteLine(request.Error.ErrorMessage);
                Console.WriteLine(request.Error.ConsumerMessage);
                Console.ReadKey();
                return;
            }

            Console.WriteLine(request.IssuerAuthenticationURL);

            try
            {
                OpenBrowser(request.IssuerAuthenticationURL.Replace("&amp;", "&"));
            }
            catch
            {
                Console.WriteLine("Please goto above url and after payment etc. press any key");
            }

            Console.ReadKey();

            var statusLib = new StatusRequest();

            statusLib.SigningCertificate = signingCertificate;
            statusLib.IssuerCertificate  = issuerCertificate;
            statusLib.MerchantId         = merchantId;
            statusLib.MerchantSubId      = "0";
            statusLib.IDealURL           = idealUrl;

            var status = statusLib.Request(request.TransactionID).Result;

            if (status.IsError)
            {
                Console.WriteLine(status.Error.ErrorMessage);
                Console.WriteLine(status.Error.ConsumerMessage);
                Console.ReadKey();
                return;
            }

            Console.WriteLine(status.Status);
            Console.WriteLine(status.ConsumerName);
            Console.WriteLine(status.ConsumerIBAN);
            Console.WriteLine(status.ConsumerBIC);
            Console.WriteLine(status.Currency);
            Console.WriteLine(status.Amount);

            Console.ReadKey();
        }
	public System.IAsyncResult BeginSendRequest(DirectoryRequest request, System.TimeSpan requestTimeout, PartialResultProcessing partialMode, System.AsyncCallback callback, object state) {}