예제 #1
0
파일: login.py 프로젝트: ondratu/morias
def do_check_login(req):
    req.login = None
    cookie = PoorSession(req, compress=None)
    if "data" not in cookie.data:
        req.log_error("Login cookie not found.", state.LOG_INFO)
        return None

    if "ip" in cookie.data and cookie.data["ip"] != req.get_remote_host():
        cookie.destroy()
        cookie.header(req, req.headers_out)
        req.log_error("Login cookie was be destroyed (invalid IP address)", state.LOG_INFO)
        return None

    __class__, __dict__ = cookie.data["data"]
    req.login = __class__()
    req.login.__dict__ = __dict__.copy()
    req.user_hash = cookie.data["token"]

    if not req.login.check(req):
        cookie.destroy()
        req.login = None
        req.log_error("Login cookie was be destroyed (check failed)", state.LOG_INFO)

    cookie.header(req, req.headers_out)  # refresh cookie
    return req.login
예제 #2
0
파일: simple.py 프로젝트: JPilarr/PoorWSGI
def logout(req):
    req.log_error("Input cookies: %s" % repr(req.cookies), state.LOG_DEBUG)
    cookie = PoorSession(req)
    cookie.destroy()
    cookie.header(req, req.headers_out)
    req.log_error("Output headers: %s" % req.headers_out, state.LOG_DEBUG)
    redirect(req, '/')
예제 #3
0
파일: simple.py 프로젝트: PoorHttp/PoorWSGI
def logout(req):
    log.debug("Input cookies: %s", repr(req.cookies))
    cookie = PoorSession(app.secret_key)
    cookie.destroy()
    response = RedirectResponse('/')
    cookie.header(response)
    return response
예제 #4
0
파일: login.py 프로젝트: ondratu/morias
def do_logout(req):
    cookie = PoorSession(req, compress=None)
    if "data" not in cookie.data:
        req.log_error("Login cookie not found.", state.LOG_INFO)
        return

    cookie.destroy()
    cookie.header(req, req.headers_out)
    req.log_error("Login cookie was be destroyed (Logout).", state.LOG_INFO)
예제 #5
0
class ShoppingCart(object):
    def __init__(self, req):
        # Morias Eshop Orders Shopping Cart
        self.cookie = PoorSession(req, SID='MEOSC')
        shopping_cart = self.cookie.data.get('shopping_cart', {})
        self.items = shopping_cart.get('items', [])
        self.billing_address = shopping_cart.get('billing_address', {})
        self.shipping_address = shopping_cart.get('shipping_address', {})
        self.transportation = shopping_cart.get('transportation', None)
        self.payment = shopping_cart.get('payment', None)
        self.email = shopping_cart.get('email', '')
        self.emailcheck = shopping_cart.get('emailcheck', '')
        self.message = shopping_cart.get('message', '')

        if req.login:
            self._merge_properties(req.login.data.get('shopping_cart', {}),
                                   self.email or req.login.email)

            if self.cookie.data.get('stored', False):
                # if data is merged from cookie, store data to login
                # and clean the cookie
                self.store(req)
                self.cookie.destroy()
                self.cookie.header(req, req.headers_out)
    # enddef

    def _merge_properties(self, cart, email):
        billing_address = cart.get('billing_address', {})
        shipping_address = cart.get('shipping_address', {})
        transportation = cart.get('transportation', None)
        payment = cart.get('payment', None)
        message = cart.get('message', None)

        self.merge_items(cart.get('items', []))
        if len(billing_address):
            self.billing_address = billing_address
        if len(shipping_address):
            self.shipping_address = shipping_address
        if transportation is not None:
            self.transportation = transportation
        if payment is not None:
            self.payment = payment
        self.email = cart.get('email', email)
        if message is not None:
            self.message = message
    # enddef

    def merge_items(self, items):
        tmp = OrderedDict(self.items)
        for item_id, item in items:
            if item_id in tmp:
                tmp[item_id]['count'] += item['count']
                if tmp[item_id]['count'] <= 0:
                    tmp.pop(item_id)   # remove zero less count items
                elif item['count'] < 0:
                    tmp[item_id].pop('not_enough', False)
            else:
                tmp[item_id] = item
        # endfor

        self.items = tmp.items()
    # enddef

    def set_not_enought(self, ids):
        for item_id, item in self.items:
            if item_id in ids:
                item['not_enough'] = True
            else:
                item['not_enough'] = False
    # enddef

    def store(self, req):
        if req.login:
            req.log_error('storing user data', LOG_INFO)
            req.login._mod(req, ['data'], [{'shopping_cart': self.dict()}])
        else:
            req.log_error('Sendig shopping_cart cookie....', LOG_INFO)
            self.cookie.data['shopping_cart'] = self.dict()
            self.cookie.data['stored'] = True
            self.cookie.header(req, req.headers_out)
    # enddef

    def dict(self):
        return dict((k, v) for k, v in self.__dict__.items() if k != 'cookie')

    def calculate(self):
        self.count = 0                          # count of all items in cart
        self.summary = 0                        # summary price of all items
        for item_id, item in self.items:
            item['summary'] = item['count'] * item['price']
            self.count += item['count']
            self.summary += item['summary']

        self.total = self.summary               # total price of order
        if self.transportation:                 # transportation price
            self.total += self.transportation[1]
        if self.payment:                        # payment price
            self.total += self.payment[1]
    # enddef

    def clean(self, req):
        if req.login:
            req.log_error('storing user data - cleaning shopping_cart ')
            req.login._mod(req, ['data'], [{'shopping_cart': {}}])
        else:
            req.log_error('cleaning shopping_cart cookie....')
            self.cookie.destroy()
            self.cookie.header(req, req.headers_out)

        self.items = []
        self.billing_address = {}
        self.shipping_address = {}
        self.transportation = None
        self.payment = None
        self.email = ''
        self.emailcheck = ''
        self.message = ''
예제 #6
0
 def test_destroy(self):
     session = PoorSession(SECRET_KEY)
     session.destroy()
     headers = session.header()
     assert "; expires=" in headers[0][1]
예제 #7
0
def logout(req):
    cookie = PoorSession(req)
    cookie.destroy()
    cookie.header(req, req.headers_out)
    redirect(req, '/')