How to configure File Based SMS OTP Identity Provider - wso2-identity-server

I need to configure file based SMS OTP identity provider. I couldn't find relevant xml syntax in the docs.
I tried following syntax.
<FederatedAuthenticatorConfigs>
<smsotp>
<Name>SMSOTPAuthenticator</Name>
<DisplayName>smsotp</DisplayName>
<IsEnabled>true</IsEnabled>
<Properties>
<property>
<Name>SMSUrl</Name>
<Value>url</Value>
</property>
<property>
<Name>HTTPMethod</Name>
<Value>POST</Value>
</property>
</Properties>
</smsotp>
</FederatedAuthenticatorConfigs>
However, it shows following error.
ERROR {org.wso2.carbon.identity.application.authentication.framework.handler.step.impl.DefaultStepHandler} - SMS URL is null
org.wso2.carbon.identity.application.authentication.framework.exception.AuthenticationFailedException: SMS URL is null

Related

WSO2 IS error when creating user store

When I try to create an LDAP Base user store in WSO2 IS 5.3.0 I always get the following error:
TID: [-1234] [] [2017-04-03 11:40:49,521] ERROR {org.wso2.carbon.identity.user.store.configuration.UserStoreConfigAdminService} - Error occurred during the transformation process of C:\WSO2IS~1.0\bin\..\repository\deployment\server\userstores\myUserStore.xml
org.wso2.carbon.identity.user.store.configuration.utils.IdentityUserStoreMgtException: Error occurred during the transformation process of C:\WSO2IS~1.0\bin\..\repository\deployment\server\userstores\myUserSotre.xml
I have tried previous version and it fails till 5.0.0, in which I succeed in create the user store. User store config in WSO2 ESB seems to works the same way that WSO2 IS user store, so, I configured the user store in WSO2 ESB, and copy the myUserSotre.xml generated by WSO2 ESB just in the same path where IS failed to find the file.
That worked, and result in WSO2 IS recognizing the User Store. I can see the users from the user store in WSO2 IS user store. However, if I try update the "forced" user store, it keeps throwing the error.
I am using windows 7 and jdk 8.
This is the xml from ESB and IS 5.0.0 that works if I paste it in IS 5.3
<?xml version="1.0" encoding="UTF-8"?>
<UserStoreManager class="org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager">
<Property name="ConnectionName">cn=Manager,dc=company,dc=com</Property>
<Property name="ConnectionURL">ldap://IP:HOST</Property>
<Property name="ConnectionPassword">password</Property>
<Property name="UserSearchBase">ou=People,dc=company,dc=com</Property>
<Property name="Disabled">false</Property>
<Property name="UserNameListFilter">(objectClass=person)</Property>
<Property name="UserNameAttribute">uid</Property>
<Property name="UserNameSearchFilter">(&(objectClass=person)(uid=?))</Property>
<Property name="ReadOnly">true</Property>
<Property name="MaxUserNameListLength">100</Property>
<Property name="MaxRoleNameListLength">100</Property>
<Property name="UserRolesCacheEnabled">true</Property>
<Property name="SCIMEnabled">false</Property>
<Property name="ReadGroups">false</Property>
<Property name="GroupSearchBase">ou=system</Property>
<Property name="GroupNameListFilter">(objectClass=groupOfNames)</Property>
<Property name="GroupNameSearchFilter">(&(objectClass=groupOfNames)(cn=?))</Property>
<Property name="GroupNameAttribute">cn</Property>
<Property name="MembershipAttribute">member</Property>
<Property name="MemberOfAttribute"/>
<Property name="PasswordHashMethod">PLAIN_TEXT</Property>
<Property name="ReplaceEscapeCharactersAtUserLogin">true</Property>
<Property name="DomainName">ldap</Property>
<Property name="Description"/>
</UserStoreManager>
Is there any issue about this? Is there extra configuration needed?
This happens in Windows because of the file path encoding. Currently this is not fixed from WSO2 side. As a work around, you can rename WSO2IS~1.0 folder not contain the '~' character. eg. rename it with WSO2IS and try.
The solution is simple. Set environment variable CARBON_HOME to the path of your wso2 IS folder.

