Created
July 14, 2016 11:44
-
-
Save vinaychittora/bc98809d4f52b5209d92bf25e44d9055 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
import urllib | |
import time | |
import hmac | |
import random | |
import base64 | |
from hashlib import sha1 | |
import string | |
import pymongo | |
import urlparse | |
import sys | |
import os.path | |
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))) | |
from config import * | |
class WooplrAuth(): | |
def __init__(self, OAUTH_KEY, OAUTH_SECRET): | |
self.OAUTH_KEY = OAUTH_KEY | |
self.OAUTH_SECRET = OAUTH_SECRET | |
def get_nonce(self): | |
strs = string.letters+'0123456789' | |
random_name = lambda length: ''.join(random.sample(strs, length)) | |
return random_name(6) | |
def get_timestamp(self): | |
return int(time.time()) | |
def url_encode(self, data): | |
return urllib.quote(data, "") | |
def get_base_string(self, resourceUrl, values, method="POST"): | |
baseString = method + "&" + self.url_encode(resourceUrl) + "&" | |
sortedKeys = sorted(values.keys()) | |
for i in range(len(sortedKeys)): | |
baseString = baseString + self.url_encode(sortedKeys[i] + "=") + self.url_encode(self.url_encode(values[sortedKeys[i]])) | |
if i < len(sortedKeys) - 1: | |
baseString = baseString + self.url_encode("&") | |
return baseString | |
def sign_request(self, params, resourceUrl): | |
key = self.OAUTH_SECRET + "&" | |
raw = self.get_base_string(resourceUrl, params, "POST") | |
hmacAlg = hmac.HMAC(key, raw, sha1) | |
return base64.b64encode(hmacAlg.digest()) | |
def build_oauth_headers(self, parameters): | |
header = "OAuth " | |
sortedKeys = sorted(parameters.keys()) | |
for i in range(len(sortedKeys)): | |
header = header + self.url_encode(sortedKeys[i]) + "=\"" + self.url_encode(parameters[sortedKeys[i]]) + "\"" | |
if i < len(sortedKeys) - 1: | |
header = header + "," | |
return header | |
if __name__ == "__main__": | |
USERS_CREATE_COUNT = 1000 | |
wpoath = WooplrAuth(OAUTH_KEY, OAUTH_SECRET) | |
url = DOMAIN+"/rest/v1/requestTokenWooplr/email/" | |
client = pymongo.MongoClient(MONGO_PATH) | |
users_collection = client[DBNAME][CRONS_COLLECTION['USERS']] | |
users_count = users_collection.count() | |
created = 0 | |
if users_collection.find({'is_created':False}).count() == 0: | |
print "No user data found to Signup" | |
print "Seems like We have created all the users." | |
print "Exiting the process..." | |
sys.exit() | |
while created <= USERS_CREATE_COUNT : | |
FOUND = False | |
while FOUND == False: | |
u = users_collection.find_one({'rndid': random.randrange(1, users_count+1), 'wid': {'$exists':False}}) | |
if u: | |
print u | |
FOUND = True | |
params = {'username':u['username'], 'password':'123@123', 'email':u['email'], 'fname':u['fname'], 'lname':u['lname']} | |
payload = {} | |
payload['oauth_consumer_key'] = OAUTH_KEY | |
payload['oauth_timestamp'] = str(wpoath.get_timestamp()) | |
payload['oauth_nonce'] = str(wpoath.get_nonce()) | |
payload['oauth_signature_method'] = "HMAC-SHA1" | |
payload['oauth_version'] = '1.0' | |
payload.update(params) | |
oauth_signature = wpoath.sign_request(payload, url) | |
payload['oauth_signature'] = oauth_signature | |
parameters2 = {} | |
for s in sorted(payload.keys()): | |
if s.find("oauth_") == -1: | |
parameters2[s] = payload[s] | |
del payload[s] | |
headers = { | |
'Content-Type': "application/x-www-form-urlencoded", | |
'Authorization': wpoath.build_oauth_headers(payload) | |
} | |
response = requests.request("POST", url, data=params, headers=headers) | |
if response.ok: | |
created += 1 | |
print "Created new user" | |
qs = urlparse.parse_qs(urlparse.urlsplit(response.url).query) | |
users_collection.update({'_id':u['_id']}, {'$set': {'is_created':True, 'wid':qs['uid'][0], 'oauth_token':qs['token'][0]}}) | |
else: | |
users_collection.update({'_id':u['_id']}, {'$set': {'is_created':False}}) | |
print response.text | |
print response.url | |
print '='*80 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment