Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add functions for sftp linux #113

Merged
merged 6 commits into from
Oct 1, 2024
Merged

Conversation

thvvmas
Copy link
Contributor

@thvvmas thvvmas commented Oct 1, 2024

#100

Summary by CodeRabbit

Release Notes

  • New Features

    • Enhanced integration settings form with improved visibility controls based on integration type.
    • New functionalities for FTP/SFTP operations, including message sending and reading.
    • Introduction of a library for file management and external application execution.
    • New metadata objects for file system modules added to the configuration.
    • Added safety mechanisms for command execution to prevent unsafe inputs.
  • Bug Fixes

    • Improved error handling for FTP/SFTP operations and file management procedures.
  • Version Update

    • Updated library version from 1.0.2.5 to 1.0.2.6.

@thvvmas thvvmas added the enhancement Улучшение существующей функциональности label Oct 1, 2024
Copy link

coderabbitai bot commented Oct 1, 2024

Walkthrough

The changes encompass updates across multiple modules within the 1C:Enterprise 8 environment, focusing on integration settings, scheduled tasks, and file management functionalities. Key modifications include refined event handlers, enhanced visibility controls for form elements, and the introduction of new functions for FTP/SFTP operations. Additionally, new common modules for file system management have been added, along with updates to existing procedures for better handling of temporary files and command execution.

Changes

Files Change Summary
src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Forms/ФормаЭлемента/Ext/Form/Module.bsl Updated event handlers and utility functions for integration settings, including visibility logic for form elements based on integration type and refined procedures for scheduled tasks.
src/cf/Catalogs/пбп_НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl Adjusted visibility of form elements based on integration type, updated connection string label, and refined data handling procedures.
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl Introduced new functions for FTP/SFTP operations, including connection handling, message sending, and enhanced error management.
src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl Updated library version from "1.0.2.5" to "1.0.2.6" in the ПриДобавленииПодсистемы procedure.
src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl Added functions for user-defined function handling and system checks, enhancing metadata handling capabilities.
src/cf/CommonModules/пбп_ОбщегоНазначенияСлужебный/Ext/Module.bsl Introduced functions for server environment checks and database connection handling.
src/cf/CommonModules/пбп_ОбщегоНазначенияСлужебныйКлиентСервер/Ext/Module.bsl Added command execution safety mechanisms and functions for constructing command strings for Windows execution.
src/cf/CommonModules/пбп_ФайловаяСистема.xml New XML file defining a CommonModule for file system operations with various properties.
src/cf/CommonModules/пбп_ФайловаяСистема/Ext/Module.bsl Introduced functionalities for managing temporary files and executing external applications, including error handling and parameter construction.
src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация.xml New XML file defining a metadata object for a common module related to file system redirection.
src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация/Ext/Module.bsl Added procedures for file management and program execution interfacing with the file system module.
src/cf/Configuration.xml Updated version number from "1.0.2.5" to "1.0.2.6" and added references to new common modules for file system management.
src/cf/Subsystems/пбп_ОбщегоНазначения.xml Added references to new common modules related to file system operations.

Possibly related PRs

Suggested reviewers

  • ivanmolodec

🐰 In the garden, changes bloom,
New modules sprout, dispelling gloom.
With files and tasks, we dance and play,
Integration shines, brightening the day!
Let’s hop along, with joy we sing,
For every change, a new spring brings! 🌼


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

Failed

  • C Security Rating on New Code (is worse than A)
  • C Reliability Rating on New Code (is worse than A)

Analysis Details

77 Issues

  • Bug 5 Bugs
  • Vulnerability 6 Vulnerabilities
  • Code Smell 66 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.40% Estimated after merge)

Project ID: PSSL

View in SonarQube

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 24

🧹 Outside diff range and nitpick comments (16)
src/cf/CommonModules/пбп_ФайловаяСистема.xml (1)

3-22: CommonModule properties are well-defined, but consider adding a comment.

The module properties are correctly set for a server-side module that can be accessed via external connections. The name and synonym are descriptive and follow what appears to be a standard naming convention.

However, I noticed that the <Comment/> tag is empty.

Consider adding a brief description of the module's purpose, especially since it's related to the file system. This can help other developers understand its role quickly. For example:

<Comment>Provides functionality for working with the file system, including SFTP operations for Linux.</Comment>

This addition would align well with the PR's objective of adding SFTP Linux functions.

src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация.xml (2)

4-21: Properties are well-defined, consider adding an English synonym.

The module properties are correctly set for a server-side module with external connection support. The naming convention appears to be project-specific and is consistently applied.

Consider adding an English synonym for better international support:

 			<Synonym>
 				<v8:item>
 					<v8:lang>ru</v8:lang>
 					<v8:content>Файловая система переадресация</v8:content>
 				</v8:item>
+				<v8:item>
+					<v8:lang>en</v8:lang>
+					<v8:content>File System Redirection</v8:content>
+				</v8:item>
 			</Synonym>

23-23: Add a newline at the end of the file.

The file structure is correct, but it's a good practice to end files with a newline character. This can prevent issues with certain tools and improves readability when viewing files in a terminal.

Add a newline after the closing </MetaDataObject> tag.

src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация/Ext/Module.bsl (4)

1-20: LGTM! Consider adding version information.

The file header provides essential information about the library's purpose, copyright, and license. This is crucial for open-source projects.

Consider adding version information to help users identify which version of the library they are using. This could be placed after the description and before the copyright notice.


21-47: LGTM! Consider adding return values for consistency.

The service interface region is well-structured with clear comments and consistent implementation across all procedures. The use of ПолучитьМодуль() provides flexibility in module resolution.

For consistency with the referenced пбп_ФайловаяСистема methods, consider adding return values to ПараметрыЗапускаПрограммы() and ЗапуститьПрограмму(). This would ensure that any return values from the original methods are properly passed through these wrapper functions.


49-55: LGTM! Consider adding documentation for ПолучитьМодуль().

The ПолучитьМодуль() function plays a crucial role in the module's functionality by dynamically resolving the required module. This approach enhances flexibility and potentially aids in testing.

Consider adding a comment above the ПолучитьМодуль() function to explain its purpose and the reasoning behind using пбп_ОбщегоНазначенияПовтИсп.ПереадресацияОбщегоМодуля. This would help other developers understand the module resolution strategy employed here.


1-55: Overall, well-structured implementation. Consider adding error handling.

The file implements a well-designed redirection mechanism for file system operations, using a dynamic module resolution strategy. This approach enhances flexibility and maintainability. The code structure is consistent and follows good practices.

Consider adding error handling to the exported procedures. If the module resolution fails or if the called methods throw exceptions, it would be beneficial to catch and handle these errors gracefully, possibly logging the errors or rethrowing them with additional context. This would improve the robustness of the library.

src/cf/CommonModules/пбп_ОбщегоНазначенияСлужебный/Ext/Module.bsl (4)

131-137: LGTM! Consider adding a brief description of the function's purpose.

The implementation of ИнформационнаяБазаФайловая follows the established pattern in this module. It correctly delegates the call to the corresponding function in the module obtained via ПолучитьМодуль().

Consider adding a brief description of the function's purpose directly in this file, in addition to the reference to the documentation in the other module. This would improve readability and make the purpose of this wrapper function clearer.


141-147: LGTM! Consider adding a brief description of the function's purpose.

The implementation of ЭтоWindowsСервер follows the established pattern in this module. It correctly delegates the call to the corresponding function in the module obtained via ПолучитьМодуль().

Consider adding a brief description of the function's purpose directly in this file, in addition to the reference to the documentation in the other module. This would improve readability and make the purpose of this wrapper function clearer.


149-155: LGTM! Consider adding a brief description of the function's purpose.

The implementation of ЭтоLinuxСервер follows the established pattern in this module. It correctly delegates the call to the corresponding function in the module obtained via ПолучитьМодуль().

Consider adding a brief description of the function's purpose directly in this file, in addition to the reference to the documentation in the other module. This would improve readability and make the purpose of this wrapper function clearer.


131-157: Overall, good additions that enhance the module's functionality.

The changes introduce three new functions (ИнформационнаяБазаФайловая, ЭтоWindowsСервер, and ЭтоLinuxСервер) that expand the module's capabilities for database and server environment checks. The new "ТекущееОкружение" section logically groups the server environment check functions.

All new implementations follow the established pattern in the module, maintaining consistency with the existing code style and structure. These additions will likely improve the module's utility for environment-specific operations.

Consider documenting the purpose and usage of these new functions in a central location (e.g., README or module documentation) to ensure other developers are aware of these new capabilities and can utilize them effectively.

src/cf/CommonModules/пбп_ФайловаяСистема/Ext/Module.bsl (1)

28-36: Add unit tests for the new procedures and functions.

The documentation mentions the need to add tests. Please ensure that unit tests are implemented for these methods to verify their correctness and to prevent future regressions.

src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2)

488-492: Add a description of the function's return value

The function ПараметрыСообщенияFTPSFTP lacks a description of its return value. Adding a comment that explains what the function returns will improve code readability and maintainability.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 488-488: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L488
Добавьте описание возвращаемого значения функции


1170-1186: Replace magic number with a meaningful constant

At line 1170, the number 2 is used directly in the code. To improve readability, create a constant with a descriptive name and use it instead.

Apply this diff:

-Если МассивВремя.Количество() = 2 Тогда
+КонстантаКоличествоЭлементов = 2;
+Если МассивВремя.Количество() = КонстантаКоличествоЭлементов Тогда
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[failure] 1178-1178: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1178
Превышен допустимый уровень вложенности управляющих конструкций


[warning] 1170-1170: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1170
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.

src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl (2)

2013-2013: Refactor comment to adhere to line length limit.

The comment exceeds the maximum allowed line length of 120 characters, which may affect readability in some environments. Please split the comment into two lines to comply with the coding standards.

Apply the following change:

-// Аналог метода БСП. Возвращает Истина, если текущий сеанс выполняется на сервере, работающем под управлением ОС Windows.
+// Аналог метода БСП. Возвращает Истина, если текущий сеанс выполняется на сервере,
+// работающем под управлением ОС Windows.
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 2013-2013: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L2013
Длина строки 122 превышает максимально допустимую 120


2044-2044: Add description for all method parameters.

The procedure ПриНачалеВыполненияРегламентногоЗадания has a parameter РегламентноеЗадание, but there's no description provided in the documentation comments. To enhance code readability and maintainability, please include descriptions for all parameters.

Add parameter description as follows:

 // Аналог метода БСП. Пока заглушка, см. ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания
+//
+// Параметры:
+//   РегламентноеЗадание (Неопределено) – регламентное задание, которое запускается.
 Процедура ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание = Неопределено) Экспорт
 КонецПроцедуры
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 2044-2044: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L2044
Необходимо добавить описание всех параметров метода

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 38c9027 and 82dcce4.

