def execute_update_workspace_actions(self, workspace: Workspace) -> None: """ WARNING ! This method Will be Deprecated soon, see https://github.com/tracim/tracim/issues/1589 and https://github.com/tracim/tracim/issues/1487 This method do post update workspace actions """ # FIXME - G.M - 2019-03-18 - move this code to another place when # event mechanism is ready, see https://github.com/tracim/tracim/issues/1487 # event on_updated_workspace should start hook use by agenda app code. app_lib = ApplicationApi(app_list=app_list) if app_lib.exist(AGENDA__APP_SLUG): # TODO - G.M - 2019-04-11 - Circular Import, will probably be remove # with event refactor, see https://github.com/tracim/tracim/issues/1487 from tracim_backend.applications.agenda.lib import AgendaApi if workspace.agenda_enabled: agenda_api = AgendaApi(current_user=self._user, session=self._session, config=self._config) try: agenda_api.ensure_workspace_agenda_exists(workspace) except AgendaServerConnectionError as exc: logger.error(self, "Cannot connect to agenda server") logger.exception(self, exc) except Exception as exc: logger.error( self, "Something goes wrong during agenda create/update") logger.exception(self, exc)
def get_config(self) -> ConfigModel: collaborative_document_edition_config = None app_lib = ApplicationApi(app_list=app_list) if app_lib.exist(COLLABORATIVE_DOCUMENT_EDITION__APP_SLUG): from tracim_backend.applications.collaborative_document_edition.factory import ( CollaborativeDocumentEditionFactory, ) collaborative_document_edition_api = CollaborativeDocumentEditionFactory().get_lib( session=None, current_user=None, config=self._config ) collaborative_document_edition_config = collaborative_document_edition_api.get_config() return ConfigModel( email_notification_activated=self._config.EMAIL__NOTIFICATION__ACTIVATED, new_user_invitation_do_notify=self._config.NEW_USER__INVITATION__DO_NOTIFY, webdav_enabled=self._config.WEBDAV__UI__ENABLED, webdav_url=urljoin(self._config.WEBDAV__BASE_URL, self._config.WEBDAV__ROOT_PATH), collaborative_document_edition=collaborative_document_edition_config, content_length_file_size_limit=self._config.LIMITATION__CONTENT_LENGTH_FILE_SIZE, workspace_size_limit=self._config.LIMITATION__WORKSPACE_SIZE, workspaces_number_per_user_limit=self._config.LIMITATION__SHAREDSPACE_PER_USER, instance_name=self._config.WEBSITE__TITLE, email_required=self._config.EMAIL__REQUIRED, )
def execute_updated_user_actions(self, user: User) -> None: """ WARNING! This method will be deprecated soon, see https://github.com/tracim/tracim/issues/1589 and https://github.com/tracim/tracim/issues/1487 This method does post-update user actions """ # TODO - G.M - 04-04-2018 - [auth] # Check if this is already needed with # new auth system user.ensure_auth_token( validity_seconds=self._config.USER__AUTH_TOKEN__VALIDITY) # FIXME - G.M - 2019-03-18 - move this code to another place when # event mechanism is ready, see https://github.com/tracim/tracim/issues/1487 # event on_updated_user should start hook use by agenda app code. app_lib = ApplicationApi(app_list=app_list) if app_lib.exist(AGENDA__APP_SLUG): agenda_api = AgendaApi(current_user=self._user, session=self._session, config=self._config) try: agenda_api.ensure_user_agenda_exists(user) except AgendaServerConnectionError as exc: logger.error(self, "Cannot connect to agenda server") logger.exception(self, exc) except Exception as exc: logger.error( self, "Something goes wrong during agenda create/update") logger.exception(self, exc)
def execute_created_user_actions(self, user: User) -> None: """ WARNING! This method will be deprecated soon, see https://github.com/tracim/tracim/issues/1589 and https://github.com/tracim/tracim/issues/1487 This method do post-create user actions """ # FIXME - G.M - 2019-03-18 - move this code to another place when # event mechanism is ready, see https://github.com/tracim/tracim/issues/1487 # event on_created_user should start hook use by agenda app code. app_lib = ApplicationApi(app_list=app_list) if app_lib.exist(AGENDA__APP_SLUG): agenda_api = AgendaApi(current_user=self._user, session=self._session, config=self._config) try: agenda_already_exist = agenda_api.ensure_user_agenda_exists( user) if agenda_already_exist: logger.warning( self, "user {} has just been created but their own agenda already exists" .format(user.user_id), ) except AgendaServerConnectionError as exc: logger.error(self, "Cannot connect to the agenda server") logger.exception(self, exc) except Exception as exc: logger.error( self, "Something went wrong during agenda create/update") logger.exception(self, exc)
def take_app_action(self, parsed_args: argparse.Namespace, app_context: AppEnvironment) -> None: self._session = app_context["request"].dbsession self._app_config = app_context["registry"].settings["CFG"] delete_user_revision = parsed_args.force or parsed_args.delete_revisions delete_owned_sharespaces = (parsed_args.force or parsed_args.best_effort or parsed_args.delete_sharespaces) anonymize_if_required = parsed_args.best_effort or parsed_args.anonymize_if_required if parsed_args.dry_run_mode: print("(!) Running in dry-run mode, no changes will be applied.") app_context["request"].tm.doom() if parsed_args.force: print("(!) Running in force mode") if parsed_args.best_effort: print("(!) Running in best-effort mode") if delete_user_revision: print( "/!\\ Delete all user revisions, database created may be broken /!\\." ) if delete_owned_sharespaces: print("(!) User owned sharespaces will be deleted too.") if anonymize_if_required: print("(!) Will anonymize user if not possible to delete it") if parsed_args.anonymize_name: print('(!) Custom anonymize name choosen is: "{}"'.format( parsed_args.anonymize_name)) print("") deleted_user_ids = set() # typing.Set[int] deleted_workspace_ids = set() # typing.Set[int] with unprotected_content_revision(self._session) as session: uapi = UserApi( config=self._app_config, session=session, current_user=None, show_deleted=True, show_deactivated=True, ) user_list = [] # type: typing.List[User] for login in parsed_args.logins: try: user = uapi.get_one_by_login(login) user_list.append(user) except UserDoesNotExist as exc: print( 'ERROR: user with email/username "{}" does not exist'. format(login)) raise exc print("~~~~") print("Deletion of user from Database") print("~~~~\n") print("~~~~") for user in user_list: cleanup_lib = CleanupLib(session, self._app_config, dry_run_mode=parsed_args.dry_run_mode) deleted_user_ids_result = self._delete_user_database_info( user, force_delete_all_user_revisions=delete_user_revision, anonymize_if_required=anonymize_if_required, delete_owned_workspaces=delete_owned_sharespaces, anonymized_user_display_name=parsed_args.anonymize_name, cleanup_lib=cleanup_lib, ) deleted_user_ids.add(deleted_user_ids_result.user_id) deleted_workspace_ids.update( deleted_user_ids_result.workspace_ids) print("~~~~") print( "deletion of user(s) from database process almost finished, change will be applied at end " "of this script.\n") print("~~~~") print("Deletion of Caldav Agenda\n") app_lib = ApplicationApi(app_list=app_list) if app_lib.exist(AGENDA__APP_SLUG): # INFO - G.M - 2019-12-13 - cleanup agenda at end of process if deleted_workspace_ids: deleted_workspace_ids_str = [ '"{}"'.format(workspace_id) for workspace_id in deleted_workspace_ids ] print("delete agenda of workspaces {}".format( ", ".join(deleted_workspace_ids_str))) for workspace_id in deleted_workspace_ids: try: cleanup_lib.delete_workspace_agenda(workspace_id) except AgendaNotFoundError: print( 'Warning: Cannot delete agenda for workspace "{}", agenda not found. Agenda path may be incorrect or agenda not created' .format(workspace_id)) print(traceback.format_exc()) if deleted_user_ids: deleted_user_ids_str = [ '"{}"'.format(user_id) for user_id in deleted_user_ids ] print("delete agenda of users {}".format( ", ".join(deleted_user_ids_str))) for user_id in deleted_user_ids: try: cleanup_lib.delete_user_agenda(user_id) except AgendaNotFoundError: print( 'Warning: Cannot delete agenda for user "{}", agenda not found. Agenda path may be incorrect or agenda not created' .format(user_id)) print(traceback.format_exc()) else: print( "Warning ! Agenda app not enabled, agenda will not be deleted." ) print("~~~~") print("deletion of Agenda process finished") print("~~~~") if parsed_args.dry_run_mode: print("Finished (dry-run mode, no change applied)") else: print("Finished")