HBase connection in mapreduce running from Oozie workflow fails

I am running my mapreduce job as java action from Oozie workflow .
When i run my mapreduce in my hadoop cluster it runs successfully,but when i run use same jar from Oozie workflow it throw be
This is my workflow .xml
<workflow-app name="HBaseToFileDriver" xmlns="uri:oozie:workflow:0.1">
<start to="mapReduceAction"/>
<action name="mapReduceAction">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${outputDir}"/>
</prepare>
<configuration>
<property>
<name>mapred.mapper.new-api</name>
<value>true</value>
</property>
<property>
<name>mapred.reducer.new-api</name>
<value>true</value>
</property>
<property>
<name>oozie.libpath</name>
<value>${appPath}/lib</value>
</property>
<property>
<name>mapreduce.job.queuename</name>
<value>root.fricadev</value>
</property>
</configuration>
<main-class>com.thomsonretuers.hbase.HBaseToFileDriver</main-class>
<arg>fricadev:FinancialLineItem</arg>
<capture-output/>
</java>
<ok to="end"/>
<error to="killJob"/>
</action>
<kill name="killJob">
<message>"Killed job due to error: ${wf:errorMessage(wf:lastErrorNode())}"</message>
</kill>
<end name="end" />
</workflow-app>
Below is my exception when i see the logs in the YARN .
even though is showing as succeeded but output files are not getting generated .
Have you look into Oozie Java Action
IMPORTANT: In order for a Java action to succeed on a secure cluster, it must propagate the Hadoop delegation token like in the following code snippet (this is benign on non-secure clusters):
// propagate delegation related props from launcher job to MR job
if (System.getenv("HADOOP_TOKEN_FILE_LOCATION") != null) {
jobConf.set("mapreduce.job.credentials.binary", System.getenv("HADOOP_TOKEN_FILE_LOCATION"));
}
You must get HADOOP_TOKEN_FILE_LOCATION from system env variable and set to the property mapreduce.job.credentials.binary.
HADOOP_TOKEN_FILE_LOCATION is set by oozie at runtime.

how to configure Single event receiver for multiple streams/dynamic stream name in wso2 DAS?

I have configured JMS receiver in WSO2 DAS something like below xml. Now I am configuring receiver xml file for each stream. I see there is no configuration difference except stream name change (streamName="TABLE_NAME"). Is there any way I can use single event receiver for multiple streams to avoid duplicate code.
<?xml version="1.0" encoding="UTF-8"?>
<eventReceiver name="divolte_events_data_receiver" statistics="enable"
trace="enable" xmlns="http://wso2.org/carbon/eventreceiver">
<from eventAdapterType="jms">
<property name="transport.jms.DestinationType">queue</property>
<property name="transport.jms.Destination">MyQueue</property>
<property name="java.naming.factory.initial">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</property>
<property name="java.naming.provider.url">repository/conf/jndi.properties</property>
<property name="transport.jms.SubscriptionDurable">false</property>
<property name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</property>
<property name="transport.jms.UserName">admin</property>
<property encrypted="true" name="transport.jms.Password">***</property>
</from>
<mapping customMapping="disable" type="json"/>
<to streamName="TABLE_NAME" version="1.0.0"/>
Its not possible with DAS as receivers are bound to streams and the flow. For JMS it looks like same but generally there are other receiver types which requires its own receiver. Ex:- In Http receivers different endpoints will be created for each receiver where as JSON event structure is based on the stream bound to the receiver

How to handle relative paths of xsds while publishing wsdl in spring web services?

