Created
October 26, 2013 15:03
-
-
Save yareally/7170395 to your computer and use it in GitHub Desktop.
This file contains hidden or 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 os | |
from redis import StrictRedis | |
from models.user import User | |
import scrypt | |
class UserHelper(object): | |
""" | |
Handles user queries to redis | |
@param redis_connection: | |
@type redis_connection: StrictRedis | |
@param user_id: if not empty, assumed the user exists already | |
@type user_id: int | |
""" | |
_NEXT_USER_KEY = 'next.user.id' | |
# used to reference a key+value belonging to a specific user | |
# order of the format is (user_id, key_name) | |
_USER_STRING_KEY = 'user:%d:%s' | |
def __init__(self, redis_connection, user_id = None): | |
self.redis = redis_connection | |
# get the next unused id for the user to be inserted | |
if not user_id: | |
self.user_id = self._next_user_id() | |
else: | |
self.user_id = user_id | |
def add_user(self, twit_user): | |
""" | |
@param twit_user: | |
@type twit_user: User | |
""" | |
twit_user.id = self.user_id | |
trans = self.redis.pipeline() | |
for key, value in twit_user: | |
if value == twit_user.password: | |
value = self.hash_password(twit_user.password) | |
trans.set(self._set_user_string(key), value) | |
self.redis.transaction(trans) | |
def _set_user_string(self, key, user_id = None): | |
if not user_id: | |
user_id = self.user_id | |
return self._USER_STRING_KEY % (user_id, key) | |
def _next_user_id(self): | |
return self.redis.incr(self._NEXT_USER_KEY) | |
def get_user(self, user_id = None): | |
""" | |
@param user_id: | |
""" | |
if not user_id: | |
user_id = self.user_id | |
user = User('', '', '') | |
user.id = user_id | |
for key, value in user: | |
self.redis.get(self._set_user_string(key, user_id)) | |
def user_exists(self, user_id = None): | |
if not user_id: | |
user_id = self.user_id | |
self.redis.get(self._set_user_string('id', user_id)) | |
@staticmethod | |
def hash_password(password, salt=''): | |
""" | |
@param password: | |
@param salt: | |
@return: | |
""" | |
if not salt: | |
salt = os.urandom(24).encode('base_64') | |
return scrypt.hash(password, salt) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment