Office365-rest-python-client: рдЕрдзрд┐рдЧреНрд░рд╣рдг_рдЯреЛрдХрди_for_user рдореЗрдВ рддреНрд░реБрдЯрд┐

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рджрд┐рд╕ре░ 2019  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vgrem/Office365-REST-Python-Client

рдирдорд╕реНрддреЗ,

рдореИрдВрдиреЗ Office365-REST-Python-Client рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЗрдВрдЯреНрд░рд╛рдиреЗрдЯ рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯ рдкреЛрд░реНрдЯрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рд╕реЗ рдЕрдзрд┐рдЧреНрд░рд╣рдг_рдЯреЛрдХрди_for_user() рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

рдпреВрдЖрд░рдПрд▓ = " https://mycompany.sharepoint.com "
ctx_auth = рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ (рдпреВрдЖрд░рдПрд▓)
ctx_auth.acquire_token_for_user("my_username", "my_password")

рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ:

рд╡рд┐рд╢реЗрд╖рддрд╛ рддреНрд░реБрдЯрд┐: 'рдХреЛрдИ рдирд╣реАрдВ' рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ 'рдкрд╛рда'

рд╕рд╛рджрд░,
рдирд┐рд╢рд╛рди

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпреВрдЖрд░рдПрд▓ " https://mycompany.sharepoint.com/sites/AnotherSite " рдпрд╛ " https://mycompany.sharepoint.com/sites/AnotherSite/Subsite " рдЬреИрд╕рд╛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.runtime.client_request import ClientRequest
from office365.runtime.utilities.request_options import RequestOptions

user_credentials = {
    'username' : '[email protected]',
    'password' : 'my_password'
}

site_url = "https://mycompany.sharepoint.com/"

ctx_auth = AuthenticationContext(site_url)
if ctx_auth.acquire_token_for_user(user_credentials['username'], user_credentials['password']):
  request = ClientRequest(ctx_auth)
  options = RequestOptions("{0}/_api/web/lists".format(site_url))
  options.set_header('Accept', 'application/json')
  options.set_header('Content-Type', 'application/json')
  data = request.execute_request_direct(options)
  s = json.loads(data.content)

рд╕рднреА 11 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рдорд┐рд▓рд╛ рд╣реИ