I have a Soap web services exposed through Springs...
I need to expose the WSDL for the same. My Bean definition to expose the WSDL is as shown below.
<bean id="schemaCollection" class="org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection">
<description>
This bean wrap the messages.xsd (which imports types.xsd), and inlines them as a one.
</description>
<property name="xsds">
<list>
<value>/WEB-INF/classes/schema/HL7V3/NE2008/multicacheschemas/PRPA_IN201301UV02.xsd</value>
<value>/WEB-INF/classes/schema/HL7V3/NE2008/multicacheschemas/PRPA_IN201302UV02.xsd</value>
<value>/WEB-INF/classes/schema/HL7V3/NE2008/multicacheschemas/PRPA_IN201304UV02.xsd</value>
<value>/WEB-INF/classes/schema/HL7V3/NE2008/multicacheschemas/MCCI_IN000002UV01.xsd</value>
<value>/WEB-INF/classes/schema/HL7V3/NE2008/multicacheschemas/PRPA_IN201309UV02.xsd</value>
<value>/WEB-INF/classes/schema/HL7V3/NE2008/multicacheschemas/PRPA_IN201310UV02.xsd</value>
</list>
</property>
<property name="inline" value="true"/>
</bean>
<bean id="pixManager" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name="schemaCollection" ref ="schemaCollection"/>
<property name="portTypeName" value="PIXManager_PortType"/>
<property name="locationUri" value="/services/pixManager/"/>
</bean>
The problem I am facing here is I have child XSDs that are referred from these XSDs as shown below which is not getting resolved.
<xs:include schemaLocation="../coreschemas/infrastructureRoot.xsd"/>
I am getting the following error..
Caused by: org.springframework.xml.xsd.commons.CommonsXsdSchemaException: Schema [ServletContext resource [/WEB-INF/classes/schema/HL7V3/NE2008/multicaches
chemas/PRPA_IN201301UV02.xsd]] could not be loaded; nested exception is java.lang.IllegalArgumentException: The resource path [/../coreschemas/infrastructu
reRoot.xsd] has been normalized to [null] which is not valid
Where [/../coreschemas/infrastructu
reRoot.xsd] is the relative path of the child XSDs.
You need extract only schemas required for your interaction(s), so the folder structure will be like this:
../coreschemas
../schemas
and then "flatten" an interaction schema and related schemas into one which you may then embed into your WSDL.

How to handle Endpoint warnings in wso2esb

I am using wso2 esb 4.8.1,
I wish to handle warning of endpoints.I am trying to hit CXF services in tomcat server.
If I test with wrong action (Operation/method)name or service name in tomcat.
I am getting this message in SOAP.
<html>
<body>No service was found.</body>
</html>
Where as in my wso2esb not getting logged any error and that particular endpoint failing showing this message.
[2014-11-24 16:57:57,931] WARN - LoadbalanceEndpoint Endpoint [ServiceLEP] Detect a Failure in a child endpoint : Endpoint [EP3]
Since I don't know the CXF I wish to handle this in wso2esb How would I handle this message and send proper error response to client.
Is any one able to help me.
Thanks in advance.
If you are using a mediator, the response will be available in the inSequence. You can log that response with code such as this after your mediator:
<enrich>
<source type="body"/>
<target type="property" action="child" property="response_body"/>
</enrich>
<log level="custom">
<property name="The Response" expression="get-property('response_body')"/>
</log>
Please advise if that works in your scenario.
If your endpoint is suspended, then WSO2 by default initiate fault sequence, you can define your custom message in the fault sequence and then send it back to the client as you want. You can get ERROR_CODE and ERROR_MESSAGE property from WSO2 in Log or Switch mediator where u can check it. In log u can do it as following:
<log level="full" separator="**********Fault Sequence File Processor***********">
<property name="ErrorCode" expression="get-property('ERROR_CODE')"></property>
<property name="ErrorMessage" expression="get-property('ERROR_MESSAGE')"></property>
<property name="ErrorDetail" expression="get-property('ERROR_DETAIL')"></property>
<property name="ErrrorException" expression="get-property('ERROR_EXCEPTION')"></property>
</log>
You can make a check on ERROR_CODE property or ERROR_MESSAGE property in Switch mediator and then with the help of Payload mediator u can define your custom error message.