On Tue, Aug 20, 2019 at 3:35 PM Bhathiya Jayasekara <bhath...@wso2.com>
wrote:

>
>
> On Tue, Aug 20, 2019 at 3:27 PM Malintha Amarasinghe <malint...@wso2.com>
> wrote:
>
>>
>>
>> On Mon, 19 Aug 2019, 20:01 Vithursa Mahendrarajah, <vithu...@wso2.com>
>> wrote:
>>
>>> Hi all,
>>>
>>> I have started the implementation. When giving roles with userstore
>>> domain name separated with "/", *HTTP/1.1 400 Bad Request* error
>>> response is returned, as encoded slashes is not allowed by default in
>>> tomcat. As suggested in [1], when adding the system property
>>> *org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true*, this
>>> issue is sorted.
>>>
>>> After this changes, the request to validate roles in secondary
>>> user-store fails with the error response - *HTTP/1.1 401 Unauthorized*.
>>> It is due to failed scope validation in [2]. This behavior is observed
>>> because the path parameter is decoded during authentication phase. After
>>> analysis found that, currently we are using
>>> *org.apache.cxf.message.Message.PATH_INFO* parameter ([3]) from request
>>> which has the decoded value. In order to resolve this issue, we can use
>>> *org.apache.cxf.request.uri* parameter in message which is encoded.
>>>
>>> For instance, for the request URL -
>>> https://localhost:9443/api/am/publisher/v1.0/roles/*Internal%2Fcreator*,
>>>
>>> org.apache.cxf.message.Message.PATH_INFO:
>>> "/api/am/publisher/v1.0/roles/Internal/creator"
>>> org.apache.cxf.request.uri:
>>> "/api/am/publisher/v1.0/roles/Internal%2Fcreator"
>>>
>>> If we are proceeding with the following format of request, we need to
>>> add the system property and make relevant changes in scope validation logic
>>> (WebAppAuthenticatorImpl.java):
>>> https://localhost:9443/api/am/publisher/v1.0/roles/
>>> *{user-store-name}/{role-name}*
>>>
>>> However, found [5], [6] related to the security concerns in setting
>>> org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH as true by default.
>>>
>>> The * org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH* and
>>>> *org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH* system
>>>> properties allow non-standard parsing of the request URI. Using these
>>>> options when behind a reverse proxy may enable an attacker to bypass any
>>>> security constraints enforced by the proxy.
>>>>
>>>
>> This is a good finding. Given this issue, I don't think it is a good idea
>> to proceed with the encoded slash in the path.
>>
>>>
>>> Alternatively, we can pass user-store in following ways:
>>>
>>>    1. /roles/{rolename}?userstore={userstore}
>>>    2. /userstore/{userstore}/roles/{roleName}
>>>    3. /roles/{rolename}/userstore/{userstore}
>>>    4. Or, need to have a configurable character to differentiate
>>>    user-store and role name. For instance, roles/{userstore}*-*
>>>    {roleName}
>>>
>>> Which way we can implement? Appreciate your suggestions regarding this.
>>>
>>
>> How do we treat Internal roles? Can we treat "Internal" as a user store?
>>
>> Eg: check if "Internal/subscriber" is available:
>>
>> HEAD /roles/subscriber?userStore=Internal
>>
>> Is this a valid way of representing it?
>>
>
> If we're not allowed to create secondary userstores with the name
> "Internal", this should be ok.
>
For internal roles should be pass this at all?