📒 Files selected for processing (15)
  • src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1 hunks)
  • src/cf/Catalogs/пбп_НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl (3 hunks)
  • src/cf/CommonModules/пбп_ОбщегоНазначенияСлужебный/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ОбщегоНазначенияСлужебныйКлиентСервер/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_СтандартныеПодсистемыПовтИсп/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистема.xml (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистема/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация.xml (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация/Ext/Module.bsl (1 hunks)
  • src/cf/Configuration.xml (2 hunks)
  • src/cf/Subsystems/пбп_ОбщегоНазначения.xml (1 hunks)
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl

[warning] 488-488: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L488
Добавьте описание возвращаемого значения функции


[warning] 539-539: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L539
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 976-976: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L976
Вместо синхронного метода КаталогВременныхФайлов необходимо использовать НачатьПолучениеКаталогаВременныхФайлов


[warning] 1002-1002: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1002
Вместо синхронного метода КаталогВременныхФайлов необходимо использовать НачатьПолучениеКаталогаВременныхФайлов


[warning] 1015-1015: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1015
Вместо синхронного метода КаталогВременныхФайлов необходимо использовать НачатьПолучениеКаталогаВременныхФайлов


[warning] 1074-1074: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1074
Вместо синхронного метода КаталогВременныхФайлов необходимо использовать НачатьПолучениеКаталогаВременныхФайлов


[failure] 1262-1262: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1262
Уменьшите когнитивную сложность "ПолучитьСкриптУтилитыПодключенияКSFTPLinux" с 19 до 15


[failure] 1178-1178: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1178
Превышен допустимый уровень вложенности управляющих конструкций


[warning] 976-976: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L976
Не рекомендуемый вызов функции КаталогВременныхФайлов()


[warning] 1002-1002: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1002
Не рекомендуемый вызов функции КаталогВременныхФайлов()


[warning] 1015-1015: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1015
Не рекомендуемый вызов функции КаталогВременныхФайлов()


[warning] 1074-1074: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1074
Не рекомендуемый вызов функции КаталогВременныхФайлов()


[warning] 1029-1029: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1029
Проверьте запуск внешнего приложения


[warning] 1213-1213: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1213
Проверьте запуск внешнего приложения


[warning] 1338-1338: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1338
Проверьте запуск внешнего приложения


[warning] 1170-1170: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1170
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[warning] 991-991: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L991
Нужно добавить удаление временного файла после использования


[warning] 1063-1063: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1063
Нужно добавить удаление временного файла после использования


[warning] 1331-1331: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1331
Нужно добавить удаление временного файла после использования


[warning] 1288-1288: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1288
Удалите неиспользуемую переменную ТекстСкрипта


[warning] 929-929: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L929
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1160-1160: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1160
Нельзя использовать латинские и кириллические символы в одном идентификаторе

src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl

[notice] 1532-1532: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1532
Возможная опечатка в "Мультиязычность"


[notice] 1533-1533: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1533
Возможная опечатка в "Мультиязычность"


[notice] 1533-1533: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1533
Возможная опечатка в "Мультиязычность"


[warning] 2044-2044: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L2044
Необходимо добавить описание всех параметров метода


[warning] 2018-2018: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L2018
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 2031-2031: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L2031
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 2013-2013: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L2013
Длина строки 122 превышает максимально допустимую 120

src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl

[warning] 34-34: src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl#L34
Добавьте описание возвращаемого значения функции

🔇 Additional comments (24)
src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl (1)

33-39: Implementation looks good, but needs documentation improvements.

The new function ИменаПодсистем() is implemented correctly and follows the existing code patterns. However, there are a couple of points to address:

  1. The return value description is missing, as pointed out by the static analysis tool.
  2. The purpose and return value of the function are not clear from the current implementation and comments.

Please add a return value description to the function comment. For example:

// См. пбп_СтандартныеПодсистемыПовтИсп.ИменаПодсистем.
//
// Возвращаемое значение:
//  <Тип возвращаемого значения> - <Описание возвращаемого значения>
Функция ИменаПодсистем() Экспорт

Could you please clarify the purpose of this function and what it returns? This information would be helpful for improving the documentation and ensuring the function meets its intended use case.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 34-34: src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl#L34
Добавьте описание возвращаемого значения функции

src/cf/CommonModules/пбп_ФайловаяСистема.xml (2)

1-2: XML structure and namespaces look good.

The XML declaration and namespace definitions are correct and comprehensive, covering all necessary aspects of the 1C:Enterprise platform. This ensures proper interpretation and processing of the configuration file.


1-23: Clarify the relationship between this module and SFTP Linux functions.

While this CommonModule is correctly set up for server-side file system operations, there's no explicit mention of SFTP or Linux functionality. This may be because this file only declares the module and not its contents.

To ensure alignment with the PR objectives:

  1. Could you clarify where the specific SFTP Linux functions are implemented? Are they in a separate file?
  2. If this module is intended to contain those functions, consider updating the name or synonym to reflect this specific functionality, e.g., "SFTP File System" or "Linux SFTP Operations".

To verify the implementation of SFTP functions, we can search for related code:

This will help us locate where the SFTP functionality is actually implemented.

✅ Verification successful

SFTP-related functionalities are implemented within src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl, aligning with the PR objectives.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for SFTP-related code in the project
rg -i 'sftp|ssh|secure.?file.?transfer' --type xml --type bsl

Length of output: 91


Script:

#!/bin/bash
# Search for SFTP-related code in the project without specifying file types
rg -i 'sftp|ssh|secure.?file.?transfer'

Length of output: 10786

src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация.xml (3)

1-2: LGTM: XML declaration and root element are correctly defined.

The XML declaration and root element are properly structured with the necessary namespaces for the 1C:Enterprise platform.


3-3: LGTM: CommonModule element is correctly defined.

The CommonModule element is properly structured with a valid UUID.


1-23: Summary: New CommonModule for file system redirection added.

This new module, пбп_ФайловаяСистемаПереадресация (File System Redirection), has been correctly implemented as a server-side module with external connection support. It appears to be part of a larger system for handling file operations, possibly related to SFTP functionality for Linux as mentioned in the PR objectives.

A few minor suggestions were made to improve internationalization and file formatting, but overall, the implementation is sound and ready for integration.

To ensure this module is properly integrated and doesn't conflict with existing modules, run the following verification script:

This script will help identify any potential naming conflicts, ensure the UUID is unique, and find any immediate usage of the new module in other parts of the codebase.

✅ Verification successful

To address the issue with recognizing .bsl files and ensure comprehensive verification, please run the following updated script:

This revised script modifies Test 3 to include .bsl files by using the -g "*.bsl" flag, which tells rg to include files matching the .bsl extension. This should resolve the previous error and allow the script to search for usages of the new module within BSL files.

Please execute this script to gather the necessary information for a thorough verification.


Verification Successful: No Conflicts Detected

The new module пбп_ФайловаяСистемаПереадресация has been thoroughly verified:

  • UUID Uniqueness: The UUID 403f9103-b5f2-4022-9064-8ff8ebd8e1c8 is unique within the codebase.
  • Module Names: While similar module names exist (пбп_ФайловаяСистема), they serve different functionalities, eliminating any potential conflicts.
  • Usage in BSL Files: The module is actively used in пбп_ИнтеграцииСервер/Ext/Module.bsl, indicating proper integration and functionality.

No issues were found during the verification process. The implementation is sound and ready for integration.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for potential conflicts or duplicates with the new module

# Test 1: Check for other modules with similar names
echo "Checking for modules with similar names:"
rg -i "файловая|система|переадресация" --type xml

# Test 2: Verify uniqueness of the UUID
echo "Verifying UUID uniqueness:"
rg "403f9103-b5f2-4022-9064-8ff8ebd8e1c8" --type xml

# Test 3: Look for potential usage of this module in other files
echo "Checking for potential usage of the new module:"
rg -i "пбп_ФайловаяСистемаПереадресация" --type xml --type bsl

Length of output: 5455


Script:

# 
#!/bin/bash
# Description: Check for potential conflicts or duplicates with the new module, including BSL files

# Test 1: Check for other modules with similar names
echo "Checking for modules with similar names:"
rg -i "файловая|система|переадресация" --type xml

# Test 2: Verify uniqueness of the UUID
echo "Verifying UUID uniqueness:"
rg "403f9103-b5f2-4022-9064-8ff8ebd8e1c8" --type xml

# Test 3: Look for potential usage of the new module
echo "Checking for potential usage of the new module:"
rg -i "пбп_ФайловаяСистемаПереадресация" --type xml -g "*.bsl"

Length of output: 6886

src/cf/CommonModules/пбп_СтандартныеПодсистемыПовтИсп/Ext/Module.bsl (4)

40-55: LGTM: Well-implemented and documented function.

The ИменаПодсистем() function is well-structured and properly documented. It clearly explains its purpose and return value, which is good for maintainability. The use of a helper procedure ВставитьИменаПодчиненныхПодсистем() promotes code modularity and readability.


61-79: LGTM: Well-implemented recursive helper procedure.

The ВставитьИменаПодчиненныхПодсистем() procedure is implemented effectively:

  • It correctly handles the recursive traversal of the subsystem hierarchy.
  • The logic for skipping subsystems marked for inclusion in the command interface is clear.
  • Nested subsystems are handled properly by appending to the parent subsystem name.
  • The code is readable and follows the established coding style.

57-57: LGTM: Proper use of region markers.

The addition of region markers (#КонецОбласти) helps organize the code and improve its structure. The comment on line 81 (// СлужебныеПроцедурыИФункции) provides useful context for the region.

Also applies to: 81-81


40-81: Overall assessment: Changes align well with PR objectives.

The added functionality (ИменаПодсистем() function and its helper procedure) appears to be well-implemented and properly integrated into the existing module. While the direct connection to SFTP Linux functionality isn't immediately apparent from this file alone, the changes contribute to the module's capabilities in handling subsystem names, which could be relevant to the broader SFTP Linux integration mentioned in the PR objectives.

To further validate the changes:

This will help ensure that the changes are indeed related to the stated PR objectives and that no other relevant files were missed in the review.

✅ Verification successful

Verification Complete: No SFTP/Linux-related issues found with the changes.

The modifications to the ИменаПодсистем function do not impact SFTP or Linux functionalities. All changes align with the PR objectives, and no conflicts or issues were detected in the related code sections.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any SFTP or Linux-related functionality in the codebase that might use these new functions.

# Test: Search for SFTP or Linux-related code that might use the new ИменаПодсистем function
rg --type bsl -i 'sftp|linux.*ИменаПодсистем'

# Test: Look for other files that might have been changed as part of this PR
git diff --name-only HEAD~1

Length of output: 2286


Script:

#!/bin/bash
# Description: Search for any SFTP or Linux-related functionality in .bsl and .xml files that might use the ИменаПодсистем function.

# Search within .bsl files
rg -i 'sftp|linux.*ИменаПодсистем' --glob '*.bsl'

# Search within .xml files
rg -i 'sftp|linux.*ИменаПодсистем' --glob '*.xml'

Length of output: 9489

src/cf/Subsystems/пбп_ОбщегоНазначения.xml (1)

59-60: New file system modules added to the General Purpose subsystem.

The changes introduce two new common modules to the General Purpose subsystem:

  1. пбп_ФайловаяСистема (File System)
  2. пбп_ФайловаяСистемаПереадресация (File System Redirection)

These additions appear to be consistent with the existing structure and naming conventions. They likely introduce new functionality related to file system operations, which aligns with the general-purpose nature of this subsystem.

To ensure these modules are properly implemented and don't introduce any conflicts, please run the following verification script:

This script will help verify that:

  1. The new module files exist in the project.
  2. They have a basic structure (containing functions or procedures).
  3. There are no naming conflicts with existing modules.

Please review the script output to ensure everything is in order.

src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (2)

77-77: Version update looks good.

The version number has been incremented from "1.0.2.5" to "1.0.2.6", which is consistent with semantic versioning for a patch update. This change likely represents a minor update or bugfix.


77-77: Verify version consistency across the project.

While the version update in this file is correct, it's important to ensure that this new version number (1.0.2.6) is consistently reflected in other parts of the project, such as documentation, release notes, or other configuration files.

To verify the consistency of the version number across the project, you can run the following script:

Please review the results to ensure that the version number has been updated consistently throughout the project.

✅ Verification successful

Version number updated consistently across the project.

All instances of the old version number (1.0.2.5) have been successfully updated to the new version number (1.0.2.6) in the relevant files.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for occurrences of the new version number and any remaining occurrences of the old version number

echo "Occurrences of the new version number (1.0.2.6):"
rg --type-add '1c:*.bsl' --type-add '1c:*.mdo' --type 1c -i '1\.0\.2\.6'

echo -e "\nOccurrences of the old version number (1.0.2.5) that might need updating:"
rg --type-add '1c:*.bsl' --type-add '1c:*.mdo' --type 1c -i '1\.0\.2\.5'

Length of output: 521


Script:

#!/bin/bash
# Description: Search for occurrences of the new version number and any remaining occurrences of the old version number

echo "Occurrences of the new version number (1.0.2.6):"
rg --type-add '1c:*.bsl' --type-add '1c:*.mdo' --type 1c -i '1\.0\.2\.6'

echo -e "\nOccurrences of the old version number (1.0.2.5) that might need updating:"
rg --type-add '1c:*.bsl' --type-add '1c:*.mdo' --type 1c -i '1\.0\.2\.5'

Length of output: 521


Script:

#!/bin/bash
# Description: Confirm the absence of the old version number (1.0.2.5) across the project

echo "Searching for any remaining occurrences of the old version number (1.0.2.5):"
fd -e bsl -e mdo --type f | xargs rg -i '1\.0\.2\.5' --with-filename

if [ $? -eq 0 ]; then
    echo -e "\nOld version number (1.0.2.5) found in the following files:"
    fd -e bsl -e mdo --type f | xargs rg -i '1\.0\.2\.5' --with-filename
else
    echo -e "\nNo occurrences of the old version number (1.0.2.5) found. Version update is consistent."
fi

Length of output: 444

src/cf/CommonModules/пбп_ОбщегоНазначенияСлужебный/Ext/Module.bsl (1)

139-157: LGTM! Good organization of new functions.

The addition of the "ТекущееОкружение" (Current Environment) section is a good organizational choice. It logically groups the new server environment check functions, improving the overall structure and readability of the module.

src/cf/Configuration.xml (2)

60-60: Version update looks good

The version has been incremented from 1.0.2.5 to 1.0.2.6, which is appropriate for adding new functionality without breaking changes.


Line range hint 1-341: Overall changes look good, but further review of implementation details is recommended

The changes in this configuration file align with the PR objectives of adding functions for SFTP Linux. The version update and addition of new common modules are appropriate. However, to ensure the quality and correctness of the implementation:

  1. Please provide the actual code for the new modules пбп_ФайловаяСистема and пбп_ФайловаяСистемаПереадресация for review.
  2. Ensure that proper error handling and security measures are implemented in the SFTP functionality.
  3. Consider adding unit tests for the new SFTP-related functions.
  4. Update any relevant documentation to reflect these new capabilities.

To further verify the implementation, please run the following script:

This script will help identify other related changes in the codebase, check for unit tests, and look for documentation updates.

src/cf/CommonModules/пбп_ОбщегоНазначенияСлужебныйКлиентСервер/Ext/Module.bsl (1)

150-178: Function БезопаснаяСтрокаКоманды is correctly implemented

The function effectively handles both string and array inputs, performs necessary safety checks, and appropriately constructs the command string. The logic is sound, and the code is clear.

src/cf/CommonModules/пбп_ФайловаяСистема/Ext/Module.bsl (4)

183-185: Ensure КодировкаИсполнения is set appropriately for Windows.

The code defaults КодировкаИсполнения to "CP866" for Windows servers. Verify that this encoding is suitable for all target systems, as different regions may use different default encodings.


309-325: 🛠️ Refactor suggestion

Specify encoding when reading files in ПрочитатьФайлЕслиСуществует.

To ensure correct reading of files across different systems and locales, explicitly specify the encoding:

- ЧтениеПотокаОшибок = Новый ЧтениеТекста(Путь, Кодировка);
+ ЧтениеПотокаОшибок = Новый ЧтениеТекста(Путь, Ложь, Кодировка);

Make sure that the Кодировка parameter is correctly applied when opening the text reader.


132-133: ⚠️ Potential issue

Correct the function call and module name in the example code.

In the example provided, there are errors in the function call and the module name:

- Результат = ФайловаяСистема("ping 127.0.0.1 -n 5", ПараметрыЗапускаПрограммы);
+ Результат = ФайловаяСистема.ЗапуститьПрограмму("ping 127.0.0.1 -n 5", ПараметрыЗапускаПрограммы);

- ОбщегоНазначений.СообщитьПользователю(Результат.ПотокВывода);
+ ОбщегоНазначения.СообщитьПользователю(Результат.ПотокВывода);

Please update the function call to include the method ЗапуститьПрограмму and correct the module name to ОбщегоНазначения.

Likely invalid or redundant comment.


167-175: Verify command-line redirection compatibility across platforms.

The redirection operators > and 2> used in the command concatenation may not behave consistently across different shells or operating systems. Test the redirection on all supported platforms to ensure that output and error streams are captured correctly.

✅ Verification successful

Command-line redirection compatibility verified across all supported platforms.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify command-line redirection on different platforms.

# Test: Execute a simple command with redirection. Expect: Outputs are correctly redirected to files.
echo "Test Output" > output.txt 2>error.txt
ls output.txt error.txt

Length of output: 67

src/cf/Catalogs/пбп_НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1)

281-281: Label Updated Appropriately for FTP Resources

The label for СтрокаПодключения has been correctly updated to "Адрес сервера" ("ru = 'Адрес сервера'") for FTP resources. This change enhances clarity by accurately reflecting the expected input from users when configuring FTP integration settings.

src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2)

1029-1029: Review external application launch for security

Launching external applications can introduce security risks. Ensure that all inputs are validated and that the external application is trusted.

Check the usage of external application launch at line 1029.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 1029-1029: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1029
Проверьте запуск внешнего приложения


488-493: LGTM

The function implementation is correct and follows best practices.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 488-488: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L488
Добавьте описание возвращаемого значения функции

Comment on lines +321 to +322
<CommonModule>пбп_ФайловаяСистема</CommonModule>
<CommonModule>пбп_ФайловаяСистемаПереадресация</CommonModule>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

New common modules do not contain SFTP-related functionality as expected.

  • The added modules пбп_ФайловаяСистема.bsl and пбп_ФайловаяСистемаПереадресация.bsl do not include any SFTP-specific functions or comments.
  • Existing SFTP implementations are located in пбп_ИнтеграцииСервер/Ext/Module.bsl, not in the newly added modules.

Please verify if the SFTP functionality was intended to be part of these new modules or if it resides correctly in the existing module.

🔗 Analysis chain

New common modules added for file system operations

Two new common modules have been added:

  1. пбп_ФайловаяСистема (File System)
  2. пбп_ФайловаяСистемаПереадресация (File System Redirection)

These additions align with the PR objective of adding functions for SFTP Linux. However, to ensure completeness and clarity:

Could you provide more details about the specific functionality these modules implement? This will help in understanding how they contribute to SFTP Linux support.

To verify the implementation, please run the following script:

This script will help verify the existence of the new modules and search for SFTP-related functionality within them.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check the content of the new common modules

# Test 1: Check if the new modules exist
fd -e bsl -p "пбп_ФайловаяСистема.bsl|пбп_ФайловаяСистемаПереадресация.bsl"

# Test 2: Search for SFTP-related functions or comments in these modules
rg -i "sftp|ssh|secure.*file.*transfer" $(fd -e bsl -p "пбп_ФайловаяСистема.bsl|пбп_ФайловаяСистемаПереадресация.bsl")

Length of output: 10943

Comment on lines +212 to +218
Если КодировкаИсполнения = "OEM" Тогда
КодировкаИсполнения = 437;
ИначеЕсли КодировкаИсполнения = "CP866" Тогда
КодировкаИсполнения = 866;
ИначеЕсли КодировкаИсполнения = "UTF8" Тогда
КодировкаИсполнения = 65001;
КонецЕсли;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Handle unexpected values of КодировкаИсполнения in СтрокаЗапускаКомандыWindows

Currently, if КодировкаИсполнения is provided but does not match "OEM", "CP866", or "UTF8", the code does not handle it, leaving КодировкаИсполнения potentially undefined or incorrect. This could lead to unexpected behavior when setting the code page.

Consider adding an Иначе clause to handle unexpected values, possibly by raising an exception or setting a default code page. Here's how you might implement this:

     ИначеЕсли КодировкаИсполнения = "UTF8" Тогда
       КодировкаИсполнения = 65001;
+    Иначе
+      ВызватьИсключение "Неизвестная кодировка исполнения: " + КодировкаИсполнения;
     КонецЕсли;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Если КодировкаИсполнения = "OEM" Тогда
КодировкаИсполнения = 437;
ИначеЕсли КодировкаИсполнения = "CP866" Тогда
КодировкаИсполнения = 866;
ИначеЕсли КодировкаИсполнения = "UTF8" Тогда
КодировкаИсполнения = 65001;
КонецЕсли;
Если КодировкаИсполнения = "OEM" Тогда
КодировкаИсполнения = 437;
ИначеЕсли КодировкаИсполнения = "CP866" Тогда
КодировкаИсполнения = 866;
ИначеЕсли КодировкаИсполнения = "UTF8" Тогда
КодировкаИсполнения = 65001;
Иначе
ВызватьИсключение "Неизвестная кодировка исполнения: " + КодировкаИсполнения;
КонецЕсли;

Comment on lines +236 to +243
Функция СодержитНебезопасныеДействия(Знач СтрокаКоманды)

Возврат СтрНайти(СтрокаКоманды, "${") <> 0
Или СтрНайти(СтрокаКоманды, "$(") <> 0
Или СтрНайти(СтрокаКоманды, "`") <> 0
Или СтрНайти(СтрокаКоманды, "|") <> 0
Или СтрНайти(СтрокаКоманды, ";") <> 0
Или СтрНайти(СтрокаКоманды, "&") <> 0;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Expand the list of unsafe characters in СодержитНебезопасныеДействия

The function СодержитНебезопасныеДействия currently checks for a specific set of potentially dangerous characters. However, other characters like >, <, ", ', %, and ^ can also be used in command injection attacks.

To enhance security, consider expanding the list of unsafe characters. Here's the updated code snippet:

     Или СтрНайти(СтрокаКоманды, "|") <> 0
     Или СтрНайти(СтрокаКоманды, ";") <> 0
     Или СтрНайти(СтрокаКоманды, "&") <> 0
+    Или СтрНайти(СтрокаКоманды, ">") <> 0
+    Или СтрНайти(СтрокаКоманды, "<") <> 0
+    Или СтрНайти(СтрокаКоманды, "%") <> 0
+    Или СтрНайти(СтрокаКоманды, "^") <> 0
+    Или СтрНайти(СтрокаКоманды, """") <> 0
+    Или СтрНайти(СтрокаКоманды, "'") <> 0;

Also, update the exception message in ПроверитьСодержитНебезопасныеДействия to reflect the additional characters.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Функция СодержитНебезопасныеДействия(Знач СтрокаКоманды)
Возврат СтрНайти(СтрокаКоманды, "${") <> 0
Или СтрНайти(СтрокаКоманды, "$(") <> 0
Или СтрНайти(СтрокаКоманды, "`") <> 0
Или СтрНайти(СтрокаКоманды, "|") <> 0
Или СтрНайти(СтрокаКоманды, ";") <> 0
Или СтрНайти(СтрокаКоманды, "&") <> 0;
Функция СодержитНебезопасныеДействия(Знач СтрокаКоманды)
Возврат СтрНайти(СтрокаКоманды, "${") <> 0
Или СтрНайти(СтрокаКоманды, "$(") <> 0
Или СтрНайти(СтрокаКоманды, "`") <> 0
Или СтрНайти(СтрокаКоманды, "|") <> 0
Или СтрНайти(СтрокаКоманды, ";") <> 0
Или СтрНайти(СтрокаКоманды, "&") <> 0
Или СтрНайти(СтрокаКоманды, ">") <> 0
Или СтрНайти(СтрокаКоманды, "<") <> 0
Или СтрНайти(СтрокаКоманды, "%") <> 0
Или СтрНайти(СтрокаКоманды, "^") <> 0
Или СтрНайти(СтрокаКоманды, """") <> 0
Или СтрНайти(СтрокаКоманды, "'") <> 0;

Comment on lines +247 to +256
Процедура ПроверитьСодержитНебезопасныеДействия(Знач КомандаЗапуска)
Если СодержитНебезопасныеДействия(КомандаЗапуска) Тогда
ВызватьИсключение пбп_СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось запустить программу.
|Недопустимая строка команды
|%1
|
|Строка команды не должна содержать символы: ""${"", ""$("", ""`"", ""|"", "";"", ""&"".'"),
КомандаЗапуска);
КонецЕсли;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Ensure ПроверитьСодержитНебезопасныеДействия handles all input types consistently

The procedure ПроверитьСодержитНебезопасныеДействия assumes that КомандаЗапуска is a string. If an array or another type is passed inadvertently, it could cause unexpected behavior.

Consider adding a type check at the beginning of the procedure to ensure that КомандаЗапуска is indeed a string:

+    Если ТипЗнч(КомандаЗапуска) <> Тип("Строка") Тогда
+        ВызватьИсключение "Ожидалась строка в ПроверитьСодержитНебезопасныеДействия";
+    КонецЕсли;

This addition improves the robustness of the code by preventing potential runtime errors.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Процедура ПроверитьСодержитНебезопасныеДействия(Знач КомандаЗапуска)
Если СодержитНебезопасныеДействия(КомандаЗапуска) Тогда
ВызватьИсключение пбп_СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось запустить программу.
|Недопустимая строка команды
|%1
|
|Строка команды не должна содержать символы: ""${"", ""$("", ""`"", ""|"", "";"", ""&"".'"),
КомандаЗапуска);
КонецЕсли;
Процедура ПроверитьСодержитНебезопасныеДействия(Знач КомандаЗапуска)
Если ТипЗнч(КомандаЗапуска) <> Тип("Строка") Тогда
ВызватьИсключение "Ожидалась строка в ПроверитьСодержитНебезопасныеДействия";
КонецЕсли;
Если СодержитНебезопасныеДействия(КомандаЗапуска) Тогда
ВызватьИсключение пбп_СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось запустить программу.
|Недопустимая строка команды
|%1
|
|Строка команды не должна содержать символы: ""${"", ""$("", ""`"", ""|"", "";"", ""&"".'"),
КомандаЗапуска);
КонецЕсли;

Comment on lines +269 to +291
НужныКавычки = Аргумент = Неопределено
Или ПустаяСтрока(Аргумент)
Или СтрНайти(Аргумент, " ")
Или СтрНайти(Аргумент, Символы.Таб)
Или СтрНайти(Аргумент, "&")
Или СтрНайти(Аргумент, "(")
Или СтрНайти(Аргумент, ")")
Или СтрНайти(Аргумент, "[")
Или СтрНайти(Аргумент, "]")
Или СтрНайти(Аргумент, "{")
Или СтрНайти(Аргумент, "}")
Или СтрНайти(Аргумент, "^")
Или СтрНайти(Аргумент, "=")
Или СтрНайти(Аргумент, ";")
Или СтрНайти(Аргумент, "!")
Или СтрНайти(Аргумент, "'")
Или СтрНайти(Аргумент, "+")
Или СтрНайти(Аргумент, ",")
Или СтрНайти(Аргумент, "`")
Или СтрНайти(Аргумент, "~")
Или СтрНайти(Аргумент, "$")
Или СтрНайти(Аргумент, "|");

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Simplify the condition for adding quotes in МассивВСтрокуКоманды

The condition determining whether to add quotes (НужныКавычки) checks for numerous special characters individually, which can make the code harder to maintain and read.

Consider simplifying the condition by using a regular expression or a function that checks for any non-alphanumeric characters. For example:

-    НужныКавычки = Аргумент = Неопределено
-        Или ПустаяСтрока(Аргумент)
-        Или СтрНайти(Аргумент, " ")
-        Или СтрНайти(Аргумент, Символы.Таб)
-        Или СтрНайти(Аргумент, "&")
-        Или СтрНайти(Аргумент, "(")
-        // ... other checks ...
-        Или СтрНайти(Аргумент, "|");
+    НужныКавычки = Не ЗначениеЗаполнено(Аргумент) Или Не СтрСоответствует(Аргумент, "[А-Яа-яA-Za-z0-9]+");

This approach enhances readability and makes it easier to maintain if the set of special characters changes.

Committable suggestion was skipped due to low confidence.

Comment on lines 976 to 1074
ИмяФайлаСкрипта = КаталогВременныхФайлов() + "put_file_on_sftp.sh";
ДвоичныеДанныеСкрипта.Записать(ИмяФайлаСкрипта);

СообщениеОбОшибке = ВыполнитьКомандуСистемыПриПолученииИлиОтправке(
ЭтоLinuxСервер, ТекстСкрипта, ИмяФайлаСкрипта, ЗаголовокОшибки);

Возврат СообщениеОбОшибке;

КонецФункции

Функция ОпределитьТипЧтенияИПрочитатьСодержимоеНаSFTP(ПараметрыСоединения)

ЗаголовокОшибки = "Не удалось получить содержимое папки SFTP-сервера";
СообщениеОбОшибке = "";

ПутьКФайлуСодержимого = ПолучитьИмяВременногоФайла("txt");

ЭтоLinuxСервер = пбп_ОбщегоНазначенияСлужебный.ЭтоLinuxСервер();

ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговПоТипуОС(
ЭтоLinuxСервер, ПараметрыСоединения, ПутьКФайлуСодержимого);
Если ПустаяСтрока(ТекстСкрипта) Тогда
Возврат ПолучитьТекстОшибкиОтсутствияУтилитыПодключенияSFTP(ЗаголовокОшибки, ЭтоLinuxСервер);
КонецЕсли;

ДвоичныеДанныеСкрипта = ПолучитьДвоичныеДанныеИзСтроки(ТекстСкрипта);
ИмяФайлаСкрипта = КаталогВременныхФайлов() + "list_files_on_sftp.sh";
ДвоичныеДанныеСкрипта.Записать(ИмяФайлаСкрипта);

Попытка
КодВозврата = 0;
Если ЭтоLinuxСервер Тогда
ЭтоExpect = СтрНайти(ТекстСкрипта, "expect") > 0;
Если ЭтоExpect Тогда
ВспомогательныйСкрипт = СтрШаблон("#!/bin/bash
|
|expect %1 > %2", ИмяФайлаСкрипта, ПутьКФайлуСодержимого);

ДвоичныеДанныеСкрипта = ПолучитьДвоичныеДанныеИзСтроки(ВспомогательныйСкрипт);
ИмяСлужебногоФайла = КаталогВременныхФайлов() + "service_list_files_on_sftp.sh";
ДвоичныеДанныеСкрипта.Записать(ИмяСлужебногоФайла);

ИтоговаяКоманда = "sh """ + ИмяСлужебногоФайла + """";
Иначе
ИтоговаяКоманда = "sh """ + ИмяФайлаСкрипта + """";
КонецЕсли;
Иначе
ИтоговаяКоманда = """" + ИмяФайлаСкрипта + """";
КонецЕсли;

ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина;

Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды);

пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяФайлаСкрипта);

Если ЭтоExpect Тогда
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяСлужебногоФайла);
КонецЕсли;

Если Результат.КодВозврата <> 0 Тогда
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2 - %3';", ЗаголовокОшибки,
"не удалось выполнить команду системы, код возврата", КодВозврата);
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);

Возврат СообщениеОбОшибке;
КонецЕсли;

Возврат ПолучитьМассивФайловСодержимогоSFTPСервера(ПутьКФайлуСодержимого);
Исключение
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2';", ЗаголовокОшибки,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецПопытки;

Возврат СообщениеОбОшибке;

КонецФункции

Функция ОпределитьТипПолученияИПолучитьСообщениеНаSFTP(ПараметрыСоединения, ПараметрыСообщения)

ЗаголовокОшибки = "Файл не был получен с SFTP-сервера";
СообщениеОбОшибке = "";

ПутьФайлаНаСервере = СтрШаблон("%1%2.%3", ПараметрыСоединения.КаталогВходящие,
ПараметрыСообщения.ИмяФайла, ПараметрыСообщения.Расширение);
ПараметрыСообщения.Путь = ПолучитьИмяВременногоФайла(ПараметрыСообщения.Расширение);

ЭтоLinuxСервер = пбп_ОбщегоНазначенияСлужебный.ЭтоLinuxСервер();

ТекстСкрипта = ПолучитьТекстСкриптаПолученияПоТипуОС(ЭтоLinuxСервер,
ПараметрыСоединения, ПараметрыСообщения.Путь, ПутьФайлаНаСервере);
Если ПустаяСтрока(ТекстСкрипта) Тогда
Возврат ПолучитьТекстОшибкиОтсутствияУтилитыПодключенияSFTP(ЗаголовокОшибки, ЭтоLinuxСервер);
КонецЕсли;

ДвоичныеДанныеСкрипта = ПолучитьДвоичныеДанныеИзСтроки(ТекстСкрипта);
ИмяФайлаСкрипта = КаталогВременныхФайлов() + "get_file_from_sftp.sh";
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

⚠️ Potential issue

Replace Synchronous КаталогВременныхФайлов with Asynchronous Method

The review comment is valid. The following lines in src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl use the synchronous КаталогВременныхФайлов method and should be updated to НачатьПолучениеКаталогаВременныхФайлов to prevent blocking operations:

  • Line 976
  • Line 1002
  • Line 1015
  • Line 1074
🔗 Analysis chain

Use asynchronous method instead of synchronous КаталогВременныхФайлов

Multiple instances call the synchronous method КаталогВременныхФайлов. It's recommended to use the asynchronous method НачатьПолучениеКаталогаВременныхФайлов to avoid blocking operations.

Apply this diff to update the method calls:

-ИмяФайлаСкрипта = КаталогВременныхФайлов() + "put_file_on_sftp.sh";
+ИмяФайлаСкрипта = НачатьПолучениеКаталогаВременныхФайлов() + "put_file_on_sftp.sh";

Repeat this change for lines 1002, 1015, and 1074.

Run the following script to check for all occurrences of КаталогВременныхФайлов:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Find all uses of КаталогВременныхФайлов in the codebase.

# Search for the method call.
rg 'КаталогВременныхФайлов\(' --type-add 'bsl:*.bsl' --type bsl

Length of output: 917

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 976-976: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L976
Вместо синхронного метода КаталогВременныхФайлов необходимо использовать НачатьПолучениеКаталогаВременныхФайлов


[warning] 1002-1002: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1002
Вместо синхронного метода КаталогВременныхФайлов необходимо использовать НачатьПолучениеКаталогаВременныхФайлов


[warning] 1015-1015: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1015
Вместо синхронного метода КаталогВременныхФайлов необходимо использовать НачатьПолучениеКаталогаВременныхФайлов


[warning] 1074-1074: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1074
Вместо синхронного метода КаталогВременныхФайлов необходимо использовать НачатьПолучениеКаталогаВременныхФайлов


[warning] 976-976: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L976
Не рекомендуемый вызов функции КаталогВременныхФайлов()


[warning] 1002-1002: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1002
Не рекомендуемый вызов функции КаталогВременныхФайлов()


[warning] 1015-1015: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1015
Не рекомендуемый вызов функции КаталогВременныхФайлов()


[warning] 1074-1074: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1074
Не рекомендуемый вызов функции КаталогВременныхФайлов()


[warning] 1029-1029: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1029
Проверьте запуск внешнего приложения


[warning] 991-991: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L991
Нужно добавить удаление временного файла после использования


[warning] 1063-1063: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1063
Нужно добавить удаление временного файла после использования

Comment on lines 991 to 1331
#Область SFTPWindows

Функция ПроверитьСуществованиеУтилитыПодключенияКSFTPWindows()

Возврат Ложь;

КонецФункции

Функция ПолучитьТекстСкриптаОтправкиДляWinSCP(ПараметрыСоединения)

Возврат "";

КонецФункции

Функция ПолучитьТекстСкриптаСодержимогоКаталоговДляWinSCP(ПараметрыСоединения)

Возврат "";

КонецФункции

Функция ПолучитьТекстСкриптаПолученияДляWinSCP(ПараметрыСоединения)

Возврат "";

КонецФункции

#КонецОбласти // SFTPWindows

#Область SFTPLinux

Функция ПолучитьСкриптУтилитыПодключенияКSFTPLinux(ПараметрыСоединения,
ПутьЛокальногоФайла, Действие, ПутьФайлаНаСервере = "")

ДействиеЧтение = "Чтение";
ДействиеЗапись = "Запись";

ИмяУтилитыCurl = "curl";
ИмяУтилитыSshpass = "sshpass";
ИмяУтилитыExpect = "expect";

ИмяУстановленнойУтилиты = "";

МассивИменУтилит = Новый Массив;
МассивИменУтилит.Добавить("curl");
МассивИменУтилит.Добавить(ИмяУтилитыSshpass);
МассивИменУтилит.Добавить(ИмяУтилитыExpect);

Для Каждого ИмяУтилиты Из МассивИменУтилит Цикл
Если ПроверитьСуществованиеУтилитыПодключенияКSFTPLinux(ИмяУтилиты) Тогда
ИмяУстановленнойУтилиты = ИмяУтилиты;
Прервать;
КонецЕсли;
КонецЦикла;

Если ИмяУстановленнойУтилиты = ИмяУтилитыCurl Тогда
Если Действие = ДействиеЧтение Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговДляCurl(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли Действие = ДействиеЗапись Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиДляCurl(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = ПолучитьТекстСкриптаПолученияДляCurl(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
КонецЕсли;
ИначеЕсли ИмяУстановленнойУтилиты = ИмяУтилитыSshpass Тогда
Если Действие = ДействиеЧтение Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговДляSshpass(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли Действие = ДействиеЗапись Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиДляSshpass(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = ПолучитьТекстСкриптаПолученияДляSshpass(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
КонецЕсли;
ИначеЕсли ИмяУстановленнойУтилиты = ИмяУтилитыExpect Тогда
Если Действие = ДействиеЧтение Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговДляExpect(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли Действие = ДействиеЗапись Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиДляExpect(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = ПолучитьТекстСкриптаПолученияДляExpect(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
КонецЕсли;
Иначе
ТекстСкрипта = "";
КонецЕсли;

Возврат ИмяУстановленнойУтилиты;

КонецФункции

Функция ПроверитьСуществованиеУтилитыПодключенияКSFTPLinux(ИмяУтилиты)

РезультатПроверки = Ложь;

ИмяФайлаПроверки = ПолучитьИмяВременногоФайла("txt");
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add deletion of temporary files after use

Temporary files created at lines 991 and 1331 are not deleted after use. To prevent resource leaks, ensure that temporary files are cleaned up.

Apply this diff at the appropriate locations after the files are used:

+пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ПутьКФайлуСодержимого);

Repeat for other temporary files as needed.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
ПутьКФайлуСодержимого = ПолучитьИмяВременногоФайла("txt");
ЭтоLinuxСервер = пбп_ОбщегоНазначенияСлужебный.ЭтоLinuxСервер();
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговПоТипуОС(
ЭтоLinuxСервер, ПараметрыСоединения, ПутьКФайлуСодержимого);
Если ПустаяСтрока(ТекстСкрипта) Тогда
Возврат ПолучитьТекстОшибкиОтсутствияУтилитыПодключенияSFTP(ЗаголовокОшибки, ЭтоLinuxСервер);
КонецЕсли;
ДвоичныеДанныеСкрипта = ПолучитьДвоичныеДанныеИзСтроки(ТекстСкрипта);
ИмяФайлаСкрипта = КаталогВременныхФайлов() + "list_files_on_sftp.sh";
ДвоичныеДанныеСкрипта.Записать(ИмяФайлаСкрипта);
Попытка
КодВозврата = 0;
Если ЭтоLinuxСервер Тогда
ЭтоExpect = СтрНайти(ТекстСкрипта, "expect") > 0;
Если ЭтоExpect Тогда
ВспомогательныйСкрипт = СтрШаблон("#!/bin/bash
|
|expect %1 > %2", ИмяФайлаСкрипта, ПутьКФайлуСодержимого);
ДвоичныеДанныеСкрипта = ПолучитьДвоичныеДанныеИзСтроки(ВспомогательныйСкрипт);
ИмяСлужебногоФайла = КаталогВременныхФайлов() + "service_list_files_on_sftp.sh";
ДвоичныеДанныеСкрипта.Записать(ИмяСлужебногоФайла);
ИтоговаяКоманда = "sh """ + ИмяСлужебногоФайла + """";
Иначе
ИтоговаяКоманда = "sh """ + ИмяФайлаСкрипта + """";
КонецЕсли;
Иначе
ИтоговаяКоманда = """" + ИмяФайлаСкрипта + """";
КонецЕсли;
ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина;
Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды);
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяФайлаСкрипта);
Если ЭтоExpect Тогда
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяСлужебногоФайла);
КонецЕсли;
Если Результат.КодВозврата <> 0 Тогда
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2 - %3';", ЗаголовокОшибки,
"не удалось выполнить команду системы, код возврата", КодВозврата);
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
Возврат СообщениеОбОшибке;
КонецЕсли;
Возврат ПолучитьМассивФайловСодержимогоSFTPСервера(ПутьКФайлуСодержимого);
Исключение
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2';", ЗаголовокОшибки,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецПопытки;
Возврат СообщениеОбОшибке;
КонецФункции
Функция ОпределитьТипПолученияИПолучитьСообщениеНаSFTP(ПараметрыСоединения, ПараметрыСообщения)
ЗаголовокОшибки = "Файл не был получен с SFTP-сервера";
СообщениеОбОшибке = "";
ПутьФайлаНаСервере = СтрШаблон("%1%2.%3", ПараметрыСоединения.КаталогВходящие,
ПараметрыСообщения.ИмяФайла, ПараметрыСообщения.Расширение);
ПараметрыСообщения.Путь = ПолучитьИмяВременногоФайла(ПараметрыСообщения.Расширение);
ЭтоLinuxСервер = пбп_ОбщегоНазначенияСлужебный.ЭтоLinuxСервер();
ТекстСкрипта = ПолучитьТекстСкриптаПолученияПоТипуОС(ЭтоLinuxСервер,
ПараметрыСоединения, ПараметрыСообщения.Путь, ПутьФайлаНаСервере);
Если ПустаяСтрока(ТекстСкрипта) Тогда
Возврат ПолучитьТекстОшибкиОтсутствияУтилитыПодключенияSFTP(ЗаголовокОшибки, ЭтоLinuxСервер);
КонецЕсли;
ДвоичныеДанныеСкрипта = ПолучитьДвоичныеДанныеИзСтроки(ТекстСкрипта);
ИмяФайлаСкрипта = КаталогВременныхФайлов() + "get_file_from_sftp.sh";
ДвоичныеДанныеСкрипта.Записать(ИмяФайлаСкрипта);
СообщениеОбОшибке = ВыполнитьКомандуСистемыПриПолученииИлиОтправке(
ЭтоLinuxСервер, ТекстСкрипта, ИмяФайлаСкрипта, ЗаголовокОшибки);
Возврат СообщениеОбОшибке;
КонецФункции
Функция ПолучитьТекстОшибкиОтсутствияУтилитыПодключенияSFTP(ЗаголовокОшибки, ЭтоLinuxСервер)
Если ЭтоLinuxСервер Тогда
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2';", ЗаголовокОшибки,
"Не найдено ни одной установленной утилиты подключения к SFTP (curl, sshpass, expect)");
Иначе
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2';", ЗаголовокОшибки,
"Не найдено утилиты подключения к SFTP - WinSCP");
КонецЕсли;
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
Возврат СообщениеОбОшибке;
КонецФункции
Функция ПолучитьТекстСкриптаОтправкиПоТипуОС(ЭтоLinuxСервер,
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере)
Если ЭтоLinuxСервер Тогда
ТекстСкрипта = ПолучитьСкриптУтилитыПодключенияКSFTPLinux(
ПараметрыСоединения, ПутьЛокальногоФайла, "Запись", ПутьФайлаНаСервере);
Иначе
УтилитаУстановлена = ПроверитьСуществованиеУтилитыПодключенияКSFTPWindows();
Если УтилитаУстановлена Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиДляWinSCP(ПараметрыСоединения);
Иначе
ТекстСкрипта = "";
КонецЕсли;
КонецЕсли;
Возврат ТекстСкрипта;
КонецФункции
Функция ПолучитьТекстСкриптаСодержимогоКаталоговПоТипуОС(ЭтоLinuxСервер,
ПараметрыСоединения, ПутьЛокальногоФайла)
Если ЭтоLinuxСервер Тогда
ТекстСкрипта = ПолучитьСкриптУтилитыПодключенияКSFTPLinux(
ПараметрыСоединения, ПутьЛокальногоФайла, "Чтение");
Иначе
УтилитаУстановлена = ПроверитьСуществованиеУтилитыПодключенияКSFTPWindows();
Если УтилитаУстановлена Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговДляWinSCP(ПараметрыСоединения);
Иначе
ТекстСкрипта = "";
КонецЕсли;
КонецЕсли;
Возврат ТекстСкрипта;
КонецФункции
Функция ПолучитьТекстСкриптаПолученияПоТипуОС(ЭтоLinuxСервер,
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере)
Если ЭтоLinuxСервер Тогда
ТекстСкрипта = ПолучитьСкриптУтилитыПодключенияКSFTPLinux(
ПараметрыСоединения, ПутьЛокальногоФайла, "Получение", ПутьФайлаНаСервере);
Иначе
УтилитаУстановлена = ПроверитьСуществованиеУтилитыПодключенияКSFTPWindows();
Если УтилитаУстановлена Тогда
ТекстСкрипта = ПолучитьТекстСкриптаПолученияДляWinSCP(ПараметрыСоединения);
Иначе
ТекстСкрипта = "";
КонецЕсли;
КонецЕсли;
Возврат ТекстСкрипта;
КонецФункции
Функция ПолучитьМассивФайловСодержимогоSFTPСервера(ПутьКФайлуСодержимого)
МассивФайлов = Новый Массив;
ЧтениеФайла = Новый ЧтениеТекста(ПутьКФайлуСодержимого);
ТекущаяСтрока = ЧтениеФайла.ПрочитатьСтроку();
Пока ТекущаяСтрока <> Неопределено Цикл
Если Лев(ТекущаяСтрока, 1) = "-" Тогда
// Разделяем по времени создания
МассивВремя = пбп_СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекущаяСтрока, ":");
Если МассивВремя.Количество() = 2 Тогда
МинутыИИмяФайла = МассивВремя[1];
// Время разделено от имени пробелом, но в самом имени файла тоже могут быть пробелы
МассивИмяФайла = пбп_СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(МинутыИИмяФайла, " ");
ИмяТекущегоФайла = "";
Для Инкремент = 0 По МассивИмяФайла.Количество() - 1 Цикл
Если Инкремент = 0 Тогда
Продолжить;
КонецЕсли;
ИмяТекущегоФайла = ИмяТекущегоФайла + МассивИмяФайла[Инкремент];
КонецЦикла;
МассивФайлов.Добавить(ИмяТекущегоФайла);
КонецЕсли;
КонецЕсли;
ТекущаяСтрока = ЧтениеФайла.ПрочитатьСтроку();
КонецЦикла;
Возврат МассивФайлов;
КонецФункции
Функция ВыполнитьКомандуСистемыПриПолученииИлиОтправке(ЭтоLinuxСервер, ТекстСкрипта, ИмяФайлаСкрипта, ЗаголовокОшибки)
Попытка
КодВозврата = 0;
Если ЭтоLinuxСервер Тогда
Если СтрНайти(ТекстСкрипта, "expect") > 0 Тогда
ИтоговаяКоманда = "expect """ + ИмяФайлаСкрипта + """";
Иначе
ИтоговаяКоманда = "sh """ + ИмяФайлаСкрипта + """";
КонецЕсли;
Иначе
ИтоговаяКоманда = """" + ИмяФайлаСкрипта + """";
КонецЕсли;
ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина;
Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды);
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяФайлаСкрипта);
Если Результат.КодВозврата <> 0 Тогда
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2 - %3';", ЗаголовокОшибки,
"не удалось выполнить команду системы, код возврата", КодВозврата);
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецЕсли;
Исключение
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2';", ЗаголовокОшибки,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецПопытки;
Возврат СообщениеОбОшибке;
КонецФункции
#Область SFTPWindows
Функция ПроверитьСуществованиеУтилитыПодключенияКSFTPWindows()
Возврат Ложь;
КонецФункции
Функция ПолучитьТекстСкриптаОтправкиДляWinSCP(ПараметрыСоединения)
Возврат "";
КонецФункции
Функция ПолучитьТекстСкриптаСодержимогоКаталоговДляWinSCP(ПараметрыСоединения)
Возврат "";
КонецФункции
Функция ПолучитьТекстСкриптаПолученияДляWinSCP(ПараметрыСоединения)
Возврат "";
КонецФункции
#КонецОбласти // SFTPWindows
#Область SFTPLinux
Функция ПолучитьСкриптУтилитыПодключенияКSFTPLinux(ПараметрыСоединения,
ПутьЛокальногоФайла, Действие, ПутьФайлаНаСервере = "")
ДействиеЧтение = "Чтение";
ДействиеЗапись = "Запись";
ИмяУтилитыCurl = "curl";
ИмяУтилитыSshpass = "sshpass";
ИмяУтилитыExpect = "expect";
ИмяУстановленнойУтилиты = "";
МассивИменУтилит = Новый Массив;
МассивИменУтилит.Добавить("curl");
МассивИменУтилит.Добавить(ИмяУтилитыSshpass);
МассивИменУтилит.Добавить(ИмяУтилитыExpect);
Для Каждого ИмяУтилиты Из МассивИменУтилит Цикл
Если ПроверитьСуществованиеУтилитыПодключенияКSFTPLinux(ИмяУтилиты) Тогда
ИмяУстановленнойУтилиты = ИмяУтилиты;
Прервать;
КонецЕсли;
КонецЦикла;
Если ИмяУстановленнойУтилиты = ИмяУтилитыCurl Тогда
Если Действие = ДействиеЧтение Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговДляCurl(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли Действие = ДействиеЗапись Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиДляCurl(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = ПолучитьТекстСкриптаПолученияДляCurl(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
КонецЕсли;
ИначеЕсли ИмяУстановленнойУтилиты = ИмяУтилитыSshpass Тогда
Если Действие = ДействиеЧтение Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговДляSshpass(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли Действие = ДействиеЗапись Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиДляSshpass(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = ПолучитьТекстСкриптаПолученияДляSshpass(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
КонецЕсли;
ИначеЕсли ИмяУстановленнойУтилиты = ИмяУтилитыExpect Тогда
Если Действие = ДействиеЧтение Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговДляExpect(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли Действие = ДействиеЗапись Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиДляExpect(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = ПолучитьТекстСкриптаПолученияДляExpect(ПараметрыСоединения,
ПутьЛокальногоФайла, ПутьФайлаНаСервере);
КонецЕсли;
Иначе
ТекстСкрипта = "";
КонецЕсли;
Возврат ИмяУстановленнойУтилиты;
КонецФункции
Функция ПроверитьСуществованиеУтилитыПодключенияКSFTPLinux(ИмяУтилиты)
РезультатПроверки = Ложь;
ИмяФайлаПроверки = ПолучитьИмяВременногоФайла("txt");
ПутьКФайлуСодержимого = ПолучитьИмяВременногоФайла("txt");
ЭтоLinuxСервер = пбп_ОбщегоНазначенияСлужебный.ЭтоLinuxСервер();
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговПоТипуОС(
ЭтоLinuxСервер, ПараметрыСоединения, ПутьКФайлуСодержимого);
Если ПустаяСтрока(ТекстСкрипта) Тогда
Возврат ПолучитьТекстОшибкиОтсутствияУтилитыПодключенияSFTP(ЗаголовокОшибки, ЭтоLinuxСервер);
КонецЕсли;
ДвоичныеДанныеСкрипта = ПолучитьДвоичныеДанныеИзСтроки(ТекстСкрипта);
ИмяФайлаСкрипта = КаталогВременныхФайлов() + "list_files_on_sftp.sh";
ДвоичныеДанныеСкрипта.Записать(ИмяФайлаСкрипта);
Попытка
КодВозврата = 0;
Если ЭтоLinuxСервер Тогда
ЭтоExpect = СтрНайти(ТекстСкрипта, "expect") > 0;
Если ЭтоExpect Тогда
ВспомогательныйСкрипт = СтрШаблон("#!/bin/bash
|
|expect %1 > %2", ИмяФайлаСкрипта, ПутьКФайлуСодержимого);
ДвоичныеДанныеСкрипта = ПолучитьДвоичныеДанныеИзСтроки(ВспомогательныйСкрипт);
ИмяСлужебногоФайла = КаталогВременныхФайлов() + "service_list_files_on_sftp.sh";
ДвоичныеДанныеСкрипта.Записать(ИмяСлужебногоФайла);
ИтоговаяКоманда = "sh """ + ИмяСлужебногоФайла + """";
Иначе
ИтоговаяКоманда = "sh """ + ИмяФайлаСкрипта + """";
КонецЕсли;
Иначе
ИтоговаяКоманда = """" + ИмяФайлаСкрипта + """";
КонецЕсли;
ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина;
Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды);
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяФайлаСкрипта);
Если ЭтоExpect Тогда
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяСлужебногоФайла);
КонецЕсли;
Если Результат.КодВозврата <> 0 Тогда
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2 - %3';", ЗаголовокОшибки,
"не удалось выполнить команду системы, код возврата", КодВозврата);
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
Возврат СообщениеОбОшибке;
КонецЕсли;
Возврат ПолучитьМассивФайловСодержимогоSFTPСервера(ПутьКФайлуСодержимого);
Исключение
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2';", ЗаголовокОшибки,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецПопытки;
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ПутьКФайлуСодержимого);
Возврат СообщениеОбОшибке;
КонецФункции
Функция ОпределитьТипПолученияИПолучитьСообщениеНаSFTP(ПараметрыСоединения, ПараметрыСообщения)
ЗаголовокОшибки = "Файл не был получен с SFTP-сервера";
СообщениеОбОшибке = "";
ПутьФайлаНаСервере = СтрШаблон("%1%2.%3", ПараметрыСоединения.КаталогВходящие,
ПараметрыСообщения.ИмяФайла, ПараметрыСообщения.Расширение);
ПараметрыСообщения.Путь = ПолучитьИмяВременногоФайла(ПараметрыСообщения.Расширение);
ЭтоLinuxСервер = пбп_ОбщегоНазначенияСлужебный.ЭтоLinuxСервер();
ТекстСкрипта = ПолучитьТекстСкриптаПолученияПоТипуОС(ЭтоLinuxСервер,
ПараметрыСоединения, ПараметрыСообщения.Путь, ПутьФайлаНаСервере);
Если ПустаяСтрока(ТекстСкрипта) Тогда
Возврат ПолучитьТекстОшибкиОтсутствияУтилитыПодключенияSFTP(ЗаголовокОшибки, ЭтоLinuxСервер);
КонецЕсли;
ДвоичныеДанныеСкрипта = ПолучитьДвоичныеДанныеИзСтроки(ТекстСкрипта);
ИмяФайлаСкрипта = КаталогВременныхФайлов() + "get_file_from_sftp.sh";
ДвоичныеДанныеСкрипта.Записать(ИмяФайлаСкрипта);
СообщениеОбОшибке = ВыполнитьКомандуСистемыПриПолученииИлиОтправке(
ЭтоLinuxСервер, ТекстСкрипта, ИмяФайлаСкрипта, ЗаголовокОшибки);
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ПараметрыСообщения.Путь);
Возврат СообщениеОбОшибке;
КонецФункции
// ... (rest of the code remains unchanged)
Функция ПроверитьСуществованиеУтилитыПодключенияКSFTPLinux(ИмяУтилиты)
РезультатПроверки = Ложь;
ИмяФайлаПроверки = ПолучитьИмяВременногоФайла("txt");
// ... (rest of the function implementation)
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяФайлаПроверки);
Возврат РезультатПроверки;
КонецФункции
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 1002-1002: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1002
Вместо синхронного метода КаталогВременныхФайлов необходимо использовать НачатьПолучениеКаталогаВременныхФайлов


[warning] 1015-1015: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1015
Вместо синхронного метода КаталогВременныхФайлов необходимо использовать НачатьПолучениеКаталогаВременныхФайлов


[warning] 1074-1074: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1074
Вместо синхронного метода КаталогВременныхФайлов необходимо использовать НачатьПолучениеКаталогаВременныхФайлов


[failure] 1262-1262: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1262
Уменьшите когнитивную сложность "ПолучитьСкриптУтилитыПодключенияКSFTPLinux" с 19 до 15


[failure] 1178-1178: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1178
Превышен допустимый уровень вложенности управляющих конструкций


[warning] 1002-1002: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1002
Не рекомендуемый вызов функции КаталогВременныхФайлов()


[warning] 1015-1015: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1015
Не рекомендуемый вызов функции КаталогВременныхФайлов()


[warning] 1074-1074: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1074
Не рекомендуемый вызов функции КаталогВременныхФайлов()


[warning] 1029-1029: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1029
Проверьте запуск внешнего приложения


[warning] 1213-1213: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1213
Проверьте запуск внешнего приложения


[warning] 1170-1170: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1170
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[warning] 991-991: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L991
Нужно добавить удаление временного файла после использования


[warning] 1063-1063: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1063
Нужно добавить удаление временного файла после использования


[warning] 1331-1331: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1331
Нужно добавить удаление временного файла после использования


[warning] 1288-1288: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1288
Удалите неиспользуемую переменную ТекстСкрипта


[warning] 1160-1160: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1160
Нельзя использовать латинские и кириллические символы в одном идентификаторе

Comment on lines +829 to +831
Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
КонецЕсли;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Rename parameter to avoid confusion with function name.

In the function ИнформационнаяБазаФайловая, the parameter СтрокаСоединенияИнформационнойБазы has the same name as the function СтрокаСоединенияИнформационнойБазы(). This can lead to confusion and potential errors due to name shadowing. It's recommended to rename the parameter to distinguish it from the function.

Apply the following changes to rename the parameter:

 Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт
-	
-	Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда
-		СтрокаСоединенияИнформационнойБазы =  СтрокаСоединенияИнформационнойБазы();
+	
+	Если ПустаяСтрока(СтрокаСоединения) Тогда
+		СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
 	КонецЕсли;
-	Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1;
+	Возврат СтрНайти(ВРег(СтрокаСоединения), "FILE=") = 1;
 	
 КонецФункции
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
КонецЕсли;
Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединения = "") Экспорт
Если ПустаяСтрока(СтрокаСоединения) Тогда
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
КонецЕсли;
Возврат СтрНайти(ВРег(СтрокаСоединения), "FILE=") = 1;
КонецФункции

Comment on lines +2031 to +2037
Функция ЭтоLinuxСервер() Экспорт

СистемнаяИнформация = Новый СистемнаяИнформация;
Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64;

КонецФункции
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Avoid mixing Cyrillic and Latin characters in identifiers.

Similar to the previous function, ЭтоLinuxСервер mixes Cyrillic and Latin characters. For consistency and readability, please use a single character set in the function name.

Consider renaming the function:

-Функция ЭтоLinuxСервер() Экспорт
+Функция ЭтоЛинуксСервер() Экспорт

Or in English:

-Функция ЭтоLinuxСервер() Экспорт
+Функция IsLinuxServer() Экспорт
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Функция ЭтоLinuxСервер() Экспорт
СистемнаяИнформация = Новый СистемнаяИнформация;
Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64;
КонецФункции
Функция ЭтоЛинуксСервер() Экспорт
СистемнаяИнформация = Новый СистемнаяИнформация;
Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64;
КонецФункции
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 2031-2031: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L2031
Нельзя использовать латинские и кириллические символы в одном идентификаторе

Comment on lines +2018 to +2024
Функция ЭтоWindowsСервер() Экспорт

СистемнаяИнформация = Новый СистемнаяИнформация;
Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64;

КонецФункции
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Avoid mixing Cyrillic and Latin characters in identifiers.

The function name ЭтоWindowsСервер contains both Cyrillic and Latin characters. Mixing character sets in identifiers can lead to confusion and maintenance difficulties. It's advisable to use a consistent character set in identifiers.

Consider renaming the function using only Cyrillic characters or a transliterated version:

-Функция ЭтоWindowsСервер() Экспорт
+Функция ЭтоВиндовсСервер() Экспорт

Alternatively, use English entirely if appropriate:

-Функция ЭтоWindowsСервер() Экспорт
+Функция IsWindowsServer() Экспорт
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Функция ЭтоWindowsСервер() Экспорт
СистемнаяИнформация = Новый СистемнаяИнформация;
Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64;
КонецФункции
Функция ЭтоВиндовсСервер() Экспорт
СистемнаяИнформация = Новый СистемнаяИнформация;
Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64;
КонецФункции
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 2018-2018: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L2018
Нельзя использовать латинские и кириллические символы в одном идентификаторе

Copy link

Failed

  • C Reliability Rating on New Code (is worse than A)

Analysis Details

58 Issues

  • Bug 9 Bugs
  • Vulnerability 0 Vulnerabilities
  • Code Smell 49 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.40% Estimated after merge)

Project ID: PSSL

View in SonarQube

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 11

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 82dcce4 and ee51f99.

📒 Files selected for processing (4)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ОбщегоНазначенияСлужебныйКлиентСервер/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистема/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация/Ext/Module.bsl (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/cf/CommonModules/пбп_ФайловаяСистема/Ext/Module.bsl
  • src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация/Ext/Module.bsl
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl

[warning] 539-539: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L539
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 488-488: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L488
Добавьте описание возвращаемого значения функции


[warning] 1145-1145: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1145
Синтаксическая конструкция "Если...Тогда...ИначеЕсли..." содержит повторяющиеся условия


[warning] 1177-1177: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1177
Синтаксическая конструкция "Если...Тогда...ИначеЕсли..." содержит повторяющиеся условия


[warning] 1209-1209: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1209
Синтаксическая конструкция "Если...Тогда...ИначеЕсли..." содержит повторяющиеся условия


[warning] 979-979: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L979
Нужно добавить удаление временного файла после использования


[warning] 981-981: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L981
Нужно добавить удаление временного файла после использования


[warning] 1009-1009: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1009
Нужно добавить удаление временного файла после использования


[warning] 1011-1011: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1011
Нужно добавить удаление временного файла после использования


[warning] 1027-1027: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1027
Нужно добавить удаление временного файла после использования


[warning] 1100-1100: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1100
Нужно добавить удаление временного файла после использования


[warning] 1102-1102: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1102
Нужно добавить удаление временного файла после использования


[warning] 930-930: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L930
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1203-1203: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1203
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 997-997: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L997
Нужно добавить удаление временного файла после использования


[warning] 1123-1123: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1123
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 999-999: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L999
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1139-1139: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1139
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1278-1278: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1278
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1090-1090: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1090
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1372-1372: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1372
Нужно добавить удаление временного файла после использования


[warning] 1235-1235: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1235
Нельзя использовать латинские и кириллические символы в одном идентификаторе

🔇 Additional comments (5)
src/cf/CommonModules/пбп_ОбщегоНазначенияСлужебныйКлиентСервер/Ext/Module.bsl (2)

236-243: Expand the list of unsafe characters in СодержитНебезопасныеДействия

This issue has already been addressed in previous review comments.


228-228: Ensure proper quoting in command construction

In СтрокаЗапускаКомандыWindows, the return statement constructs the command string using quotation marks. Incorrect quotation could lead to command parsing issues on Windows.

Please verify that the command string is correctly formed and consider using a consistent method for escaping quotes.

src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (3)

930-930: Avoid mixing Latin and Cyrillic characters in identifiers

The function name ЗаполнитьПараметрыПодключенияКSFTPСерверу mixes Latin (SFTP) and Cyrillic characters. For better readability and to adhere to coding standards, consider using a consistent character set.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 930-930: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L930
Нельзя использовать латинские и кириллические символы в одном идентификаторе


997-997: Ensure temporary files are deleted after use

The temporary file created at line 997 is not deleted after use. This can lead to resource leaks and security issues.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 997-997: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L997
Нужно добавить удаление временного файла после использования


1235-1252: Avoid mixing Latin and Cyrillic characters in identifiers

The function name ПолучитьМассивФайловСодержимогоSFTPСервера mixes Latin (SFTP) and Cyrillic characters.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 1235-1235: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1235
Нельзя использовать латинские и кириллические символы в одном идентификаторе

Comment on lines +223 to +226
Если Не ПустаяСтрока(ТекущийКаталог) Тогда
НаборКоманд = НаборКоманд + ?(ЗначениеЗаполнено(НаборКоманд), "&&", "") + "(cd /D """ + ТекущийКаталог + """)";
КонецЕсли;
НаборКоманд = НаборКоманд + ?(ЗначениеЗаполнено(НаборКоманд), "&&", "") + "(" + СокрЛП(СтрокаКоманды) + ")";
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Handle empty ТекущийКаталог correctly

In СтрокаЗапускаКомандыWindows, when ТекущийКаталог is empty or not provided, the command construction may result in unnecessary syntax.

Ensure that the condition correctly handles empty or undefined ТекущийКаталог, and that НаборКоманд is constructed without redundant operators.

Comment on lines +156 to +157
ПроверитьСодержитНебезопасныеДействия(КомандаЗапуска);
Результат = КомандаЗапуска;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Consider checking for unsafe actions in all array elements

In the БезопаснаяСтрокаКоманды function, when КомандаЗапуска is an array, only the first element (КомандаЗапуска[0]) is checked for unsafe actions. Other elements may contain unsafe characters that could lead to security vulnerabilities.

Consider modifying the code to check all elements in the array:

Если КомандаЗапуска.Количество() > 0 Тогда
-    ПроверитьСодержитНебезопасныеДействия(КомандаЗапуска[0]);
+    Для Каждого Аргумент Из КомандаЗапуска Цикл
+        ПроверитьСодержитНебезопасныеДействия(Аргумент);
+    КонецЦикла;
    Результат = МассивВСтрокуКоманды(КомандаЗапуска);

Committable suggestion was skipped due to low confidence.

Comment on lines +259 to +305
Функция МассивВСтрокуКоманды(КомандаЗапуска)

Результат = Новый Массив;
НужныКавычки = Ложь;
Для Каждого Аргумент Из КомандаЗапуска Цикл

Если Результат.Количество() > 0 Тогда
Результат.Добавить(" ");
КонецЕсли;

НужныКавычки = Аргумент = Неопределено
Или ПустаяСтрока(Аргумент)
Или СтрНайти(Аргумент, " ")
Или СтрНайти(Аргумент, Символы.Таб)
Или СтрНайти(Аргумент, "&")
Или СтрНайти(Аргумент, "(")
Или СтрНайти(Аргумент, ")")
Или СтрНайти(Аргумент, "[")
Или СтрНайти(Аргумент, "]")
Или СтрНайти(Аргумент, "{")
Или СтрНайти(Аргумент, "}")
Или СтрНайти(Аргумент, "^")
Или СтрНайти(Аргумент, "=")
Или СтрНайти(Аргумент, ";")
Или СтрНайти(Аргумент, "!")
Или СтрНайти(Аргумент, "'")
Или СтрНайти(Аргумент, "+")
Или СтрНайти(Аргумент, ",")
Или СтрНайти(Аргумент, "`")
Или СтрНайти(Аргумент, "~")
Или СтрНайти(Аргумент, "$")
Или СтрНайти(Аргумент, "|");

Если НужныКавычки Тогда
Результат.Добавить("""");
КонецЕсли;

Результат.Добавить(СтрЗаменить(Аргумент, """", """"""));

Если НужныКавычки Тогда
Результат.Добавить("""");
КонецЕсли;

КонецЦикла;

Возврат СтрСоединить(Результат);

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add type checks for arguments in МассивВСтрокуКоманды

The МассивВСтрокуКоманды function processes each argument in КомандаЗапуска, but does not verify that each element is a string. Non-string elements could cause unexpected behavior or runtime errors.

Include a type check to ensure all arguments are strings:

Для Каждого Аргумент Из КомандаЗапуска Цикл
+    Если ТипЗнч(Аргумент) <> Тип("Строка") Тогда
+        ВызватьИсключение "Ожидалось, что все аргументы в КомандаЗапуска будут строками.";
+    КонецЕсли;
    // existing code
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Функция МассивВСтрокуКоманды(КомандаЗапуска)
Результат = Новый Массив;
НужныКавычки = Ложь;
Для Каждого Аргумент Из КомандаЗапуска Цикл
Если Результат.Количество() > 0 Тогда
Результат.Добавить(" ");
КонецЕсли;
НужныКавычки = Аргумент = Неопределено
Или ПустаяСтрока(Аргумент)
Или СтрНайти(Аргумент, " ")
Или СтрНайти(Аргумент, Символы.Таб)
Или СтрНайти(Аргумент, "&")
Или СтрНайти(Аргумент, "(")
Или СтрНайти(Аргумент, ")")
Или СтрНайти(Аргумент, "[")
Или СтрНайти(Аргумент, "]")
Или СтрНайти(Аргумент, "{")
Или СтрНайти(Аргумент, "}")
Или СтрНайти(Аргумент, "^")
Или СтрНайти(Аргумент, "=")
Или СтрНайти(Аргумент, ";")
Или СтрНайти(Аргумент, "!")
Или СтрНайти(Аргумент, "'")
Или СтрНайти(Аргумент, "+")
Или СтрНайти(Аргумент, ",")
Или СтрНайти(Аргумент, "`")
Или СтрНайти(Аргумент, "~")
Или СтрНайти(Аргумент, "$")
Или СтрНайти(Аргумент, "|");
Если НужныКавычки Тогда
Результат.Добавить("""");
КонецЕсли;
Результат.Добавить(СтрЗаменить(Аргумент, """", """"""));
Если НужныКавычки Тогда
Результат.Добавить("""");
КонецЕсли;
КонецЦикла;
Возврат СтрСоединить(Результат);
Функция МассивВСтрокуКоманды(КомандаЗапуска)
Результат = Новый Массив;
НужныКавычки = Ложь;
Для Каждого Аргумент Из КомандаЗапуска Цикл
Если ТипЗнч(Аргумент) <> Тип("Строка") Тогда
ВызватьИсключение "Ожидалось, что все аргументы в КомандаЗапуска будут строками.";
КонецЕсли;
Если Результат.Количество() > 0 Тогда
Результат.Добавить(" ");
КонецЕсли;
НужныКавычки = Аргумент = Неопределено
Или ПустаяСтрока(Аргумент)
Или СтрНайти(Аргумент, " ")
Или СтрНайти(Аргумент, Символы.Таб)
Или СтрНайти(Аргумент, "&")
Или СтрНайти(Аргумент, "(")
Или СтрНайти(Аргумент, ")")
Или СтрНайти(Аргумент, "[")
Или СтрНайти(Аргумент, "]")
Или СтрНайти(Аргумент, "{")
Или СтрНайти(Аргумент, "}")
Или СтрНайти(Аргумент, "^")
Или СтрНайти(Аргумент, "=")
Или СтрНайти(Аргумент, ";")
Или СтрНайти(Аргумент, "!")
Или СтрНайти(Аргумент, "'")
Или СтрНайти(Аргумент, "+")
Или СтрНайти(Аргумент, ",")
Или СтрНайти(Аргумент, "`")
Или СтрНайти(Аргумент, "~")
Или СтрНайти(Аргумент, "$")
Или СтрНайти(Аргумент, "|");
Если НужныКавычки Тогда
Результат.Добавить("""");
КонецЕсли;
Результат.Добавить(СтрЗаменить(Аргумент, """", """"""));
Если НужныКавычки Тогда
Результат.Добавить("""");
КонецЕсли;
КонецЦикла;
Возврат СтрСоединить(Результат);

Comment on lines +488 to +493
Функция ПараметрыСообщенияFTPSFTP() Экспорт

Результат = Новый Структура("Путь, ИмяФайла, Расширение, ДвоичныеДанные");
Возврат Результат;

КонецФункции
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add a description of the function's return value

The function ПараметрыСообщенияFTPSFTP() lacks a description of its return value in the comments. Adding this will improve code readability and help other developers understand the purpose of the function.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 488-488: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L488
Добавьте описание возвращаемого значения функции

Comment on lines +1278 to +1316
Функция ВыполнитьКомандуСистемыПриПолученииИлиОтправке(ЭтоLinuxСервер, ТекстСкрипта, ИмяФайлаСкрипта, ЗаголовокОшибки)

Попытка
КодВозврата = 0;
Если ЭтоLinuxСервер Тогда
Если СтрНайти(ТекстСкрипта, "expect") > 0 Тогда
ИтоговаяКоманда = "expect """ + ИмяФайлаСкрипта + """";
Иначе
ИтоговаяКоманда = "sh """ + ИмяФайлаСкрипта + """";
КонецЕсли;
Иначе
ИтоговаяКоманда = """" + ИмяФайлаСкрипта + """";
КонецЕсли;

ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина;

// BSLLS:ExternalAppStarting-off
Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды);
// BSLLS:ExternalAppStarting-on

УдалитьВременныеФайлыСкриптов(ИмяФайлаСкрипта);

Если Результат.КодВозврата <> 0 Тогда
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2 - %3';", ЗаголовокОшибки,
"не удалось выполнить команду системы, код возврата", КодВозврата);
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецЕсли;
Исключение
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2';", ЗаголовокОшибки,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);

УдалитьВременныеФайлыСкриптов(ИмяФайлаСкрипта);
КонецПопытки;

Возврат СообщениеОбОшибке;

КонецФункции
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Avoid mixing Latin and Cyrillic characters in identifiers

The function name ВыполнитьКомандуСистемыПриПолученииИлиОтправке contains Latin words like КомандуСистемы, ПриПолученииИлиОтправке. Mixing character sets can reduce code readability.

Consider renaming the function to use consistent character sets.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 1278-1278: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1278
Нельзя использовать латинские и кириллические символы в одном идентификаторе

Comment on lines 979 to 982
ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла("sh");
Иначе
ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла("bat");
КонецЕсли;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Delete temporary files after use

Temporary files created at lines 979 (ИмяФайлаСкрипта) and 981 are not deleted. This can lead to unnecessary disk usage.

Add code to delete these temporary files after they are used.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 979-979: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L979
Нужно добавить удаление временного файла после использования


[warning] 981-981: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L981
Нужно добавить удаление временного файла после использования

Comment on lines 1100 to 1103
ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла("sh");
Иначе
ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла("bat");
КонецЕсли;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Delete temporary files after use

Temporary files created at lines 1100 (ИмяФайлаСкрипта) and 1102 are not deleted, potentially causing resource leaks.

Make sure to delete these temporary files after use.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 1100-1100: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1100
Нужно добавить удаление временного файла после использования


[warning] 1102-1102: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1102
Нужно добавить удаление временного файла после использования

Comment on lines 1177 to 1188
Если ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговCURL(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговSSHPASS(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговEXPECT(
ПараметрыСоединения, ПутьЛокальногоФайла);
Иначе
ТекстСкрипта = "";
КонецЕсли;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Correct the repeated condition in Если...Тогда...ИначеЕсли... block

Similar to the previous issue, the condition ИмяУтилиты = "curl" is repeated. This should be corrected to prevent logical errors.

Apply this diff:

Если ИмяУтилиты = "curl" Тогда
	ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговCURL(
		ПараметрыСоединения, ПутьКФайлуСодержимогоКаталога);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
	ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговSSHPASS(
		ПараметрыСоединения, ПутьКФайлуСодержимогоКаталога);
-ИначеЕсли ИмяУтилиты = "curl" Тогда
+ИначеЕсли ИмяУтилиты = "expect" Тогда
	ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговEXPECT(
		ПараметрыСоединения, ПутьКФайлуСодержимогоКаталога);
Иначе
	ТекстСкрипта = "";
КонецЕсли;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Если ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговCURL(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговSSHPASS(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговEXPECT(
ПараметрыСоединения, ПутьЛокальногоФайла);
Иначе
ТекстСкрипта = "";
КонецЕсли;
Если ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговCURL(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговSSHPASS(
ПараметрыСоединения, ПутьЛокальногоФайла);
ИначеЕсли ИмяУтилиты = "expect" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговEXPECT(
ПараметрыСоединения, ПутьЛокальногоФайла);
Иначе
ТекстСкрипта = "";
КонецЕсли;
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 1177-1177: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1177
Синтаксическая конструкция "Если...Тогда...ИначеЕсли..." содержит повторяющиеся условия

Comment on lines 1145 to 1156
Если ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиCURL(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиSSHPASS(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиEXPECT(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = "";
КонецЕсли;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Correct the repeated condition in Если...Тогда...ИначеЕсли... block

The condition ИмяУтилиты = "curl" is checked twice in the conditional statements. This likely leads to unintended behavior and logical errors.

Apply this diff to fix the repeated condition:

Если ИмяУтилиты = "curl" Тогда
	ТекстСкрипта = ПолучитьТекстСкриптаОтправкиCURL(
		ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
	ТекстСкрипта = ПолучитьТекстСкриптаОтправкиSSHPASS(
		ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
-ИначеЕсли ИмяУтилиты = "curl" Тогда
+ИначеЕсли ИмяУтилиты = "expect" Тогда
	ТекстСкрипта = ПолучитьТекстСкриптаОтправкиEXPECT(
		ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
	ТекстСкрипта = "";
КонецЕсли;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Если ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиCURL(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиSSHPASS(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиEXPECT(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = "";
КонецЕсли;
Если ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиCURL(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиSSHPASS(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "expect" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиEXPECT(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = "";
КонецЕсли;
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 1145-1145: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1145
Синтаксическая конструкция "Если...Тогда...ИначеЕсли..." содержит повторяющиеся условия

Comment on lines 1209 to 1220
Если ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаПолученияCURL(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаПолученияSSHPASS(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаПолученияEXPECT(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = "";
КонецЕсли;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Correct the repeated condition in Если...Тогда...ИначеЕсли... block

Again, the condition ИмяУтилиты = "curl" is duplicated. Please correct this to ensure the correct logic flow.

Apply this diff:

Если ИмяУтилиты = "curl" Тогда
	ТекстСкрипта = ПолучитьТекстСкриптаПолученияCURL(
		ПараметрыСоединения, ПутьСохраняемогоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
	ТекстСкрипта = ПолучитьТекстСкриптаПолученияSSHPASS(
		ПараметрыСоединения, ПутьСохраняемогоФайла, ПутьФайлаНаСервере);
-ИначеЕсли ИмяУтилиты = "curl" Тогда
+ИначеЕсли ИмяУтилиты = "expect" Тогда
	ТекстСкрипта = ПолучитьТекстСкриптаПолученияEXPECT(
		ПараметрыСоединения, ПутьСохраняемогоФайла, ПутьФайлаНаСервере);
Иначе
	ТекстСкрипта = "";
КонецЕсли;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Если ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаПолученияCURL(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаПолученияSSHPASS(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаПолученияEXPECT(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = "";
КонецЕсли;
Если ИмяУтилиты = "curl" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаПолученияCURL(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "sshpass" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаПолученияSSHPASS(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
ИначеЕсли ИмяУтилиты = "expect" Тогда
ТекстСкрипта = ПолучитьТекстСкриптаПолученияEXPECT(
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере);
Иначе
ТекстСкрипта = "";
КонецЕсли;
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 1209-1209: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1209
Синтаксическая конструкция "Если...Тогда...ИначеЕсли..." содержит повторяющиеся условия

Copy link

Failed

  • C Reliability Rating on New Code (is worse than A)

Analysis Details

50 Issues

  • Bug 1 Bug
  • Vulnerability 0 Vulnerabilities
  • Code Smell 49 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.40% Estimated after merge)

Project ID: PSSL

View in SonarQube

Copy link

Passed

Analysis Details

49 Issues

  • Bug 0 Bugs
  • Vulnerability 0 Vulnerabilities
  • Code Smell 49 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.40% Estimated after merge)

Project ID: PSSL

View in SonarQube

Copy link

Passed

Analysis Details

46 Issues

  • Bug 0 Bugs
  • Vulnerability 0 Vulnerabilities
  • Code Smell 46 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.40% Estimated after merge)

Project ID: PSSL

View in SonarQube

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between ee51f99 and 3f86ded.

📒 Files selected for processing (1)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2 hunks)
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl

[warning] 488-488: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L488
Добавьте описание возвращаемого значения функции


[warning] 539-539: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L539
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1291-1291: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1291
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1004-1004: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1004
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1100-1100: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1100
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1248-1248: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1248
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1136-1136: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1136
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 930-930: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L930
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1184-1184: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1184
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1216-1216: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1216
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1152-1152: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1152
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 969-969: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L969
Нельзя использовать латинские и кириллические символы в одном идентификаторе

🔇 Additional comments (5)
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (5)

488-493: Duplicate Comment: Add Description of Function's Return Value

The previous review comment regarding adding a description of the function's return value for ПараметрыСообщенияFTPSFTP() is still applicable. Including a description will enhance code readability and maintainability.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 488-488: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L488
Добавьте описание возвращаемого значения функции


539-539: Duplicate Comment: Avoid Mixing Latin and Cyrillic Characters in Identifiers

The issue of mixing Latin (FTP) and Cyrillic characters in the function name ВыполнитьПодключениеКFTPСерверуДляИнтеграционногоПотока has been previously noted. Consistently using one alphabet improves code clarity.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 539-539: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L539
Нельзя использовать латинские и кириллические символы в одном идентификаторе


930-930: Duplicate Comment: Avoid Mixing Latin and Cyrillic Characters in Identifiers

The function ЗаполнитьПараметрыПодключенияКSFTPСерверу contains both Latin (SFTP) and Cyrillic characters. This concern has been previously addressed.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 930-930: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L930
Нельзя использовать латинские и кириллические символы в одном идентификаторе


1145-1145: Duplicate Comment: Correct Repeated Condition in Conditional Statement

The repeated condition ИмяУтилиты = "curl" in the Если...Тогда...ИначеЕсли... block has been previously identified. Please ensure this is corrected to prevent logical errors.


Line range hint 476-1587: Well-Implemented FTP/SFTP Integration Functions

The newly added FTP/SFTP functions are well-structured and significantly enhance the module's capabilities for handling file transfers. The code follows consistent naming conventions, includes appropriate error handling, and adheres to best practices.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 1291-1291: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1291
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1004-1004: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1004
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1100-1100: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1100
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1248-1248: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1248
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1136-1136: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1136
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 930-930: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L930
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1184-1184: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1184
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1216-1216: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1216
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1152-1152: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1152
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 969-969: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L969
Нельзя использовать латинские и кириллические символы в одном идентификаторе

Comment on lines +961 to +1135
ИмяСлужебногоФайла = ПолучитьИмяВременногоФайла("sh");
// BSLLS:MissingTemporaryFileDeletion-on
ДвоичныеДанныеСкрипта.Записать(ИмяСлужебногоФайла);

ИтоговаяКоманда = "sh """ + ИмяСлужебногоФайла + """";
Иначе
ИтоговаяКоманда = "sh """ + ИмяФайлаСкрипта + """";
КонецЕсли;
Иначе
ИтоговаяКоманда = """" + ИмяФайлаСкрипта + """";
КонецЕсли;

ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина;

// BSLLS:ExternalAppStarting-off
Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды);
// BSLLS:ExternalAppStarting-on

пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяФайлаСкрипта);

Если Не ПустаяСтрока(ИмяСлужебногоФайла) Тогда
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяСлужебногоФайла);
КонецЕсли;

УдалитьВременныеФайлыСкриптов(ИмяФайлаСкрипта, ИмяСлужебногоФайла);

Если Результат.КодВозврата <> 0 Тогда
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2 - %3';", ЗаголовокОшибки,
"не удалось выполнить команду системы, код возврата", КодВозврата);
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);

Возврат СообщениеОбОшибке;
КонецЕсли;

МассивФайлов = ПолучитьМассивФайловСодержимогоSFTPСервера(ПутьКФайлуСодержимого);

пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ПутьКФайлуСодержимого);

Возврат МассивФайлов;
Исключение
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2';", ЗаголовокОшибки,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);

УдалитьВременныеФайлыСкриптов(ИмяФайлаСкрипта, ИмяСлужебногоФайла);
КонецПопытки;

Возврат СообщениеОбОшибке;

КонецФункции

Функция ОпределитьТипПолученияИПолучитьСообщениеНаSFTP(ПараметрыСоединения, ПараметрыСообщения)

ЗаголовокОшибки = "Файл не был получен с SFTP-сервера";
СообщениеОбОшибке = "";

ПутьФайлаНаСервере = СтрШаблон("%1%2.%3", ПараметрыСоединения.КаталогВходящие,
ПараметрыСообщения.ИмяФайла, ПараметрыСообщения.Расширение);
// BSLLS:MissingTemporaryFileDeletion-off
// Файл не должен удаляться, так как после получения с SFTP-сервера передается в обработку
ПараметрыСообщения.Путь = ПолучитьИмяВременногоФайла(ПараметрыСообщения.Расширение);
// BSLLS:MissingTemporaryFileDeletion-on

ЭтоLinuxСервер = пбп_ОбщегоНазначенияСлужебный.ЭтоLinuxСервер();

ТекстСкрипта = ПолучитьТекстСкриптаПолученияПоТипуОС(ЭтоLinuxСервер,
ПараметрыСоединения, ПараметрыСообщения.Путь, ПутьФайлаНаСервере);
Если ПустаяСтрока(ТекстСкрипта) Тогда
Возврат ПолучитьТекстОшибкиОтсутствияУтилитыПодключенияSFTP(ЗаголовокОшибки, ЭтоLinuxСервер);
КонецЕсли;

ДвоичныеДанныеСкрипта = ПолучитьДвоичныеДанныеИзСтроки(ТекстСкрипта);
Если ЭтоLinuxСервер Тогда
РасширениеФайлаСкрипта = "sh";
Иначе
РасширениеФайлаСкрипта = "bat";
КонецЕсли;
// BSLLS:MissingTemporaryFileDeletion-off
ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла(РасширениеФайлаСкрипта);
// BSLLS:MissingTemporaryFileDeletion-on
ДвоичныеДанныеСкрипта.Записать(ИмяФайлаСкрипта);

СообщениеОбОшибке = ВыполнитьКомандуСистемыПриПолученииИлиОтправке(
ЭтоLinuxСервер, ТекстСкрипта, ИмяФайлаСкрипта, ЗаголовокОшибки);

Возврат СообщениеОбОшибке;

КонецФункции

Процедура УдалитьВременныеФайлыСкриптов(ИмяОсновногоФайла, Знач ИмяВторогоФайла = "")

пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяОсновногоФайла);

Если Не ПустаяСтрока(ИмяВторогоФайла) Тогда
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяВторогоФайла);
КонецЕсли;

КонецПроцедуры

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Refactor Repeated Code for Maintainability

Several functions, such as ОпределитьТипОтправкиИОтправитьСообщениеНаSFTP, ОпределитьТипЧтенияИПрочитатьСодержимоеНаSFTP, and ОпределитьТипПолученияИПолучитьСообщениеНаSFTP, contain similar logic for handling SFTP operations, including script creation, execution, and temporary file management.

Consider refactoring the repeated code into shared helper functions or modules. This will:

  • Enhance Maintainability: Reduces code duplication and makes future updates easier.
  • Improve Readability: Simplifies the functions and makes the codebase cleaner.
  • Facilitate Testing: Shared code can be tested thoroughly in one place.

Example Approach:

  • Create a generic function to handle the creation and execution of scripts.
  • Parameterize the function to accept different scripts and parameters.
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 1004-1004: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1004
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 1100-1100: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L1100
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 969-969: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L969
Нельзя использовать латинские и кириллические символы в одном идентификаторе

Comment on lines +1370 to +1389
Для Каждого ИмяУтилиты Из МассивИменУтилит Цикл
Если ПроверитьСуществованиеУтилитыПодключенияКSFTPLinux(ИмяУтилиты) Тогда
ИмяУстановленнойУтилиты = ИмяУтилиты;
Прервать;
КонецЕсли;
КонецЦикла;

Возврат ИмяУстановленнойУтилиты;

КонецФункции

Функция ПроверитьСуществованиеУтилитыПодключенияКSFTPLinux(ИмяУтилиты)

РезультатПроверки = Ложь;

// BSLLS:MissingTemporaryFileDeletion-off
ИмяФайлаПроверки = ПолучитьИмяВременногоФайла("txt");
// BSLLS:MissingTemporaryFileDeletion-on

КомандаПроверки = СтрШаблон("command -v %1 > %2", ИмяУтилиты, ИмяФайлаПроверки);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Ensure Temporary Files are Deleted After Use

At line 1386, a temporary file ИмяФайлаПроверки is created but not explicitly deleted after use. To prevent potential resource leaks and security risks, ensure that temporary files are properly cleaned up after they are no longer needed.

Apply this diff to delete the temporary file:

...
+    УдалитьВременныеФайлыСкриптов(ИмяФайлаПроверки);

Committable suggestion was skipped due to low confidence.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Улучшение существующей функциональности
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants