From 2e02da046d3e56cdf4744f644af35ad07424f48b Mon Sep 17 00:00:00 2001 From: Slávek Banko Date: Mon, 3 Mar 2014 13:46:44 +0100 Subject: Update to upstream version 1.3.6 --- src/fetch/amazonrequest.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/fetch/amazonrequest.cpp (limited to 'src/fetch/amazonrequest.cpp') diff --git a/src/fetch/amazonrequest.cpp b/src/fetch/amazonrequest.cpp new file mode 100644 index 0000000..bb8d729 --- /dev/null +++ b/src/fetch/amazonrequest.cpp @@ -0,0 +1,72 @@ +/*************************************************************************** + Copyright (C) 2007-2009 Robby Stephenson + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License as * + * published by the Free Software Foundation; either version 2 of * + * the License or (at your option) version 3 or any later version * + * accepted by the membership of KDE e.V. (or its successor approved * + * by the membership of KDE e.V.), which shall act as a proxy * + * defined in Section 14 of version 3 of the license. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + ***************************************************************************/ + +#include "amazonrequest.h" +#include "hmac_sha2.h" +#include "../tellico_debug.h" + +#include + +#include + +using Tellico::Fetch::AmazonRequest; + +AmazonRequest::AmazonRequest(const KURL& site_, const TQString& key_) : m_siteUrl(site_), m_key(key_) { +} + +KURL AmazonRequest::signedRequest(const TQMap& params_) const { + TQMap allParams = params_; + allParams.insert(TQString::fromLatin1("Timestamp"), + TQDateTime::currentDateTime(TQt::UTC).toString(TQt::ISODate)); + + TQString query; + // has to be a map so that the query elements are sorted + TQMap::Iterator it; + for ( it = allParams.begin(); it != allParams.end(); ++it ) { + query += KURL::encode_string(it.key()); + query += '='; + query += KURL::encode_string(it.data()); + query += '&'; + } + // remove last '&' + query.truncate(query.length()-1); + + const TQCString toSign = "GET\n" + + m_siteUrl.host().utf8() + '\n' + + m_siteUrl.path().utf8() + '\n' + + query.latin1(); + + TQByteArray hmac_buffer; + hmac_buffer.fill('\0', SHA256_DIGEST_SIZE); + // subtract one from string size for toSign, not exactly sure why + hmac_sha256(reinterpret_cast(const_cast(m_key.latin1())), m_key.length(), + reinterpret_cast(toSign.data()), toSign.size()-1, + reinterpret_cast(hmac_buffer.data()), hmac_buffer.size()); + const TQString sig = KURL::encode_string(KCodecs::base64Encode(hmac_buffer)); +// myDebug() << sig << endl; + + KURL url = m_siteUrl; + url.setQuery(query + "&Signature=" + sig); + return url; +} -- cgit v1.2.3