oltu-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Christian (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (OLTU-130) POST to resource server with authentication
Date Mon, 30 Dec 2013 14:02:50 GMT

     [ https://issues.apache.org/jira/browse/OLTU-130?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Christian updated OLTU-130:
---------------------------

    Description: 
There seems to be no feature to post a resource to the server with authentication. But that's
something almost every application needs. Below you'll find my current solution. 

I would provide a patch, but I find the client code very confusing (nested classes in OAuthClientRequest;
inconsistent naming of OAuthRequestBuilder and subclass OAuthBearerClientRequest; overengineered
OAuthParametersApplier and its subclasses).
 
Best regards,
Christian
  
{code:title=OAuthBearerClientPostRequest.java|borderStyle=solid}
package org.apache.oltu.oauth2.client.request;

import org.apache.oltu.oauth2.client.request.OAuthBearerClientRequest;
import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
import org.apache.oltu.oauth2.common.OAuth;
import org.apache.oltu.oauth2.common.exception.OAuthSystemException;

class OAuthBearerClientPostRequest extends OAuthBearerClientRequest {
    private String contentType;
    private String body;

    protected OAuthBearerClientPostRequest(String url) {
        super(url);
    }

    // Override to get the interface of this subclass.
    @Override
    public OAuthBearerClientPostRequest setAccessToken(String accessToken) {
        super.setAccessToken(accessToken);
        return this;
    }

    public OAuthBearerClientPostRequest setContentType(String contentType) {
        this.contentType = contentType;
        return this;
    }

    public OAuthBearerClientPostRequest setBody(String body) {
        this.body = body;
        return this;
    }

    public OAuthClientRequest buildHeaderMessage() throws OAuthSystemException {
        OAuthClientRequest request = super.buildHeaderMessage();
        request.setBody(this.body);
        request.setHeader(OAuth.HeaderType.CONTENT_TYPE, this.contentType);
        return request;
    }

    /**
     * Not supported. Use #buildHeaderMessage() instead.
     *
     * @throws UnsupportedOperationException always
     */
    public OAuthClientRequest buildQueryMessage() throws OAuthSystemException {
        throw new UnsupportedOperationException("Not supported. Use #buildHeaderMessage()
instead.");
    }

    /**
     * Not supported. Use #buildHeaderMessage() instead.
     *
     * @throws UnsupportedOperationException always
     */
    public OAuthClientRequest buildBodyMessage() throws OAuthSystemException {
        throw new UnsupportedOperationException("Not supported. Use #buildHeaderMessage()
instead.");
    }
}
{code}

  was:
There seems to be no feature to post a resource to the server with authentication. But that's
something almost every application needs. Please add it.
 
I'm trying to figure out a way and will share it with you, so that this feature gets build
in near future.

Right now, I'm overriding OAuthBearerClientRequest to allow setting a message body. But there
is still a problem with the content type, which is "application/x-www-form-urlencoded". I
haven't found a solution yet to set it.
 
Best regards,
Christian
 
---
 
class MyRequest extends OAuthBearerClientRequest {

    private Object body;
 
    protected MyRequest(String url) {
        super(url);
    }
 
    @Override
    public MyRequest setAccessToken(String accessToken) {
        super.setAccessToken(accessToken);
        return this;
    }
 
    public MyRequest setBody(Object body) {
        this.body = body;
        return this;
    }
 
    /**
     * Not supported. Use #buildHeaderMessage() instead.
     *
     * @throws UnsupportedOperationException always
     */
    public OAuthClientRequest buildQueryMessage() throws OAuthSystemException {
        throw new UnsupportedOperationException("Not supported. Use #buildHeaderMessage()
instead.");
    }
 
    /**
     * Not supported. Use #buildHeaderMessage() instead.
     *
     * @throws UnsupportedOperationException always
     */
    public OAuthClientRequest buildBodyMessage() throws OAuthSystemException {
        throw new UnsupportedOperationException("Not supported. Use #buildHeaderMessage()
instead.");
    }
 
    public OAuthClientRequest buildHeaderMessage() throws OAuthSystemException {
        OAuthClientRequest request = super.buildHeaderMessage();
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            request.setBody(objectMapper.writeValueAsString(body));
            return request;
        } catch (IOException e) {
            throw new OAuthSystemException("Cannot serialize body (" +
                    (body != null ? "class: " + body.getClass().getSimpleName() : "is null")
+ ").", e);
        }
    }
}



> POST to resource server with authentication
> -------------------------------------------
>
>                 Key: OLTU-130
>                 URL: https://issues.apache.org/jira/browse/OLTU-130
>             Project: Apache Oltu
>          Issue Type: New Feature
>          Components: oauth2-client
>    Affects Versions: 0.31
>            Reporter: Christian
>              Labels: features
>
> There seems to be no feature to post a resource to the server with authentication. But
that's something almost every application needs. Below you'll find my current solution. 
> I would provide a patch, but I find the client code very confusing (nested classes in
OAuthClientRequest; inconsistent naming of OAuthRequestBuilder and subclass OAuthBearerClientRequest;
overengineered OAuthParametersApplier and its subclasses).
>  
> Best regards,
> Christian
>   
> {code:title=OAuthBearerClientPostRequest.java|borderStyle=solid}
> package org.apache.oltu.oauth2.client.request;
> import org.apache.oltu.oauth2.client.request.OAuthBearerClientRequest;
> import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
> import org.apache.oltu.oauth2.common.OAuth;
> import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
> class OAuthBearerClientPostRequest extends OAuthBearerClientRequest {
>     private String contentType;
>     private String body;
>     protected OAuthBearerClientPostRequest(String url) {
>         super(url);
>     }
>     // Override to get the interface of this subclass.
>     @Override
>     public OAuthBearerClientPostRequest setAccessToken(String accessToken) {
>         super.setAccessToken(accessToken);
>         return this;
>     }
>     public OAuthBearerClientPostRequest setContentType(String contentType) {
>         this.contentType = contentType;
>         return this;
>     }
>     public OAuthBearerClientPostRequest setBody(String body) {
>         this.body = body;
>         return this;
>     }
>     public OAuthClientRequest buildHeaderMessage() throws OAuthSystemException {
>         OAuthClientRequest request = super.buildHeaderMessage();
>         request.setBody(this.body);
>         request.setHeader(OAuth.HeaderType.CONTENT_TYPE, this.contentType);
>         return request;
>     }
>     /**
>      * Not supported. Use #buildHeaderMessage() instead.
>      *
>      * @throws UnsupportedOperationException always
>      */
>     public OAuthClientRequest buildQueryMessage() throws OAuthSystemException {
>         throw new UnsupportedOperationException("Not supported. Use #buildHeaderMessage()
instead.");
>     }
>     /**
>      * Not supported. Use #buildHeaderMessage() instead.
>      *
>      * @throws UnsupportedOperationException always
>      */
>     public OAuthClientRequest buildBodyMessage() throws OAuthSystemException {
>         throw new UnsupportedOperationException("Not supported. Use #buildHeaderMessage()
instead.");
>     }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Mime
View raw message