Esempio n. 1
0
def get_comments(post_id):
    if request.method == 'GET':
        try:
            results = UsersRDB.get_comments_of_post(post_id)
            rsp_status = 200
        except Exception as e:
            results = "Not Found"
            rsp_status = 404

        full_rsp = Response(results,
                            status=rsp_status,
                            content_type="application/json")
        return full_rsp

    elif request.method == 'POST':
        curr_user = g.user
        content = {
            'author': curr_user,
            'to_post': post_id,
            'content': request.json['content'],
            'date': request.json['date']
        }
        try:
            results = UsersRDB.create_comment(content)
            rsp_status = 200
        except Exception as exp:
            results = "Not Found"
            rsp_status = 404
        full_rsp = Response(results,
                            status=rsp_status,
                            content_type="application/json")
        return full_rsp
Esempio n. 2
0
 def activate_user(cls, user_info):
     v = user_info.get('email', None)
     res = UsersRDB.get_user_by_email(v)
     if res is None:
         raise ServiceException(ServiceException.bad_data,
                                "Email not in database: " + v)
     template = {'email': v}
     result = UsersRDB.update_user(user_info=user_info, template=template)
     return result
Esempio n. 3
0
 def update_user(cls, data):
     v = data["email"]
     res = UsersRDB.get_user_by_email(v)
     if res is None:
         raise ServiceException(ServiceException.bad_data,
                                "Email not in database: " + v)
     # server_etag = to_etag(res)
     # if client_etag == server_etag:
     template = {"email": v}
     result = UsersRDB.update_user(user_info=data, template=template)
     # else:
     result = "No action done due to Etag mismatch. This is usually because your info was modified during " \
              "your updating. "
     return result
def get_resource_by_columns():
    args = dict(request.args)
    args = handle_args(args)

    fields = request.args.get("f")
    if fields:
        fields = fields.split(",")
        args.pop("f")
    else:
        fields = None

    try:
        res = UsersRDB.get_by_columns(args, fields=fields)
        rsp_txt = json.dumps(res)
        full_rsp = Response(rsp_txt,
                            status=200,
                            content_type="json/application")

    except Exception as e:
        log_msg = "/user: Exception = " + str(e)
        logger.error(log_msg)
        rsp_status = 500
        rsp_txt = "INTERNAL SERVER ERROR when running get_resource"
        full_rsp = Response(rsp_txt,
                            status=rsp_status,
                            content_type="text/plain")

    return full_rsp
Esempio n. 5
0
    def create_user(cls, user_info):
        for f in UsersService.required_create_fields:
            v = user_info.get(f, None)
            if v is None:
                raise ServiceException(ServiceException.missing_field,
                                       "Missing field = " + f)

            if f == 'email':
                if v.find('@') == -1:
                    raise ServiceException(ServiceException.bad_data,
                                           "Email looks invalid: " + v)

        user_info['id'] = str(uuid.uuid4())
        user_info["status"] = "PENDING"
        result = UsersRDB.create_user(user_info=user_info)
        print(os.environ['region_name'])
        print(os.environ['aws_access_key_id'])
        print(os.environ['aws_secret_access_key'])
        client = boto3.client(
            'sns',
            region_name=os.environ['region_name'],
            aws_access_key_id=os.environ['aws_access_key_id'],
            aws_secret_access_key=os.environ['aws_secret_access_key'])

        response = client.publish(
            TopicArn=
            'arn:aws:sns:ca-central-1:969112874411:E6156CustomerChange',
            Subject='New Registration',
            Message='{"customers_email":"%s"}' % user_info['email'],
        )

        return result
Esempio n. 6
0
def before_decorator():
    rule = request.endpoint
    try:
        if request.method == 'OPTIONS' or rule is 'registration' or rule is 'login' or request.headers.get(
                "pass") == 'sL36KjRf5oAc79ifhPJAz1bqi03WQPCC':
            pass
        else:
            token = request.headers.get("Token")
            fblogin = False
            if request.headers.has_key("X-Api-Key"):
                fblogin = json.loads(request.headers["X-Api-Key"])
            if fblogin:
                user = token
            else:
                tmp = jwt.decode(request.headers["Token"],
                                 'secret',
                                 algorithms=['HS256'])
                user = tmp.get("user")
                password = tmp.get("password")

                res = UsersRDB.validate_info(user)
                if not check_password_hash(res, password):
                    raise ValueError("Your information cannot be identify!")
            g.user = user
    except Exception as exp:
        rsp_txt = "ERROR: Unauthorized user. Login required.\n{}".format(exp)
        rsp_status = 504
        full_rsp = Response(rsp_txt,
                            status=rsp_status,
                            content_type="application/json")
        return full_rsp
def get_resource_by_primary_key(primary_key):
    fields = request.args.get("f")
    if fields:
        fields = fields.split(",")
    else:
        fields = None

    if not primary_key:
        return Response("Please provide primary key",
                        status=400,
                        content_type="text/plain")
    try:
        user_data = UsersRDB.get_by_id(primary_key, fields)
        rsp_txt = json.dumps(user_data)
        full_rsp = Response(rsp_txt,
                            status=200,
                            content_type="json/application")

    except Exception as e:
        log_msg = "/user: Exception = " + str(e)
        logger.error(log_msg)
        rsp_status = 500
        rsp_txt = "INTERNAL SERVER ERROR when running get_resource"
        full_rsp = Response(rsp_txt,
                            status=rsp_status,
                            content_type="text/plain")

    return full_rsp
Esempio n. 8
0
    def create_user(cls, user_info):

        for f in UsersService.required_create_fields:
            v = user_info.get(f, None)
            if v is None:
                raise ServiceException(ServiceException.missing_field,
                                       "Missing field = " + f)

            if f == 'email':
                if v.find('@') == -1:
                    raise ServiceException(ServiceException.bad_data,
                                           "Email looks invalid: " + v)

        if "id" not in user_info:
            id1 = str(uuid.uuid1())
            user_info['id'] = id1
        result = UsersRDB.create_user(user_info=user_info)

        print("RESULT FOR CREATE USER")
        print(result)
        if result is not None:
            # publish email to the SNS topic
            # sns = boto3.client('sns', region_name='us-east-1')
            # resp = sns.publish(
            #     TopicArn = 'arn:aws:sns:us-east-1:211747076064:tse-email-notif',
            #     Message=user_info['email']
            # )
            resp = publish_it(user_info['email'])
            print(resp)
        return result
Esempio n. 9
0
    def create_user(cls, user_info, sns=None):
        for f in UsersService.required_create_fields:
            v = user_info.get(f, None)
            if v is None:
                raise ServiceException(ServiceException.missing_field,
                                       "Missing field = " + f)

            if f == 'email':
                if v.find('@') == -1:
                    raise ServiceException(ServiceException.bad_data,
                                           "Email looks invalid: " + v)

        user_email = user_info.get('email', None)
        if user_email is not None and sns is not None:
            sns.client.subscribe(
                TopicArn=sns.topic_arn,
                Protocol='lambda',
                # Endpoint='arn:aws:lambda:us-east-2:086478487177:function:Handler'
                Endpoint=
                'arn:aws:lambda:us-east-2:086478487177:function:lambda_jwt')
            sns.client.publish(Message=json.dumps({'email': user_email}),
                               TopicArn=sns.topic_arn)
        result = UsersRDB.create_user(user_info=user_info)

        return result
Esempio n. 10
0
 def get_profile_by_id(cls, pid):
     result = UsersRDB.get_profile_by_id(pid)
     profile = {}
     if len(result) > 0:
         profile["profile_id"] = result[0]["profile_id"]
         profile["user_id"] = result[0]["user_id"]
         profile["profile_entries"] = UsersService.filter_profile(result)
     return profile
Esempio n. 11
0
 def update_user(cls, email, data):
     # hash password before updating
     if 'password' in data:
         data['password'] = security.hash_password({"password" : data['password']})
     if 'status' in data:
         print('updating status to', data['status'])
     result = UsersRDB.update_user(email=email, data=data)
     return result
Esempio n. 12
0
    def update_user(cls, email, user_info):

        v = user_info.get('email', None)
        if v.find('@') == -1:
            raise ServiceException(ServiceException.bad_data,
                                   "Email looks invalid: " + v)

        result = UsersRDB.update_user(email=email, user_info=user_info)
        return result
Esempio n. 13
0
def get_articles():
    if request.method == 'GET':
        try:
            curr_user = g.user
            results = UsersRDB.find_post_by_authors(curr_user)

            rsp_status = 200
            full_rsp = Response(results,
                                status=rsp_status,
                                content_type="application/json")

            return full_rsp
        except Exception as e:
            rsp_txt = "Not Found"
            rsp_status = 404
            full_rsp = Response(rsp_txt,
                                status=rsp_status,
                                content_type="application/json")

            return full_rsp
    elif request.method == 'POST':
        curr_user = g.user
        content = {
            'author': curr_user,
            'content': request.json['text'],
            'image': request.json['image'],
            'date': request.json['date']
        }
        try:
            result = UsersRDB.create_post(content)
            print(result)
            if result != 0:
                results = UsersRDB.find_post_by_authors(curr_user)
            else:
                results = []
            rsp_status = 200
        except Exception as e:
            results = "Cannot create the post! Please try again."
            rsp_status = 404

        full_rsp = Response(results,
                            status=rsp_status,
                            content_type="application/json")
        return full_rsp
