ark-sdk-python 2.0.4__py3-none-any.whl → 2.0.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ark_sdk_python/ark.py CHANGED
@@ -17,7 +17,7 @@ from ark_sdk_python.actions import ArkAction, ArkCacheAction, ArkConfigureAction
17
17
 
18
18
  urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
19
19
 
20
- __version__ = '2.0.4'
20
+ __version__ = '2.0.6'
21
21
 
22
22
 
23
23
  def main():
@@ -33,6 +33,7 @@ class ArkPTYSSHConnection(ArkConnection):
33
33
  Raises:
34
34
  ArkException: _description_
35
35
  """
36
+ # pylint: disable=import-error
36
37
  from pexpect import pxssh
37
38
 
38
39
  if self.__is_connected:
@@ -0,0 +1,235 @@
1
+ import os
2
+ import re
3
+ import subprocess
4
+ import threading
5
+ import time
6
+ from shutil import which
7
+ from typing import Any, Final, Optional
8
+
9
+ from overrides import overrides
10
+
11
+ from ark_sdk_python.common.connections.ark_connection import ArkConnection
12
+ from ark_sdk_python.common.connections.ssh.ark_ssh_connection import SSH_PORT
13
+ from ark_sdk_python.models import ArkException
14
+ from ark_sdk_python.models.common.connections import ArkConnectionCommand, ArkConnectionDetails, ArkConnectionResult
15
+
16
+
17
+ class ArkPTYSSHWinConnection(ArkConnection):
18
+ __ANSI_COLOR_STRIPPER: Final[Any] = re.compile(r'\x1b[^m]*m|\x1b\[\?2004[hl]')
19
+ __ANSI_ESCAPE_STRIPPER: Final[Any] = re.compile(r'\x1B\[[0-?]*[ -/]*[@-~]')
20
+ __PROMPT_REGEX: Final[Any] = re.compile(r"[#$]")
21
+ __PASSWORD_PROMPT_REGEX: Final[Any] = re.compile(
22
+ r"(?i)(?:password:)|(?:passphrase for key)|(?:^Please enter your password[\s\S]+.+ >:$)"
23
+ )
24
+ __EXIT_MAKRER: Final[str] = '__ARK_RC_MARK__'
25
+ __DEFAULT_COL_SIZE: Final[int] = 80
26
+ __DEFAULT_ROW_SIZE: Final[int] = 24
27
+ __DEFAULT_NONEAGER_TIMEOEUT: Final[float] = 1.0
28
+ __DEFAULT_PROMPT_OVERALL_TIMEOUT: Final[float] = 20.0
29
+ __CHAR_SLEEP_TIME: Final[float] = 0.05
30
+
31
+ def __init__(self):
32
+ super().__init__()
33
+ self.__is_connected: bool = False
34
+ self.__is_suspended: bool = False
35
+ self.__pty: Optional[Any] = None
36
+ self.__output_lock: threading.Lock = threading.Lock()
37
+ self.__buffer: str = ''
38
+
39
+ def __strip_ansi(self, ansi_input: str) -> str:
40
+ ansi_input = ansi_input.strip()
41
+ ansi_input = ArkPTYSSHWinConnection.__ANSI_COLOR_STRIPPER.sub('', ansi_input)
42
+ ansi_input = ArkPTYSSHWinConnection.__ANSI_ESCAPE_STRIPPER.sub('', ansi_input)
43
+ return ansi_input
44
+
45
+ def __reset_buffer(self) -> None:
46
+ with self.__output_lock:
47
+ self.__buffer = ''
48
+
49
+ def __read_until_latest_prompt(
50
+ self,
51
+ password: Optional[str] = None,
52
+ noneager_timeout: float = __DEFAULT_NONEAGER_TIMEOEUT,
53
+ overall_timeout: float = __DEFAULT_PROMPT_OVERALL_TIMEOUT,
54
+ login_prompt: bool = False,
55
+ expected_prompt: Any = __PROMPT_REGEX,
56
+ ) -> None:
57
+ buffer = ''
58
+ prompt_found_at = -1
59
+ start_time = time.time()
60
+ noneager_start_time = start_time
61
+
62
+ while True:
63
+ char = self.__pty.read(1)
64
+ if not char:
65
+ if ArkPTYSSHWinConnection.__PASSWORD_PROMPT_REGEX.search(self.__strip_ansi(buffer)) and not password and login_prompt:
66
+ raise RuntimeError(f'Password prompt with no password given [{buffer}]')
67
+ if (time.time() - noneager_start_time > noneager_timeout) and prompt_found_at != -1:
68
+ break
69
+ if (time.time() - start_time) > overall_timeout and prompt_found_at == -1:
70
+ raise RuntimeError(f'Timeout while waiting for prompt [{buffer}]')
71
+ time.sleep(ArkPTYSSHWinConnection.__CHAR_SLEEP_TIME)
72
+ continue
73
+
74
+ buffer += char
75
+
76
+ with self.__output_lock:
77
+ self.__buffer += char
78
+
79
+ if ArkPTYSSHWinConnection.__PASSWORD_PROMPT_REGEX.search(self.__strip_ansi(buffer)) and login_prompt:
80
+ if not password:
81
+ raise RuntimeError(f'Password prompt with no password given [{buffer}]')
82
+ self.__pty.write(password + '\n')
83
+ buffer = ""
84
+ prompt_found_at = -1
85
+ continue
86
+
87
+ if expected_prompt.search(buffer):
88
+ prompt_found_at = len(buffer)
89
+
90
+ noneager_start_time = time.time()
91
+
92
+ if prompt_found_at != -1:
93
+ with self.__output_lock:
94
+ self.__buffer = buffer
95
+
96
+ @overrides
97
+ def connect(self, connection_details: ArkConnectionDetails) -> None:
98
+ """
99
+ Performs SSH connection with given details or keys
100
+ Saves the ssh session to be used for command executions
101
+ Done using windows pty
102
+
103
+ Args:
104
+ connection_details (ArkConnectionDetails): _description_
105
+
106
+ Raises:
107
+ ArkException: _description_
108
+ """
109
+ # pylint: disable=import-error
110
+ import winpty
111
+
112
+ if self.__is_connected:
113
+ return
114
+
115
+ address = connection_details.address
116
+ user = connection_details.credentials.user
117
+ port = connection_details.port or SSH_PORT
118
+ password = None
119
+ key_path = None
120
+ if connection_details.credentials.password:
121
+ password = connection_details.credentials.password.get_secret_value()
122
+ elif connection_details.credentials.private_key_filepath:
123
+ key_path = connection_details.credentials.private_key_filepath
124
+
125
+ ssh_args = [f'{user}@{address}', '-p', str(port), '-o', 'StrictHostKeyChecking=no']
126
+ if key_path:
127
+ ssh_args.extend(['-i', str(key_path)])
128
+ try:
129
+ self.__pty = winpty.PTY(
130
+ cols=ArkPTYSSHWinConnection.__DEFAULT_COL_SIZE,
131
+ rows=ArkPTYSSHWinConnection.__DEFAULT_ROW_SIZE,
132
+ backend=winpty.enums.Backend.WinPTY,
133
+ )
134
+ ssh_full_cmd = which('ssh', path=os.environ.get('PATH', os.defpath))
135
+ self.__pty.spawn(ssh_full_cmd, cmdline=' ' + subprocess.list2cmdline(ssh_args))
136
+ self.__read_until_latest_prompt(password, login_prompt=True)
137
+ self.__is_connected = True
138
+ except Exception as ex:
139
+ raise ArkException(f'Failed to ssh connect [{str(ex)}]') from ex
140
+
141
+ @overrides
142
+ def disconnect(self) -> None:
143
+ """
144
+ Disconnects the ssh session
145
+ """
146
+ if self.__pty:
147
+ self.__pty.write('exit\n')
148
+ self.__pty = None
149
+ self.__is_connected = False
150
+ self.__is_suspended = False
151
+
152
+ @overrides
153
+ def suspend_connection(self) -> None:
154
+ """
155
+ Suspends execution of ssh commands
156
+ """
157
+ self.__is_suspended = True
158
+
159
+ @overrides
160
+ def restore_connection(self) -> None:
161
+ """
162
+ Restores execution of ssh commands
163
+ """
164
+ self.__is_suspended = False
165
+
166
+ @overrides
167
+ def is_suspended(self) -> bool:
168
+ """
169
+ Checks whether ssh commands can be executed or not
170
+
171
+ Returns:
172
+ bool: _description_
173
+ """
174
+ return self.__is_suspended
175
+
176
+ @overrides
177
+ def is_connected(self) -> bool:
178
+ """
179
+ Checks whether theres a ssh session connected
180
+
181
+ Returns:
182
+ bool: _description_
183
+ """
184
+ return self.__is_connected
185
+
186
+ @overrides
187
+ def run_command(self, command: ArkConnectionCommand) -> ArkConnectionResult:
188
+ """
189
+ Runs a command over ssh session via pty, returning the result accordingly
190
+ stderr is not supported, only stdout is returned, and it'll contain everything including stderr
191
+
192
+ Args:
193
+ command (ArkConnectionCommand): _description_
194
+
195
+ Raises:
196
+ ArkException: _description_
197
+
198
+ Returns:
199
+ ArkConnectionResult: _description_
200
+ """
201
+ if not self.__is_connected or self.__is_suspended:
202
+ raise ArkException('Cannot run command while not connected or suspended')
203
+
204
+ self._logger.debug(f'Running command [{command.command}]')
205
+
206
+ self.__reset_buffer()
207
+ self.__pty.write(command.command + "\n")
208
+ self.__read_until_latest_prompt()
209
+
210
+ with self.__output_lock:
211
+ stdout = self.__buffer.strip()
212
+
213
+ self.__reset_buffer()
214
+ self.__pty.write(f'echo {ArkPTYSSHWinConnection.__EXIT_MAKRER}_$?;\n')
215
+ self.__read_until_latest_prompt()
216
+
217
+ with self.__output_lock:
218
+ lines = self.__buffer.strip().splitlines()
219
+
220
+ rc = None
221
+ for line in lines:
222
+ line = self.__strip_ansi(line)
223
+ if line.startswith(f'{ArkPTYSSHWinConnection.__EXIT_MAKRER}_'):
224
+ try:
225
+ rc = int(line[len(ArkPTYSSHWinConnection.__EXIT_MAKRER) + 1 :]) # +1 for the underscore
226
+ break
227
+ except ValueError:
228
+ continue
229
+ if rc is None:
230
+ raise ArkException(f"Failed to parse exit code from output - [{self.__buffer}]")
231
+ if rc != command.expected_rc and command.raise_on_error:
232
+ raise ArkException(f'Failed to execute command [{command.command}] - [{rc}] - [{stdout}]')
233
+ self._logger.debug(f'Command rc: [{rc}]')
234
+ self._logger.debug(f'Command stdout: [{stdout}]')
235
+ return ArkConnectionResult(stdout=stdout, rc=rc)
@@ -1,11 +1,17 @@
1
1
  import argparse
2
+ import platform
2
3
  import tempfile
3
4
 
4
5
  from ark_sdk_python.auth import ArkISPAuth
5
6
  from ark_sdk_python.common.ark_jwt_utils import ArkJWTUtils
6
7
  from ark_sdk_python.common.connections.ssh.ark_pty_ssh_connection import ArkPTYSSHConnection
8
+ from ark_sdk_python.common.connections.ssh.ark_pty_ssh_win_connection import ArkPTYSSHWinConnection
7
9
  from ark_sdk_python.models.auth import ArkAuthMethod, ArkAuthProfile, ArkSecret
8
- from ark_sdk_python.models.auth.ark_auth_method import IdentityServiceUserArkAuthMethodSettings
10
+ from ark_sdk_python.models.auth.ark_auth_method import (
11
+ ArkAuthMethodsDescriptionMap,
12
+ IdentityArkAuthMethodSettings,
13
+ IdentityServiceUserArkAuthMethodSettings,
14
+ )
9
15
  from ark_sdk_python.models.common.connections.ark_connection_command import ArkConnectionCommand
10
16
  from ark_sdk_python.models.common.connections.ark_connection_credentials import ArkConnectionCredentials
11
17
  from ark_sdk_python.models.common.connections.ark_connection_details import ArkConnectionDetails
@@ -13,29 +19,36 @@ from ark_sdk_python.models.services.sia.sso.ark_sia_sso_get_ssh_key import ArkSI
13
19
  from ark_sdk_python.services.sia.sso import ArkSIASSOService
14
20
 
15
21
 
16
- def login_to_identity_security_platform(service_user: str, service_token: str, application_name: str) -> ArkISPAuth:
22
+ def login_to_identity_security_platform(user: str, secret: str, is_service_user: bool, application_name: str) -> ArkISPAuth:
17
23
  """
