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 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. 3
0
    def get_by_email(cls, email):

        result = UsersRDB.get_by_email(email)
        return result
Esempio n. 4
0
def t1():

    r = UsersRDB.get_by_email('*****@*****.**')
    print("Result = \n", json.dumps(r, indent=2))
Esempio n. 5
0
    def update_user(cls, user_email, new_user_info):
        if UsersRDB.get_by_email(user_email) is None:
            raise TypeError("User with given email: " + user_email + " does not exist.")

        result = UsersRDB.update_user(user_email, new_user_info)
        return result
Esempio n. 6
0
    def delete_user(cls, user_email):
        if UsersRDB.get_by_email(user_email) is None:
            raise TypeError("User with given email: " + user_email + " does not exist.")

        result = UsersRDB.delete_user(user_email)
        return result
Esempio n. 7
0
def t1():

    r = UsersRDB.get_by_email('*****@*****.**')
    print("Result = \n", json.dumps(r, indent=2))
Esempio n. 8
0
 def get_by_email(cls, email, fields=None):
     result = UsersRDB.get_by_email(email, fields)
     if result is None or result["status"].lower(
     ) == "deleted" or result["status"].lower() == "pending":
         return None
     return result
def user():
    last_name = request.args.get("last_name")
    first_name = request.args.get("first_name")
    email = request.args.get("email")
    password = request.args.get("password")
    status = request.args.get("status")

    inputs = log_and_extract_input(
        demo, {
            "last_name": last_name,
            "first_name": first_name,
            "email": email,
            "password": password,
            "status": status
        })

    user_info = inputs["path_params"]

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

        if inputs["method"] == "GET":
            etag_server = ETag.getMD5(user_data)
            rsp_txt = json.dumps(user_data)
            full_rsp = Response(rsp_txt,
                                status=200,
                                content_type="application/json",
                                headers={"ETag": etag_server})

        elif inputs["method"] == "PUT":
            # check etag before updating anything
            etag_client = request.headers.get("ETag", None)
            etag_server = ETag.getMD5(user_data)
            if etag_client is None:
                Response("No ETag provided, please sign in first",
                         status=403,
                         content_type="text/plain")
            if etag_client != etag_server:
                return Response("ETag mismatch, please pull the latest data",
                                status=412,
                                content_type="text/plain")

            # update the data
            temp_data = {}
            for k, v in user_data.items():
                # if the value for certain columns are not specified (None) or empty (""), keep the original data
                if user_info.get(k, "") not in [None, ""]:
                    # update column to new data
                    temp_data[k] = user_info.get(k, "")
                else:
                    # keep original data
                    temp_data[k] = v
            # don't allow set to delete in PUT method
            if temp_data.get("status") == "DELETED":
                return Response("Please use DELETE method instead",
                                status=403,
                                content_type="text/plain")
            res = UsersRDB.update(temp_data)
            if res == 0:
                rsp_txt = "Nothing updated"
            else:
                rsp_txt = "User successfully updated"
            full_rsp = Response(rsp_txt, status=200, content_type="text/plain")

        elif inputs["method"] == "DELETE":
            temp_data = {}
            for k, v in user_data.items():
                if user_info.get(k, None):
                    temp_data[k] = user_info.get(k, None)
                else:
                    temp_data[k] = v
            temp_data["status"] = "DELETED"
            res = UsersRDB.update(temp_data)
            rsp_txt = "User successfully set to deleted state"
            full_rsp = Response(rsp_txt, status=200, content_type="text/plain")

    except Exception as e:
        log_msg = "/user: Exception = " + str(e)
        logger.error(log_msg)
        rsp_status = 500
        rsp_txt = "INTERNAL SERVER ERROR. Please take COMSE6156 -- Cloud Native Applications."
        full_rsp = Response(rsp_txt,
                            status=rsp_status,
                            content_type="text/plain")

    return full_rsp
def register():
    last_name = request.args.get("last_name")
    first_name = request.args.get("first_name")
    email = request.args.get("email")
    password = request.args.get("password")

    valid = all([last_name, first_name, email, password])

    user_info = {
        "last_name": last_name,
        "first_name": first_name,
        "email": email,
        "password": password,
        "id": str(uuid4()),
        "status": "PENDING"
    }

    inputs = log_and_extract_input(
        register, {
            "last_name": last_name,
            "first_name": first_name,
            "email": email,
            "password": password
        })

    # http://127.0.0.1:5000/api/registrations?last_name=asd&first_name=dsa&email=fdsafdsgf&password=1123
    # If invalid argument
    if not valid:
        rsp = Response(
            "Some columns are empty. last_name, first_name, email, password are required",
            status=200,
            content_type="test/plain")
        return rsp

    user_data = UsersRDB.get_by_email(user_info["email"], include_deleted=True)
    if user_data:
        if user_data.get("status", None) != "PENDING":
            rsp = Response("User already exist",
                           status=400,
                           content_type="test/plain")
            return rsp
        else:
            notification.publish_it(email)
            rsp = Response("User " + user_data.get("id", "") +
                           " already exist, resent activation email.",
                           status=200,
                           content_type="test/plain")
            return rsp

    try:
        # result = UsersRDB.create_user(user_info)
        result = UserService.create_user(user_info)
        rsp = Response("User created, user ID is:" +
                       (result if result else "") +
                       " please verify your email",
                       status=200,
                       content_type="test/plain")
    except Exception as e:
        rsp = Response("Invalid argument",
                       status=400,
                       content_type="test/plain")
        logger.debug(str(e))
    return rsp
Esempio n. 11
0
 def get_by_email(cls, email):
     result = UsersRDB.get_by_email(email)
     if result is None or result["status"].lower() == "deleted":
         result = "USER NOT EXISTED"
     return result