Skip to content

Instantly share code, notes, and snippets.

@vinaychittora
Created July 14, 2016 11:44
Show Gist options
  • Save vinaychittora/bc98809d4f52b5209d92bf25e44d9055 to your computer and use it in GitHub Desktop.
Save vinaychittora/bc98809d4f52b5209d92bf25e44d9055 to your computer and use it in GitHub Desktop.
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