18
- This will perform login to the tenant with the given service user credentials
24
+ This will perform login to the tenant with the given user credentials
25
+ Where the user is normal or service user based on the boolean
19
26
  Caching the logged in token is disabled and will perform a full login on each call
20
27
  Will return an identity security platform authenticated class
21
28
 
22
29
  Args:
23
- service_user (str): _description_
24
- service_token (str): _description_
30
+ user (str): _description_
31
+ secret (str): _description_
25
32
  application_name (str): _description_
26
33
 
27
34
  Returns:
28
35
  ArkISPAuth: _description_
29
36
  """
30
- print('Logging in to the tenant')
31
37
  isp_auth = ArkISPAuth(cache_authentication=False)
38
+ auth_method = ArkAuthMethod.IdentityServiceUser if is_service_user else ArkAuthMethod.Identity
39
+ auth_methods_settings = (
40
+ IdentityServiceUserArkAuthMethodSettings(identity_authorization_application=application_name)
41
+ if is_service_user
42
+ else IdentityArkAuthMethodSettings()
43
+ )
44
+ print(f'Logging in to the tenant with [{ArkAuthMethodsDescriptionMap[auth_method]}] user type and user [{user}]')
32
45
  isp_auth.authenticate(
33
46
  auth_profile=ArkAuthProfile(
34
- username=service_user,
35
- auth_method=ArkAuthMethod.IdentityServiceUser,
36
- auth_method_settings=IdentityServiceUserArkAuthMethodSettings(identity_authorization_application=application_name),
47
+ username=user,
48
+ auth_method=auth_method,
49
+ auth_method_settings=auth_methods_settings,
37
50
  ),
38
- secret=ArkSecret(secret=service_token),
51
+ secret=ArkSecret(secret=secret),
39
52
  )
40
53
  print('Logged in successfully')
41
54
  return isp_auth
@@ -92,7 +105,10 @@ def connect_and_validate_connection(ssh_key_path: str, proxy_address: str, conne
92
105
  command (str): _description_
93
106
  """
94
107
  print(f'Connecting to proxy [{proxy_address}] and connection string [{connection_string}]')
95
- ssh_connection = ArkPTYSSHConnection()
108
+ if platform.system() == 'Windows':
109
+ ssh_connection = ArkPTYSSHWinConnection()
110
+ else:
111
+ ssh_connection = ArkPTYSSHConnection()
96
112
  ssh_connection.connect(
97
113
  ArkConnectionDetails(
98
114
  address=proxy_address,
@@ -112,8 +128,9 @@ def connect_and_validate_connection(ssh_key_path: str, proxy_address: str, conne
112
128
  if __name__ == '__main__':
113
129
  # Construct an argument parser for CLI parameters for the script
114
130
  parser = argparse.ArgumentParser()
115
- parser.add_argument('--service-user', required=True, help='Service user to login and perform the operation with')
116
- parser.add_argument('--service-token', required=True, help='Service user token to use for logging in and connecting')
131
+ parser.add_argument('--user', required=True, help='User to login and perform the operation with')
132
+ parser.add_argument('--secret', required=True, help='User secret to use for logging in and connecting')
133
+ parser.add_argument('--is-service-user', action='store_true', help='Whether this user is a service user and not a normal user')
117
134
  parser.add_argument(
118
135
  '--service-application',
119
136
  default='__idaptive_cybr_user_oidc',
@@ -139,7 +156,7 @@ if __name__ == '__main__':
139
156
  # - Generate an MFA Caching SSH key
140
157
  # - Construct the ssh proxy address
141
158
  # - Connect in SSH to the proxy / target with the MFA Caching SSH Key and perform the command
142
- isp_auth = login_to_identity_security_platform(args.service_user, args.service_token, args.service_application)
159
+ isp_auth = login_to_identity_security_platform(args.user, args.secret, args.is_service_user, args.service_application)
143
160
  ssh_key_path = generate_mfa_caching_ssh_key(isp_auth, temp_folder)
144
161
  proxy_address = construct_ssh_proxy_address(isp_auth)
145
162
  connect_and_validate_connection(ssh_key_path, proxy_address, args.connection_string, args.test_command)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ark-sdk-python
3
- Version: 2.0.4
3
+ Version: 2.0.6
4
4
  Summary: Official Ark SDK / CLI for CyberArk Identity Security Platform
5
5
  License: Apache-2.0
6
6
  Author: CyberArk
@@ -29,13 +29,14 @@ Requires-Dist: keyrings.cryptfile
29
29
  Requires-Dist: overrides
30
30
  Requires-Dist: packaging
31
31
  Requires-Dist: paramiko
32
- Requires-Dist: pexpect
32
+ Requires-Dist: pexpect ; sys_platform != "win32"
33
33
  Requires-Dist: progress
34
34
  Requires-Dist: pycryptodome
35
35
  Requires-Dist: pydantic (==2.*)
36
36
  Requires-Dist: pyhumps
37
37
  Requires-Dist: pyjwt
38
38
  Requires-Dist: python-dateutil
39
+ Requires-Dist: pywinpty ; sys_platform == "win32"
39
40
  Requires-Dist: pywinrm
40
41
  Requires-Dist: pyyaml
41
42
  Requires-Dist: requests
@@ -32,9 +32,11 @@ of the license associated with each component.
32
32
  - https://github.com/regebro/tzlocal - [Tzlocal](#Tzlocal)
33
33
  - https://github.com/yaml/pyyaml - [Pyyaml](#Pyyaml)
34
34
  - https://github.com/diyan/pywinrm - [Pywinrm](#Pywinrm)
35
+ - https://github.com/andfoy/pywinpty - [Pywinpty](#Pywinpty)
35
36
 
36
37
  - [SECTION 5: ISC](<SECTION 5: ISC>)
37
38
  - https://github.com/verigak/progress - [Progress](#Progress)
39
+ - https://github.com/pexpect/pexpect - [Pexpect](#Pexpect)
38
40
 
39
41
  - [SECTION 6: LGPL-2.1](<SECTION 5: LGPL-2.1>)
40
42
  - https://github.com/paramiko/paramiko - [Paramiko](#Paramiko)
@@ -2059,58 +2061,26 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2059
2061
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2060
2062
  THE SOFTWARE.
2061
2063
 
2064
+ ## Pywinpty
2062
2065
 
2063
- # SECTION 5: ISC
2064
-
2065
- ## Progress
2066
-
2067
- https://github.com/verigak/progress
2066
+ https://github.com/andfoy/pywinpty
2068
2067
 
2069
2068
  ### Authors / Copyright
2070
2069
 
2071
- progress is licensed under ISC
2072
-
2073
- Copyright (c) 2012 Georgios Verigakis <verigak@gmail.com>
2070
+ Copyright (c) 2017 Spyder IDE
2074
2071
 
2075
2072
  ### License
2076
2073
 
2077
- Copyright (c) 2012 Georgios Verigakis <verigak@gmail.com>
2074
+ MIT License
2078
2075
 
2079
- Permission to use, copy, modify, and distribute this software for any
2080
- purpose with or without fee is hereby granted, provided that the above
2081
- copyright notice and this permission notice appear in all copies.
2076
+ Copyright (c) 2017 Spyder IDE
2082
2077
 
2083
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
2084
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
2085
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
2086
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
2087
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
2088
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
2089
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2090
-
2091
-
2092
- ## Pyyaml
2093
-
2094
- https://github.com/yaml/pyyaml
2095
-
2096
- ### Authors / Copyright
2097
-
2098
- The PyYAML module was written by Kirill Simonov xi@resolvent.net. It is currently maintained by the YAML and Python communities.
2099
-
2100
- Copyright (c) 2017-2021 Ingy döt Net
2101
- Copyright (c) 2006-2016 Kirill Simonov
2102
-
2103
- ### License
2104
-
2105
- Copyright (c) 2017-2021 Ingy döt Net
2106
- Copyright (c) 2006-2016 Kirill Simonov
2107
-
2108
- Permission is hereby granted, free of charge, to any person obtaining a copy of
2109
- this software and associated documentation files (the "Software"), to deal in
2110
- the Software without restriction, including without limitation the rights to
2111
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
2112
- of the Software, and to permit persons to whom the Software is furnished to do
2113
- so, subject to the following conditions:
2078
+ Permission is hereby granted, free of charge, to any person obtaining a copy
2079
+ of this software and associated documentation files (the "Software"), to deal
2080
+ in the Software without restriction, including without limitation the rights
2081
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
2082
+ copies of the Software, and to permit persons to whom the Software is
2083
+ furnished to do so, subject to the following conditions:
2114
2084
 
2115
2085
  The above copyright notice and this permission notice shall be included in all
2116
2086
  copies or substantial portions of the Software.
@@ -2152,6 +2122,37 @@ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
2152
2122
  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
2153
2123
  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2154
2124
 
2125
+ ## Pexpect
2126
+
2127
+ https://github.com/pexpect/pexpect
2128
+
2129
+ ### Authors / Copyright
2130
+
2131
+ Copyright (c) 2013-2014, Pexpect development team
2132
+ Copyright (c) 2012, Noah Spurrier <noah@noah.org>
2133
+
2134
+ ### License
2135
+
2136
+ ISC LICENSE
2137
+
2138
+ This license is approved by the OSI and FSF as GPL-compatible.
2139
+ http://opensource.org/licenses/isc-license.txt
2140
+
2141
+ Copyright (c) 2013-2014, Pexpect development team
2142
+ Copyright (c) 2012, Noah Spurrier <noah@noah.org>
2143
+
2144
+ Permission to use, copy, modify, and/or distribute this software for any
2145
+ purpose with or without fee is hereby granted, provided that the above
2146
+ copyright notice and this permission notice appear in all copies.
2147
+
2148
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
2149
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
2150
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
2151
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
2152
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
2153
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
2154
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2155
+
2155
2156
 
2156
2157
  # SECTION 6: LGPL-2.1
2157
2158
 
@@ -10,7 +10,7 @@ ark_sdk_python/actions/ark_service_exec_action.py,sha256=IHIm9oISRThOD8WNJe4oJX-
10
10
  ark_sdk_python/args/__init__.py,sha256=mCb4UrIRL4u58QyUbqqH2xAU0VN91pxjK5sa_UwCM_k,279
11
11
  ark_sdk_python/args/ark_args_formatter.py,sha256=-Rs_rGMIr1bprD1SfYlMsLoSOFgr_RFrRdREvbmPU6k,9204
12
12
  ark_sdk_python/args/ark_pydantic_argparse.py,sha256=uupNLnUmO5LrTrRZsBv7qRKgDsx4GaJMwOUh1TCc1-w,40083
13
- ark_sdk_python/ark.py,sha256=iMgWG48a8PALAEzUFSp1VojhqJTJL8s_xKPQ417EahU,1280
13
+ ark_sdk_python/ark.py,sha256=IYvZ-F-dZHqy6sd2TAPPYZTPEbBK2NsBSETI7mQb1kk,1280
14
14
  ark_sdk_python/ark_api.py,sha256=qEB2j-xf8kiSdAvTXrvEdqGDQ-l1aoEvktxnq7BYNRI,12486
15
15
  ark_sdk_python/auth/__init__.py,sha256=1l29Rf3VhwmV8z3YROiQVcgrZYSeeCqVN4zna77tnlk,620
16
16
  ark_sdk_python/auth/ark_auth.py,sha256=2fPlABM3AwWmb1h0lQPQAz93u1ZluYKv7axlfg4lq5Q,12988
@@ -43,7 +43,8 @@ ark_sdk_python/common/ark_system_config.py,sha256=cl44cYSgXZEnoRYu048aBeJwWRPdCT
43
43
  ark_sdk_python/common/connections/__init__.py,sha256=RyARha6jTeaUw1cIGBSR7nOYxCV3fC24juKb-17yXLw,104
44
44
  ark_sdk_python/common/connections/ark_connection.py,sha256=wjYpn_9EJ-B679006VqQREFeTOhINmw-heiRqlpuCnY,1613
45
45
  ark_sdk_python/common/connections/ssh/__init__.py,sha256=Ycv3BDI2iw-N7BdRkpAv2Qi90O4bp8sPyNsJnuQLfWo,256
46
- ark_sdk_python/common/connections/ssh/ark_pty_ssh_connection.py,sha256=GaCdiORXWfMB4Pu5bu1nkNPmjUAU5N3l7qUA6FaQ4WI,4974
46
+ ark_sdk_python/common/connections/ssh/ark_pty_ssh_connection.py,sha256=mhrVYV9vx81lSRXCcPoV3KjxKvMDEZlHEROOB1mynLs,5013
47
+ ark_sdk_python/common/connections/ssh/ark_pty_ssh_win_connection.py,sha256=vAAvJ7AMML66B4GVjsSeqzPlJVrrNK2M34TqeVDYg2k,8557
47
48
  ark_sdk_python/common/connections/ssh/ark_ssh_connection.py,sha256=yVtrM_clLScg1uNY-Fextiup59h2AIbKxQQadLfiqpw,5195
48
49
  ark_sdk_python/common/connections/winrm/__init__.py,sha256=TX8jEK5BPwvlzgo8lH4sGDcY9oL593rdEutQL4MMra4,164
49
50
  ark_sdk_python/common/connections/winrm/ark_winrm_connection.py,sha256=O8ifpvmuzFpvqvjb3wFmg576v5jFZwFHi20wlV2UtwE,6854
@@ -57,7 +58,7 @@ ark_sdk_python/examples/create_sia_vm_environment.py,sha256=omk2mb1yrAU8w3mNSqjH
57
58
  ark_sdk_python/examples/default_suffix.py,sha256=GEAnsrVhNdsIZ2YRJd4Xs4HYv86UdmXwPwOs7ajcQIQ,662
58
59
  ark_sdk_python/examples/list_pcloud_accounts.py,sha256=Xzq_LIp_woRgCt73w1AMlXbB6P8yNRHr1VGIBCyQswk,810
59
60
  ark_sdk_python/examples/session_monitoring_activites.py,sha256=WSGISA4Qye8q22WpiHq0HKYTfbwLK7038mRHp2Kr9IQ,1632
60
- ark_sdk_python/examples/validate_ssh_connection.py,sha256=hSUtmADqupxEkbKRTvC0MKmJBHfe-PYltVP0u8sHuhQ,6357
61
+ ark_sdk_python/examples/validate_ssh_connection.py,sha256=K9RB8eosbV-5m0Q-gx9YQWrp57D8oLB4jfCgQy44gdU,7094
61
62
  ark_sdk_python/models/__init__.py,sha256=2EKDAGANDadQfJrnTjm2Jc7JnINcZOwCRXWHEXmIH6o,1082
62
63
  ark_sdk_python/models/actions/__init__.py,sha256=2xPZhoHco50bmPX7rm6uPOAcYURoTP9J5KF4E3XNaFA,743
63
64
  ark_sdk_python/models/actions/ark_configure_action_consts.py,sha256=-YNgiGv1GsQx-JvO0eXXrrOlDcH6sRDLdO7kvTHto-M,1143
@@ -479,9 +480,9 @@ ark_sdk_python/services/sia/workspaces/targetsets/__init__.py,sha256=UjHr81LMcMl
479
480
  ark_sdk_python/services/sia/workspaces/targetsets/ark_sia_target_sets_workspace_service.py,sha256=o9_DzskTV94kkfc4m0Qk8lj5FV8rexRa5RzRwfe9Tbo,11254
480
481
  ark_sdk_python/services/sm/__init__.py,sha256=jzKxEkZYOCW9y_byLfd_odae9m2sh1UfjaaKBVySWY0,95
481
482
  ark_sdk_python/services/sm/ark_sm_service.py,sha256=Rh2dFjNz7VMJUnl43hxL07HEZ8_33KrU_lqfUrqUDn4,11517
482
- ark_sdk_python-2.0.4.dist-info/LICENSE.txt,sha256=d4EzYx2apA3-GqrFY23wLtc6UmQNXG05gyLfZ3oWVRs,11358
483
- ark_sdk_python-2.0.4.dist-info/METADATA,sha256=VfDRV7q1M3kgtA8eBN79iMwkzLIilCoyfjUyu4xqwAw,20102
484
- ark_sdk_python-2.0.4.dist-info/NOTICES.md,sha256=cuG6J8u9QVu5ZjYki-McJmoEmi39foN30IxA_2fNnKY,125667
485
- ark_sdk_python-2.0.4.dist-info/WHEEL,sha256=QymApwX2NnTrOAORdnrvo1YegSC1EN2pJY0mOd9rfdE,110
486
- ark_sdk_python-2.0.4.dist-info/entry_points.txt,sha256=v5bcuRn8w42ZKQspfvX3AliKmLVO6f7Zb_bma77p3vQ,47
487
- ark_sdk_python-2.0.4.dist-info/RECORD,,
483
+ ark_sdk_python-2.0.6.dist-info/LICENSE.txt,sha256=d4EzYx2apA3-GqrFY23wLtc6UmQNXG05gyLfZ3oWVRs,11358
484
+ ark_sdk_python-2.0.6.dist-info/METADATA,sha256=0boyvZWm2psQTxDhsESJNY003jTvErvxXcKmU_iDYcE,20178
485
+ ark_sdk_python-2.0.6.dist-info/NOTICES.md,sha256=vRzFZEsfBw5q3H1_cgZV50AVhNTqF8Smz9fSvn49Y1E,125803
486
+ ark_sdk_python-2.0.6.dist-info/WHEEL,sha256=QymApwX2NnTrOAORdnrvo1YegSC1EN2pJY0mOd9rfdE,110
487
+ ark_sdk_python-2.0.6.dist-info/entry_points.txt,sha256=v5bcuRn8w42ZKQspfvX3AliKmLVO6f7Zb_bma77p3vQ,47
488
+ ark_sdk_python-2.0.6.dist-info/RECORD,,