Bringing easy OAuth to Qt
June 24th, 2009
Lastly I spent some time looking for a decent OAuth support for C++. I found that the only available libary (which is actually a pure C code), surely does what I expect, but provides pretty complicated API making it inconvenient to use. And I’m kind of a lazy guy (oh who’s not :-) ) and I’m getting scared with just thinking of writing tens of lines of code to complete just a single OAuth request. Plus, instead of endlessly converting from QString and QByteArray to char* I’d prefer to have some friendly, Qt-compatible way to deal with the whole OAuth thing. That’s how the idea of QOAuth came up.
What is QOAuth?
QOAuth is an attempt to support interaction with OAuth-powered network services in a Qt way, i.e. simply, clearly and efficiently. It gives the application developer no more than 4 methods, namely:requestToken()– to obtain an unauthorized Request Token,accessToken()– to exchange Request Token for the Access Token,createParametersString()– to construct a request according to OAuth authorization scheme.inlineParameters()– provided for convenience, to create a query string from given parameters.
First two methods serve application authorization purposes, whilst the other two are used for accessing Protected Resources (all funny names by OAuth Core 1.0 Specification – but don’t go there if you’re not familiar with OAuth, you better start here).
QOAuth internally makes use of QCA (Qt Cryptographic Architecture), thus depends on it. It’s also known to send and process network requests, so apart from QtCore it will need QtNetwork module to work.
OAuth authorization with QOAuth
As I mentioned, the point in QOAuth is to be user-friendly, yet powerful. See the code example of obtaining a Request Token form the Service Provider:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | QByteArray token; QByteArray tokenSecret; QOAuth qoauth = new QOAuth; // set the consumer key and secret qoauth->setConsumerKey( "75b3d557c9268c49cfdf041a" ); qoauth->setConsumerSecret( "fd12803fbf0760d34cd2ceb9955199ce" ); // set a timeout for requests (in msecs) qoauth->setRequestTimeout( 10000 ); // send a request for an unauthorized token QOAuth::ParamMap reply = qoauth->requestToken( "http://example.com/request_token", QOAuth::GET, QOAuth::HMAC_SHA1 ); // if no error occurred, read the received token and token secret if ( qoauth->error() == QOAuth::NoError ) { token = reply.value( QOAuth::ParamToken ); tokenSecret = reply.value( QOAuth::ParamTokenSecret ); } |
The QOAuth::ParamMap is a typedef for QMultiMap<QByteArray,QByteArray>. Everything else should be clear. Similarly, one can request the Access Token (after the previous authorization of the Request Token by User):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // if necessary, create a map of additional arguments required by the Service Provider QOAuth::ParamMap otherArgs; otherArgs.insert( "misc_arg1", "value1" ); otherArgs.insert( "misc_arg2", "value2" ); // send a request to exchange Request Token for an Access Token QOAuth::ParamMap reply = qoauth->accessToken( "http://example.com/access_token", QOAuth::POST, token, tokenSecret, QOAuth::HMAC_SHA1, otherArgs ); // if no error occurred, read the Access Token (and other arguments, if applicable) if ( qoauth->error() == QOAuth::NoError ) { token = reply.value( QOAuth::ParamToken ); tokenSecret = reply.value( QOAuth::ParamTokenSecret ); otherInfo = reply.value( "misc_arg3" ); } |
This step ends the OAuth authorization procedure, providing User’s authorized Access Token to be used when requesting further data from server.
Creating OAuth requests
Once authorized, the client application is allowed to access User’s data, each time authenticating itself with User’s Access Token. However, each and every request still has to be signed and encrypted according to OAuth rules. The third method provided by QOAuth library does all the dirty work of signing and encrypting the so called Signature Base String. All you need to do is provide the request parameters. Let’s say that you ask for an image named flower_48.png, of the small size:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | QByteArray url( "http://example.com/get_photo"); // create a request parameters map QOAuth::ParamMap map; map.insert( "file", "flower_48.jpg" ); map.insert( "size", "small" ); // construct the parameters string QByteArray content = qoauth->createParametersString( requestUrl, QOAuth::GET, QOAuth::HMAC_SHA1, token, tokenSecret, map, QOAuth::ParseForInlineQuery ); // append parameters string to the URL url.append( content ); QNetworkRequest request( QUrl( url ) ); // etc... |
Just send this request, and receive the photo. Doesn’t seem too complicated, does it? If you like it, you may be interested in much more detailed documentation. Note that this is very preliminary version of the library, and so far it supports only HMAC-SHA1 encryption and may have some problems with GET requests containing percent-encoded data. But it copes well with POST requests, even those with non-ASCII data. After all, it’s mainly POST that is used for transferring wierd data :) Anyway, the work has started just a few days ago, and there’s still a looooot to do.
Where I can get it?
QOAuth’s code is hosted at GitHub. After qmake, make and make install, all you have to do to get QOAuth working, is to append one line to your project file:
CONFIG += oauth |
and then include this header in your source:
#include <QtOAuth>
|
Some binaries will be available soon from qt-apps.org. All the bugs and issues can be reported at QOAuth’s Lighthouseapp bug tracking system.

