Ejemplo n.º 1
0
    def web_app_login(self, email):
        try:
            socketio.emit('open', "Opening web app...")

            # first login try
            add_running_account(email)
            self.driver = create_driver_instance(email)
            self.element_actions = ElementActions(self.driver)

            existing_account = check_account_if_exists(email)
            if existing_account["cookies"]:
                self.login_with_cookies(existing_account["cookies"])
            else:
                self.login_first_time()
            return self._launch()

        except TimeoutException as e:
            close_driver(email)
            return server_response(
                code=503, msg=server_status_messages.COULD_NOT_GET_SID)
        except UserNotFound as e:
            close_driver(email)
            return server_response(code=401, msg=e.reason)
        except AuthCodeRequired as e:
            return server_response(msg=e.reason, codeRequired=True)
        except WebAppLoginError as e:
            close_driver(email)
            return server_response(code=e.code, msg=e.reason)
        except MaxRetryError as e:
            close_driver(email)
            return server_response(code=503,
                                   msg=server_status_messages.DRIVER_OPEN_FAIL)
Ejemplo n.º 2
0
def set_selected_filter(account, filter_id):
    found_filter = db.ea_accounts_collection.find_one({'email': account}, {"search_filters": {"$elemMatch": {"id": filter_id}}})['search_filters'][0]
    if not found_filter:
        return server_response(code=503, msg=server_status_messages.MAIN_SEARCH_FILTER_SET_FAIL)
    res = db.ea_accounts_collection.update_one({'email': account}, {"$set": {"selected_search_filter": found_filter['id']}})
    if res.modified_count > 0:
        return server_response(code=200, msg=server_status_messages.MAIN_SEARCH_FILTER_SET_SUCESS)
    return server_response(code=503, msg=server_status_messages.MAIN_SEARCH_FILTER_SET_FAIL)
Ejemplo n.º 3
0
def add_new_ea_account(owner, email):
    if check_account_if_exists(email):
        return server_response(msg=server_status_messages.EA_ACCOUNT_REGISTERED, code=400)
    new_account = EaAccount(owner, email).__dict__
    try:
        db.ea_accounts_collection.insert_one(new_account)
        return server_response(owner=owner, msg=server_status_messages.EA_ACCOUNT_ADD_SUCCESS, code=201)
    except:
        return server_response(msg=server_status_messages.EA_ACCOUNT_ADD_FAILED, code=500)
Ejemplo n.º 4
0
Archivo: login.py Proyecto: MD1010/FAB
def log_in_user(username, password):
    user = db.users_collection.find_one({"username": username})
    if not user:
        return server_response(msg=server_status_messages.LOGIN_FAILED, code=401)
    if bcrypt.hashpw(password.encode('utf-8'), user["password"]) == user["password"]:
        access_token = create_access_token(username, expires_delta=datetime.timedelta(seconds=5))
        refresh_token = create_refresh_token(username, expires_delta=datetime.timedelta(days=1))
        access_tokens[username] = (access_tokens.get(username) or []) + [access_token]
        refresh_tokens[username] = (refresh_tokens.get(username) or []) + [refresh_token]
        return server_response(msg=server_status_messages.LOGIN_SUCCESS, access_token=access_token, refresh_token=refresh_token)
    else:
        return server_response(msg=server_status_messages.LOGIN_FAILED, code=401)
Ejemplo n.º 5
0
def update_user_password(username, new_password):
    new_hashed_password = hash_password(new_password)
    result = db.users_collection.update_one(
        {"username": username}, {"$set": {
            "password": new_hashed_password
        }})
    if result.modified_count > 0:
        return server_response(
            msg=server_status_messages.USER_PASSWORD_UPDATE_SUCCESS, code=200)
    else:
        return server_response(
            msg=server_status_messages.USER_PASSWORD_UPDATE_FAILED, code=500)
Ejemplo n.º 6
0
def create_new_user(username, password):
    is_new_user = _check_if_new_user(username)
    if is_new_user:
        hashed_password = hash_password(password)
        new_user = User(username, hashed_password).__dict__
        result = db.users_collection.insert(new_user)
        if result:
            return server_response(msg=server_status_messages.USER_CREATE_SUCCESS, code=201)
        else:
            return server_response(msg=server_status_messages.USER_CREATE_FAILED, code=500)
    else:
        return server_response(msg=server_status_messages.USER_EXISTS, code=409)