>
> Thanks,
> Bhathiya
>
>
>>
>>
>>>
>>> [1] https://issues.apache.org/jira/browse/CXF-4207
>>> [2]
>>> https://github.com/wso2/carbon-apimgt/blob/master/components/apimgt/org.wso2.carbon.apimgt.rest.api.util/src/main/java/org/wso2/carbon/apimgt/rest/api/util/impl/WebAppAuthenticatorImpl.java#L138
>>> [3]
>>> https://github.com/wso2/carbon-apimgt/blob/master/components/apimgt/org.wso2.carbon.apimgt.rest.api.util/src/main/java/org/wso2/carbon/apimgt/rest/api/util/impl/WebAppAuthenticatorImpl.java#L113
>>> [4]
>>> https://serverfault.com/questions/914847/stop-apache-from-decoding-characters-from-uri-for-path-info
>>> [5] https://backstage.forgerock.com/knowledge/kb/article/a59558448
>>> [6]
>>> http://tomcat.apache.org/tomcat-9.0-doc/security-howto.html#System_Properties
>>> <http://tomcat.apache.org/tomcat-9.0-doc/security-howto.html>
>>>
>>> <http://tomcat.apache.org/tomcat-9.0-doc/security-howto.html>
>>> Thanks,
>>> Vithursa
>>>
>>> On Fri, Aug 16, 2019 at 11:07 AM Vithursa Mahendrarajah <
>>> vithu...@wso2.com> wrote:
>>>
>>>> Ack, will do that.
>>>>
>>>> On Fri, Aug 16, 2019 at 12:16 AM Harsha Kumara <hars...@wso2.com>
>>>> wrote:
>>>>
>>>>> @Vithursa Mahendrarajah <vithu...@wso2.com> Once you implement, let's
>>>>> add several test cases with special characters, secondary user store roles
>>>>> and etc.
>>>>>
>>>>> On Thu, Aug 15, 2019 at 4:16 PM Vithursa Mahendrarajah <
>>>>> vithu...@wso2.com> wrote:
>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> Thanks for the suggestions. As per the suggestions, we have decided
>>>>>> to go with HEAD request option. As mentioned earlier in this thread,
>>>>>> following are the scenarios where role validation is required:
>>>>>>
>>>>>>    1. API Design phase -
>>>>>>    - Publisher access control - check whether the role exists and
>>>>>>       the logged-in user has the role
>>>>>>    - Store visibility - check whether the role exists or not
>>>>>>    2. API Manage phase - when adding new scope - check whether the
>>>>>>    role exists or not
>>>>>>
>>>>>> We have decided to add the OAuth2 scope as apim:api_create as these
>>>>>> functionalities are used by API creator.
>>>>>>
>>>>>> As per the offline discussion had with @Malintha Amarasinghe
>>>>>> <malint...@wso2.com>  and @Kasun Thennakoon <kasu...@wso2.com>, when
>>>>>> checking whether the logged-in user has particular role, claims in ID 
>>>>>> token
>>>>>> stored in browser local storage could be used. By considering the
>>>>>> possibility of manipulating the ID token in local storage, complexity in
>>>>>> handling when using secondary userstore and the security concerns in
>>>>>> exposing roles assigned to particular user, we have decided to
>>>>>> introduce another REST API to check whether the logged-in user has the
>>>>>> given role as this would be more cleaner.
>>>>>>
>>>>>> Please find the REST API definition as follows:
>>>>>>
>>>>>> ######################################################
>>>>>> # The Role Name Existence
>>>>>> ######################################################
>>>>>>   /roles/{roleName}:
>>>>>> #-----------------------------------------------------
>>>>>> # The role name existence check resource
>>>>>> #-----------------------------------------------------
>>>>>>     head:
>>>>>>       security:
>>>>>>         - OAuth2Security:
>>>>>>             - apim:api_create
>>>>>>       summary:
>>>>>>         Check given role name already exists
>>>>>>       description:
>>>>>>         Using this operation, to check whether given role already exists
>>>>>>       parameters:
>>>>>>         - $ref : '#/parameters/roleName'
>>>>>>       responses:
>>>>>>         200:
>>>>>>           description:
>>>>>>             OK.
>>>>>>             Requested role name is returned.
>>>>>>         404:
>>>>>>           description:
>>>>>>             Not Found.
>>>>>>             Requested role name does not exist.
>>>>>>
>>>>>> ######################################################
>>>>>> # The Role Name Existence for the logged-in user
>>>>>> ######################################################
>>>>>>   /me/roles/{roleName}:
>>>>>> #-----------------------------------------------------
>>>>>> # Validate role against a user
>>>>>> #-----------------------------------------------------
>>>>>>     head:
>>>>>>       security:
>>>>>>         - OAuth2Security:
>>>>>>             - apim:api_create
>>>>>>       summary:
>>>>>>         Validate whether the logged-in user has the given role
>>>>>>       description:
>>>>>>         Using this operation, logged-in user can check whether he has 
>>>>>> given role.
>>>>>>       parameters:
>>>>>>         - $ref : '#/parameters/roleName'
>>>>>>       responses:
>>>>>>         200:
>>>>>>           description:
>>>>>>             OK.
>>>>>>             Logged-in user has the role.
>>>>>>         404:
>>>>>>           description:
>>>>>>             Not Found.
>>>>>>             Logged-in user does not have the role.
>>>>>>
>>>>>> Appreciate any feedback on this.
>>>>>>
>>>>>> Thanks,
>>>>>> Vithursa
>>>>>>
>>>>>> On Thu, Aug 15, 2019 at 11:35 AM Naduni Pamudika <nad...@wso2.com>
>>>>>> wrote:
>>>>>>
>>>>>>> +Vithursa Mahendrarajah <vithu...@wso2.com>
>>>>>>>
>>>>>>> On Mon, Aug 12, 2019 at 5:26 PM Sanjeewa Malalgoda <
>>>>>>> sanje...@wso2.com> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Aug 8, 2019 at 9:08 PM Malintha Amarasinghe <
>>>>>>>> malint...@wso2.com> wrote:
>>>>>>>>
>>>>>>>>> When we return a 404, it implies that the URL (or the resource)
>>>>>>>>> does not exist. Here the URL/resource is */validate-role *(a
>>>>>>>>> controller resource) which always exists so it is wrong to return a 
>>>>>>>>> 404 at
>>>>>>>>> any case.
>>>>>>>>>
>>>>>>>> Yes agree with this and controller resource(as query params
>>>>>>>> optional controller resource will be resource) is not ideal for this.
>>>>>>>> Using head would be good option. Like nirmal mentioned any
>>>>>>>> additional parameters related to filter criteria can be passed as query
>>>>>>>> parameters.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> sanjeewa/
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks!
>>>>>>>>>
>>>>>>>>> On Thu, Aug 8, 2019 at 7:12 PM Menaka Jayawardena <men...@wso2.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hi Naduni,
>>>>>>>>>>
>>>>>>>>>> Wh the GET request always returns 200?
>>>>>>>>>> Can't we set the status code 404 if the role is not found? So we
>>>>>>>>>> can check the response status from the UI. We do not want to read 
>>>>>>>>>> the body
>>>>>>>>>> then.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Thu, Aug 8, 2019 at 6:05 PM Naduni Pamudika <nad...@wso2.com>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi All,
>>>>>>>>>>>
>>>>>>>>>>> Thanks all for the suggestions. With the GET method @Bhathiya
>>>>>>>>>>> Jayasekara <bhath...@wso2.com> suggested, we have the following
>>>>>>>>>>> 2 options now.
>>>>>>>>>>>
>>>>>>>>>>> 1. *HEAD /roles/{roleName}*
>>>>>>>>>>> 2. *GET /validate-role?role=rolename*
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> If we go with the option 1, it will simplify the work in the UI
>>>>>>>>>>> side while doing the role validations by using the Rest API since 
>>>>>>>>>>> we can do
>>>>>>>>>>> the validation by looking at the status code (If the role exists it 
>>>>>>>>>>> is a
>>>>>>>>>>> 200 and if not it is a 404). If we go with the option 2, it will 
>>>>>>>>>>> always
>>>>>>>>>>> return a 200 status code and we need to check the response body to 
>>>>>>>>>>> validate
>>>>>>>>>>> a particular role name (We can send *isRoleExist=true* and
>>>>>>>>>>> *isRoleExist=false* in the response body depending on the
>>>>>>>>>>> existence of a role name).
>>>>>>>>>>>
>>>>>>>>>>> Since most of us are +1 with the option 2, shall we move forward
>>>>>>>>>>> with the GET method?
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Naduni
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Aug 7, 2019 at 7:27 PM Bhathiya Jayasekara <
>>>>>>>>>>> bhath...@wso2.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Aug 7, 2019 at 6:24 PM Malintha Amarasinghe <
>>>>>>>>>>>> malint...@wso2.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Wed, Aug 7, 2019 at 3:39 PM Harsha Kumara <hars...@wso2.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Aug 7, 2019 at 3:37 PM Malintha Amarasinghe <
>>>>>>>>>>>>>> malint...@wso2.com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Wed, Aug 7, 2019 at 3:35 PM Harsha Kumara <
>>>>>>>>>>>>>>> hars...@wso2.com> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Let's say if someone wants to check existence of role foo
>>>>>>>>>>>>>>>> in user store TEST. He will do a call /roke/TEST/foo which 
>>>>>>>>>>>>>>>> isn't valid
>>>>>>>>>>>>>>>> request right?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> @Harsha Kumara <hars...@wso2.com>  we need to URL encode
>>>>>>>>>>>>>>> the role name. The request will become /roles/TEST%2Ffoo
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Yes that's true. Again some customers might have different
>>>>>>>>>>>>>> letters in their role names. Might note be a good idea to 
>>>>>>>>>>>>>> include as a path
>>>>>>>>>>>>>> parameter.
>>>>>>>>>>>>>>
>>>>>>>>>>>>> Even if we add as a query param, that will go as part of the
>>>>>>>>>>>>> URL which might lead to similar issues? We may need to test this 
>>>>>>>>>>>>> for query
>>>>>>>>>>>>> parameters as well.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I preferred the HEAD method due to the simpleness ( only need
>>>>>>>>>>>>> to respond with 204 or 404 without any payload based on the 
>>>>>>>>>>>>> availability of
>>>>>>>>>>>>> the role) and RESTfulness (consider a role as a resource and do a 
>>>>>>>>>>>>> fetch on
>>>>>>>>>>>>> it in the usual way). HEAD is the usual way for checking the 
>>>>>>>>>>>>> existence of a
>>>>>>>>>>>>> resource. However, we do not have the need for implementing a GET 
>>>>>>>>>>>>> here for
>>>>>>>>>>>>> now.
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> This is actually my worry is. I don't think we'll ever have to
>>>>>>>>>>>> give a /roles/{role} in the publisher APIs. So having a HEAD 
>>>>>>>>>>>> without a GET
>>>>>>>>>>>> feels strange to me. Maybe it's just me.
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Bhathiya
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Wed, Aug 7, 2019 at 3:33 PM Mushthaq Rumy <
>>>>>>>>>>>>>>>> musht...@wso2.com> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Adding [Architecture]
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Wed, Aug 7, 2019 at 3:30 PM Mushthaq Rumy <
>>>>>>>>>>>>>>>>> musht...@wso2.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Since we will be UserStoreManager, this should cover the
>>>>>>>>>>>>>>>>>> secondary user stores as well.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Thanks & Regards,
>>>>>>>>>>>>>>>>>> Mushthaq
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Wed, Aug 7, 2019 at 3:28 PM Harsha Kumara <
>>>>>>>>>>>>>>>>>> hars...@wso2.com> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> What happen if the role is from secondary user store?
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Wed, Aug 7, 2019 at 3:24 PM Naduni Pamudika <
>>>>>>>>>>>>>>>>>>> nad...@wso2.com> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Hi All,
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> We are planning to add a REST API endpoint to APIM 3.0
>>>>>>>>>>>>>>>>>>>> Publisher Rest APIs and the intention is to check the 
>>>>>>>>>>>>>>>>>>>> existence of a
>>>>>>>>>>>>>>>>>>>> particular role name. This will be used in order to manage 
>>>>>>>>>>>>>>>>>>>> roles when
>>>>>>>>>>>>>>>>>>>> enabling Publisher Access Control and Store Visibility and 
>>>>>>>>>>>>>>>>>>>> when adding
>>>>>>>>>>>>>>>>>>>> Scopes.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> The swagger definition for the new endpoint would be as
>>>>>>>>>>>>>>>>>>>> follows.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> ######################################################
>>>>>>>>>>>>>>>>>>>> # The Role Name Existence
>>>>>>>>>>>>>>>>>>>> ######################################################
>>>>>>>>>>>>>>>>>>>>   /roles/{roleName}:
>>>>>>>>>>>>>>>>>>>> #-----------------------------------------------------
>>>>>>>>>>>>>>>>>>>> # The role name existence check resource
>>>>>>>>>>>>>>>>>>>> #-----------------------------------------------------
>>>>>>>>>>>>>>>>>>>>     head:
>>>>>>>>>>>>>>>>>>>>       security:
>>>>>>>>>>>>>>>>>>>>         - OAuth2Security:
>>>>>>>>>>>>>>>>>>>>             - apim:api_view
>>>>>>>>>>>>>>>>>>>>       summary: |
>>>>>>>>>>>>>>>>>>>>         Check given role name is already exist
>>>>>>>>>>>>>>>>>>>>       description: |
>>>>>>>>>>>>>>>>>>>>             Using this operation, you can check a given
>>>>>>>>>>>>>>>>>>>> role name is already used. You need to provide the role 
>>>>>>>>>>>>>>>>>>>> name you want to
>>>>>>>>>>>>>>>>>>>> check.
>>>>>>>>>>>>>>>>>>>>       parameters:
>>>>>>>>>>>>>>>>>>>>         - $ref : '#/parameters/roleName'
>>>>>>>>>>>>>>>>>>>>       responses:
>>>>>>>>>>>>>>>>>>>>         200:
>>>>>>>>>>>>>>>>>>>>           description: |
>>>>>>>>>>>>>>>>>>>>             OK.
>>>>>>>>>>>>>>>>>>>>             Requested role name is returned.
>>>>>>>>>>>>>>>>>>>>         404:
>>>>>>>>>>>>>>>>>>>>           description: |
>>>>>>>>>>>>>>>>>>>>             Not Found.
>>>>>>>>>>>>>>>>>>>>             Requested role name does not exist.
>>>>>>>>>>>>>>>>>>>> ######################################################
>>>>>>>>>>>>>>>>>>>> # Role Name
>>>>>>>>>>>>>>>>>>>>   roleName:
>>>>>>>>>>>>>>>>>>>>     name: roleName
>>>>>>>>>>>>>>>>>>>>     in: path
>>>>>>>>>>>>>>>>>>>>     description: |
>>>>>>>>>>>>>>>>>>>>       The role name
>>>>>>>>>>>>>>>>>>>>     required: true
>>>>>>>>>>>>>>>>>>>>     type: string
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> It is a HEAD method (*/roles/{roleName}*) which will
>>>>>>>>>>>>>>>>>>>> return a 200 status code if the given role name exists and 
>>>>>>>>>>>>>>>>>>>> a 404 status
>>>>>>>>>>>>>>>>>>>> code if the give role name is not found. Sample requests 
>>>>>>>>>>>>>>>>>>>> and responses are
>>>>>>>>>>>>>>>>>>>> given below.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Request:
>>>>>>>>>>>>>>>>>>>> HEAD
>>>>>>>>>>>>>>>>>>>> https://localhost:9443/api/am/publisher/v1.0/roles/valid-role
>>>>>>>>>>>>>>>>>>>> HTTP/1.1
>>>>>>>>>>>>>>>>>>>> Authorization: Bearer
>>>>>>>>>>>>>>>>>>>> ae4eae22-3f65-387b-a171-d37eaa366fa8
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Response:
>>>>>>>>>>>>>>>>>>>> HTTP/1.1 200 OK
>>>>>>>>>>>>>>>>>>>> Connection: keep-alive
>>>>>>>>>>>>>>>>>>>> Content-Length: 0
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Request:
>>>>>>>>>>>>>>>>>>>> HEAD
>>>>>>>>>>>>>>>>>>>> https://localhost:9443/api/am/publisher/v1.0/roles/invalid-role
>>>>>>>>>>>>>>>>>>>> HTTP/1.1
>>>>>>>>>>>>>>>>>>>> Authorization: Bearer
>>>>>>>>>>>>>>>>>>>> ae4eae22-3f65-387b-a171-d37eaa366fa8
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Response:
>>>>>>>>>>>>>>>>>>>> HTTP/1.1 404 Not Found
>>>>>>>>>>>>>>>>>>>> Connection: keep-alive
>>>>>>>>>>>>>>>>>>>> Content-Length: 0
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Are we good to have the endpoint definition as this?
>>>>>>>>>>>>>>>>>>>> Appreciate your inputs to proceed further.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>> Naduni
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>> *Naduni Pamudika* | Senior Software Engineer | WSO2
>>>>>>>>>>>>>>>>>>>> Inc.
>>>>>>>>>>>>>>>>>>>> (m) +94 (71) 9143658 | (w) +94 (11) 2145345 | (e)
>>>>>>>>>>>>>>>>>>>> nad...@wso2.com
>>>>>>>>>>>>>>>>>>>> [image: http://wso2.com/signature]
>>>>>>>>>>>>>>>>>>>> <http://wso2.com/signature>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> *Harsha Kumara*
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Technical Lead, WSO2 Inc.
>>>>>>>>>>>>>>>>>>> Mobile: +94775505618
>>>>>>>>>>>>>>>>>>> Email: hars...@wso2.coim
>>>>>>>>>>>>>>>>>>> Blog: harshcreationz.blogspot.com
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> GET INTEGRATION AGILE
>>>>>>>>>>>>>>>>>>> Integration Agility for Digitally Driven Business
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>> Mushthaq Rumy
>>>>>>>>>>>>>>>>>> *Senior Software Engineer*
>>>>>>>>>>>>>>>>>> Mobile : +94 (0) 779 492140
>>>>>>>>>>>>>>>>>> Email : musht...@wso2.com
>>>>>>>>>>>>>>>>>> WSO2, Inc.; http://wso2.com/
>>>>>>>>>>>>>>>>>> lean . enterprise . middleware.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> <http://wso2.com/signature>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> Mushthaq Rumy
>>>>>>>>>>>>>>>>> *Senior Software Engineer*
>>>>>>>>>>>>>>>>> Mobile : +94 (0) 779 492140
>>>>>>>>>>>>>>>>> Email : musht...@wso2.com
>>>>>>>>>>>>>>>>> WSO2, Inc.; http://wso2.com/
>>>>>>>>>>>>>>>>> lean . enterprise . middleware.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <http://wso2.com/signature>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> *Harsha Kumara*
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Technical Lead, WSO2 Inc.
>>>>>>>>>>>>>>>> Mobile: +94775505618
>>>>>>>>>>>>>>>> Email: hars...@wso2.coim
>>>>>>>>>>>>>>>> Blog: harshcreationz.blogspot.com
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> GET INTEGRATION AGILE
>>>>>>>>>>>>>>>> Integration Agility for Digitally Driven Business
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> Malintha Amarasinghe
>>>>>>>>>>>>>>> *WSO2, Inc. - lean | enterprise | middleware*
>>>>>>>>>>>>>>> http://wso2.com/
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Mobile : +94 712383306
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *Harsha Kumara*
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Technical Lead, WSO2 Inc.
>>>>>>>>>>>>>> Mobile: +94775505618
>>>>>>>>>>>>>> Email: hars...@wso2.coim
>>>>>>>>>>>>>> Blog: harshcreationz.blogspot.com
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> GET INTEGRATION AGILE
>>>>>>>>>>>>>> Integration Agility for Digitally Driven Business
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Malintha Amarasinghe
>>>>>>>>>>>>> *WSO2, Inc. - lean | enterprise | middleware*
>>>>>>>>>>>>> http://wso2.com/
>>>>>>>>>>>>>
>>>>>>>>>>>>> Mobile : +94 712383306
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> *Bhathiya Jayasekara* | Technical Lead | WSO2 Inc.
>>>>>>>>>>>> (m) +94 71 547 8185  | (e) bhathiya-@t-wso2-d0t-com
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> *Naduni Pamudika* | Senior Software Engineer | WSO2 Inc.
>>>>>>>>>>> (m) +94 (71) 9143658 | (w) +94 (11) 2145345 | (e)
>>>>>>>>>>> nad...@wso2.com
>>>>>>>>>>> [image: http://wso2.com/signature] <http://wso2.com/signature>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>>
>>>>>>>>>> *Menaka Jayawardena*
>>>>>>>>>> Senior Software Engineer | WSO2 Inc.
>>>>>>>>>> +94 71 350 5470 | +94 76 717 2511 | men...@wso2.com
>>>>>>>>>>
>>>>>>>>>> <https://wso2.com/signature>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Malintha Amarasinghe
>>>>>>>>> *WSO2, Inc. - lean | enterprise | middleware*
>>>>>>>>> http://wso2.com/
>>>>>>>>>
>>>>>>>>> Mobile : +94 712383306
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> *Sanjeewa Malalgoda*
>>>>>>>> Software Architect | Associate Director, Engineering - WSO2 Inc.
>>>>>>>> (m) +94 712933253 | (e) sanje...@wso2.com | (b) Blogger
>>>>>>>> <http://sanjeewamalalgoda.blogspot.com>, Medium
>>>>>>>> <https://medium.com/@sanjeewa190>
>>>>>>>>
>>>>>>>> GET INTEGRATION AGILE <https://wso2.com/signature>
>>>>>>>> Integration Agility for Digitally Driven Business
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> *Naduni Pamudika* | Senior Software Engineer | WSO2 Inc.
>>>>>>> (m) +94 (71) 9143658 | (w) +94 (11) 2145345 | (e) nad...@wso2.com
>>>>>>> [image: http://wso2.com/signature] <http://wso2.com/signature>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> Vithursa Mahendrarajah
>>>>>> Software Engineer
>>>>>> WSO2 Inc. - http ://wso2.com
>>>>>> Mobile  : +947*66695643* <+94%2077%20819%201300>
>>>>>>
>>>>>>
>>>>>> * <http://wso2.com/signature> <http://wso2.com/signature>
>>>>>> <http://wso2.com/signature>*
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> *Harsha Kumara*
>>>>>
>>>>> Technical Lead, WSO2 Inc.
>>>>> Mobile: +94775505618
>>>>> Email: hars...@wso2.coim
>>>>> Blog: harshcreationz.blogspot.com
>>>>>
>>>>> GET INTEGRATION AGILE
>>>>> Integration Agility for Digitally Driven Business
>>>>>
>>>>
>>>>
>>>> --
>>>> Vithursa Mahendrarajah
>>>> Software Engineer
>>>> WSO2 Inc. - http ://wso2.com
>>>> Mobile  : +947*66695643* <+94%2077%20819%201300>
>>>>
>>>>
>>>> * <http://wso2.com/signature> <http://wso2.com/signature>
>>>> <http://wso2.com/signature>*
>>>>
>>>
>>>
>>> --
>>> Vithursa Mahendrarajah
>>> Software Engineer
>>> WSO2 Inc. - http ://wso2.com
>>> Mobile  : +947*66695643* <+94%2077%20819%201300>
>>>
>>>
>>> * <http://wso2.com/signature> <http://wso2.com/signature>
>>> <http://wso2.com/signature>*
>>>
>>
>
> --
> *Bhathiya Jayasekara* | Technical Lead | WSO2 Inc.
> (m) +94 71 547 8185  | (e) bhathiya-@t-wso2-d0t-com
>
>
>

-- 

*Harsha Kumara*

Technical Lead, WSO2 Inc.
Mobile: +94775505618
Email: hars...@wso2.coim
Blog: harshcreationz.blogspot.com

GET INTEGRATION AGILE
Integration Agility for Digitally Driven Business
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to