/** * Copyright (c) 2010-2016 by the respective copyright holders. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.openhab.binding.ecobee.messages; import static org.openhab.io.net.http.HttpUtil.executeUrl; import org.apache.commons.httpclient.util.URIUtil; import org.apache.commons.lang.builder.ToStringBuilder; import org.openhab.binding.ecobee.internal.EcobeeException; /** * The ecobee PIN authorization method is designed to support any 3rd party device, be it a mobile phone, tablet, * desktop widget or remote server. This authorization method allows a 3rd party application to obtain an authorization * code and a 4 byte alphabetic string which can be displayed to the user. The user then logs into the ecobee Portal and * registers the application using the PIN provided. Once this step is completed, the 3rd party application is able to * request the access and refresh tokens. * * @see AuthorizeResponse * @see <a href="https://www.ecobee.com/home/developer/api/documentation/v1/auth/pin-api-authorization.shtml">PIN * Authorization Strategy</a> * @author John Cocula * @since 1.7.0 */ public class AuthorizeRequest extends AbstractRequest { private static final String RESOURCE_URL = API_BASE_URL + "authorize"; private String appKey; private String scope; /** * Construct an authorization request. * * @param appKey * the application key for your application (this binding) * @param scope * the scope the application requests from the user */ public AuthorizeRequest(final String appKey, final String scope) { assert appKey != null : "appKey must not be null!"; assert scope != null : "scope must not be null!"; this.appKey = appKey; this.scope = scope; } @Override public AuthorizeResponse execute() { final String url = buildQueryString(); String json = null; try { json = executeQuery(url); final AuthorizeResponse response = JSON.readValue(json, AuthorizeResponse.class); return response; } catch (final Exception e) { throw newException("Could not get authorization.", e, url, json); } } @Override public String toString() { final ToStringBuilder builder = createToStringBuilder(); builder.appendSuper(super.toString()); builder.append("appKey", this.appKey); builder.append("scope", this.scope); return builder.toString(); } protected String executeQuery(final String url) { return executeUrl(HTTP_GET, url, HTTP_HEADERS, null, null, HTTP_REQUEST_TIMEOUT); } private String buildQueryString() { final StringBuilder urlBuilder = new StringBuilder(RESOURCE_URL); try { urlBuilder.append("?response_type=ecobeePin"); urlBuilder.append("&client_id="); urlBuilder.append(appKey); urlBuilder.append("&scope="); urlBuilder.append(scope); return URIUtil.encodeQuery(urlBuilder.toString()); } catch (final Exception e) { throw new EcobeeException(e); } } }