Ejemplo n.º 7
0
def edit_password(username):
    json_data = request.get_json()
    if json_data.get('username') != username:
        return server_response(status=server_status_messages.AUTH_FAILED,
                               code=401)
    new_password = json_data.get('new_password')
    return update_user_password(username, new_password)
Ejemplo n.º 8
0
 def determine_if_func_should_run(*args):
     json_data = request.get_json()
     email = json_data.get('email')
     login_attempt = login_attempts.get(email)
     if not login_attempt:
         return server_response(status='not authenticated', code=401)
     return func(login_attempt)
Ejemplo n.º 9
0
Archivo: login.py Proyecto: MD1010/FAB
def ea_web_app_disconnect(owner):
    json_data = request.get_json()
    email = json_data.get('email')
    if not authenticated_accounts.get(email):
        return server_response(code=403, msg="Account is already disconnected")
    authenticated_user = authenticated_accounts.get(email)
    return authenticated_user.disconnect()
Ejemplo n.º 10
0
 def disconnect(self):
     close_driver(self.email)
     if authenticated_accounts.get(self.email):
         del authenticated_accounts[self.email]
     update_ea_account_status(self.email, EaAccountStatus.DISCONNECTED)
     return server_response(
         msg=server_status_messages.EA_ACCOUNT_DISCONNECT_SUCCESS, code=200)
Ejemplo n.º 11
0
def start_loop():
    json_data = request.get_json()
    email = json_data['email']
    if not authenticated_accounts.get(email):
        return server_response(code=403, msg="Please connect first before running")
    configuration = json_data['configuration']
    search_parameters = json_data['search_parameters']
    return start_loop_run(authenticated_accounts.get(email), search_parameters, configuration)
Ejemplo n.º 12
0
def edit_username(username):
    json_data = request.get_json()
    # make sure to log again to fetch an updated useraname
    if json_data.get('username') != username:
        return server_response(status=server_status_messages.AUTH_FAILED,
                               code=401)
    new_username = json_data.get('new_username')
    return update_user_username(username, new_username)
Ejemplo n.º 13
0
 def login_with_code(self, email, auth_code):
     try:
         self._set_status_code(auth_code)
         self._remember_account()
         return self._launch()
     except TimeoutException as e:
         close_driver(self.email)
         return server_response(
             code=503, msg=server_status_messages.COULD_NOT_GET_SID)
     except WebAppLoginError as e:
         # dont close the driver if code is incorrect
         if e.reason != server_status_messages.WRONG_STATUS_CODE:
             close_driver(email)
         return server_response(msg=e.reason)
     except MaxRetryError as e:
         close_driver(email)
         return server_response(code=503,
                                msg=server_status_messages.DRIVER_OPEN_FAIL)
Ejemplo n.º 14
0
def update_user_username(old_username, new_username):
    users_collection_result = db.users_collection.update_one(
        {"username": old_username}, {"$set": {
            "username": new_username
        }})
    if users_collection_result.modified_count == 0:
        return server_response(
            msg=server_status_messages.USERNAME_UPDATE_FAILED, code=500)
    # update all the accounts that the owner is the old username to the new one
    ea_accounts_collection_result = db.ea_accounts_collection.update_many(
        {"owner": old_username}, {"$set": {
            "owner": new_username
        }})
    if ea_accounts_collection_result.modified_count == 0:
        return server_response(
            msg=server_status_messages.USERNAME_UPDATE_FAILED, code=500)
    return server_response(msg=server_status_messages.USERNAME_UPDATE_SUCESSS,
                           code=200)
Ejemplo n.º 15
0
    def determine_if_func_should_run(*args):
        json_data = request.get_json()
        email = json_data.get('email')
        # check if owner or username fields exist
        user_account = db.ea_accounts_collection.find_one({"email": email})
        # first login
        if not user_account["password"]:
            return server_response(msg="should login first", code=200)

        password = decrypt_password(user_account["password"])
        return func(user_account.get('owner'), email, password)
Ejemplo n.º 16
0
 def _launch(self):
     socketio.emit('correctCredentials',
                   "Login Success. Launching web app... ")
     self.element_actions.check_if_web_app_is_available()
     self._set_sid_from_requests()
     self._set_fut_host()
     self._add_authenticated_ea_account()
     close_driver(self.email)
     print("sid = " + self.sid) if self.sid else print("NO SID found")
     if self.sid:
         update_ea_account_status(self.email, EaAccountStatus.CONNECTED)
         return server_response(msg=server_status_messages.LOGIN_SUCCESS,
                                code=200)
     raise WebAppLoginError(
         reason=server_status_messages.WEB_APP_NOT_AVAILABLE, code=503)
Ejemplo n.º 17
0
    def determine_if_func_should_run(*args):
        owner = get_jwt_identity()
        json_data = request.get_json()
        email = json_data.get('email')
        # check if owner or username fields exist
        user_account = db.ea_accounts_collection.find_one({"email": email})
        # first login
        if user_account is None:
            return func(owner)
        account_owner = user_account.get('owner')
        if account_owner != owner:
            return server_response(
                msg=server_status_messages.EA_ACCOUNT_BELONGS_TO_ANOTHER_USER,
                code=503)
        else:

            return func(owner)
Ejemplo n.º 18
0
def start_loop_run(ea_account: SeleniumLogin, search_parameters, configuration):
    loop_thread = threading.Thread(target=start_fab_loop, args=(ea_account,search_parameters,configuration,), daemon=True)
    loop_thread.start()
    update_ea_account_status(ea_account.email, EaAccountStatus.RUNNING)
    return server_response(code=200, msg="Running request accepted")
Ejemplo n.º 19
0
Archivo: driver.py Proyecto: MD1010/FAB
 def determine_if_driver_should_open(*args, **kwargs):
     if request.get_json().get('email') in running_accounts:
         return server_response(
             msg=server_status_messages.ACCOUNT_ALREADY_RUNNING, code=503)
     return func(*args, **kwargs)
Ejemplo n.º 20
0
def delete_ea_account_from_user(owner, email):
    ea_accounts_result = db.ea_accounts_collection.delete_one({"owner": owner, "email": email})
    if ea_accounts_result.deleted_count == 0:
        return server_response(msg=server_status_messages.EA_ACCOUNT_DELETE_FAILED, code=400)
    return server_response(msg=server_status_messages.EA_ACCOUNT_DELETE_SUCCESS, code=200)
Ejemplo n.º 21
0
Archivo: login.py Proyecto: MD1010/FAB
 def determine_if_func_should_run(**kwargs):
     token = request.headers.get('Authorization').split()[1]
     username = get_jwt_identity()
     if token not in access_tokens.get(username) and token not in refresh_tokens.get(username):
         return server_response(msg=server_status_messages.AUTH_FAILED, code=401)
     return func(username, **kwargs)
Ejemplo n.º 22
0
def update_ea_account_status(email, status):
    res = db.ea_accounts_collection.update_one({"email": email}, {"$set": {"status": status.value}}, upsert=True)
    if res.modified_count > 0 and status == EaAccountStatus.RUNNING:
        return server_response(code=200, msg=server_status_messages.EA_ACCOUNT_LOGIN_SUCCESS)
    return server_response(code=200, msg=server_status_messages.EA_ACCOUNT_RUNNING_SUCCESS)
Ejemplo n.º 23
0
def remove_search_filter_to_account(account, filter_id):
    res = db.ea_accounts_collection.update_one({'email': account}, {"$pull": {"search_filters": {"id": filter_id}}})
    if res.modified_count > 0:
        return server_response(code=200, msg=server_status_messages.SEARCH_FILTER_REMOVE_SUCCESS)
    return server_response(code=503, msg=server_status_messages.SEARCH_FILTER_REMOVE_FAIL)
Ejemplo n.º 24
0
def add_search_filter_to_account(account, search_filter):
    res = db.ea_accounts_collection.update_one({'email': account}, {"$push": {"search_filters": search_filter}})
    if res.modified_count > 0:
        return server_response(code=201, msg=server_status_messages.NEW_SEARCH_FILTER_ADD_SUCCESS)
    return server_response(code=503, msg=server_status_messages.NEW_SEARCH_FILTER_ADD_FAIL)