Ejemplo n.º 1
0
def delete_user(usertype):
    if request and request.method == "DELETE":
        try:
            auth = request.headers.get('AUTHORIZATION', b'').split()

            j = JWTTokenUtil(auth[1])
            uid = j.get_user_id()

            # Delete user from cognito
            resp = client.delete_user(AccessToken=auth[1])
            log.info(f"User delete from cognito: {uid}\n, {resp}")

            # Delete user data from dynamodb
            result, err = UpdateItem(uid, usertype, delete=True)
            if err:
                raise Exception(err)

            log.info(
                f"User record delete from DB: {uid}, cognito: {resp}, dynamodb: {result}"
            )

            msg = "User deleted successfully !!!"
            # log.info( msg + "\n" + resp)
            res = GetResponseObject(msg, 200, True)
            return res

        except Exception as e:
            msg = f"Error while deleting user: {str(e)}"
            log.error(msg)
            res = GetResponseObject(msg)
            return res
    else:
        data = f"Invalid request method, method {request.method} not supported !!!"
        res = GetResponseObject(data, 405)
        return res
Ejemplo n.º 2
0
def delete_user(usertype):
    if request and request.method == "DELETE":
        try:
            auth = request.headers.get('AUTHORIZATION', b'').split()

            j = JWTTokenUtil(auth[1])
            uid = j.get_user_id()

            # Delete user from cognito
            resp = client.delete_user(AccessToken=auth[1])
            log.info(f"User delete from cognito: {uid}\n, {resp}")

            msg = "User deleted successfully !!!"
            res = GetResponseObject(msg, 200, True)
            return res

        except Exception as e:
            msg = f"Error while deleting user: {str(e)}"
            log.error(msg)
            res = GetResponseObject(msg)
            return res
    else:
        data = f"Invalid request method, method {request.method} not supported !!!"
        res = GetResponseObject(data, 405)
        return res
Ejemplo n.º 3
0
def upload_profile_image(usertype):
    if request and request.method == "PUT":

        if "profile_image" in request.files:
            file = request.files["profile_image"]
            try:
                if usertype == "consumer":
                    raise Exception(
                        "Profile picture upload feature is not available for consumer !!!!"
                    )

                s3_client.upload_fileobj(file,
                                         S3_BUCKET,
                                         file.filename,
                                         ExtraArgs={
                                             "ACL": "public-read",
                                             "ContentType": file.content_type
                                         })

                auth = request.headers.get('AUTHORIZATION', b'').split()
                j = JWTTokenUtil(auth[1])
                uid = j.get_user_id()

                resp, err = UpdateItem(
                    uid,
                    usertype, {
                        "image":
                        "https://" + settings.CLOUD_FRONT_URL + "/" +
                        file.filename
                    },
                    update=True)
                if err:
                    raise Exception(err)

                msg = f"User profile image uploaded to s3 and url saved in DB, response: {resp}"
                log.info(msg)
                res = GetResponseObject("User profile image updated !!!", 200,
                                        True)
                return res

            except Exception as e:
                msg = f"Error while uploading user profile image : {str(e)}"
                log.error(msg)
                res = GetResponseObject(msg)
                return res
        else:
            msg = f"No image found"
            log.error(msg)
            res = GetResponseObject(msg)
            return res

    else:
        data = f"Invalid request method, method {request.method} not supported !!!"
        return GetResponseObject(data, 405)
Ejemplo n.º 4
0
def update_profile(usertype):
    if request and request.method == "PUT":
        try:

            auth = request.headers.get('AUTHORIZATION', b'').split()
            j = JWTTokenUtil(auth[1])
            uid = j.get_user_id()

            userObj = Users.get(uid)
            if userObj.userType != usertype:
                raise Exception("Please provide correct usertype !!!")

            body = None
            if request.data:
                body = json.loads(request.data)
                resp, err = ValidateRegistrationData(body, usertype, True)
                if err:
                    res = GetResponseObject(err, 400)
                    return res
            else:
                data = f"Empty request body !!!!"
                res = GetResponseObject(data, 400)
                log.error(err)
                return res

            user = Cognito(user_pool_id=COGNITO_USER_POOL_ID,
                           client_id=COGNITO_APP_CLIENT_ID,
                           user_pool_region=AWS_REGION)

            out, err = UpdateItem(uid, usertype, body=body, update=True)
            if err:
                raise Exception(err)

            data = "User profile updated successfully !!!"

            res = GetResponseObject(data, 200, True)
            return res

        except Exception as e:
            data = f"Error while updating user profile: {str(e)}"
            log.error(data)
            res = GetResponseObject(data)
            return res

    else:
        data = f"Invalid request method, method {request.method} not supported !!!"
        return GetResponseObject(data, 405)
Ejemplo n.º 5
0
def sign_out():
    if request and request.method == "GET":
        try:
            auth = request.headers.get('AUTHORIZATION', b'').split()
            response = client.global_sign_out(AccessToken=auth[1])
            data = "User signed out successfully !!!"
            res = GetResponseObject(data, 200, True)
            return res
        except Exception as e:
            msg = f"Error while signing out user: {str(e)}"
            log.error(msg)
            res = GetResponseObject(msg)
            return res
    else:
        data = f"Invalid request method, method {request.method} not supported !!!"
        res = GetResponseObject(data, 405)
        return res
Ejemplo n.º 6
0
def sign_in():
    if request and request.method == "GET":
        resp, err = GetUserPasswordFromAuthHeader(request)
        if err:
            log.error(err)
            res = GetResponseObject(err, 400)
            return res

        username, password = resp[0], resp[1]

        try:
            user = Cognito(user_pool_id=COGNITO_USER_POOL_ID, \
                client_id=COGNITO_APP_CLIENT_ID, \
                user_pool_region=AWS_REGION, \
                username=username)

            user.admin_authenticate(password=password)
            user_rec = user.get_user()

            uid = user_rec.sub
            usertype = user_rec._data['custom:usertype']

            userObj = Users.get(uid)
            # userObj = Users.get(uid, usertype)

            out = SerializeUserObj(userObj)
            # out["usertype"] = usertype
            data = {
                # "idToken": user.id_token,
                "accessToken": user.access_token,
                # "refreshToken": user.refresh_token,
                "profile": out
            }
            res = GetResponseObject(data, 200, True)
            res.headers['HMS-TOKEN'] = "Bearer " + user.access_token
            # res.set_cookie(settings.COOKIE_NAME , user.access_token)
            return res

        except Exception as e:
            msg = f"Error while authenticating user {str(e)}"
            return GetResponseObject(msg)
            # return HttpResponseServerError(res)
    else:
        data = f"Invalid request method, method {request.method} not supported !!!"
        return GetResponseObject(data, 405)
Ejemplo n.º 7
0
def sign_up():

    if request and request.method == "POST":
        resp, err = GetUserPasswordFromAuthHeader(request)
        if err:
            res = GetResponseObject(err, 401)
            log.error(res)
            return res

        username, password = resp[0], resp[1]

        if request.data:
            body = json.loads(request.data)
            resp, err = ValidateRegistrationData(body)
            if err:
                res = GetResponseObject(err, 400)
                log.error(res)
                return res

            try:
                body["username"] = username
                # Save user record in Cognito
                user = Cognito(user_pool_id=COGNITO_USER_POOL_ID,
                               client_id=COGNITO_APP_CLIENT_ID,
                               user_pool_region=AWS_REGION)
                user.add_base_attributes(email=username,
                                         given_name=body["firstName"],
                                         family_name=body["lastName"],
                                         phone_number=body["phone"],
                                         address=body["address"])

                user.add_custom_attributes(usertype=body["userType"],
                                           area=body["area"],
                                           city=body["city"])

                resp = user.register(username, password)
                # log.info("Cognito response:" + str(resp))

                user.admin_confirm_sign_up()

                body["uuid"] = resp['UserSub']
                body["email"] = username

                # log.info(json.dumps(body, indent=2))
                # saving user record in db
                # filename, err = upload_image(request)
                # if err:
                #     raise Exception(err)

                # body["image"] = "https://" + settings.CLOUD_FRONT_URL + "/" + filename

                SaveInDB(body)

                data = "User registered successfully !!!"
                res = GetResponseObject(data, 200, True)
                return res

            except ClientError as e:
                if e.response['Error']['Code'] == 'UsernameExistsException':
                    data = f"{username} username already exists !!!"
                    log.error(data)
                    res = GetResponseObject(data)
                    return res

                data = f"Error: {str(e)}"
                log.error(data)
                res = GetResponseObject(data)
                return res

            except Exception as e:
                user = Cognito( \
                    user_pool_id=COGNITO_USER_POOL_ID, \
                    client_id=COGNITO_APP_CLIENT_ID, \
                    user_pool_region=AWS_REGION,
                    username=username)

                user.authenticate(password=password)
                resp = client.delete_user(AccessToken=user.access_token)

                log.info(
                    f"Deleting user due to error while signing up: {resp}")
                data = f"Error while registering user: {str(e)}"
                log.error(data)
                res = GetResponseObject(data)
                return res
        else:
            data = f"Empty request body !!!!"
            res = GetResponseObject(data, 400)
            log.error(err)
            return res
    else:
        data = f"Invalid request method, method {request.method} not supported !!!"
        res = GetResponseObject(data, 405)
        log.error(res)
        return res
Ejemplo n.º 8
0
def sign_up():
    if request and request.method == "POST":
        resp, err = GetUserPasswordFromAuthHeader(request)
        if err:
            res = GetResponseObject(err, 401)
            log.error(res)
            return res

        username, password = resp[0], resp[1]

        if request.data:
            body = json.loads(request.data)
            resp, err = ValidateRegistrationData(body)
            if err:
                res = GetResponseObject(err, 400)
                return res

            try:
                body["username"] = username

                # Save user record in Cognito
                user = Cognito(user_pool_id=COGNITO_USER_POOL_ID,
                               client_id=COGNITO_APP_CLIENT_ID, user_pool_region=AWS_REGION)

                user.add_base_attributes(
                    email=username,
                    given_name=body["firstName"],
                    family_name=body["lastName"]
                )

                print(username, password)
                user.add_custom_attributes(
                    yoyoPoints=body["yoyoPoints"],
                    admin=body["admin"]
                )

                resp = user.register(username, password)
                log.info("Cognito response:" + str(resp))

                user.admin_confirm_sign_up()

                body["uuid"] = resp['UserSub']

                # log.info(json.dumps(body, indent=2))
                data = "User registered successfully !!!"
                res = GetResponseObject(data, 200, True)
                return res

            except ClientError as e:
                print(f"Error: {str(e)}")
                if e.response['Error']['Code'] == 'UsernameExistsException':
                    data = f"{username} username already exists !!!"
                    log.error(data)
                    res = GetResponseObject(data)
                    return res

            except Exception as e:
                user = Cognito(
                    user_pool_id=COGNITO_USER_POOL_ID,
                    client_id=COGNITO_APP_CLIENT_ID,
                    user_pool_region=AWS_REGION,
                    username=username)

                user.authenticate(password=password)
                resp = client.delete_user(AccessToken=user.access_token)

                log.info(
                    f"Deleting user due to error while signing up: {resp}")
                data = f"Error while registering user: {str(e)}"
                log.error(data)
                res = GetResponseObject(data)
                return res
        else:
            data = f"Empty request body !!!!"
            res = GetResponseObject(data, 400)
            log.error(err)
            return res
    else:
        data = f"Invalid request method, method {request.method} not supported !!!"
        res = GetResponseObject(data, 405)
        log.error(res)
        return res
Ejemplo n.º 9
0
def update_profile():
    if request and request.method == "PUT":
        try:

            auth = request.headers.get('AUTHORIZATION', b'').split()
            j = JWTTokenUtil(auth[1])
            uid = j.get_user_id()

            body = None
            if request.data:
                body = json.loads(request.data)
                resp, err = ValidateRegistrationData(body, True)
                print(resp, err)
                if not resp:
                    res = GetResponseObject(err, 400)
                    return res
            else:
                data = f"Empty request body !!!!"
                res = GetResponseObject(data, 400)
                log.error(err)
                return res

            user = Cognito(
                user_pool_id=COGNITO_USER_POOL_ID,
                client_id=COGNITO_APP_CLIENT_ID,
                user_pool_region=AWS_REGION
            )

            from .utils import dict_to_cognito
            data = {}

            for k, v in body.items():
                if k == "firstName":
                    k = "given_name"
                elif k == "lastName":
                    k = "family_name"

                if k in settings.CUSTOM_USER_ATTRIBUTE:
                    data["custom:" + k] = v
                else:
                    data[k] = v

            user_attrs = dict_to_cognito(data)

            out = client.update_user_attributes(
                UserAttributes=user_attrs,
                AccessToken=auth[1]
            )

            log.info("User profile update response:" + str(out))

            if out['ResponseMetadata']['HTTPStatusCode'] == 200:
                data = "User profile updated successfully !!!"
                res = GetResponseObject(data, 200, True)
                return res
            else:
                log.error(f"Error while updating profile: {out}")
                err = out['ResponseMetadata']['HTTPStatusCode']
                raise Exception(err)

        except Exception as e:
            data = f"Error while updating user profile: {str(e)}"
            log.error(data)
            res = GetResponseObject(data)
            return res

    else:
        data = f"Invalid request method, method {request.method} not supported !!!"
        return GetResponseObject(data, 405)