Esempio n. 14
0
    def update_email(cls, user_info, email):
        for f in UsersService.required_email_fields:
            v = user_info.get(f, None)
            if v is None:
                raise ServiceException(ServiceException.missing_field,
                                       "Missing field = " + f)

        result = UsersRDB.update_email(user_info, email)

        return result
Esempio n. 15
0
    def delete_user(cls, user_info):
        for f in UsersService.required_delete_fields:
            v = user_info.get(f, None)
            if v is None:
                raise ServiceException(ServiceException.missing_field,
                                       "Missing field = " + f)

        result = UsersRDB.delete_user(user_info)

        return result
Esempio n. 16
0
def t2():
    usr = {
        "last_name": "Baggins",
        "first_name": "Frodo",
        "id": str(uuid4()),
        "email": "*****@*****.**",
        "status": "PENDING",
        "password": "******"
    }
    res = UsersRDB.create_user(user_info=usr)
    print("Res = ", res)
    def update_user(cls, user_info):

        for f in UsersService.required_create_fields:
            v = user_info.get(f, None)
            if f == 'email':
                if v.find('@') == -1:
                    raise ServiceException(ServiceException.bad_data,
                           "Email looks invalid: " + v)

        result = UsersRDB.update_user(user_info=user_info)

        return result
Esempio n. 18
0
def t2():

    pwd = security.hash_password({"password": '******'})

    usr = {
        "last_name": "Baggins",
        "first_name": "Frodo",
        "id": str(uuid.uuid4()),
        "email": "*****@*****.**",
        "status": "PENDING",
        "password": pwd
    }
    res = UsersRDB.create_user(user_info=usr)
Esempio n. 19
0
def get_following_users():
    try:
        results = UsersRDB.get_following_users(g.user)
        rsp_status = 200

    except Exception as exp:
        results = "Not Found"
        rsp_status = 404

    full_rsp = Response(results,
                        status=rsp_status,
                        content_type="application/json")
    return full_rsp
def t4():
    usr = {
        "last_name": "testupdate",
        "email": "*****@*****.**",
    }
    res = UsersRDB.update_user(user_info=usr)
    print("Res = ", res)


#t1()
#t2()
#t3()
#t4()
Esempio n. 21
0
def login():
    """
    request_body_example = {
        "username":"******",
        "password":"******"
    }
    """
    user = request.json['username']
    password = request.json['password']

    print(generate_password_hash(password))

    res = Authentication.validate({user: password})
    if res:
        encoded_password = jwt.encode({
            'password': password,
            'user': user
        },
                                      'secret',
                                      algorithm='HS256').decode('utf-8')
        rsp_data = {"result": res, "Token": encoded_password}
        status = UsersRDB.get_user_status(user)
        if status == 'ACTIVE':
            rsp_status = 200
            rsp_txt = json.dumps(rsp_data)
            full_rsp = Response(rsp_txt,
                                status=rsp_status,
                                content_type="application/json")
            full_rsp.headers["Token"] = encoded_password
        else:
            rsp_status = 403
            rsp_txt = "User not Activated."
            full_rsp = Response(rsp_txt,
                                status=rsp_status,
                                content_type="application/json")

    else:
        error = 'Invalid Credentials. Please try again.'
        rsp_data = {"result": res, "error": error}
        rsp_status = 504
        rsp_txt = json.dumps(rsp_data)
        full_rsp = Response(rsp_txt,
                            status=rsp_status,
                            content_type="application/json")

    full_rsp.headers["Access-Control-Allow-Origin"] = allowed_url
    full_rsp.headers["Access-Control-Allow-Headers"] = "Content-Type"
    full_rsp.headers["Access-Control-Allow-Methods"] = "POST"
    full_rsp.headers["Access-Control-Allow-Credentials"] = "true"
    full_rsp.headers["Access-Control-Expose-Headers"] = "Token"
    return full_rsp
def activate(email):
    token = request.headers.get("Lambda-Token")
    if token != security_middleware._secret:
        # logger.debug("Invalid token: " + str(token) + " VS " + str(security_middleware._secret))
        # logger.debug("Header received:\n" + str(request.headers))
        return Response("Invalid Authorization Token",
                        status=401,
                        content_type="text/plain")

    try:
        user_data = UsersRDB.get_by_email(email, include_deleted=False)
        if not user_data:
            return Response("No such user found",
                            status=400,
                            content_type="text/plain")
        if user_data["status"] == "ACTIVE":
            return Response("User already activated",
                            status=200,
                            content_type="text/plain")

        user_data["status"] = "ACTIVE"
        UsersRDB.update(user_data)
        full_rsp = Response("User successfully activated",
                            status=200,
                            content_type="text/plain")

    except Exception as e:
        log_msg = "/activate: Exception = " + str(e)
        logger.error(log_msg)
        rsp_status = 500
        rsp_txt = "/activate INTERNAL SERVER ERROR."
        full_rsp = Response(rsp_txt,
                            status=rsp_status,
                            content_type="text/plain")

    return full_rsp
