michardy/account-hijacking-prevention

View on GitHub
hijackingprevention/user.py

Summary

Maintainability
A
0 mins
Test Coverage
import logging
from tornado import gen

import hijackingprevention.db_int as db_int

logger = logging.getLogger(__name__)


class User(db_int.Interface):
    """This class handles reading, writing, and manipulating user objects."""
    def __init__(self, uid, site, db):
        self.__id_type = "uid"
        self.__id = uid
        self.__data_type= 'userData_site-'
        self.data = {}
        self.code = None #verification token
        self.__site = str(site)
        self.__db = db
        super(User, self).__init__(db, self.__data_type, str(site),
                        self.__id_type, uid, self.__combine)

    @gen.coroutine
    def read_db(self):
        """Reads user object from DB."""
        sud = self.__db[self.__data_type + self.__site]
        user = yield sud.find_one({'uid':self.__id}) #Try to find user
        if user is not None:
            self.data = user['data']
            try:
                self.code = user['code']
            except KeyError:
                pass

    def add_data(self, data):
        """Adds data to user."""
        for k in data.keys():
            if k in self.data.keys():
                self.data[k].append(data[k])
            else:
                self.data[k] = [data[k]]

    def __combine(self):
        """Returns user object as dictionary"""
        return({self.__id_type:self.__id, 'data':self.data,
            'code':self.code})