-
Notifications
You must be signed in to change notification settings - Fork 7
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
Conversation
…троки и утилит: curl, sshpass, expect
…запуска приложений и удаление файлов временного хранилища
WalkthroughThe 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
Possibly related PRs
Suggested reviewers
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? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this 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 valueThe 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 constantAt 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
📒 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 превышает максимально допустимую 120src/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:
- The return value description is missing, as pointed out by the static analysis tool.
- 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:
- Could you clarify where the specific SFTP Linux functions are implemented? Are they in a separate file?
- 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 bslLength 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 tellsrg
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 bslLength 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~1Length 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:
пбп_ФайловаяСистема
(File System)пбп_ФайловаяСистемаПереадресация
(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:
- The new module files exist in the project.
- They have a basic structure (containing functions or procedures).
- 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." fiLength 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 goodThe 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 recommendedThe 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:
- Please provide the actual code for the new modules
пбп_ФайловаяСистема
andпбп_ФайловаяСистемаПереадресация
for review.- Ensure that proper error handling and security measures are implemented in the SFTP functionality.
- Consider adding unit tests for the new SFTP-related functions.
- 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 implementedThe 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 suggestionSpecify 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 issueCorrect 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
>
and2>
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.txtLength of output: 67
src/cf/Catalogs/пбп_НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1)
281-281
: Label Updated Appropriately for FTP ResourcesThe 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 securityLaunching 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
: LGTMThe 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
Добавьте описание возвращаемого значения функции
<CommonModule>пбп_ФайловаяСистема</CommonModule> | ||
<CommonModule>пбп_ФайловаяСистемаПереадресация</CommonModule> |
There was a problem hiding this comment.
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:
пбп_ФайловаяСистема
(File System)пбп_ФайловаяСистемаПереадресация
(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
Если КодировкаИсполнения = "OEM" Тогда | ||
КодировкаИсполнения = 437; | ||
ИначеЕсли КодировкаИсполнения = "CP866" Тогда | ||
КодировкаИсполнения = 866; | ||
ИначеЕсли КодировкаИсполнения = "UTF8" Тогда | ||
КодировкаИсполнения = 65001; | ||
КонецЕсли; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Если КодировкаИсполнения = "OEM" Тогда | |
КодировкаИсполнения = 437; | |
ИначеЕсли КодировкаИсполнения = "CP866" Тогда | |
КодировкаИсполнения = 866; | |
ИначеЕсли КодировкаИсполнения = "UTF8" Тогда | |
КодировкаИсполнения = 65001; | |
КонецЕсли; | |
Если КодировкаИсполнения = "OEM" Тогда | |
КодировкаИсполнения = 437; | |
ИначеЕсли КодировкаИсполнения = "CP866" Тогда | |
КодировкаИсполнения = 866; | |
ИначеЕсли КодировкаИсполнения = "UTF8" Тогда | |
КодировкаИсполнения = 65001; | |
Иначе | |
ВызватьИсключение "Неизвестная кодировка исполнения: " + КодировкаИсполнения; | |
КонецЕсли; |
Функция СодержитНебезопасныеДействия(Знач СтрокаКоманды) | ||
|
||
Возврат СтрНайти(СтрокаКоманды, "${") <> 0 | ||
Или СтрНайти(СтрокаКоманды, "$(") <> 0 | ||
Или СтрНайти(СтрокаКоманды, "`") <> 0 | ||
Или СтрНайти(СтрокаКоманды, "|") <> 0 | ||
Или СтрНайти(СтрокаКоманды, ";") <> 0 | ||
Или СтрНайти(СтрокаКоманды, "&") <> 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Функция СодержитНебезопасныеДействия(Знач СтрокаКоманды) | |
Возврат СтрНайти(СтрокаКоманды, "${") <> 0 | |
Или СтрНайти(СтрокаКоманды, "$(") <> 0 | |
Или СтрНайти(СтрокаКоманды, "`") <> 0 | |
Или СтрНайти(СтрокаКоманды, "|") <> 0 | |
Или СтрНайти(СтрокаКоманды, ";") <> 0 | |
Или СтрНайти(СтрокаКоманды, "&") <> 0; | |
Функция СодержитНебезопасныеДействия(Знач СтрокаКоманды) | |
Возврат СтрНайти(СтрокаКоманды, "${") <> 0 | |
Или СтрНайти(СтрокаКоманды, "$(") <> 0 | |
Или СтрНайти(СтрокаКоманды, "`") <> 0 | |
Или СтрНайти(СтрокаКоманды, "|") <> 0 | |
Или СтрНайти(СтрокаКоманды, ";") <> 0 | |
Или СтрНайти(СтрокаКоманды, "&") <> 0 | |
Или СтрНайти(СтрокаКоманды, ">") <> 0 | |
Или СтрНайти(СтрокаКоманды, "<") <> 0 | |
Или СтрНайти(СтрокаКоманды, "%") <> 0 | |
Или СтрНайти(СтрокаКоманды, "^") <> 0 | |
Или СтрНайти(СтрокаКоманды, """") <> 0 | |
Или СтрНайти(СтрокаКоманды, "'") <> 0; |
Процедура ПроверитьСодержитНебезопасныеДействия(Знач КомандаЗапуска) | ||
Если СодержитНебезопасныеДействия(КомандаЗапуска) Тогда | ||
ВызватьИсключение пбп_СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( | ||
НСтр("ru = 'Не удалось запустить программу. | ||
|Недопустимая строка команды | ||
|%1 | ||
| | ||
|Строка команды не должна содержать символы: ""${"", ""$("", ""`"", ""|"", "";"", ""&"".'"), | ||
КомандаЗапуска); | ||
КонецЕсли; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Процедура ПроверитьСодержитНебезопасныеДействия(Знач КомандаЗапуска) | |
Если СодержитНебезопасныеДействия(КомандаЗапуска) Тогда | |
ВызватьИсключение пбп_СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( | |
НСтр("ru = 'Не удалось запустить программу. | |
|Недопустимая строка команды | |
|%1 | |
| | |
|Строка команды не должна содержать символы: ""${"", ""$("", ""`"", ""|"", "";"", ""&"".'"), | |
КомандаЗапуска); | |
КонецЕсли; | |
Процедура ПроверитьСодержитНебезопасныеДействия(Знач КомандаЗапуска) | |
Если ТипЗнч(КомандаЗапуска) <> Тип("Строка") Тогда | |
ВызватьИсключение "Ожидалась строка в ПроверитьСодержитНебезопасныеДействия"; | |
КонецЕсли; | |
Если СодержитНебезопасныеДействия(КомандаЗапуска) Тогда | |
ВызватьИсключение пбп_СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( | |
НСтр("ru = 'Не удалось запустить программу. | |
|Недопустимая строка команды | |
|%1 | |
| | |
|Строка команды не должна содержать символы: ""${"", ""$("", ""`"", ""|"", "";"", ""&"".'"), | |
КомандаЗапуска); | |
КонецЕсли; |
НужныКавычки = Аргумент = Неопределено | ||
Или ПустаяСтрока(Аргумент) | ||
Или СтрНайти(Аргумент, " ") | ||
Или СтрНайти(Аргумент, Символы.Таб) | ||
Или СтрНайти(Аргумент, "&") | ||
Или СтрНайти(Аргумент, "(") | ||
Или СтрНайти(Аргумент, ")") | ||
Или СтрНайти(Аргумент, "[") | ||
Или СтрНайти(Аргумент, "]") | ||
Или СтрНайти(Аргумент, "{") | ||
Или СтрНайти(Аргумент, "}") | ||
Или СтрНайти(Аргумент, "^") | ||
Или СтрНайти(Аргумент, "=") | ||
Или СтрНайти(Аргумент, ";") | ||
Или СтрНайти(Аргумент, "!") | ||
Или СтрНайти(Аргумент, "'") | ||
Или СтрНайти(Аргумент, "+") | ||
Или СтрНайти(Аргумент, ",") | ||
Или СтрНайти(Аргумент, "`") | ||
Или СтрНайти(Аргумент, "~") | ||
Или СтрНайти(Аргумент, "$") | ||
Или СтрНайти(Аргумент, "|"); | ||
|
There was a problem hiding this comment.
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.
ИмяФайлаСкрипта = КаталогВременныхФайлов() + "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"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
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
Нужно добавить удаление временного файла после использования
#Область 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"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
ПутьКФайлуСодержимого = ПолучитьИмяВременногоФайла("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
Нельзя использовать латинские и кириллические символы в одном идентификаторе
Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда | ||
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); | ||
КонецЕсли; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда | |
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); | |
КонецЕсли; | |
Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединения = "") Экспорт | |
Если ПустаяСтрока(СтрокаСоединения) Тогда | |
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); | |
КонецЕсли; | |
Возврат СтрНайти(ВРег(СтрокаСоединения), "FILE=") = 1; | |
КонецФункции |
Функция ЭтоLinuxСервер() Экспорт | ||
|
||
СистемнаяИнформация = Новый СистемнаяИнформация; | ||
Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 | ||
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64; | ||
|
||
КонецФункции |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Функция Это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
Нельзя использовать латинские и кириллические символы в одном идентификаторе
Функция ЭтоWindowsСервер() Экспорт | ||
|
||
СистемнаяИнформация = Новый СистемнаяИнформация; | ||
Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 | ||
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64; | ||
|
||
КонецФункции |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Функция Это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
Нельзя использовать латинские и кириллические символы в одном идентификаторе
There was a problem hiding this 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
📒 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 constructionIn
СтрокаЗапускаКоманды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 identifiersThe 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 useThe 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 identifiersThe 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
Нельзя использовать латинские и кириллические символы в одном идентификаторе
Если Не ПустаяСтрока(ТекущийКаталог) Тогда | ||
НаборКоманд = НаборКоманд + ?(ЗначениеЗаполнено(НаборКоманд), "&&", "") + "(cd /D """ + ТекущийКаталог + """)"; | ||
КонецЕсли; | ||
НаборКоманд = НаборКоманд + ?(ЗначениеЗаполнено(НаборКоманд), "&&", "") + "(" + СокрЛП(СтрокаКоманды) + ")"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
ПроверитьСодержитНебезопасныеДействия(КомандаЗапуска); | ||
Результат = КомандаЗапуска; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Функция МассивВСтрокуКоманды(КомандаЗапуска) | ||
|
||
Результат = Новый Массив; | ||
НужныКавычки = Ложь; | ||
Для Каждого Аргумент Из КомандаЗапуска Цикл | ||
|
||
Если Результат.Количество() > 0 Тогда | ||
Результат.Добавить(" "); | ||
КонецЕсли; | ||
|
||
НужныКавычки = Аргумент = Неопределено | ||
Или ПустаяСтрока(Аргумент) | ||
Или СтрНайти(Аргумент, " ") | ||
Или СтрНайти(Аргумент, Символы.Таб) | ||
Или СтрНайти(Аргумент, "&") | ||
Или СтрНайти(Аргумент, "(") | ||
Или СтрНайти(Аргумент, ")") | ||
Или СтрНайти(Аргумент, "[") | ||
Или СтрНайти(Аргумент, "]") | ||
Или СтрНайти(Аргумент, "{") | ||
Или СтрНайти(Аргумент, "}") | ||
Или СтрНайти(Аргумент, "^") | ||
Или СтрНайти(Аргумент, "=") | ||
Или СтрНайти(Аргумент, ";") | ||
Или СтрНайти(Аргумент, "!") | ||
Или СтрНайти(Аргумент, "'") | ||
Или СтрНайти(Аргумент, "+") | ||
Или СтрНайти(Аргумент, ",") | ||
Или СтрНайти(Аргумент, "`") | ||
Или СтрНайти(Аргумент, "~") | ||
Или СтрНайти(Аргумент, "$") | ||
Или СтрНайти(Аргумент, "|"); | ||
|
||
Если НужныКавычки Тогда | ||
Результат.Добавить(""""); | ||
КонецЕсли; | ||
|
||
Результат.Добавить(СтрЗаменить(Аргумент, """", """""")); | ||
|
||
Если НужныКавычки Тогда | ||
Результат.Добавить(""""); | ||
КонецЕсли; | ||
|
||
КонецЦикла; | ||
|
||
Возврат СтрСоединить(Результат); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Функция МассивВСтрокуКоманды(КомандаЗапуска) | |
Результат = Новый Массив; | |
НужныКавычки = Ложь; | |
Для Каждого Аргумент Из КомандаЗапуска Цикл | |
Если Результат.Количество() > 0 Тогда | |
Результат.Добавить(" "); | |
КонецЕсли; | |
НужныКавычки = Аргумент = Неопределено | |
Или ПустаяСтрока(Аргумент) | |
Или СтрНайти(Аргумент, " ") | |
Или СтрНайти(Аргумент, Символы.Таб) | |
Или СтрНайти(Аргумент, "&") | |
Или СтрНайти(Аргумент, "(") | |
Или СтрНайти(Аргумент, ")") | |
Или СтрНайти(Аргумент, "[") | |
Или СтрНайти(Аргумент, "]") | |
Или СтрНайти(Аргумент, "{") | |
Или СтрНайти(Аргумент, "}") | |
Или СтрНайти(Аргумент, "^") | |
Или СтрНайти(Аргумент, "=") | |
Или СтрНайти(Аргумент, ";") | |
Или СтрНайти(Аргумент, "!") | |
Или СтрНайти(Аргумент, "'") | |
Или СтрНайти(Аргумент, "+") | |
Или СтрНайти(Аргумент, ",") | |
Или СтрНайти(Аргумент, "`") | |
Или СтрНайти(Аргумент, "~") | |
Или СтрНайти(Аргумент, "$") | |
Или СтрНайти(Аргумент, "|"); | |
Если НужныКавычки Тогда | |
Результат.Добавить(""""); | |
КонецЕсли; | |
Результат.Добавить(СтрЗаменить(Аргумент, """", """""")); | |
Если НужныКавычки Тогда | |
Результат.Добавить(""""); | |
КонецЕсли; | |
КонецЦикла; | |
Возврат СтрСоединить(Результат); | |
Функция МассивВСтрокуКоманды(КомандаЗапуска) | |
Результат = Новый Массив; | |
НужныКавычки = Ложь; | |
Для Каждого Аргумент Из КомандаЗапуска Цикл | |
Если ТипЗнч(Аргумент) <> Тип("Строка") Тогда | |
ВызватьИсключение "Ожидалось, что все аргументы в КомандаЗапуска будут строками."; | |
КонецЕсли; | |
Если Результат.Количество() > 0 Тогда | |
Результат.Добавить(" "); | |
КонецЕсли; | |
НужныКавычки = Аргумент = Неопределено | |
Или ПустаяСтрока(Аргумент) | |
Или СтрНайти(Аргумент, " ") | |
Или СтрНайти(Аргумент, Символы.Таб) | |
Или СтрНайти(Аргумент, "&") | |
Или СтрНайти(Аргумент, "(") | |
Или СтрНайти(Аргумент, ")") | |
Или СтрНайти(Аргумент, "[") | |
Или СтрНайти(Аргумент, "]") | |
Или СтрНайти(Аргумент, "{") | |
Или СтрНайти(Аргумент, "}") | |
Или СтрНайти(Аргумент, "^") | |
Или СтрНайти(Аргумент, "=") | |
Или СтрНайти(Аргумент, ";") | |
Или СтрНайти(Аргумент, "!") | |
Или СтрНайти(Аргумент, "'") | |
Или СтрНайти(Аргумент, "+") | |
Или СтрНайти(Аргумент, ",") | |
Или СтрНайти(Аргумент, "`") | |
Или СтрНайти(Аргумент, "~") | |
Или СтрНайти(Аргумент, "$") | |
Или СтрНайти(Аргумент, "|"); | |
Если НужныКавычки Тогда | |
Результат.Добавить(""""); | |
КонецЕсли; | |
Результат.Добавить(СтрЗаменить(Аргумент, """", """""")); | |
Если НужныКавычки Тогда | |
Результат.Добавить(""""); | |
КонецЕсли; | |
КонецЦикла; | |
Возврат СтрСоединить(Результат); |
Функция ПараметрыСообщенияFTPSFTP() Экспорт | ||
|
||
Результат = Новый Структура("Путь, ИмяФайла, Расширение, ДвоичныеДанные"); | ||
Возврат Результат; | ||
|
||
КонецФункции |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
Добавьте описание возвращаемого значения функции
Функция ВыполнитьКомандуСистемыПриПолученииИлиОтправке(ЭтоLinuxСервер, ТекстСкрипта, ИмяФайлаСкрипта, ЗаголовокОшибки) | ||
|
||
Попытка | ||
КодВозврата = 0; | ||
Если ЭтоLinuxСервер Тогда | ||
Если СтрНайти(ТекстСкрипта, "expect") > 0 Тогда | ||
ИтоговаяКоманда = "expect """ + ИмяФайлаСкрипта + """"; | ||
Иначе | ||
ИтоговаяКоманда = "sh """ + ИмяФайлаСкрипта + """"; | ||
КонецЕсли; | ||
Иначе | ||
ИтоговаяКоманда = """" + ИмяФайлаСкрипта + """"; | ||
КонецЕсли; | ||
|
||
ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы(); | ||
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина; | ||
|
||
// BSLLS:ExternalAppStarting-off | ||
Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды); | ||
// BSLLS:ExternalAppStarting-on | ||
|
||
УдалитьВременныеФайлыСкриптов(ИмяФайлаСкрипта); | ||
|
||
Если Результат.КодВозврата <> 0 Тогда | ||
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2 - %3';", ЗаголовокОшибки, | ||
"не удалось выполнить команду системы, код возврата", КодВозврата); | ||
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки); | ||
КонецЕсли; | ||
Исключение | ||
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1. Подробно: %2';", ЗаголовокОшибки, | ||
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); | ||
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки); | ||
|
||
УдалитьВременныеФайлыСкриптов(ИмяФайлаСкрипта); | ||
КонецПопытки; | ||
|
||
Возврат СообщениеОбОшибке; | ||
|
||
КонецФункции |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
Нельзя использовать латинские и кириллические символы в одном идентификаторе
ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла("sh"); | ||
Иначе | ||
ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла("bat"); | ||
КонецЕсли; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
Нужно добавить удаление временного файла после использования
ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла("sh"); | ||
Иначе | ||
ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла("bat"); | ||
КонецЕсли; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
Нужно добавить удаление временного файла после использования
Если ИмяУтилиты = "curl" Тогда | ||
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговCURL( | ||
ПараметрыСоединения, ПутьЛокальногоФайла); | ||
ИначеЕсли ИмяУтилиты = "sshpass" Тогда | ||
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговSSHPASS( | ||
ПараметрыСоединения, ПутьЛокальногоФайла); | ||
ИначеЕсли ИмяУтилиты = "curl" Тогда | ||
ТекстСкрипта = ПолучитьТекстСкриптаСодержимогоКаталоговEXPECT( | ||
ПараметрыСоединения, ПутьЛокальногоФайла); | ||
Иначе | ||
ТекстСкрипта = ""; | ||
КонецЕсли; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Если ИмяУтилиты = "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
Синтаксическая конструкция "Если...Тогда...ИначеЕсли..." содержит повторяющиеся условия
Если ИмяУтилиты = "curl" Тогда | ||
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиCURL( | ||
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере); | ||
ИначеЕсли ИмяУтилиты = "sshpass" Тогда | ||
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиSSHPASS( | ||
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере); | ||
ИначеЕсли ИмяУтилиты = "curl" Тогда | ||
ТекстСкрипта = ПолучитьТекстСкриптаОтправкиEXPECT( | ||
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере); | ||
Иначе | ||
ТекстСкрипта = ""; | ||
КонецЕсли; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Если ИмяУтилиты = "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
Синтаксическая конструкция "Если...Тогда...ИначеЕсли..." содержит повторяющиеся условия
Если ИмяУтилиты = "curl" Тогда | ||
ТекстСкрипта = ПолучитьТекстСкриптаПолученияCURL( | ||
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере); | ||
ИначеЕсли ИмяУтилиты = "sshpass" Тогда | ||
ТекстСкрипта = ПолучитьТекстСкриптаПолученияSSHPASS( | ||
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере); | ||
ИначеЕсли ИмяУтилиты = "curl" Тогда | ||
ТекстСкрипта = ПолучитьТекстСкриптаПолученияEXPECT( | ||
ПараметрыСоединения, ПутьЛокальногоФайла, ПутьФайлаНаСервере); | ||
Иначе | ||
ТекстСкрипта = ""; | ||
КонецЕсли; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Если ИмяУтилиты = "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
Синтаксическая конструкция "Если...Тогда...ИначеЕсли..." содержит повторяющиеся условия
There was a problem hiding this 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
📒 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 ValueThe 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 IdentifiersThe 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 IdentifiersThe 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 StatementThe 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 FunctionsThe 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
Нельзя использовать латинские и кириллические символы в одном идентификаторе
ИмяСлужебногоФайла = ПолучитьИмяВременногоФайла("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Сервер, ТекстСкрипта, ИмяФайлаСкрипта, ЗаголовокОшибки); | ||
|
||
Возврат СообщениеОбОшибке; | ||
|
||
КонецФункции | ||
|
||
Процедура УдалитьВременныеФайлыСкриптов(ИмяОсновногоФайла, Знач ИмяВторогоФайла = "") | ||
|
||
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяОсновногоФайла); | ||
|
||
Если Не ПустаяСтрока(ИмяВторогоФайла) Тогда | ||
пбп_ФайловаяСистемаПереадресация.УдалитьВременныйФайл(ИмяВторогоФайла); | ||
КонецЕсли; | ||
|
||
КонецПроцедуры | ||
|
There was a problem hiding this comment.
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
Нельзя использовать латинские и кириллические символы в одном идентификаторе
Для Каждого ИмяУтилиты Из МассивИменУтилит Цикл | ||
Если ПроверитьСуществованиеУтилитыПодключенияКSFTPLinux(ИмяУтилиты) Тогда | ||
ИмяУстановленнойУтилиты = ИмяУтилиты; | ||
Прервать; | ||
КонецЕсли; | ||
КонецЦикла; | ||
|
||
Возврат ИмяУстановленнойУтилиты; | ||
|
||
КонецФункции | ||
|
||
Функция ПроверитьСуществованиеУтилитыПодключенияКSFTPLinux(ИмяУтилиты) | ||
|
||
РезультатПроверки = Ложь; | ||
|
||
// BSLLS:MissingTemporaryFileDeletion-off | ||
ИмяФайлаПроверки = ПолучитьИмяВременногоФайла("txt"); | ||
// BSLLS:MissingTemporaryFileDeletion-on | ||
|
||
КомандаПроверки = СтрШаблон("command -v %1 > %2", ИмяУтилиты, ИмяФайлаПроверки); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
#100
Summary by CodeRabbit
Release Notes
New Features
Bug Fixes
Version Update