Esempio n. 23
0
 def get_by_uid(cls, uid):
     result = {}
     profiles = ProfileRDB.get_by_uid(uid)
     if profiles is None:
         result = "PROFILE NOT EXISTED"
     else:
         email = UsersRDB.query_by_parameters(params={"id": uid},
                                              fields="email")
         result["links"] = [{
             "rel": "user",
             "href": "/api/user/" + email[0]["email"],
             "method": "GET"
         }]
         result["profiles"] = profiles
     return result
Esempio n. 24
0
    def create_user(cls, user_info):
        for f in UsersService.required_create_fields:
            v = user_info.get(f, None)
            if v is None:
                raise ServiceException(ServiceException.missing_field,
                                       "Missing field = " + f)

            if f == 'email':
                if v.find('@') == -1:
                    raise ServiceException(ServiceException.bad_data,
                           "Email looks invalid: " + v)

        user_info['id'] = str(uuid.uuid4())
        result = UsersRDB.create_user(user_info=user_info)

        return result
Esempio n. 25
0
    def update_profile_by_id(cls, pid, profile):
        new_values = []
        uid, entries = profile['user_id'], profile['profile_entries']

        if entries:
            for entry in entries:
                new_values.append({
                    "profile_id": pid,
                    "user_id": uid,
                    "element_type": entry["type"],
                    "element_subtype": entry["subtype"],
                    "element_value": entry["value"],
                })

        result = UsersRDB.update_profile_by_id(pid, new_values)
        return result
Esempio n. 26
0
    def create_user(cls, user_info):
        for f in UsersService.required_create_fields:
            v = user_info.get(f, None)
            if v is None:
                raise ServiceException(ServiceException.missing_field,
                                       "Missing field = " + f)
            if f == 'email':
                if v.find('@') == -1:
                    raise ServiceException(ServiceException.bad_data,
                                           "Email looks invalid: " + v)
        result = UsersRDB.create_user(user_info=user_info)

        # Publish a simple message to the specified SNS topic
        email = {'customers_email': user_info.get('email')}
        publish_it(json.dumps(email))

        return result
Esempio n. 27
0
    def create_user(cls, user_info):
        for f in UsersService.required_create_fields:
            v = user_info.get(f, None)
            if v is None:
                raise ServiceException(ServiceException.missing_field,
                                       "Missing field = " + f)

            if f == 'email':
                if v.find('@') == -1:
                    raise ServiceException(ServiceException.bad_data,
                                           "Email looks invalid: " + v)

        result = UsersRDB.create_user(user_info=user_info)
        email = user_info.get("email", None)
        msg = {"email": email}
        notification.publish_it(msg)
        return result
Esempio n. 28
0
    def create_user(cls, user_info):
        for f in UsersService.required_create_fields:
            v = user_info.get(f, None)
            if v is None:
                raise ServiceException(ServiceException.missing_field,
                                       "Missing field = " + f)

            if f == 'email':
                if v.find('@') == -1:
                    raise ServiceException(ServiceException.bad_data, "Email looks invalid: " + v)

        result = UsersRDB.create_user(user_info=user_info)
        email = user_info.get('email', None)
        response = boto3.client('sns',region_name='us-east-1').publish(
            TopicArn='arn:aws:sns:us-east-1:270598185649:user_created',    
            Message = json.dumps({'customers_email' : email }),    
        )

#         # Print out the response
#         print(response)
        return result
def login():
    email = request.args.get("email")
    password = request.args.get("password")

    valid = all([email, password])
    if not valid:
        return Response("Invalid Argument",
                        status=400,
                        content_type="text/plain")

    try:
        user_data = UsersRDB.get_by_email(email, include_deleted=False)
        if not user_data:
            return Response("No such user found",
                            status=400,
                            content_type="text/plain")

        if user_data.get("password", None) != password:
            return Response("Incorrect password",
                            status=400,
                            content_type="text/plain")

        token = security_middleware.generate_token(user_data)

        header = {"Login-Token": token}
        full_rsp = Response(json.dumps(user_data),
                            status=200,
                            content_type="json/application",
                            headers=header)
        # full_rsp = Response("Login Successful: " + user_data.get("first_name", "user") + " " +
        #                     user_data.get("last_name", "user") + "\nSTATUS: " + user_data.get("status", "PENDING"),
        #                     status=200, content_type="text/plain", headers=header)

    except Exception as e:
        logger.error("Login error: " + str(e))
        rsp_txt = "INTERNAL SERVER ERROR when running login"
        full_rsp = Response(rsp_txt, status=500, content_type="text/plain")

    return full_rsp
 def validate(cls, info):
     (user_email, user_password), = info.items()
     res = UsersRDB.validate_info(user_email)
     return check_password_hash(res, user_password)