def get_user_from_session(username, token):
    valid_user = verify_user(username, None, True)

    if valid_user.error or 'Operation not' in valid_user.message:
        return valid_user

    response = Response()

    if not valid_user.data:
        response.message = 'Invalid user.  Check username and password.'
        response.authorized = False
        return response

    key = 'customer_{}'.format(valid_user.data['custId'])
    customer_info = repository.get_object_by_key(key)
    if ('error' in customer_info
            and customer_info['error']) or ('result' in customer_info
                                            and not customer_info['result']):
        response.message = ''
        response.authorized = False
        response.error = customer_info['error']
        return response

    response.data = {
        'userInfo': {
            'userId': valid_user.data['userId'],
            'username': valid_user.data['username'],
            'token': token
        },
        'customerInfo': customer_info['result']
    }
    response.message = 'Successfully verified and extended session.'
    response.authorized = True

    return response
def extend_session(token):
    secret = get_secret()
    response = Response()
    #decoded = None
    try:
        decoded_jwt = jwt.decode(token, secret, algorithms=['HS256'])
    except Exception as ex:
        print(ex)
        response.message = 'Error extending session.  Invalid token.'
        response.error = ex
        return response

    expiry = int(get_ttl())
    session = repository.extend_session(decoded_jwt['id'], expiry)
    if 'error' in session and session['error']:
        if session['error']['message'] == 'Document not found.':
            response.message = 'Unauthorizeed.  Session expired'
            response.authorized = False
        else:
            response.message = "Error trying to verify session."

        response.error = {
            'message': repr(session['error']),
            'stackTrace': traceback.format_exc()
        }
        return response

    if session == 'NOP':
        return response

    response.data = session['session']
    response.message = 'Successfully extended session.'
    response.authorized = True
    return response
    def extend_session(self, token):
        secret = get_secret()
        response = Response(None, 'Operation not built yet.', None, None)
        decoded = None
        try:
            decoded_jwt = jwt.decode(token, secret, algorithms=['HS256'])
        except Exception as ex:
            print(ex)
            response.message = 'Error extending session.  Invalid token.'
            response.error = ex
            return response

        expiry = int(get_ttl())
        session = self.repository.extend_session(decoded_jwt['id'], expiry)
        if 'error' in session:
            if session['error'].CODE == 13:
                response.message = 'Unauthorizeed.  Session expired'
                response.authorized = False
            else:
                response.message = "Error trying to verify session."

            response.error = {
                'message': repr(session['error']),
                'stackTrace': traceback.format_exc()
            }
            return response

        if session == 'NOP':
            return response

        response.data = session
        response.message = 'Successfully extended session.'
        response.authorized = True
        return response
Ejemplo n.º 4
0
    def decorated(*args, **kwargs):
        bearer_header = request.headers.get('Authorization', None)
        response = Response()
        if not bearer_header:
            response.message = 'No authorization token provided.'
            response.authorized = False
            g.jwt = {'token': None, 'result': response}
            return f(*args, **kwargs)

        try:
            token = bearer_header.replace('Bearer ', '')
            ext_session_res = extend_session(token)
            g.jwt = {
                'token': None if ext_session_res.error else token,
                'result': ext_session_res
            }
        except Exception as ex:
            response.error = {
                'message': repr(ex),
                'stackTrace': traceback.format_exc()
            }
            response.message
            g.jwt = {'token': None, 'result': response}

        return f(*args, **kwargs)
    def login(self, req):
        valid_user_res = self.verify_user(req['username'],
                                          str.encode(req['pw']))
        if valid_user_res.error or 'Operation not' in valid_user_res.message:
            return valid_user_res

        response = Response(None, 'Operation not built yet.', None, None)

        if not valid_user_res.data:
            response.message = 'Invalid user.  Check username and password.'
            response.authorized = False
            return response

        key = 'customer_{0}'.format(valid_user_res.data['custId'])
        customer_info = self.repository.get_object_by_key(key)

        session_res = self.create_session(req['username'])

        if session_res.error:
            return session_res

        secret = get_secret()
        encoded_jwt = jwt.encode({'id': session_res.data},
                                 secret,
                                 algorithm='HS256')
        response.data = {
            'userInfo': {
                'userId': valid_user_res.data['userId'],
                'username': valid_user_res.data['username'],
                'token': encoded_jwt.decode()
            },
            'customerInfo': customer_info
        }
        response.message = 'Successfully logged in (session created).'
        response.authorized = True

        return response
    def get_user_from_session(self, jwt):
        valid_user_res = self.verify_user(jwt['sessionRes'].data['username'],
                                          None, True)
        if valid_user_res.error or 'Operation not' in valid_user_res.message:
            return valid_user_res

        response = Response(None, 'Operation not built yet.', None, None)

        if not valid_user_res.data:
            response.message = 'Invalid user.  Check username and password.'
            response.authorized = False
            return response

        response.data = {
            'userInfo': {
                'userId': valid_user_res.data['userId'],
                'username': valid_user_res.data['username'],
                'token': jwt['token']
            }
        }
        response.message = 'Successfully verified and extended session.'
        response.authorized = True

        return response
    def decorated(*args, **kwargs):
        bearer_header = request.headers.get('Authorization', None)
        response = Response(None, None, None, None)
        if not bearer_header:
            response.message = 'No authorization token provided.'
            response.authorized = False
            g.jwt = {
                'token': None,
                'sessionRes': response
            }
            return f(*args, **kwargs)

        try:
            token = bearer_header.replace('Bearer ', '')
            ext_session_res = user_svc.extend_session(token)
            #Couchbase KeyNotFound - unauthorized (i.e. session expired)
            # if response.error:
            #     response.request_id = req_id
            #     if response.authorized is not None and not response.authorized:
            #         return jsonify(response.to_dict()), 401
            #     else:
            #         return jsonify(response.to_dict()), 500
                    
            #https://stackoverflow.com/questions/22256862/flask-how-to-store-and-retrieve-a-value-bound-to-the-request/22256956
            g.jwt = {
                'token': None if ext_session_res.error else token,
                'sessionRes': ext_session_res
            }
            #return f(*args, **kwargs)
        except Exception as err:
            response.error = err
            response.message
            g.jwt = {
                'token': None,
                'sessionRes': response
            }

        return f(*args, **kwargs)