// Path: src/main/java/org/dmfs/oauth2/client/http/decorators/BasicAuthHeaderDecoration.java
// public final class BasicAuthHeaderDecoration implements Decoration<Headers>
// {
//     // TODO: use a generic authorization header instead (once we have one)
//     private final HeaderType<String> AUTHORIZATION_HEADER_TYPE = new BasicSingletonHeaderType<String>("Authorization", new PlainStringHeaderConverter());
// 
//     private final String mUsername;
//     private final String mPassword;
// 
// 
//     public BasicAuthHeaderDecoration(String username, String password)
//     {
//         if (username == null)
//         {
//             throw new IllegalArgumentException("username must not be null");
//         }
//         if (password == null)
//         {
//             throw new IllegalArgumentException("password must not be null");
//         }
//         mUsername = username;
//         mPassword = password;
//     }
// 
// 
//     @Override
//     public Headers decorated(Headers original)
//     {
//         String authHeaderValue = "Basic " + Base64.encodeBytes(usernameAndPasswordBytes());
//         return new UpdatedHeaders(original, AUTHORIZATION_HEADER_TYPE.entity(authHeaderValue));
//     }
// 
// 
//     private byte[] usernameAndPasswordBytes()
//     {
//         try
//         {
//             return String.format("%s:%s", mUsername, mPassword).getBytes("UTF-8");
//         }
//         catch (UnsupportedEncodingException e)
//         {
//             throw new RuntimeException("Charset UTF-8 not supported by runtime!", e);
//         }
//     }
// }


import org.dmfs.httpessentials.client.HttpRequest;
import org.dmfs.httpessentials.decoration.HeaderDecorated;
import org.dmfs.oauth2.client.http.decorators.BasicAuthHeaderDecoration;
/*
 * Copyright 2016 dmfs GmbH
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.dmfs.oauth2.client;



/**
 * Basic implementation of {@link OAuth2ClientCredentials}.
 *
 * @author Marten Gajda
 */
public final class BasicOAuth2ClientCredentials implements OAuth2ClientCredentials
{
    private final String mClientId;
    private final String mClientSecret;


    public BasicOAuth2ClientCredentials(String clientId, String clientSecret)
    {
        mClientId = clientId;
        mClientSecret = clientSecret;
    }


    @Override
    public <T> HttpRequest<T> authenticatedRequest(HttpRequest<T> request)
    {
// Path: src/main/java/org/dmfs/oauth2/client/http/decorators/BasicAuthHeaderDecoration.java
// public final class BasicAuthHeaderDecoration implements Decoration<Headers>
// {
//     // TODO: use a generic authorization header instead (once we have one)
//     private final HeaderType<String> AUTHORIZATION_HEADER_TYPE = new BasicSingletonHeaderType<String>("Authorization", new PlainStringHeaderConverter());
// 
//     private final String mUsername;
//     private final String mPassword;
// 
// 
//     public BasicAuthHeaderDecoration(String username, String password)
//     {
//         if (username == null)
//         {
//             throw new IllegalArgumentException("username must not be null");
//         }
//         if (password == null)
//         {
//             throw new IllegalArgumentException("password must not be null");
//         }
//         mUsername = username;
//         mPassword = password;
//     }
// 
// 
//     @Override
//     public Headers decorated(Headers original)
//     {
//         String authHeaderValue = "Basic " + Base64.encodeBytes(usernameAndPasswordBytes());
//         return new UpdatedHeaders(original, AUTHORIZATION_HEADER_TYPE.entity(authHeaderValue));
//     }
// 
// 
//     private byte[] usernameAndPasswordBytes()
//     {
//         try
//         {
//             return String.format("%s:%s", mUsername, mPassword).getBytes("UTF-8");
//         }
//         catch (UnsupportedEncodingException e)
//         {
//             throw new RuntimeException("Charset UTF-8 not supported by runtime!", e);
//         }
//     }
// }


// Path: src/main/java/org/dmfs/oauth2/client/BasicOAuth2ClientCredentials.java
import org.dmfs.httpessentials.client.HttpRequest;
import org.dmfs.httpessentials.decoration.HeaderDecorated;
import org.dmfs.oauth2.client.http.decorators.BasicAuthHeaderDecoration;

/*
 * Copyright 2016 dmfs GmbH
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.dmfs.oauth2.client;



/**
 * Basic implementation of {@link OAuth2ClientCredentials}.
 *
 * @author Marten Gajda
 */
public final class BasicOAuth2ClientCredentials implements OAuth2ClientCredentials
{
    private final String mClientId;
    private final String mClientSecret;


    public BasicOAuth2ClientCredentials(String clientId, String clientSecret)
    {
        mClientId = clientId;
        mClientSecret = clientSecret;
    }


    @Override
    public <T> HttpRequest<T> authenticatedRequest(HttpRequest<T> request)
    {
        return new HeaderDecorated<>(request, new BasicAuthHeaderDecoration(mClientId, mClientSecret));