June 24th, 2009 at 06:25 PM
This is great lib and will be extremely useful! Can you sign me on to the mailing list so I will get the update notifications?
June 24th, 2009 at 08:10 PM
Thanks for the feedback, actually there’s no mailing list yet (and I don’t have your e-mail :) ), but you can track this blog, I’ll be posting updates here.
June 24th, 2009 at 11:24 PM
Isn’t it the part of “leave a reply” submit? I will keep coming back to watch for update.
Thanks.
June 24th, 2009 at 11:43 PM
It’s not published anywhere, and I don’t have direct access to it. Oh, maybe by hacking blog’s database :P
September 28th, 2009 at 08:39 AM
Have been looking for it for a while, when will it come in official Qt release.? Thanks.
September 28th, 2009 at 09:25 PM
Well, most probably it never will :) It depends on QCA which also isn’t rather going to be a part of Qt. But no fear, I’m going to maintain and develop it if only there are people using it. It’s probable that QOAuth will join Debian distro soon, and it’s already available in Gentoo.
Thanks for the feedback :)
December 23rd, 2009 at 09:04 AM
good work,I am busy with doing My graduate design ,this’s very useful for My demo.Thanks
April 24th, 2010 at 05:52 PM
hi, ayoy!
but how can i do it work in windows(vista), please help, ths!
“After qmake, make and make install, all you have to do to get QOAuth working”
May 7th, 2010 at 02:54 PM
So,would you mind providing binary files for windows? I’m kinda stuck with building it from scratch.
May 9th, 2010 at 11:32 AM
I finally make it work under windows.
And I found that the function requestToken() is not so good.Instead of making a local eventloop,you should return a QNetworkReply*,so that we can connect the reply’s signal to a slot.Then the app’s main thread won’t be blocked when calling this function.
February 7th, 2011 at 12:56 PM
Well, most probably it never will :) It depends on QCA which also isn’t rather going to be a part of Qt. But no fear, I’m going to maintain and develop it if only there are people using it. It’s probable that QOAuth will join Debian distro soon, and it’s already available in Gentoo.
February 24th, 2011 at 11:53 AM
And I found that the function requestToken() is not so good.Instead of making a local eventloop,you should return a QNetworkReply*,so that we can connect the reply’s signal to a slot.Then the app’s main thread won’t be blocked when calling this function.
March 21st, 2011 at 01:51 PM
I certainly enjoyed the way you explore your experience and knowledge of the subject!
May 13th, 2011 at 05:10 AM
Such clever work and reporting! Keep up the great works guys I’ve added you guys to my blog roll. This is a great article thanks for sharing this informative information. I will visit your blog regularly for some latest post.
May 13th, 2011 at 05:14 AM
Clear writing skill which also showing the research you have done on the topics. I am impressed with the discussion also passed a good time here. I am definitely bookmarking this site for better purpose and use.
May 27th, 2011 at 11:50 PM
This is an easy way to retrieve user authorization to protected resources with a built in HTTP server. thanks for clarifying it.
June 12th, 2011 at 10:22 AM
Could you tell me what this course involves and what experience do the trainers have in this field. Thanks.
July 10th, 2011 at 04:42 PM
It is very useful site. i know everyone like this site.
Scottsdale Custom Home Builders High End Home Builders
July 10th, 2011 at 08:13 PM
This is very important site. It is very useful for me. Fantastic article! I throughly enjoyed your content …very effectively written.
Scottsdale Custom Home Builders High End Home Builders
July 15th, 2011 at 08:33 PM
tell me what this course involves and what experience do the trainers have in this field. Thanks.
July 19th, 2011 at 07:39 PM
As I mentioned, the point in QOAuth is to be user-friendly, yet powerful. See the code example of obtaining a Request Token form the Service Provider.
July 19th, 2011 at 10:11 PM
Remarkable post and will look forward to your future update. The post is written in very a good manner and it contains much useful information for me. It is pleasing to look you express from the heart and your clarity on this significant content can be easily looked.
July 21st, 2011 at 11:40 PM
This was very helpful to me! Thank you very much. Keep the posts coming! klimat thailand lången tips filippinerna
July 23rd, 2011 at 12:59 PM
I can’t believe how little support there is for OAuth in Twitter C++ libraries. This is exactly what I was looking for
July 25th, 2011 at 03:46 AM
Your posts are fairly informational and wordy of attention. But your blog needs little bit of updating. Maybe you should use a smaller mug shot as well.
July 25th, 2011 at 07:34 PM
I have been surfing on-line more than three hours as of late, yet I never found any fascinating article like yours I’ve desired to write something similar to this on my webpage and this has given me a concept. Cheers.
July 27th, 2011 at 08:05 AM
Nevertheless imagine if you added some great graphics or videos to give your posts more, “pop”! Your content is excellent but with images and video clips, this site could definitely be one of the greatest in its field. Amazing blog!
July 27th, 2011 at 03:20 PM
i got this blog from my friend name joey and he also like this blog and he also searching for blog which is interesting to read..but for now im gonna call my friend and ask about for this..thanks
July 29th, 2011 at 08:31 AM
I was also searching related stuff from long time.You have solved my problem.Thanks for sharing this great stuff with us.
July 30th, 2011 at 04:44 PM
Thank you for posting the great content…I was looking for something like this…I found it quiet interesting, hopefully you will keep posting such blogs….Keep sharing. Transaginal Mesh Lawsuits
July 30th, 2011 at 08:07 PM
By the amount of information in here, I can tell it took a lot of time to write. what do i say about this is?thanks for the blog post.its nice to know about your interesting topic and this is everything for me keep it up.
August 1st, 2011 at 03:49 PM
Hey there! A comment here, I just wanted to give a quick shout out and tell you I really enjoy reading your blog posts. Can you suggest any other blogs/websites/forums that deal with the same subjects? Thanks!
August 2nd, 2011 at 08:53 PM
t it copes well with POST requests, even those with non-ASCII data. After all, it’s mainly POST that is used for transferring wierd data :)
August 4th, 2011 at 06:09 AM
That’s how the idea of QOAuth came up.
August 4th, 2011 at 08:14 AM
Your content is excellent but with images and video clips, this site could definitely be one of the greatest in its field.
August 6th, 2011 at 11:45 AM
There is a place for future improvements, but I’m terrible lack of free time (or time I can devote to the development QOAuth), so I can not promise anything. If anyone can help me with QOAuth, I would be happy to share the work.
August 7th, 2011 at 11:06 AM
I’d prefer to have some friendly, Qt-compatible way to deal with the whole OAuth thing. That’s how the idea of QOAuth came up.
August 7th, 2011 at 03:18 PM
The post is written in very a good manner and it contains much useful information for me.
August 7th, 2011 at 07:38 PM
This step ends the OAuth authorization procedure, providing User’s authorized Access Token to be used when requesting further data from server.
August 8th, 2011 at 01:40 AM
t it copes well with POST requests, even those with non-ASCII data. After all, it’s mainly POST that is used for transferring wierd data.
August 9th, 2011 at 09:09 PM
I can tell you that it is the most emotional experience I have had in all my years as a writer. I am so excited to hear what you think.
August 10th, 2011 at 01:36 PM
Terrific job ! Your blog has supplied me the majority of the information I requested . Memphis Locksmiths
August 11th, 2011 at 09:19 AM
After all, it’s mainly POST that is used for transferring wierd data :) Anyway, the work has started just a few days ago, and there’s still a looooot to do.
August 11th, 2011 at 11:44 PM
this was truely a wonderful read. wish more blog were more like this blog. great work. i will follow now.
August 13th, 2011 at 09:00 AM
It is pleasing to look you express from the heart and your clarity on this significant content can be easily looked.
August 14th, 2011 at 06:59 PM
It’s probable that QOAuth will join Debian distro soon, and it’s already available in Gentoo.I’m going to maintain and develop it if only there are people using it.
August 16th, 2011 at 08:13 PM
Great post! Very helpful. Its about time someone wrote about this stuff online. Cheerswhite beach
August 18th, 2011 at 02:56 AM
Neat info. You don’t know how much time you saved me. For the last few weeks I’ve been scouring site after site. I’ve gotten alot of different ideas so it’s a litte hard to filter the worthy from the bad. In any case Have you thougt about putting this info together in an ebook form or something similiar? I’ll bookmark you site and look forward to your reply 18 wheeler accident attorney
August 18th, 2011 at 05:02 AM
Oh my goodness! an incredible article dude. Thanks Nonetheless I’m experiencing subject with ur rss . Don’t know why Unable to subscribe to it. Is there anybody getting similar rss downside? Anybody who is aware of kindly respond. Thnkx
August 21st, 2011 at 11:43 AM
If anyone can help me with QOAuth, I would be happy to share the work.
August 22nd, 2011 at 05:52 AM
Hi there,Really nice job,There are many people searching about that now they will find enough sources by your tips,Also looking forward for more tips about that
August 26th, 2011 at 09:43 AM
about this topic, I have been lately in your blog once or twice now. I just wanted to say hi and show my thanks for the information provided.
August 27th, 2011 at 11:11 AM
so apart from QtCore it will need QtNetwork module to work. process network requests,
August 29th, 2011 at 12:27 PM
I’ve got this page bookmarked now, you have served as a great present and future reference for me, thanks a lot guys…
August 29th, 2011 at 12:29 PM
I’ve got this page bookmarked now, you have served as a great present and future reference for me, thanks a lot guys…
August 30th, 2011 at 01:22 AM
it is the best time to make some plans for the future and it is time to be happy. I have read this post and if I could I wish to suggest you some interesting things or suggestions. Perhaps you can write next articles referring to this article. I wish to read even more things about it!
September 5th, 2011 at 10:43 AM
even i am a lazy guy like you. I wonder if there is anything more you can do in this oauth scenario..
September 7th, 2011 at 02:28 PM
The quality is simply wonderful and no doubt you are expert in this area. I would always check out your new entry. Thank you very much and please keep up the good work.
September 7th, 2011 at 03:50 PM
That is a wonderful idea, I am very happy to read this post, and I agree with the opinions of this publication. I think this is the best impression. I am going to do something after reading it.
transvaginal mesh lawsuit
September 7th, 2011 at 08:07 PM
I have been learning C for some time now and this is really interesting. Thank you for sharing.
September 9th, 2011 at 03:56 PM
This is a good post about qauth. I hope that you will keep on posting stuff like this. Keep up the good work. Thx.
September 9th, 2011 at 04:54 PM
When I started reading this post I learn to navigate things that I really don’t read for a long time. Like this article it really an interesting one.cell phone text message monitoring
September 10th, 2011 at 11:37 AM
I definitely wanted to send a small remark to thank you for these fabulous hints you are posting at this website. My time intensive internet investigation has at the end of the day been recognized with incredibly good insight to exchange with my great friends
September 10th, 2011 at 05:04 PM
Your site is good Actually, i have seen your post and That was very informative and very entertaining for me. Thanks for posting Really Such Things. I should recommend your site to my friends.ipad 3
September 12th, 2011 at 03:28 PM
I wanted to drop you a quick note to express my thanks as I have enjoyed the way you’ve structured your site which is very nice one and gives in depth information. I think it will be helpful for me as well
September 13th, 2011 at 02:29 AM
This is undeniably one of the most fascinating blogs I have seen. It’s so painless to tune out, but there’s really some first class material online, and I believe your place is one of the few!
September 16th, 2011 at 08:37 AM
Can I just say how nice it is to find someone who actually knows what they’re speaking about on the web. More people need to read this post and understand this. I’m amazed that this site is not more popualar.
September 20th, 2011 at 05:50 AM
I’m not much of that specialized to web pages however I know what’s professional to view the minute I saw one. I possibly could consider the information of your page as an newsy as well as effective resource for information and facts.
September 21st, 2011 at 07:43 AM
It is my great pleasure to look at your site and to enjoy your great posts here. I like it very much. I know that you put much attention for these articles, as all of them make sense and are very useful !
September 21st, 2011 at 09:03 AM
I figured about starting my very own blog too but I’m just too lazy so, I guess I will just have to maintain checking yours out.
September 21st, 2011 at 09:12 AM
I do not real have a large deal to say in retort I just wanted to comment to tell well done. marvelous post. i never thought of that.
September 22nd, 2011 at 06:45 PM
This is great information. Didn’t find any other source other then your site and github with this information. Thanks for sharing. This is going to be great for my optimization. Btw, anyone here used kQOAuth, any thoughts on that? Thanks.
September 23rd, 2011 at 03:03 PM
Your online website came up in my analysis and I’m prompted by what you may have composed on this theme. I’m currently branching out my enquiry and thus can not contribute further, however, I’ve bookmarked your site and shall be returning to maintain up with any future updates. Just enjoy it and thanks for permitting my remark.
September 25th, 2011 at 01:52 PM
I found your website perfect for my needs. It contains wonderful and helpful posts. I have read most of them and got a lot from them. To me, you are doing the greReally i am impressed from this post.
September 28th, 2011 at 05:45 PM
Thanks for such a great QOAuth tutorial here. I was searching for something like that for quite a long time and at last I have found it here.
October 3rd, 2011 at 04:35 PM
This is really stunning work.I have read your article and to me it is awesome.Thanks for this sort of work down here.Hope to see some update here.
October 23rd, 2011 at 08:58 PM
Excellent post. I want to thank you for this informative read, I really appreciate sharing this great post. Keep up your work. Thanks for this very useful info you have provided us.
October 24th, 2011 at 10:01 AM
You must be aware that you really have an awesome site. Does exactly what it sets out to do. Stimulating me to read much more of your post. Hope to see a lot more excellent posts from you shortly. Keep it up buddy.
October 25th, 2011 at 07:26 AM
Nell’ umana ricerca di qualcuno da ammirare, di solito non è necessario percorrere grandi distanze, nè nel tempo, nè nello spazio
October 25th, 2011 at 08:25 AM
I found the quality contents here.
October 28th, 2011 at 04:21 AM
Excellent post. I want to thank you for this informative read, I really appreciate sharing this great post. Keep up your work. Thanks for this very useful info you have provided us.
October 28th, 2011 at 04:29 AM
I want to thank you for this informative read, I really appreciate sharing this great post. Keep up your work.
October 28th, 2011 at 04:30 AM
Thanks for this very useful info you have provided us.
October 28th, 2011 at 04:30 AM
Nell’ umana ricerca di qualcuno da ammirare, di solito non è necessario percorrere grandi distanze, nè nel tempo, nè nello spazio
October 28th, 2011 at 04:30 AM
You must be aware that you really have an awesome site. Does exactly what it sets out to do. Stimulating me to read much more of your post. Hope to see a lot more excellent posts from you shortly. Keep it up buddy.
October 28th, 2011 at 04:31 AM
I’m currently branching out my enquiry and thus can not contribute further, however, I’ve bookmarked your site and shall be returning to maintain up with any future updates. Just enjoy it and thanks for permitting my remark.
October 28th, 2011 at 04:31 AM
Your online website came up in my analysis and I’m prompted by what you may have composed on this theme. I’m currently branching out my enquiry and thus can not contribute further, however, I’ve bookmarked your site and shall be returning to maintain up with any future updates. Just enjoy it and thanks for permitting my remark.
October 28th, 2011 at 04:31 AM
I wanted to drop you a quick note to express my thanks as I have enjoyed the way you’ve structured your site which is very nice one and gives in depth information. I think it will be helpful for me as well
October 28th, 2011 at 04:32 AM
This is undeniably one of the most fascinating blogs I have seen. It’s so painless to tune out, but there’s really some first class material online, and I believe your place is one of the few!
October 28th, 2011 at 04:32 AM
Can I just say how nice it is to find someone who actually knows what they’re speaking about on the web. More people need to read this post and understand this. I’m amazed that this site is not more popualar.
October 28th, 2011 at 04:32 AM
I’m currently branching out my enquiry and thus can not contribute further, however, I’ve bookmarked your site and shall be returning to maintain up with any future updates. Just enjoy it and thanks for permitting my remark.
October 28th, 2011 at 04:33 AM
Does exactly what it sets out to do. Stimulating me to read much more of your post. Hope to see a lot more excellent posts from you shortly. Keep it up buddy.
October 28th, 2011 at 04:33 AM
I’m currently branching out my enquiry and thus can not contribute further, however, I’ve bookmarked your site and shall be returning to maintain up with any future updates. Just enjoy it and thanks for permitting my remark.
October 28th, 2011 at 04:33 AM
I found your website perfect for my needs. It contains wonderful and helpful posts. I have read most of them and got a lot from them. To me, you are doing the greReally i am impressed from this post.
October 28th, 2011 at 04:34 AM
Nell’ umana ricerca di qualcuno da ammirare, di solito non è necessario percorrere grandi distanze, nè nel tempo, nè nello spazio
October 28th, 2011 at 04:37 AM
I’m currently branching out my enquiry and thus can not contribute further
November 1st, 2011 at 08:37 AM
Die Namensgebung ist aber nicht ohne Fallstricke. Ein paar der Probleme, auf die ihr acht geben solltet sind:
November 2nd, 2011 at 08:23 AM
You are so talented in writing. God is really using you in tremendous methods. You are doing a great job! This was a wonderful article.Thank you
November 7th, 2011 at 04:52 PM
The most people wrote about this subject with the eloquence that you just did, I’m sure people would do much more than just read, they act. Great stuff here. Please keep it up..
November 9th, 2011 at 04:00 AM
Die Namensgebung ist aber nicht ohne Fallstricke. Ein paar der Probleme, auf die ihr acht geben solltet sind: s
November 13th, 2011 at 02:49 PM
you’re not familiar with OAuth, you better start here).
November 18th, 2011 at 01:52 PM
to empower you with more knowledge on tweaking the most out of your Mac.
November 18th, 2011 at 02:49 PM
I enjoy some of content in the post.. please keep it up..thanks
November 23rd, 2011 at 11:48 AM
a lot of useful information that could come handy in our future. immediately after I put the server up. nice thanks
November 25th, 2011 at 09:13 PM
I was in real need of such a site.I am greatly helped by this site as I always get inspirational and instructional post here.Thanks for taking the time to converse all of this.Go along such way.
November 28th, 2011 at 12:48 PM
I found this blog great, All the information given in this blog are very informative and appealing!
December 1st, 2011 at 11:35 AM
I’d prefer to have some friendly, Qt-compatible way to deal with the whole OAuth thing. That’s how the idea of QOAuth came up.
December 2nd, 2011 at 08:12 AM
lives or even keep a diary. Writing about yourself is never easy, and you may find yourself freezing up in front of the computer screen or becoming stilted and unnecessarily verbose.
Here are a few suggestions you can use to develop your own voice and style for your
December 7th, 2011 at 02:44 AM
Been reading a lot from your blog and I’m quite interested in the contents that you’re providing your loyal readers. Thanks!
December 9th, 2011 at 08:08 AM
I did gone to a lot of web page in the past weeks still this blog strucked me the most. The issue was so enchanting.
December 9th, 2011 at 06:33 PM
This is my first opportunity to visit this website. I found some interesting things and I will apply to the development of my blog. Thanks for sharing useful information.
December 12th, 2011 at 07:34 AM
I was hunting for the most impressive house design when I luckily uncovered this website. It’s extremely impressive.
December 12th, 2011 at 03:05 PM
Men ardently pursue truth, assuming it will be angels’ bread when found.
December 20th, 2011 at 02:40 AM
This is a focused topic featured. It’s quite fantastic reading content. You’ve enhanced my interests and it also took me in deep thinking. Wonderful job!
December 26th, 2011 at 10:37 AM
Is like this topic! good thing that you share news about this stuff to the rest of us! cherrio!
December 26th, 2011 at 03:12 PM
http://www.boxweddingdress.net/ boxweddingdress
January 3rd, 2012 at 09:27 AM
string from given parameters.
First two methods serve application authorization purposes, whilst the othe
January 14th, 2012 at 06:26 AM
Thanks for taking the time to converse all of this.Go along such way. I am greatly helped by this site as I always get inspirational and instructional post here.
January 20th, 2012 at 02:51 PM
This is my first opportunity to visit this website. I found some interesting things and I will apply to the development of my blog. Thanks for sharing useful information
January 23rd, 2012 at 03:19 PM
Really nice site. very useful for me!
January 25th, 2012 at 07:13 PM
Nice infos! I will be back soon
January 26th, 2012 at 11:22 AM
you do not need to visit a physical casino when you can access casinos online and win money.Chicago cleaning service »
February 2nd, 2012 at 03:14 PM
This one has got my sight by the quality of the work and for it nice tittle.Thanks for the great sharing with the great clearance.Hope to find some more update here.Keep it up here.