I wrote a flow accepting JSON, now I want to add http authentication. I want to accept HTTP basic authentication uid and pw.
So I am starting with a Hellow World program first, as follows:
<?xml version="1.0" encoding="UTF-8"?>
<mule version="EE-3.5.0" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:core="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd">
<flow doc:name="HelloWorldFlow1" name="HelloWorldFlow1">
<http:inbound-endpoint doc:description="This endpoint receives an HTTP message." doc:name="HTTP" exchange-pattern="request-response" host="localhost" port="8081"/>
<set-payload doc:description="This processor sets the payload of the message to the string 'Hello World'." doc:name="Set Payload" value="Hello World"/>
</flow>
</mule>
And I test with the following program:
C:\curl>curl -H "Content-Type: application/json" -u uida:pw -d {"first":"Steven"
} http://localhost:8081
Hello World
C:\curl>
This works, as there is no basic auth configured within th eflow, so it ignores the "-u uid:pw" I sent on the curl command
Now I change the flow as follows ( I put 'uid' in the 'Http Settings->User' field, and 'pw' in the 'Http Seetings->Password' field on the GUI
<?xml version="1.0" encoding="UTF-8"?>
<mule version="EE-3.5.0" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:core="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd">
<flow doc:name="HelloWorldFlow1" name="HelloWorldFlow1">
<http:inbound-endpoint doc:description="This endpoint receives an HTTP message." doc:name="HTTP" exchange-pattern="request-response" host="localhost" port="8081" password="pw" user="uid"/>
<set-payload doc:description="This processor sets the payload of the message to the string 'Hello World'." doc:name="Set Payload" value="Hello World"/>
</flow>
</mule>
Now when I test I get the following:
C:\curl>curl -H "Content-Type: application/json" -u uida:pw -d {"first":"Steven"
} http://localhost:8081
Cannot bind to address "http://127.0.0.1:8081/" No component registered on that
endpoint
I have done this repeatedly, but I get the same response.
Is there another field that I should have set? Any ideas on how I can resolve this?
Thanks
The user and password attributes are ineffective on inbound HTTP endpoints, they only work on outbound.
Mule uses Spring Security for authentication. This is detailed in the user guide: http://www.mulesoft.org/documentation/display/current/Configuring+the+Spring+Security+Manager , including an example of the http-security-filter that you need to put in the HTTP inbound endpoint.
Related
I try to create a simple application using Mule. Anyway when I select operation "Authorize" I got error. But if I select another operation it works fine!!
I have Mule Server version="CE-3.8.1" and use Anypoint studio Version: 6.2.5
The Complete XML Configuration:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:dropbox="http://www.mulesoft.org/schema/mule/dropbox" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/dropbox http://www.mulesoft.org/schema/mule/dropbox/current/mule-dropbox.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd">
<http:listener-config name="HTTP_Listener_Configuration8881" host="localhost" port="8881" doc:name="HTTP Listener Configuration"/>
<dropbox:config name="Dropbox1" appKey="ovy1i8ak8u43t87" appSecret="7jlhpdzeyddi8d5" doc:name="Dropbox">
<dropbox:oauth-callback-config domain="localhost" localPort="8881" remotePort="8881" path="callback"/>
</dropbox:config>
<http:request-config name="HTTP_Request_Configuration" host="www.mulesoft.com" port="80" doc:name="HTTP Request Configuration"/>
<flow name="dropbox_integration2Flow">
<http:listener config-ref="HTTP_Listener_Configuration8881" path="/authorize" doc:name="HTTP"/>
<dropbox:unauthorize config-ref="Dropbox1" doc:name="Dropbox - authorize"/>
</flow>
<flow name="dropbox_integration2Flow1">
<http:listener config-ref="HTTP_Listener_Configuration8881" path="/" doc:name="HTTP"/>
<dropbox:create-folder config-ref="Dropbox1" path="/mule" doc:name="Dropbox - create"/>
<http:request config-ref="HTTP_Request_Configuration" path="/sites/default/files/3C_mulesoft_logo_updated.svg" method="GET" doc:name="HTTP"/>
<dropbox:upload-stream config-ref="Dropbox1" filename="mulelogo.png" path="/mule" doc:name="Dropbox - upload"/>
<dropbox:get-link config-ref="Dropbox1" path="/mule/mulelogo.png" doc:name="Dropbox - get link"/>
<json:object-to-json-transformer doc:name="Object to JSON"/>
</flow>
</mule>
Is there any reason for this? How to fix it?
It seems to be a bug in the old Mule Dropbox Cloud Connector Mule Studio Extension 3.3.0 (2013). Are you using that one? If you are, I suggest you use the latest available version, Dropbox Connector 3.3.3 (2015), which fixes the error.
I'm trying to get the client IP and socket of a UDP package and save it in a Flowvar variable using the MEL code
#[message.inboundProperties.MULE_REMOTE_CLIENT_ADDRESS]
However this variable is always null, I have been able to make it work on TCP transport, does anyone know how to get the remote client address in UDP?
This is my XML file:
<mule xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:udp="http://www.mulesoft.org/schema/mule/udp" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/udp http://www.mulesoft.org/schema/mule/udp/current/mule-udp.xsd
http://www.mulesoft.org/schema/mule/amqp http://www.mulesoft.org/schema/mule/amqp/current/mule-amqp.xsd">
<udp:connector name="UDP" validateConnections="true" keepSendSocketOpen="true" doc:name="UDP" broadcast="true"/>
<flow name="udpFlow">
<udp:inbound-endpoint exchange-pattern="one-way" host="172.22.20.103" port="4040" connector-ref="UDP" responseTimeout="10000" doc:name="UDP" metadata:id="9260547c-3b58-4ebd-953e-fd3e7bb063f3"/>
<object-to-string-transformer doc:name="Object to String"/>
<set-variable variableName="source" value="#[message.inboundProperties.MULE_REMOTE_CLIENT_ADDRESS]" metadata:id="6a72ad72-167f-44da-9f3d-75143c5c0a2f" doc:name="Variable"/>
<set-payload value="#[flowVars.source] dice #[payload]" doc:name="Set Payload"/>
<echo-component doc:name="Echo"/>
</flow>
</mule>
UPDATE:
I solve the Address issue with the MEL code
#[message.inboundProperties['packet.address']]: #[message.inboundProperties['packet.port']]
Thanks to David Dossot for his help.
Use:
#[message.inboundProperties['packet.address']]
I'm just trying to follow some of the Mulesoft tutorials and messing around with them to see if I can figure out how things work. This particular tutorial is one that demonstrates the usage of IMAP and how to use it to get information from an email.
I'm currently using this tutorial, and it was working fine. I then made some changes to just see how things worked. I have a simple flow that looks like this:
IMAP -> Email-to-string -> Logger
And the XML looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting" xmlns:email="http://www.mulesoft.org/schema/mule/email" version="EE-3.6.0" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:context="http://www.springframework.org/schema/context" xmlns:data-mapper="http://www.mulesoft.org/schema/mule/ee/data-mapper" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:imap="http://www.mulesoft.org/schema/mule/imap" xmlns:imaps="http://www.mulesoft.org/schema/mule/imaps" xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
http://www.mulesoft.org/schema/mule/imap http://www.mulesoft.org/schema/mule/imap/current/mule-imap.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-current.xsd
http://www.mulesoft.org/schema/mule/imaps http://www.mulesoft.org/schema/mule/imaps/current/mule-imaps.xsd
http://www.mulesoft.org/schema/mule/ee/data-mapper http://www.mulesoft.org/schema/mule/ee/data-mapper/current/mule-data-mapper.xsd
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd
http://www.mulesoft.org/schema/mule/email http://www.mulesoft.org/schema/mule/email/current/mule-email.xsd
http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd">
<imaps:connector checkFrequency="100" doc:name="IMAP" name="imapsConnector" validateConnections="true">
<imaps:tls-client path="" storePassword=""/>
<imaps:tls-trust-store path="" storePassword=""/>
</imaps:connector>
<flow name="imap-to-csvFlow1">
<imaps:inbound-endpoint connector-ref="imapsConnector" doc:name="Poll emails" host="imap.gmail.com" password="samplepass" port="993" responseTimeout="10000" user="sampleuser%40gmail.com"/>
<email:email-to-string-transformer doc:name="Email to String"/>
<logger message="#[message.payload]" level="INFO" doc:name="Logger"/>
</flow>
</mule>
And the error I'm getting is:
ERROR 2015-06-04 13:34:13,706 [main] org.mule.module.launcher.application.DefaultMuleApplication: null
java.io.IOException: Invalid keystore format
The full console log is obviously a bit more extensive but that's the first error that appears.
If you use IMAPS (as opposed to IMAP), you need to provide valid values for the TLS client and trust store.
For example:
<imaps:tls-client path="clientKeystore" storePassword="mulepassword" />
<imaps:tls-trust-store path="greenmail-truststore" storePassword="password" />
The email transport integration tests have ready made keystores you can play with: https://github.com/mulesoft/mule/tree/mule-3.6.2/transports/email/src/test/resources
Reference: https://developer.mulesoft.com/docs/display/current/IMAP+Transport+Reference#IMAPTransportReference-ConfigurationReference
Hi I am working with Mule Anypoint Studio and I am trying to implement a list of IP's but my program is allowing every request from all IP's and it works only for one request per browser. How it is working i have no Idea. Please elaborate the working . Please don't share Mule Documentation Link because there they have not given much information.
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:filters="http://www.mulesoft.org/schema/mule/filters" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.5.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/filters http://www.mulesoft.org/schema/mule/filters/current/mule-filters.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
<filters:config name="Filters" doc:name="Filters"/>
<flow name="mule-security-ipFlow1" doc:name="mule-security-ipFlow1">
<http:inbound-endpoint exchange-pattern="request-response" host="196.111.1.1" port="8081" doc:name="HTTP" path="ip"/>
<filters:filter-by-ip config-ref="Filters" regex="196.16.4.1,196.17.7.13" doc:name="Filters"/>
<set-payload value="#['Data Mast']" doc:name="Set Payload"/>
<logger message="#[message.payload]" level="INFO" doc:name="Logger"/>
</flow>
</mule>
there are two scenarios here, we can specify regular expression to allow certain ip range requests or we can specify single ip address as part regex attaribute value.
<filters:filter-by-ip config-ref="Filters" regex="${fms.iprange}"
doc:name="verify-ip-address" />
if we want to allow comma separated ip address, its better to write custom filter and do the required logic .
Depending on how you are intending to deploy your flow your other option is to use api-kit to apply the IP whitelist (or blacklist) to your flow as a policy:
I downloaded latest mule studio from the mulesoft and started working on first example in,
Windows 8: 64bit.
Mule version: 3.4.0
JRE: 7
Project name given as: test
buildDate: 201305141336
When i click this link in a browser, getting following error:
https://www.google.com/tbproxy/spell?lang=en
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<spellresult error="1"/>
my xml file:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:ajax="http://www.mulesoft.org/schema/mule/ajax" xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd
http://www.mulesoft.org/schema/mule/ajax http://www.mulesoft.org/schema/mule/ajax/current/mule-ajax.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
<ajax:connector name="AjaxConnector" serverUrl="http://127.0.0.1:8090/Ajax" resourceBase="src/main/app/docroot" jsonCommented="true" doc:name="Ajax"/>
<flow name="testFlow1" doc:name="testFlow1">
<ajax:inbound-endpoint channel="services/echo" responseTimeout="10000" doc:name="Ajax Channel" connector-ref="AjaxConnector"/>
<mulexml:object-to-xml-transformer doc:name="Convert JS to XML"/>
<mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" doc:name="Convert XML structure" xsl-file="F:\project\workspace\mulestudio\test\src\main\resources\transform.xsl"/>
<http:outbound-endpoint exchange-pattern="request-response" host="www.google.com/tbproxy/spell?lang=en" port="80" method="POST" doc:name="Google API" contentType="text/xml"/>
<echo-component doc:name="Echo to Console"/>
</flow>
</mule>
You are getting this error because by browsing https://www.google.com/tbproxy/spell?lang=en you are sending an HTTP GET request to a resource that accepts HTTP POST requests.
Try with:
curl -H "Content-Type: application/xml" \
-d '<spellrequest textalreadyclipped="0" ignoredups="0" ignoredigits="1" ignoreallcaps="0"><text>look at the butterfli</text></spellrequest>' \
https://www.google.com/tbproxy/spell?lang=en
and you will see spelling suggestions from Google.