Update copyright informations.
[lastgo:lastgo.git] / LastGo / utils.cpp
1 /*
2  * utils.cpp -- Methods usefull to other classes
3  *
4  * Copyright (C) 2010 Andrea Grandi
5  * Authors: Andrea Grandi <a.grandi@gmail.com>
6  *
7  * This file is part of LastGo and is published under the GNU GPLv2
8  * See the README file for more details.
9  */
10
11 #include "utils.h"
12
13 Utils::Utils(QObject *parent) :
14     QObject(parent)
15 {
16 }
17
18 /* Generates the md5 hash of a string. */
19
20 QString Utils::md5Signature(const QString value)
21 {
22     QByteArray hash = QCryptographicHash::hash(value.toUtf8(), QCryptographicHash::Md5);
23     QString signature(hash.toHex());
24     return signature;
25 }
26
27 /* Takes all parameters (keys and values) that are ordered alphabetically (due to a QMap feature)
28    and concatenate them all together. At the end it appends the secret string. */
29
30 QString Utils::buildSignature(const QMap<QString, QString> params, const QString secret)
31 {
32     QString signature = "";
33     QMapIterator<QString, QString> i(params);
34
35     while (i.hasNext())
36     {
37          i.next();
38          signature.append(i.key());
39          signature.append(i.value());
40     }
41
42     signature.append(secret);
43     return this->md5Signature(signature);
44 }
45
46 /* Generates an authentication token for mobile authentication.
47    The following formula is used: md5(username + md5(password)) */
48
49 QString Utils::getAuthToken(const QString username, const QString password)
50 {
51     QString md5pass = this->md5Signature(password);
52     QString usermd5pass = username + md5pass;
53     return this->md5Signature(usermd5pass);
54 }
55
56 /* Generates an URL for the current API request */
57
58 QString Utils::buildApiUrl(const QString baseurl, const QMap<QString, QString> params)
59 {
60     QString url = "";
61
62     url.append(baseurl);
63     url.append("?");
64     url.append("method=" + params["method"]);
65
66     QMapIterator<QString, QString> i(params);
67
68     while (i.hasNext())
69     {
70          i.next();
71
72          if(i.key() != "method")
73             url.append("&" + i.key() + "=" + i.value().toUtf8());
74     }
75
76     return url;
77 }
78
79 /* Create a QByteArray containing all parameters needed for a HTTP POST request */
80
81 QByteArray Utils::buildPostParameters(const QMap<QString, QString> params)
82 {
83     QByteArray post_params;
84     QMapIterator<QString, QString> i(params);
85
86     while (i.hasNext())
87     {
88          i.next();
89
90          if(post_params.length() > 0)
91             post_params.append("&" + i.key() + "=" + i.value().toUtf8());
92          else
93             post_params.append(i.key() + "=" + i.value().toUtf8());
94     }
95
96     return post_params;
97 }