рд╡рд╣реА, рдпрд╣ рдЕрднреА рдкреЙрдк рдЕрдк рд╣реБрдЖ рд╣реИ, рдЕрдм рд╢реЗрдпрд░ рдкреНрд╡рд╛рдЗрдВрдЯ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ред рдЕрдиреНрдп рдЕрдВрдХ рдореЗрдВ (#76, 5 рдЕрдЧрд╕реНрдд 2018 рдХреЛ) рдЕрдЧрд▓рд╛ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рдЬреЛ рдЕрднреА рддрдХ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ):

_рд╣рд▓ рдХрд┐рдпрд╛ред рдореБрджреНрджрд╛ рдПрдХ рдХрдВрдкрдиреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдерд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, Azure рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдЖрдВрддрд░рд┐рдХ рд╕рдХреНрд░рд┐рдп рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдХреЗ рдмреАрдЪ рдПрдХ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреИрдЪ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреНрд▓рд╛рдЙрдб AAD рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдпрд╛ рд╣реИред_

рдЕрд╕рд▓ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдПрдбреА рдореЗрдВ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ :( рдХреЛрдИ рд╕рдорд╛рдзрд╛рди/рд╕реБрд░рд╛рдЧ?

рдореЗрд░рд╛ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо = 'рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо'
рдкрд╛рд╕рд╡рд░реНрдб = 'рдорд╛рдпрдкрд╛рд╕рд╡рд░реНрдб'
ctx_auth.acquire_token_for_user (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо = рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдкрд╛рд╕рд╡рд░реНрдб = рдкрд╛рд╕рд╡рд░реНрдб)

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпреВрдЖрд░рдПрд▓ " https://mycompany.sharepoint.com/sites/AnotherSite " рдпрд╛ " https://mycompany.sharepoint.com/sites/AnotherSite/Subsite " рдЬреИрд╕рд╛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.runtime.client_request import ClientRequest
from office365.runtime.utilities.request_options import RequestOptions

user_credentials = {
    'username' : '[email protected]',
    'password' : 'my_password'
}

site_url = "https://mycompany.sharepoint.com/"

ctx_auth = AuthenticationContext(site_url)
if ctx_auth.acquire_token_for_user(user_credentials['username'], user_credentials['password']):
  request = ClientRequest(ctx_auth)
  options = RequestOptions("{0}/_api/web/lists".format(site_url))
  options.set_header('Accept', 'application/json')
  options.set_header('Content-Type', 'application/json')
  data = request.execute_request_direct(options)
  s = json.loads(data.content)

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ PulRequest #168 рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЕрдм рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рд╣рдореЗрдВ рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред

рдиреЛрдЯ: рдЖрдкрдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 2.1.6-1 . рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛

рдЕрд░реЗ рдорд╛рд░реНрдХ, @KasperSvendsen рдФрд░ @fpinab ,

рдЬрдм рд╕реЗ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдмрд╕ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЕрдкрдбреЗрдЯ:

рдЕрд╕рд▓ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдПрдбреА . рдореЗрдВ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЖрдк ADFS рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП

рдЕрдЪреНрдЫреА рдЦрдмрд░, рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯ рдСрдирд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдПрд╕рдПрдПрдордПрд▓-рдЖрдзрд╛рд░рд┐рдд рдлрд╝реЗрдбрд░реЗрдЯреЗрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди 2.1.7 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣рдореЗрдВ рдЕрднреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ

рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЕрдХреНрд╖рдо рд╣реИ

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЪреВрдВрдХрд┐ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рддрдХ PyPi рдХреЛ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЗрд╕ рд╕рдордп GitHub рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:

рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд git+ https://github.com/vgrem/Office365-REST-Python-Client.git

рдЪреАрдпрд░реНрд╕,
рд╡рд╛рджрд┐рдо

@vgrem
рдПрдбреАрдПрдлрдПрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред
рдиреАрдЪреЗ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╣реИ:

from office365.runtime.auth.authentication_context import AuthenticationContext
account = "[email protected]"
password = "example"
url = "https://example.sharepoint.com/sites/base-dok-testing"

ctx_auth = AuthenticationContext(url)
ctx_auth.acquire_token_for_user(account, password)

рдиреАрдЪреЗ рд▓реЙрдЧ рд╣реИ:

16/Jun/2020 10:18:15] DEBUG [none] [office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_token:acquire_token:45] acquire_token called
[16/Jun/2020 10:18:15] DEBUG [none] [office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_token:acquire_token:48] Acquiring Access Token..
[16/Jun/2020 10:18:15] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): login.microsoftonline.com:443
[16/Jun/2020 10:18:16] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://login.microsoftonline.com:443 "POST /GetUserRealm.srf HTTP/1.1" 200 1448
[16/Jun/2020 10:18:16] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): fs.kerialis.fr:443
[16/Jun/2020 10:18:20] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://fs.kerialis.fr:443 "POST /adfs/services/trust/2005/usernamemixed HTTP/1.1" 200 6542
[16/Jun/2020 10:18:20] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): login.microsoftonline.com:443
[16/Jun/2020 10:18:21] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://login.microsoftonline.com:443 "POST /rst2.srf HTTP/1.1" 200 3499
[16/Jun/2020 10:18:21] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): kerialisfr.sharepoint.com:443
[16/Jun/2020 10:18:21] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://kerialisfr.sharepoint.com:443 "HEAD /sites/base-dok-testing/_vti_bin/idcrl.svc HTTP/1.1" 401 0
[16/Jun/2020 10:18:21] ERROR [none] [office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_authentication_cookie:acquire_authentication_cookie:208] An error occurred while retrieving auth cookies from https://kerialisfr.sharepoint.com/sites/base-dok-testing/_vti_bin/idcrl.svc

@Simplici , рдХреНрдпрд╛ рдЖрдк рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИрдВ рд╕рдВрд╕реНрдХрд░рдг v2.1.8 рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЖрдкрдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдЕрдиреНрдпрдерд╛ рдЖрдк рдЙрд╕реА рдореБрджреНрджреЗ рдкрд░ рдареЛрдХрд░ рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

@vgrem рдореИрдВ

рдореИрдВ рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬ 2.1.9 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдкрд░рд┐рдгрд╛рдо рд╡рд╣реА рд╣реИред

рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рдиреЗ рдХреБрдЫ рд╕рдВрд╢реЛрдзрди рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://github.com/vgrem/Office365-REST-Python-Client/issues/210ред

@vgrem рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ " https://company.sharepoint.com/_vti_bin/idcrl.svc рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреБрдХреАрдЬрд╝ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ"

рдореЗрд░реЗ рдкрд╛рд╕ 2.1.7.post1 рднреА рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБ рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред

Office365.runtime.auth.authentication_context рд╕реЗ рдЖрдпрд╛рдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рд╕рдВрдЧ
Office365 рд╕реЗ.sharepoint.client_context рдЖрдпрд╛рдд ClientContext
Office365.sharepoint.file рд╕реЗ рдЖрдпрд╛рдд рдлрд╝рд╛рдЗрд▓

рдпреВрдЖрд░рдПрд▓ = ' https://company.sharepoint.com '
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо = ' [email protected] '
рдкрд╛рд╕рд╡рд░реНрдб = 'xxx'

ctx_auth = рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ (рдпреВрдЖрд░рдПрд▓)

рдЕрдЧрд░ ctx_auth.acquire_token_for_user (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдкрд╛рд╕рд╡рд░реНрдб):
рд╕реАрдЯреАрдПрдХреНрд╕ = рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ (рдпреВрдЖрд░рдПрд▓, рд╕реАрдЯреАрдПрдХреНрд╕_рдСрде)
рд╡реЗрдм = ctx.web
...

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

domdinicola picture domdinicola  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Cesaaar picture Cesaaar  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

NathanSalez picture NathanSalez  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

florinmihut picture florinmihut  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

AakashBasu picture AakashBasu  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