aboutsummaryrefslogtreecommitdiffstats
path: root/library/python
diff options
context:
space:
mode:
authorqrort <qrort@yandex-team.com>2022-12-02 11:31:25 +0300
committerqrort <qrort@yandex-team.com>2022-12-02 11:31:25 +0300
commitb1f4ffc9c8abff3ba58dc1ec9a9f92d2f0de6806 (patch)
tree2a23209faf0fea5586a6d4b9cee60d1b318d29fe /library/python
parent559174a9144de40d6bb3997ea4073c82289b4974 (diff)
downloadydb-b1f4ffc9c8abff3ba58dc1ec9a9f92d2f0de6806.tar.gz
remove kikimr/driver DEPENDS
Diffstat (limited to 'library/python')
-rw-r--r--library/python/deprecated/ticket_parser2/README.md3
-rw-r--r--library/python/deprecated/ticket_parser2/examples/create_with_tvmapi/__init__.py75
-rw-r--r--library/python/deprecated/ticket_parser2/examples/create_with_tvmtool/__init__.py29
-rw-r--r--library/python/deprecated/ticket_parser2/examples/service_using_tvm_client/__init__.py0
-rw-r--r--library/python/deprecated/ticket_parser2/examples/service_using_tvm_client/serv.py39
-rw-r--r--library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/__init__.py0
-rw-r--r--library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/__init__.py0
-rw-r--r--library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/v1/__init__.py0
-rw-r--r--library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/v1/tvm_client.py147
-rw-r--r--library/python/deprecated/ticket_parser2/so/ticket_parser2_pymodule.exports1
-rw-r--r--library/python/deprecated/ticket_parser2/src/exception.h80
-rw-r--r--library/python/deprecated/ticket_parser2/src/logger.h31
-rw-r--r--library/python/deprecated/ticket_parser2/src/ut/test_client.py710
-rw-r--r--library/python/deprecated/ticket_parser2/src/ut/test_common.py18
-rw-r--r--library/python/deprecated/ticket_parser2/src/ut/test_service.py242
-rw-r--r--library/python/deprecated/ticket_parser2/src/ut/test_user.py218
-rw-r--r--library/python/deprecated/ticket_parser2/src/utils.h131
-rw-r--r--library/python/deprecated/ticket_parser2/ticket_parser2/__init__.py45
-rw-r--r--library/python/deprecated/ticket_parser2/ticket_parser2/api/__init__.py1
-rw-r--r--library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/__init__.py50
-rw-r--r--library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/exceptions.py30
-rw-r--r--library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/unittest.py43
-rw-r--r--library/python/deprecated/ticket_parser2/ticket_parser2/exceptions.py30
-rw-r--r--library/python/deprecated/ticket_parser2/ticket_parser2/low_level.py10
-rw-r--r--library/python/deprecated/ticket_parser2/ticket_parser2/mock.py141
-rw-r--r--library/python/deprecated/ticket_parser2/ticket_parser2/ticket_parser2_pymodule.pyx878
-rw-r--r--library/python/deprecated/ticket_parser2/ticket_parser2/unittest.py43
-rw-r--r--library/python/prctl/prctl.pyx14
-rw-r--r--library/python/tvmauth/README.md101
-rw-r--r--library/python/tvmauth/examples/create_with_tvmapi/__init__.py115
-rw-r--r--library/python/tvmauth/examples/create_with_tvmtool/__init__.py29
-rw-r--r--library/python/tvmauth/examples/service_using_tvm_client/__init__.py0
-rw-r--r--library/python/tvmauth/examples/service_using_tvm_client/serv.py40
-rw-r--r--library/python/tvmauth/so/tvmauth_pymodule.exports1
-rw-r--r--library/python/tvmauth/src/exception.h79
-rw-r--r--library/python/tvmauth/src/logger.h31
-rw-r--r--library/python/tvmauth/src/ut/test_client.py897
-rw-r--r--library/python/tvmauth/src/ut/test_common.py24
-rw-r--r--library/python/tvmauth/src/ut/test_service.py249
-rw-r--r--library/python/tvmauth/src/ut/test_user.py231
-rw-r--r--library/python/tvmauth/src/ut_without_sanitizer/roles/mapping.yaml5
-rw-r--r--library/python/tvmauth/src/ut_without_sanitizer/roles/some_slug_2.json22
-rw-r--r--library/python/tvmauth/src/ut_without_sanitizer/test_roles.py332
-rw-r--r--library/python/tvmauth/src/ut_without_sanitizer/tvmtool.cfg10
-rw-r--r--library/python/tvmauth/src/utils.h109
-rw-r--r--library/python/tvmauth/tvmauth/__init__.py576
-rw-r--r--library/python/tvmauth/tvmauth/deprecated.py43
-rw-r--r--library/python/tvmauth/tvmauth/exceptions.py14
-rw-r--r--library/python/tvmauth/tvmauth/mock.py134
-rw-r--r--library/python/tvmauth/tvmauth/tvmauth_pymodule.pyx756
-rw-r--r--library/python/tvmauth/tvmauth/unittest.py50
-rw-r--r--library/python/tvmauth/tvmauth/utils.py9
52 files changed, 0 insertions, 6866 deletions
diff --git a/library/python/deprecated/ticket_parser2/README.md b/library/python/deprecated/ticket_parser2/README.md
deleted file mode 100644
index 2672e55c9e..0000000000
--- a/library/python/deprecated/ticket_parser2/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-ticket_parser2 is deprecated: please use [tvmauth](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth) instead.
-
-https://clubs.at.yandex-team.ru/passport/3619
diff --git a/library/python/deprecated/ticket_parser2/examples/create_with_tvmapi/__init__.py b/library/python/deprecated/ticket_parser2/examples/create_with_tvmapi/__init__.py
deleted file mode 100644
index f8809b2ed6..0000000000
--- a/library/python/deprecated/ticket_parser2/examples/create_with_tvmapi/__init__.py
+++ /dev/null
@@ -1,75 +0,0 @@
-import ticket_parser2 as tp2
-
-
-def get_client_for_checking_all_tickets_and_fetching_service_tickets():
- c = tp2.TvmClient(
- tp2.TvmApiClientSettings(
- self_client_id=11,
- enable_service_ticket_checking=True,
- enable_user_ticket_checking=tp2.BlackboxEnv.Test,
- self_secret="AAAAAAAAAAAAAAAAAAAAAA",
- dsts={"bb": 224, "datasync": 2000060},
- )
- )
-
- # c.check_service_ticket("some service ticket")
- # c.check_user_ticket("some user ticket")
- # c.get_service_ticket_for("bb")
- # c.get_service_ticket_for(client_id=224)
-
- return c
-
-
-def get_client_for_checking_all_tickets():
- c = tp2.TvmClient(
- tp2.TvmApiClientSettings(
- self_client_id=11,
- enable_service_ticket_checking=True,
- enable_user_ticket_checking=tp2.BlackboxEnv.Test,
- )
- )
-
- # c.check_service_ticket("some service ticket")
- # c.check_user_ticket("some user ticket")
-
- return c
-
-
-def get_client_for_fetching_service_tickets():
- c = tp2.TvmClient(
- tp2.TvmApiClientSettings(
- self_client_id=11,
- self_secret="AAAAAAAAAAAAAAAAAAAAAA",
- dsts={"bb": 224, "datasync": 2000060},
- )
- )
-
- # c.get_service_ticket_for("bb")
- # c.get_service_ticket_for(client_id=224)
-
- return c
-
-
-def get_client_for_checking_service_tickets():
- c = tp2.TvmClient(
- tp2.TvmApiClientSettings(
- self_client_id=11,
- enable_service_ticket_checking=True,
- )
- )
-
- # c.check_service_ticket("some service ticket")
-
- return c
-
-
-def get_client_for_checking_user_tickets():
- c = tp2.TvmClient(
- tp2.TvmApiClientSettings(
- enable_user_ticket_checking=tp2.BlackboxEnv.Test,
- )
- )
-
- # c.check_user_ticket("some user ticket")
-
- return c
diff --git a/library/python/deprecated/ticket_parser2/examples/create_with_tvmtool/__init__.py b/library/python/deprecated/ticket_parser2/examples/create_with_tvmtool/__init__.py
deleted file mode 100644
index 6011f8efd1..0000000000
--- a/library/python/deprecated/ticket_parser2/examples/create_with_tvmtool/__init__.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import ticket_parser2 as tp2
-
-
-# Possibility of using functions depends on config of tvmtool
-# check_service_ticket
-# check_user_ticket
-# get_service_ticket_for
-
-
-def get_client_for_dev():
- c = tp2.TvmClient(
- tp2.TvmToolClientSettings(
- self_alias="me",
- auth_token="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- port=18080,
- )
- )
-
- return c
-
-
-def get_client_in_qloud_or_yandexdeploy():
- c = tp2.TvmClient(
- tp2.TvmToolClientSettings(
- self_alias="me",
- )
- )
-
- return c
diff --git a/library/python/deprecated/ticket_parser2/examples/service_using_tvm_client/__init__.py b/library/python/deprecated/ticket_parser2/examples/service_using_tvm_client/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
--- a/library/python/deprecated/ticket_parser2/examples/service_using_tvm_client/__init__.py
+++ /dev/null
diff --git a/library/python/deprecated/ticket_parser2/examples/service_using_tvm_client/serv.py b/library/python/deprecated/ticket_parser2/examples/service_using_tvm_client/serv.py
deleted file mode 100644
index 43c965ab9e..0000000000
--- a/library/python/deprecated/ticket_parser2/examples/service_using_tvm_client/serv.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import requests
-import ticket_parser2 as tp2
-
-
-class SomeService:
- def __init__(self, **kwargs):
- self._client = tp2.TvmClient(
- tp2.TvmApiClientSettings(
- self_client_id=11,
- enable_service_ticket_checking=True,
- enable_user_ticket_checking=tp2.BlackboxEnv.Test,
- self_secret="AAAAAAAAAAAAAAAAAAAAAA",
- dsts={"bb": 224, "datasync": 2000060},
- )
- )
-
- self._allowed_consumers = kwargs['acl'] # array
-
- def stop(self):
- self._client.stop()
-
- # Processing of request is here
- def handle_request(self, **kwargs):
- try:
- st = self._client.check_service_ticket(kwargs['X-Ya-Service-Ticket'])
- ut = self._client.check_user_ticket(kwargs['X-Ya-User-Ticket'])
-
- if st.src not in self._allowed_consumers:
- raise Exception("Access denied (service)")
-
- if 'allow_to_get_secret_data' not in ut.scopes:
- raise Exception("Access denied (user)")
-
- return requests.get(
- 'my_backend_request',
- headers={'X-Ya-Service-Ticket': self._client.get_service_ticket_for("datasync")},
- ).content
- except tp2.TvmException:
- raise Exception("Error")
diff --git a/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/__init__.py b/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
--- a/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/__init__.py
+++ /dev/null
diff --git a/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/__init__.py b/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
--- a/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/__init__.py
+++ /dev/null
diff --git a/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/v1/__init__.py b/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/v1/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
--- a/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/v1/__init__.py
+++ /dev/null
diff --git a/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/v1/tvm_client.py b/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/v1/tvm_client.py
deleted file mode 100644
index 7e05ca25d0..0000000000
--- a/library/python/deprecated/ticket_parser2/mock/ticket_parser2_mock/api/v1/tvm_client.py
+++ /dev/null
@@ -1,147 +0,0 @@
-try:
- import mock # noqa
-except ImportError:
- import unittest.mock # noqa
-
-try:
- import ticket_parser2_py3.api.v1 as tp2 # noqa
- import ticket_parser2_py3.api.v1.exceptions as tp2e # noqa
- import ticket_parser2_py3.api.v1.unittest as tp2u # noqa
-except ImportError:
- import ticket_parser2.api.v1 as tp2 # noqa
- import ticket_parser2.api.v1.exceptions as tp2e # noqa
- import ticket_parser2.api.v1.unittest as tp2u # noqa
-
-
-import warnings
-
-
-warnings.warn(
- message="This package is going to be removed. Please use 'ticket_parser2.mock' instead",
- category=FutureWarning,
- stacklevel=2,
-)
-
-
-__doc__ = """
-Use TvmClientPatcher to replace TvmClient with MockedTvmClient.
-MockedTvmClient can check ServiceTickets and UserTickets from `tvmknife unittest`
-Read more: https://wiki.yandex-team.ru/passport/tvm2/debug/#tvmknife
-Examples are in docstring for TvmClientPatcher.
-"""
-
-
-PUBLIC_KEYS = tp2u.TVMKNIFE_PUBLIC_KEYS
-
-
-class MockedTvmClient(object):
- def __init__(self, status=tp2.TvmClientStatus.Ok, self_client_id=100500, bb_env=tp2.BlackboxEnv.Test):
- self._status = status
- self._serv_ctx = tp2.ServiceContext(self_client_id, None, PUBLIC_KEYS)
- self._user_ctx = tp2.UserContext(bb_env, PUBLIC_KEYS)
- self._stopped = False
-
- def __check(self):
- if self._stopped:
- raise tp2e.NonRetriableException("TvmClient is already stopped")
-
- def stop(self):
- self._stopped = True
-
- @property
- def status(self):
- self.__check()
- return self._status
-
- @staticmethod
- def status_to_string(status):
- return tp2.TvmClient.status_to_string(status)
-
- def get_service_ticket_for(self, alias=None, client_id=None):
- """
- You can generate any ticket you want with `tvmknife unittest` and override this function with your ticket
- https://wiki.yandex-team.ru/passport/tvm2/debug/
- """
- self.__check()
- if alias is None and client_id is None:
- raise tp2e.TvmException("One of args is required: 'alias' or 'client_id'")
- return "Some service ticket"
-
- def check_service_ticket(self, ticket):
- self.__check()
- return self._serv_ctx.check(ticket)
-
- def check_user_ticket(self, ticket):
- self.__check()
- return self._user_ctx.check(ticket)
-
-
-class TvmClientPatcher(object):
- """
- Example:
- with TvmClientPatcher():
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- assert 123 == c.check_service_ticket(SRV_TICKET).src
- assert 123 == c.check_user_ticket(USER_TICKET_TEST).default_uid
- assert 'Some service ticket' == c.get_service_ticket_for("foo")
-
- Example:
- with TvmClientPatcher(MockedTvmClient(self_client_id=100501)):
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(SRV_TICKET)
- assert 123 == c.check_user_ticket(TEST_TICKET).default_uid
- assert 'Some service ticket' == c.get_service_ticket_for("foo")
-
- Example:
- with TvmClientPatcher(MockedTvmClient()) as p:
- p.get_mocked_tvm_client().check_service_ticket = mock.Mock(
- side_effect=TicketParsingException("Unsupported version", Status.UnsupportedVersion, "2:err"),
- )
-
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(SRV_TICKET)
-
- Example:
- m = MockedTvmClient()
- m.get_service_ticket_for = mock.Mock(side_effect=[
- 'SERVICE_TICKET_FOR_MY_FIRST_CALL',
- 'SERVICE_TICKET_FOR_MY_SECOND_CALL'],
- )
- with TvmClientPatcher(m):
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- assert 'SERVICE_TICKET_FOR_MY_FIRST_CALL' == c.get_service_ticket_for()
- assert 'SERVICE_TICKET_FOR_MY_SECOND_CALL' == c.get_service_ticket_for()
- """
-
- def __init__(self, mocked_tvm_client=None):
- if mocked_tvm_client is None:
- mocked_tvm_client = MockedTvmClient()
- self._mocked_tvm_client = mocked_tvm_client
- self._patch = mock.patch.object(
- tp2.TvmClient,
- '__new__',
- mock.Mock(return_value=mocked_tvm_client),
- )
-
- def start(self):
- self._patch.start()
- return self
-
- def stop(self):
- self._patch.stop()
-
- def __enter__(self):
- self.start()
- return self
-
- def __exit__(self, exc_type, exc_val, exc_tb):
- self.stop()
-
- def get_mocked_tvm_client(self):
- return self._mocked_tvm_client
diff --git a/library/python/deprecated/ticket_parser2/so/ticket_parser2_pymodule.exports b/library/python/deprecated/ticket_parser2/so/ticket_parser2_pymodule.exports
deleted file mode 100644
index 3cb2b5c85e..0000000000
--- a/library/python/deprecated/ticket_parser2/so/ticket_parser2_pymodule.exports
+++ /dev/null
@@ -1 +0,0 @@
-C initticket_parser2_pymodule
diff --git a/library/python/deprecated/ticket_parser2/src/exception.h b/library/python/deprecated/ticket_parser2/src/exception.h
deleted file mode 100644
index a31417300a..0000000000
--- a/library/python/deprecated/ticket_parser2/src/exception.h
+++ /dev/null
@@ -1,80 +0,0 @@
-#pragma once
-
-#include <library/cpp/tvmauth/exception.h>
-#include <library/cpp/tvmauth/client/exception.h>
-
-#include <exception>
-#include <ios>
-#include <new>
-#include <stdexcept>
-#include <typeinfo>
-
-#include <Python.h>
-
-extern "C" DL_EXPORT(PyObject*) pyEmptyTvmKeysException;
-extern "C" DL_EXPORT(PyObject*) pyMalformedTvmKeysException;
-extern "C" DL_EXPORT(PyObject*) pyMalformedTvmSecretException;
-extern "C" DL_EXPORT(PyObject*) pyNotAllowedException;
-extern "C" DL_EXPORT(PyObject*) pyClientException;
-extern "C" DL_EXPORT(PyObject*) pyBrokenTvmClientSettings;
-extern "C" DL_EXPORT(PyObject*) pyInvalidCache;
-extern "C" DL_EXPORT(PyObject*) pyRetriableException;
-extern "C" DL_EXPORT(PyObject*) pyNonRetriableException;
-extern "C" DL_EXPORT(PyObject*) pyPermissionDenied;
-extern "C" DL_EXPORT(PyObject*) pyMissingServiceTicket;
-
-static void raise_py_error() {
- // Catch a handful of different errors here and turn them into the
- // equivalent Python errors.
- try {
- if (PyErr_Occurred())
- ; // let the latest Python exn pass through and ignore the current one
- else
- throw;
- } catch (const NTvmAuth::TEmptyTvmKeysException& ex) {
- PyErr_SetString(pyEmptyTvmKeysException, ex.what());
- } catch (const NTvmAuth::TMalformedTvmKeysException& ex) {
- PyErr_SetString(pyMalformedTvmKeysException, ex.what());
- } catch (const NTvmAuth::TMalformedTvmSecretException& ex) {
- PyErr_SetString(pyMalformedTvmSecretException, ex.what());
- } catch (const NTvmAuth::TNotAllowedException& ex) {
- PyErr_SetString(pyNotAllowedException, ex.what());
- } catch (const NTvmAuth::TBrokenTvmClientSettings& ex) {
- PyErr_SetString(pyBrokenTvmClientSettings, ex.what());
- } catch (const NTvmAuth::TPermissionDenied& ex) {
- PyErr_SetString(pyPermissionDenied, ex.what());
- } catch (const NTvmAuth::TMissingServiceTicket& ex) {
- PyErr_SetString(pyMissingServiceTicket, ex.what());
- } catch (const NTvmAuth::TNonRetriableException& ex) {
- PyErr_SetString(pyNonRetriableException, ex.what());
- } catch (const NTvmAuth::TRetriableException& ex) {
- PyErr_SetString(pyRetriableException, ex.what());
- } catch (const NTvmAuth::TClientException& ex) {
- PyErr_SetString(pyClientException, ex.what());
- } catch (const std::bad_alloc& ex) {
- PyErr_SetString(PyExc_MemoryError, ex.what());
- } catch (const std::bad_cast& ex) {
- PyErr_SetString(PyExc_TypeError, ex.what());
- } catch (const std::domain_error& ex) {
- PyErr_SetString(PyExc_ValueError, ex.what());
- } catch (const std::invalid_argument& ex) {
- PyErr_SetString(PyExc_ValueError, ex.what());
- } catch (const std::ios_base::failure& ex) {
- // Unfortunately, in standard C++ we have no way of distinguishing EOF
- // from other errors here; be careful with the exception mask
- PyErr_SetString(PyExc_IOError, ex.what());
- } catch (const std::out_of_range& ex) {
- // Change out_of_range to IndexError
- PyErr_SetString(PyExc_IndexError, ex.what());
- } catch (const std::overflow_error& ex) {
- PyErr_SetString(PyExc_OverflowError, ex.what());
- } catch (const std::range_error& ex) {
- PyErr_SetString(PyExc_ArithmeticError, ex.what());
- } catch (const std::underflow_error& ex) {
- PyErr_SetString(PyExc_ArithmeticError, ex.what());
- } catch (const std::exception& ex) {
- PyErr_SetString(PyExc_RuntimeError, ex.what());
- } catch (...) {
- PyErr_SetString(PyExc_RuntimeError, "Unknown exception");
- }
-}
diff --git a/library/python/deprecated/ticket_parser2/src/logger.h b/library/python/deprecated/ticket_parser2/src/logger.h
deleted file mode 100644
index 9a89f30324..0000000000
--- a/library/python/deprecated/ticket_parser2/src/logger.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#pragma once
-
-#include <library/cpp/pybind/ptr.h>
-#include <library/cpp/tvmauth/client/logger.h>
-
-extern "C" {
- void cy_call_func(PyObject*, char*, int, const char*, size_t);
-}
-
-namespace NTvmAuth {
- class IPyLogger: public ILogger {
- public:
- NPyBind::TPyObjectPtr Obj_;
-
- IPyLogger(PyObject* obj)
- : Obj_(obj)
- {
- }
-
- ~IPyLogger() {
- }
-
- void Log(int lvl, const TString& msg) override {
- if (!Obj_) {
- return;
- }
-
- cy_call_func(this->Obj_.Get(), (char*)"__log", lvl, msg.data(), msg.size());
- }
- };
-}
diff --git a/library/python/deprecated/ticket_parser2/src/ut/test_client.py b/library/python/deprecated/ticket_parser2/src/ut/test_client.py
deleted file mode 100644
index 34ff26bd0f..0000000000
--- a/library/python/deprecated/ticket_parser2/src/ut/test_client.py
+++ /dev/null
@@ -1,710 +0,0 @@
-#!/usr/bin/env python
-from __future__ import print_function
-
-import logging
-from multiprocessing import Process
-import shutil
-import socket
-import sys
-import time
-
-import mock
-import pytest
-from six import StringIO
-from six.moves import (
- BaseHTTPServer,
- socketserver as SocketServer,
-)
-import ticket_parser2 as tp2
-import ticket_parser2.low_level
-from ticket_parser2.exceptions import (
- BrokenTvmClientSettings,
- NonRetriableException,
- RetriableException,
- TicketParsingException,
- TvmException,
-)
-import ticket_parser2.unittest as tp2u
-from ticket_parser2.mock import (
- MockedTvmClient,
- TvmClientPatcher,
-)
-import yatest.common as yc
-from yatest.common import network
-
-
-SRV_TICKET = (
- "3:serv:CBAQ__________9_IgYIexCUkQY:GioCM49Ob6_f80y6FY0XBVN4hLXuMlFeyMvIMiDuQnZkbkLpRp"
- "QOuQo5YjWoBjM0Vf-XqOm8B7xtrvxSYHDD7Q4OatN2l-Iwg7i71lE3scUeD36x47st3nd0OThvtjrFx_D8mw_"
- "c0GT5KcniZlqq1SjhLyAk1b_zJsx8viRAhCU"
-)
-PROD_TICKET = (
- "3:user:CAsQ__________9_Gg4KAgh7EHsg0oXYzAQoAA:N8PvrDNLh-5JywinxJntLeQGDEHBUxfzjuvB8-_B"
- "EUv1x9CALU7do8irDlDYVeVVDr4AIpR087YPZVzWPAqmnBuRJS0tJXekmDDvrivLnbRrzY4IUXZ_fImB0fJhTy"
- "VetKv6RD11bGqnAJeDpIukBwPTbJc_EMvKDt8V490CJFw"
-)
-TEST_TICKET = (
- "3:user:CA0Q__________9_Gg4KAgh7EHsg0oXYzAQoAQ:FSADps3wNGm92Vyb1E9IVq5M6ZygdGdt1vafWWEh"
- "fDDeCLoVA-sJesxMl2pGW4OxJ8J1r_MfpG3ZoBk8rLVMHUFrPa6HheTbeXFAWl8quEniauXvKQe4VyrpA1SPgt"
- "RoFqi5upSDIJzEAe1YRJjq1EClQ_slMt8R0kA_JjKUX54"
-)
-PROD_YATEAM_TICKET = (
- "3:user:CAwQ__________9_Gg4KAgh7EHsg0oXYzAQoAg:JBYQYr71TnozlBiJhGVyCKdAhlDtrEda1ofe4mCz"
- "0OkxWi4J1EtB3CeYUkxSO4iTSAqJVq8bFdneyS7YCVOt4u69E-SClzRgZ6v7A36l4Z25XNovqC-0o1h-IwFTgy"
- "CZfoPJVfkEOmAYXV4YINBca6L2lZ7ux6q0s5Q5_kUnkAk"
-)
-TEST_YATEAM_TICKET = (
- "3:user:CA4Q__________9_GhIKBAjAxAcQwMQHINKF2MwEKAM:CpRDQBbh5icA3NCuKuSZUIO0gNyWXej1XfI"
- "nEiSvhs6wcrDHCeQbxzYOfeq2wM801DkaebSmnDBgoWjC7C9hMj4xpmOF_QhRfhFibXbm0O-7lbczO8zLL080m"
- "s59rpaEU3SOKLJ-HaaXrjPCIGSTAIJRvWnck-QXJXPpqmPETr8"
-)
-
-TVM_RESP = '{"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}}'.encode('utf-8')
-
-log_stream = StringIO()
-logger = logging.getLogger('TVM')
-handler = logging.StreamHandler(stream=log_stream)
-handler.setLevel(logging.DEBUG)
-logger.addHandler(handler)
-
-
-def get_log_stream_value():
- return log_stream.getvalue().lstrip('\x00')
-
-
-def test_settings():
- with pytest.raises(BrokenTvmClientSettings):
- tp2.TvmApiClientSettings(self_client_id=0)
-
- with pytest.raises(BrokenTvmClientSettings):
- tp2.TvmApiClientSettings(enable_service_ticket_checking=True)
- tp2.TvmApiClientSettings(enable_service_ticket_checking=True, self_client_id=123)
-
- tp2.TvmApiClientSettings(enable_user_ticket_checking=tp2.BlackboxEnv.Test)
-
- with pytest.raises(BrokenTvmClientSettings):
- tp2.TvmApiClientSettings()
- with pytest.raises(BrokenTvmClientSettings):
- tp2.TvmApiClientSettings(self_secret='asd', dsts={'qwe': 1})
- with pytest.raises(BrokenTvmClientSettings):
- tp2.TvmApiClientSettings(self_secret='', dsts={'qwe': 1})
- with pytest.raises(BrokenTvmClientSettings):
- tp2.TvmApiClientSettings(self_secret='asd', dsts={})
- with pytest.raises(TvmException):
- tp2.TvmApiClientSettings(self_secret='asd', dsts='kek', self_client_id=123)
- tp2.TvmApiClientSettings(self_secret='asd', dsts={'qwe': 1}, self_client_id=123)
-
- s = tp2.TvmApiClientSettings(enable_user_ticket_checking=tp2.BlackboxEnv.Test)
- s.set_disk_cache_dir('./')
-
- with pytest.raises(BrokenTvmClientSettings):
- tp2.TvmClient('kek')
-
-
-def test_full_client():
- path = yc.source_path() + '/library/cpp/tvmauth/client/ut/files/'
- shutil.copyfile(path + 'public_keys', './public_keys')
- shutil.copyfile(path + 'service_tickets', './service_tickets')
-
- c = None
- log_stream.truncate(0)
- try:
- s = tp2.TvmApiClientSettings(
- self_client_id=100500,
- enable_service_ticket_checking=True,
- enable_user_ticket_checking=tp2.BlackboxEnv.Test,
- self_secret='qwerty',
- dsts={'dest': 19},
- )
- s.set_disk_cache_dir('./')
-
- c = tp2.TvmClient(s)
- time.sleep(1)
-
- exp = "File './service_tickets' was successfully read\n"
- exp += "Got 1 service ticket(s) from disk\n"
- exp += "Cache was updated with 1 service ticket(s): 2050-01-01T00:00:00.000000Z\n"
- exp += "File './public_keys' was successfully read\n"
- exp += "Cache was updated with public keys: 2050-01-01T00:00:00.000000Z\n"
- exp += "File './retry_settings' does not exist\n"
- exp += "Thread-worker started\n"
- assert exp == get_log_stream_value()
-
- st = c.status
- assert st == tp2.TvmClientStatus.Ok
- assert tp2.TvmClient.status_to_string(st) == 'TvmClient cache is ok'
-
- # assert c.last_update_time_of_public_keys == datetime.strptime('2050-01-01 03:00:00', '%Y-%m-%d %H:%M:%S')
- # assert c.last_update_time_of_service_tickets == datetime.strptime('2050-01-01 03:00:01', '%Y-%m-%d %H:%M:%S')
-
- assert '3:serv:CBAQ__________9_IgYIKhCUkQY:CX' == c.get_service_ticket_for('dest')
- assert '3:serv:CBAQ__________9_IgYIKhCUkQY:CX' == c.get_service_ticket_for(alias='dest')
- assert '3:serv:CBAQ__________9_IgYIKhCUkQY:CX' == c.get_service_ticket_for(client_id=19)
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for('dest2')
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for(client_id=20)
- with pytest.raises(TvmException):
- c.get_service_ticket_for()
-
- assert c.check_service_ticket(SRV_TICKET)
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(PROD_TICKET)
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(TEST_TICKET)
-
- assert c.check_user_ticket(TEST_TICKET)
- with pytest.raises(TicketParsingException):
- c.check_user_ticket(PROD_TICKET)
- with pytest.raises(TicketParsingException):
- c.check_user_ticket(SRV_TICKET)
-
- with pytest.raises(TicketParsingException):
- assert c.check_user_ticket(TEST_TICKET, overrided_bb_env=tp2.BlackboxEnv.Prod)
- c.check_user_ticket(PROD_TICKET, overrided_bb_env=tp2.BlackboxEnv.Prod)
-
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- print('==test_full_client: 1')
- if c is not None:
- c.stop()
- print('==test_full_client: 2')
-
-
-def test_getting_client_without_aliases():
- path = yc.source_path() + '/library/cpp/tvmauth/client/ut/files/'
- shutil.copyfile(path + 'public_keys', './public_keys')
- shutil.copyfile(path + 'service_tickets', './service_tickets')
-
- c = None
- log_stream.truncate(0)
- try:
- s = tp2.TvmApiClientSettings(
- self_client_id=100500,
- enable_service_ticket_checking=True,
- enable_user_ticket_checking=tp2.BlackboxEnv.Test,
- self_secret='qwerty',
- dsts=[19],
- )
- s.set_disk_cache_dir('./')
-
- c = tp2.TvmClient(s)
- time.sleep(1)
-
- exp = "File './service_tickets' was successfully read\n"
- exp += "Got 1 service ticket(s) from disk\n"
- exp += "Cache was updated with 1 service ticket(s): 2050-01-01T00:00:00.000000Z\n"
- exp += "File './public_keys' was successfully read\n"
- exp += "Cache was updated with public keys: 2050-01-01T00:00:00.000000Z\n"
- exp += "File './retry_settings' does not exist\n"
- exp += "Thread-worker started\n"
- assert exp == get_log_stream_value()
-
- st = c.status
- assert st == tp2.TvmClientStatus.Ok
- assert tp2.TvmClient.status_to_string(st) == 'TvmClient cache is ok'
-
- # assert c.last_update_time_of_public_keys == datetime.strptime('2050-01-01 03:00:00', '%Y-%m-%d %H:%M:%S')
- # assert c.last_update_time_of_service_tickets == datetime.strptime('2050-01-01 03:00:01', '%Y-%m-%d %H:%M:%S')
-
- assert '3:serv:CBAQ__________9_IgYIKhCUkQY:CX' == c.get_service_ticket_for(client_id=19)
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for(client_id=20)
-
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for('dest')
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for(alias='dest')
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for('dest2')
-
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- print('==test_getting_client_without_aliases: 1')
- if c is not None:
- c.stop()
- print('==test_getting_client_without_aliases: 2')
-
-
-def test_checking_client():
- path = yc.source_path() + '/library/cpp/tvmauth/client/ut/files/'
- shutil.copyfile(path + 'public_keys', './public_keys')
-
- c = None
- log_stream.truncate(0)
- try:
- s = tp2.TvmApiClientSettings(
- enable_user_ticket_checking=tp2.BlackboxEnv.Test,
- )
- s.set_disk_cache_dir('./')
- c = tp2.TvmClient(s)
- assert c.status == tp2.TvmClientStatus.Ok
-
- with pytest.raises(BrokenTvmClientSettings):
- c.check_service_ticket(SRV_TICKET)
- assert c.check_user_ticket(TEST_TICKET)
-
- print('==test_checking_client: 1')
- c.stop()
- print('==test_checking_client: 2')
-
- s = tp2.TvmApiClientSettings(
- self_client_id=100500,
- enable_service_ticket_checking=True,
- )
- s.set_disk_cache_dir('./')
- c = tp2.TvmClient(s)
- assert c.status == tp2.TvmClientStatus.Ok
-
- with pytest.raises(BrokenTvmClientSettings):
- c.check_user_ticket(TEST_TICKET)
- assert c.check_service_ticket(SRV_TICKET)
-
- print('==test_checking_client: 3')
- c.stop()
- print('==test_checking_client: 4')
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- print('==test_checking_client: 5')
- if c is not None:
- c.stop()
- print('==test_checking_client: 6')
-
-
-class myHTTPServer(SocketServer.ForkingMixIn, BaseHTTPServer.HTTPServer):
- address_family = socket.AF_INET6
- pass
-
-
-class myHandler(BaseHTTPServer.BaseHTTPRequestHandler):
- def log_message(self, format, *args):
- sys.stdout.write("%s - - [%s] %s\n" % (self.address_string(), self.log_date_time_string(), format % args))
-
-
-def test_user_bad_api():
- myHandler.log_message
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), myHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- log_stream.truncate(0)
- try:
- s = tp2.TvmApiClientSettings(
- enable_user_ticket_checking=tp2.BlackboxEnv.Test,
- )
- s.__set_localhost(port)
-
- with pytest.raises(RetriableException):
- tp2.TvmClient(s)
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
-
-
-def test_service_bad_api():
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), myHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- log_stream.truncate(0)
- try:
- s = tp2.TvmApiClientSettings(
- self_client_id=100500,
- enable_service_ticket_checking=True,
- )
- s.__set_localhost(port)
-
- with pytest.raises(RetriableException):
- tp2.TvmClient(s)
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
-
-
-def test_tickets_bad_api():
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), myHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- log_stream.truncate(0)
- try:
- s = tp2.TvmApiClientSettings(
- self_client_id=100500,
- self_secret='qwerty',
- dsts={'dest': 19},
- )
- s.__set_localhost(port)
-
- with pytest.raises(RetriableException):
- tp2.TvmClient(s)
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
-
-
-class myGoodHandler(myHandler):
- def do_GET(self):
- if self.path.startswith("/2/keys"):
- self.send_response(200)
- self.send_header('Content-type', 'text/plain')
- self.send_header('Content-Length', len(tp2u.TVMKNIFE_PUBLIC_KEYS))
- self.end_headers()
- self.wfile.write(tp2u.TVMKNIFE_PUBLIC_KEYS.encode('utf-8'))
- return
-
- self.send_error(404, 'Not Found: %s' % self.path)
-
- def do_POST(self):
- if self.path.startswith("/2/ticket"):
-
- self.send_response(200)
- self.send_header('Content-type', 'application/json')
- self.send_header('Content-Length', len(TVM_RESP))
- self.end_headers()
- self.wfile.write(TVM_RESP)
- return
-
- self.send_error(404, 'Not Found: %s' % self.path)
-
-
-def test_ok_api():
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), myGoodHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- c = None
- log_stream.truncate(0)
- try:
- s = tp2.TvmApiClientSettings(
- self_client_id=100500,
- enable_service_ticket_checking=True,
- self_secret='qwerty',
- dsts={'dest': 19},
- )
- s.__set_localhost(port)
-
- c = tp2.TvmClient(s)
-
- time.sleep(1)
- assert c.status == tp2.TvmClientStatus.Ok
-
- actual_log = get_log_stream_value()
- assert actual_log.count('Thread-worker started') == 1
-
- print('==test_ok_api: 1')
- c.stop()
- print('==test_ok_api: 2')
-
- with pytest.raises(NonRetriableException):
- c.status
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
- if c is not None:
- c.stop()
-
-
-AUTH_TOKEN = 'some string'
-META = """{
-"bb_env" : "ProdYaTeam",
-"tenants" : [
- {
- "self": {
- "alias" : "me",
- "client_id": 100500
- },
- "dsts" : [
- {
- "alias" : "bbox",
- "client_id": 242
- },
- {
- "alias" : "pass_likers",
- "client_id": 11
- }
- ]
- },
- {
- "self": {
- "alias" : "push-client",
- "client_id": 100501
- },
- "dsts" : [
- {
- "alias" : "pass_likers",
- "client_id": 100502
- }
- ]
- },
- {
- "self": {
- "alias" : "something_else",
- "client_id": 100503
- },
- "dsts" : [
- ]
- }
-]
-}""".encode(
- 'utf-8'
-)
-TICKETS_ME = """{
- "pass_likers": {
- "ticket": "3:serv:CBAQ__________9_IgYIKhCUkQY:CX",
- "tvm_id": 11
- },
- "bbox": {
- "ticket": "3:serv:CBAQ__________9_IgcIlJEGEPIB:N7luw0_rVmBosTTI130jwDbQd0-cMmqJeEl0ma4ZlIo_mHXjBzpOuMQ3A9YagbmOBOt8TZ_gzGvVSegWZkEeB24gM22acw0w-RcHaQKrzSOA5Zq8WLNIC8QUa4_WGTlAsb7R7eC4KTAGgouIquNAgMBdTuGOuZHnMLvZyLnOMKc",
- "tvm_id": 242
- }
-}""".encode( # noqa
- 'utf-8'
-)
-BIRTH_TIME = 14380887840
-
-
-class tvmtoolGoodHandler(myHandler):
- def do_GET(self):
- if self.path.startswith("/tvm/ping"):
- self.send_response(200)
- self.end_headers()
- self.wfile.write("OK".encode('utf-8'))
- return
-
- if self.headers.get('Authorization', '') != AUTH_TOKEN:
- self.send_error(401, 'Unauthorized')
- return
-
- if self.path.startswith("/tvm/keys"):
- self.send_response(200)
- self.send_header('Content-type', 'text/plain')
- self.send_header('Content-Length', len(tp2u.TVMKNIFE_PUBLIC_KEYS))
- self.send_header('X-Ya-Tvmtool-Data-Birthtime', BIRTH_TIME)
- self.end_headers()
- self.wfile.write(tp2u.TVMKNIFE_PUBLIC_KEYS.encode('utf-8'))
- return
-
- if self.path.startswith("/tvm/tickets"):
- self.send_response(200)
- self.send_header('Content-type', 'application/json')
- self.send_header('Content-Length', len(TICKETS_ME))
- self.send_header('X-Ya-Tvmtool-Data-Birthtime', BIRTH_TIME)
- self.end_headers()
- self.wfile.write(TICKETS_ME)
- return
-
- if self.path.startswith("/tvm/private_api/__meta__"):
- self.send_response(200)
- self.send_header('Content-type', 'application/json')
- self.send_header('Content-Length', len(META))
- self.end_headers()
- self.wfile.write(META)
- return
-
- self.send_error(404, 'Not Found: %s' % self.path)
-
-
-def test_bad_tool():
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), tvmtoolGoodHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- log_stream.truncate(0)
- try:
- s = tp2.TvmToolClientSettings(
- self_alias='no one',
- auth_token=AUTH_TOKEN,
- port=port,
- )
-
- print("=====test_bad_tool 01")
- with pytest.raises(NonRetriableException):
- tp2.TvmClient(s)
- print("=====test_bad_tool 02")
-
- exp = "Meta info fetched from localhost:%d\n" % port
- assert get_log_stream_value() == exp
- log_stream.truncate(0)
-
- s = tp2.TvmToolClientSettings(
- self_alias='me',
- auth_token=AUTH_TOKEN,
- port=0,
- )
-
- with pytest.raises(NonRetriableException):
- tp2.TvmClient(s)
-
- s = tp2.TvmToolClientSettings(
- self_alias='me',
- auth_token=AUTH_TOKEN,
- hostname='::1',
- port=port,
- override_bb_env=tp2.BlackboxEnv.Stress,
- )
-
- assert get_log_stream_value() == ''
-
- with pytest.raises(BrokenTvmClientSettings):
- tp2.TvmClient(s)
-
- exp = "Meta info fetched from ::1:%d\n" % port
- exp += "Meta: self_tvm_id=100500, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:11)(bbox:242)]\n"
- assert get_log_stream_value() == exp
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
-
-
-def test_ok_tool():
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), tvmtoolGoodHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- log_stream.truncate(0)
- c = None
- try:
- s = tp2.TvmToolClientSettings(
- self_alias='me',
- auth_token=AUTH_TOKEN,
- port=port,
- )
-
- c = tp2.TvmClient(s)
-
- assert c.check_service_ticket(SRV_TICKET)
- assert c.check_user_ticket(PROD_YATEAM_TICKET)
- with pytest.raises(TvmException):
- c.check_user_ticket(TEST_YATEAM_TICKET)
-
- assert c.status == tp2.TvmClientStatus.Ok
-
- assert (
- '3:serv:CBAQ__________9_IgcIlJEGEPIB:N7luw0_rVmBosTTI130jwDbQd0-cMmqJeEl0ma4ZlIo_mHXjBzpOuMQ3A9YagbmOBOt8TZ_gzGvVSegWZkEeB24gM22acw0w-RcHaQKrzSOA5Zq8WLNIC8QUa4_WGTlAsb7R7eC4KTAGgouIquNAgMBdTuGOuZHnMLvZyLnOMKc' # noqa
- == c.get_service_ticket_for('bbox')
- )
- assert '3:serv:CBAQ__________9_IgYIKhCUkQY:CX' == c.get_service_ticket_for(client_id=11)
-
- c.stop()
-
- exp = "Meta info fetched from localhost:%d\n" % port
- exp += "Meta: self_tvm_id=100500, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:11)(bbox:242)]\n"
- exp += "Tickets fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- exp += "Public keys fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- exp += "Thread-worker started\n"
- exp += "Thread-worker stopped\n"
- assert get_log_stream_value() == exp
-
- s = tp2.TvmToolClientSettings(
- self_alias='me',
- auth_token=AUTH_TOKEN,
- port=port,
- override_bb_env=tp2.BlackboxEnv.Prod,
- )
-
- c = tp2.TvmClient(s)
-
- assert c.check_service_ticket(SRV_TICKET)
- assert c.check_user_ticket(PROD_TICKET)
- with pytest.raises(TvmException):
- c.check_user_ticket(TEST_TICKET)
-
- c.stop()
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
- print('==test_ok_tool: 1')
- if c is not None:
- c.stop()
- print('==test_ok_tool: 2')
-
-
-def test_fake_mock():
- fake_tvm_client = mock.Mock()
- with TvmClientPatcher(fake_tvm_client):
- fake_tvm_client.get_service_ticket_for.return_value = 'ololo'
- assert 'ololo' == tp2.TvmClient().get_service_ticket_for()
- fake_tvm_client.check_service_ticket.return_value = ticket_parser2.low_level.ServiceContext(
- 100500, 'qwerty', tp2u.TVMKNIFE_PUBLIC_KEYS
- ).check(SRV_TICKET)
- assert 123 == tp2.TvmClient().check_service_ticket('').src
-
- with TvmClientPatcher(MockedTvmClient()) as p:
- p.get_mocked_tvm_client().check_service_ticket = mock.Mock(
- side_effect=TicketParsingException("Unsupported version", tp2.Status.UnsupportedVersion, "2:err"),
- )
-
- c = tp2.TvmClient()
- assert tp2.TvmClientStatus.Ok == c.status
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(SRV_TICKET)
-
- m = MockedTvmClient()
- m.get_service_ticket_for = mock.Mock(
- side_effect=['SERVICE_TICKET_FOR_MY_FIRST_CALL', 'SERVICE_TICKET_FOR_MY_SECOND_CALL'],
- )
- with TvmClientPatcher(m):
- c = tp2.TvmClient()
- assert tp2.TvmClientStatus.Ok == c.status
- assert 'SERVICE_TICKET_FOR_MY_FIRST_CALL' == c.get_service_ticket_for()
- assert 'SERVICE_TICKET_FOR_MY_SECOND_CALL' == c.get_service_ticket_for()
-
-
-def test_default_mock():
- with TvmClientPatcher():
- c = tp2.TvmClient()
- assert tp2.TvmClientStatus.Ok == c.status
- assert 123 == c.check_service_ticket(SRV_TICKET).src
- assert 123 == c.check_user_ticket(TEST_TICKET).default_uid
- assert 'Some service ticket' == c.get_service_ticket_for("foo")
- assert 'TvmClient cache is ok' == c.status_to_string(c.status)
-
- c.stop()
- with pytest.raises(NonRetriableException):
- c.status
- with pytest.raises(NonRetriableException):
- c.check_service_ticket(SRV_TICKET)
- with pytest.raises(NonRetriableException):
- c.check_user_ticket(TEST_TICKET)
- with pytest.raises(NonRetriableException):
- c.get_service_ticket_for("foo")
-
-
-def test_mock():
- with TvmClientPatcher(MockedTvmClient(self_client_id=100501)):
- c = tp2.TvmClient()
- assert tp2.TvmClientStatus.Ok == c.status
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(SRV_TICKET)
- assert 123 == c.check_user_ticket(TEST_TICKET).default_uid
- assert 'Some service ticket' == c.get_service_ticket_for("foo")
diff --git a/library/python/deprecated/ticket_parser2/src/ut/test_common.py b/library/python/deprecated/ticket_parser2/src/ut/test_common.py
deleted file mode 100644
index 63759eba39..0000000000
--- a/library/python/deprecated/ticket_parser2/src/ut/test_common.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python
-from __future__ import print_function
-
-import ticket_parser2 as tp2
-from ticket_parser2 import BlackboxClientId
-
-
-def test_version():
- assert tp2.__version__[:-5] == 'py_'
-
-
-def test_blackbox_client_id():
- assert BlackboxClientId.Prod.value == '222'
- assert BlackboxClientId.Test.value == '224'
- assert BlackboxClientId.ProdYateam.value == '223'
- assert BlackboxClientId.TestYateam.value == '225'
- assert BlackboxClientId.Stress.value == '226'
- assert BlackboxClientId.Mimino.value == '239'
diff --git a/library/python/deprecated/ticket_parser2/src/ut/test_service.py b/library/python/deprecated/ticket_parser2/src/ut/test_service.py
deleted file mode 100644
index 3976632c7c..0000000000
--- a/library/python/deprecated/ticket_parser2/src/ut/test_service.py
+++ /dev/null
@@ -1,242 +0,0 @@
-#!/usr/bin/env python
-from __future__ import print_function
-
-import pytest
-from ticket_parser2 import (
- ServiceTicket,
- Status,
-)
-from ticket_parser2.low_level import ServiceContext
-from ticket_parser2.exceptions import (
- ContextException,
- EmptyTvmKeysException,
- MalformedTvmKeysException,
- MalformedTvmSecretException,
- TicketParsingException,
-)
-import ticket_parser2.unittest as tp2u
-
-
-EMPTY_TVM_KEYS = (
- '1:CpgCCpMCCAEQABqIAjCCAQQCggEAcLEXeH67FQESFUn4_7wnX7wN0PUrBoUsm3QQ4W5vC-qz6sXaEjSwnTV8w1o-z6X9KPL'
- 'lhzMQvuS38NCNfK4uvJ4Zvfp3YsXJ25-rYtbnrYJHNvHohD-kPCCw_yZpMp21JdWigzQGuV7CtrxUhF-NNrsnUaJrE5-OpEWN'
- 't4X6nCItKIYeVcSK6XJUbEWbrNCRbvkSc4ak2ymFeMuHYJVjxh4eQbk7_ZPzodP0WvF6eUYrYeb42imVEOR8ofVLQWE5DVnb1'
- 'z_TqZm4i1XkS7jMwZuBxBRw8DGdYei0lT_sAf7KST2jC0590NySB3vsBgWEVs1OdUUWA6r-Dvx9dsOQtSCVkQYQAAqZAgqUAg'
- 'gCEAAaiQIwggEFAoIBAQDhEBM5-6YsPWfogKtbluJoCX1WV2KdzOaQ0-OlRbBzeCzw-eQKu12c8WakHBbeCMd1I1TU64SDkDo'
- 'rWjXGIa_2xT6N3zzNAE50roTbPCcmeQrps26woTYfYIuqDdoxYKZNr0lvNLLW47vBr7EKqo1S4KSj7aXK_XYeEvUgIgf3nVIc'
- 'Nrio7VTnFmGGVQCepaL1Hi1gN4yIXjVZ06PBPZ-DxSRu6xOGbFrfKMJeMPs7KOyE-26Q3xOXdTIa1X-zYIucTd_bxUCL4BVbw'
- 'W2AvbbFsaG7ISmVdGu0XUTmhXs1KrEfUVLRJhE4Dx99hAZXm1_HlYMUeJcMQ_oHOhV94ENFIJaRBhACCpYBCpEBCAMQABqGAT'
- 'CBgwKBgF9t2YJGAJkRRFq6fWhi3m1TFW1UOE0f6ZrfYhHAkpqGlKlh0QVfeTNPpeJhi75xXzCe6oReRUm-0DbqDNhTShC7uGU'
- 'v1INYnRBQWH6E-5Fc5XrbDFSuGQw2EYjNfHy_HefHJXxQKAqPvxBDKMKkHgV58WtM6rC8jRi9sdX_ig2NIJeRBhABCpYBCpEB'
- 'CAQQABqGATCBgwKBgGB4d6eLGUBv-Q6EPLehC4S-yuE2HB-_rJ7WkeYwyp-xIPolPrd-PQme2utHB4ZgpXHIu_OFksDe_0bPg'
- 'ZniNRSVRbl7W49DgS5Ya3kMfrYB4DnF5Fta5tn1oV6EwxYD4JONpFTenOJALPGTPawxXEfon_peiHOSBuQMu3_Vn-l1IJiRBh'
- 'ADCpcBCpIBCAUQABqHATCBhAKBgQCTJMKIfmfeZpaI7Q9rnsc29gdWawK7TnpVKRHws1iY7EUlYROeVcMdAwEqVM6f8BVCKLG'
- 'gzQ7Gar_uuxfUGKwqEQzoppDraw4F75J464-7D5f6_oJQuGIBHZxqbMONtLjBCXRUhQW5szBLmTQ_R3qaJb5vf-h0APZfkYhq'
- '1cTttSCZkQYQBAqWAQqRAQgLEAAahgEwgYMCgYBvvGVH_M2H8qxxv94yaDYUTWbRnJ1uiIYc59KIQlfFimMPhSS7x2tqUa2-h'
- 'I55JiII0Xym6GNkwLhyc1xtWChpVuIdSnbvttbrt4weDMLHqTwNOF6qAsVKGKT1Yh8yf-qb-DSmicgvFc74mBQm_6gAY1iQsf'
- '33YX8578ClhKBWHSCVkQYQAAqXAQqSAQgMEAAahwEwgYQCgYEAkuzFcd5TJu7lYWYe2hQLFfUWIIj91BvQQLa_Thln4YtGCO8'
- 'gG1KJqJm-YlmJOWQG0B7H_5RVhxUxV9KpmFnsDVkzUFKOsCBaYGXc12xPVioawUlAwp5qp3QQtZyx_se97YIoLzuLr46UkLcL'
- 'nkIrp-Jo46QzYi_QHq45WTm8MQ0glpEGEAIKlwEKkgEIDRAAGocBMIGEAoGBAIUzbxOknXf_rNt17_ir8JlWvrtnCWsQd1MAn'
- 'l5mgArvavDtKeBYHzi5_Ak7DHlLzuA6YE8W175FxLFKpN2hkz-l-M7ltUSd8N1BvJRhK4t6WffWfC_1wPyoAbeSN2Yb1jygtZ'
- 'JQ8wGoXHcJQUXiMit3eFNyylwsJFj1gzAR4JCdIJeRBhABCpYBCpEBCA4QABqGATCBgwKBgFMcbEpl9ukVR6AO_R6sMyiU11I'
- '8b8MBSUCEC15iKsrVO8v_m47_TRRjWPYtQ9eZ7o1ocNJHaGUU7qqInFqtFaVnIceP6NmCsXhjs3MLrWPS8IRAy4Zf4FKmGOx3'
- 'N9O2vemjUygZ9vUiSkULdVrecinRaT8JQ5RG4bUMY04XGIwFIJiRBhADCpYBCpEBCA8QABqGATCBgwKBgGpCkW-NR3li8GlRv'
- 'qpq2YZGSIgm_PTyDI2Zwfw69grsBmPpVFW48Vw7xoMN35zcrojEpialB_uQzlpLYOvsMl634CRIuj-n1QE3-gaZTTTE8mg-AR'
- '4mcxnTKThPnRQpbuOlYAnriwiasWiQEMbGjq_HmWioYYxFo9USlklQn4-9IJmRBhAE'
-)
-INVALID_SERVICE_TICKET = (
- '3:serv:CBAQ__________9_czEaCGJiOnNlc3My:WUPx1cTf05fjD1exB35T5j2DCHWH1YaLJon_a4rN-D7JfXHK1Ai4wM4uS'
- 'fboHD9xmGQH7extqtlEk1tCTCGm5qbRVloJwWzCZBXo3zKX6i1oBYP_89WcjCNPVe1e8jwGdLsnu6PpxL5cn0xCksiStILH5U'
- 'mDR6xfkJdnmMG94o8'
-)
-MALFORMED_TVM_KEYS = (
- '1:CpgCCpMCCAEQABqIAjCCAQQCggEAcLEXeH67FQESFUn4_7wnX7wN0PUrBoUsm3QQ4W5vC-qz6sXaEjSwnTV8w1o-z6X9KPL'
- 'lhzMQvuS38NCNfK4uvJ4Zvfp3YsXJ25-rYtbnrYJHNvHohD-kPCCw_yZpMp21JdWigzQGuV7CtrxUhF-NNrsnUaJrE5-OpEWN'
- 't4X6nCItKIYeVcSK6XJUbEWbrNCRbvkSc4ak2ymFeMuHYJVjxh4eQbk7_ZPzodP0WvF6eUYrYeb42imVEOR8ofVLQWE5DVnb1'
- 'z_TqZm4i1XkS7jMwZuBxBRw8DGdYei0lT_sAf7KST2jC0590NySB3vsBgWEVs1OdUUWA6r-Dvx9dsOQtSCVkQYQAAqZAgqUAg'
- 'gCEAAaiQIwggEFAoIBAQDhEBM5-6YsPWfogKtbluJoCX1WV2KdzOaQ0-OlRbBzeCzw-eQKu12c8WakHBbeCMd1I1TU64SDkDo'
- 'rWjXGIa_2xT6N3zzNAE50roTbPCcmeQrps26woTYfYIuqDdoxYKZNr0lvNLLW47vBr7EKqo1S4KSj7aXK_XYeEvUgIgf3nVIc'
- 'Nrio7VTnFmGGVQCepaL1Hi1gN4yIXjVZ06PBPZ-DxSRu6xOGbFrfKMJeMPs7KOyE-26Q3xOXdTIa1X-zYIucTd_bxUCL4BVbw'
- 'W2AvbbFsaG7ISmVdGu0XUTmhXs1KrEfUVLRJhE4Dx99hAZXm1_HlYMUeJcMQ_oHOhV94ENFIJaRBhACCpYBCpEBCAMQABqGAT'
- 'CBgwKBgF9t2YJGAJkRRFq6fWhi3m1TFW1UOE0f6ZrfYhHAkpqGlKlh0QVfeTNPpeJhi75xXzCe6oReRUm-0DbqDNhTShC7uGU'
- 'v1INYnRBQWH6E-5Fc5XrbDFSuGQw2EYjNfHy_HefHJXxQKAqPvxBDKMKkHgV58WtM6rC8jRi9sdX_ig2NIJeRBhABCpYBCpEB'
- 'CAQQABqGATCBgwKBgGB4d6eLGUBv-Q6EPLehC4S-yuE2HB-_rJ7WkeYwyp-xIPolPrd-PQme2utHB4ZgpXHIu_OFksDe_0bPg'
- 'ZniNRSVRbl7W49DgS5Ya3kMfrYB4DnF5Fta5tn1oV6EwxYD4JONpFTenOJALPGTPawxXEfon_peiHOSBuQMu3_Vn-l1IJiRBh'
- 'ADCpcBCpIBCAUQABqHATCBhAKBgQCTJMKIfmfeZpaI7Q9rnsc29gdWawK7TnpVKRHws1iY7EUlYROeVcMdAwEqVM6f8BVCKLG'
- 'gzQ7Gar_uuxfUGKwqEQzoppDraw4F75J464-7D5f6_oJQuGIBHZxqbMONtLjBCXRUhQW5szBLmTQ_R3qaJb5vf-h0APZfkYhq'
- '1cTttSCZkQYQBAqWAQqRAQgLEAAahgEwgYMCgYBvvGVH_M2H8qxxv94yaDYUTWbRnJ1uiIYc59KIQlfFimMPhSS7x2tqUa2-h'
- 'I55JiII0Xym6GNkwLhyc1xtWChpVuIdSnbvttbrt4weDMLHqTwNOF6qAsVKGKT1Yh8yf-qb-DSmicgvFc74mBQm_6gAY1iQsf'
- '33YX8578ClhKBWHSCVkQYQAAqXAQqSAQgMEAAahwEwgYQCgYEAkuzFcd5TJu7lYWYe2hQLFfUWIIj91BvQQLa_Thln4YtGCO8'
- 'gG1KJqJm-YlmJOWQG0B7H_5RVhxUxV9KpmFnsDVkzUFKOsCBaYGXc12xPVioawUlAwp5qp3QQtZyx_se97YIoLzuLr46UkLcL'
- 'nkIrp-Jo46QzYi_QHq45WTm8MQ0glpEGEAIKlwEKkgEIDRAAGocBMIGEAoGBAIUzbxOknXf_rNt17_ir8JlWvrtnCWsQd1MAn'
- 'l5mgArvavDtKeBYHzi5_Ak7DHlLzuA6YE8W175FxLFKpN2hkz-l-M7ltUSd8N1BvJRhK4t6WffWfC_1wPyoAbeSN2Yb1jygtZ'
- 'JQ8wGoXHcJQUXiMit3eFNyylwsJFj1gzAR4JCdIJeRBhABCpYBCpEBCA4QABqGATCBgwKBgFMcbEpl9ukVR6AO_R6sMyiU11I'
- '8b8MBSUCEC15iKsrVO8v_m47_TRRjWPYtQ9eZ7o1ocNJHaGUU7qqInFqtFaVnIceP6NmCsXhjs3MLrWPS8IRAy4Zf4FKmGOx3'
- 'N9O2vemjUygZ9vUiSkULdVrecinRaT8JQ5RG4bUMY04XGIwFIJiRBhADCpYBCpEBCA8QABqGATCBgwKBgGpCkW-NR3li8GlRv'
- 'qpq2YZGSIgm_PTyDI2Zwfw69grsBmPpVFW48Vw7xoMN35zcrojEpialB_uQzlpLYOvsMl634CRIuj-n1QE3-gaZTTTE8mg-AR'
- '4mcxnTKThPnRQpbuOlYAnriwiasWiQEMbGjq_HmWioYYxFo9USlklQn4-9IJmRBhAEEpUBCpIBCAYQABqHATCBhAKBgQCoZkF'
- 'Gm9oLTqjeXZAq6j5S6i7K20V0lNdBBLqfmFBIRuTkYxhs4vUYnWjZrKRAd5bp6_py0csmFmpl_5Yh0b-2pdo_E5PNP7LGRzKy'
- 'KSiFddyykKKzVOazH8YYldDAfE8Z5HoS9e48an5JsPg0jr-TPu34DnJq3yv2a6dqiKL9zSCakQYSlQEKkgEIEBAAGocBMIGEA'
- 'oGBALhrihbf3EpjDQS2sCQHazoFgN0nBbE9eesnnFTfzQELXb2gnJU9enmV_aDqaHKjgtLIPpCgn40lHrn5k6mvH5OdedyI6c'
- 'CzE-N-GFp3nAq0NDJyMe0fhtIRD__CbT0ulcvkeow65ubXWfw6dBC2gR_34rdMe_L_TGRLMWjDULbNIJ'
-)
-MALFORMED_TVM_SECRET = 'adcvxcv./-+'
-OUR_ID = 28
-SECRET = 'GRMJrKnj4fOVnvOqe-WyD1'
-SRC_ID = 229
-
-UNSUPPORTED_VERSION_SERVICE_TICKET = (
- '2:serv:CBAQ__________9_IhkI5QEQHBoIYmI6c2VzczEaCGJiOnNlc3My:WUPx1cTf05fjD1exB35T5j2DCHWH1YaLJon_a'
- '4rN-D7JfXHK1Ai4wM4uSfboHD9xmGQH7extqtlEk1tCTCGm5qbRVloJwWzCZBXo3zKX6i1oBYP_89WcjCNPVe1e8jwGdLsnu6'
- 'PpxL5cn0xCksiStILH5UmDR6xfkJdnmMG94o8'
-)
-VALID_SERVICE_TICKET_1 = (
- '3:serv:CBAQ__________9_IhkI5QEQHBoIYmI6c2VzczEaCGJiOnNlc3My:WUPx1cTf05fjD1exB35T5j2DCHWH1YaLJon_a'
- '4rN-D7JfXHK1Ai4wM4uSfboHD9xmGQH7extqtlEk1tCTCGm5qbRVloJwWzCZBXo3zKX6i1oBYP_89WcjCNPVe1e8jwGdLsnu6'
- 'PpxL5cn0xCksiStILH5UmDR6xfkJdnmMG94o8'
-)
-VALID_SERVICE_TICKET_SIGNLESS_1 = '3:serv:CBAQ__________9_IhkI5QEQHBoIYmI6c2VzczEaCGJiOnNlc3My:'
-VALID_SERVICE_TICKET_2 = (
- '3:serv:CBAQ__________9_IskICOUBEBwaCGJiOnNlc3MxGgliYjpzZXNzMTAaCmJiOnNlc3MxMDAaCWJiOnNlc3MxMRoJYm'
- 'I6c2VzczEyGgliYjpzZXNzMTMaCWJiOnNlc3MxNBoJYmI6c2VzczE1GgliYjpzZXNzMTYaCWJiOnNlc3MxNxoJYmI6c2VzczE'
- '4GgliYjpzZXNzMTkaCGJiOnNlc3MyGgliYjpzZXNzMjAaCWJiOnNlc3MyMRoJYmI6c2VzczIyGgliYjpzZXNzMjMaCWJiOnNl'
- 'c3MyNBoJYmI6c2VzczI1GgliYjpzZXNzMjYaCWJiOnNlc3MyNxoJYmI6c2VzczI4GgliYjpzZXNzMjkaCGJiOnNlc3MzGgliY'
- 'jpzZXNzMzAaCWJiOnNlc3MzMRoJYmI6c2VzczMyGgliYjpzZXNzMzMaCWJiOnNlc3MzNBoJYmI6c2VzczM1GgliYjpzZXNzMz'
- 'YaCWJiOnNlc3MzNxoJYmI6c2VzczM4GgliYjpzZXNzMzkaCGJiOnNlc3M0GgliYjpzZXNzNDAaCWJiOnNlc3M0MRoJYmI6c2V'
- 'zczQyGgliYjpzZXNzNDMaCWJiOnNlc3M0NBoJYmI6c2VzczQ1GgliYjpzZXNzNDYaCWJiOnNlc3M0NxoJYmI6c2VzczQ4Ggli'
- 'YjpzZXNzNDkaCGJiOnNlc3M1GgliYjpzZXNzNTAaCWJiOnNlc3M1MRoJYmI6c2VzczUyGgliYjpzZXNzNTMaCWJiOnNlc3M1N'
- 'BoJYmI6c2VzczU1GgliYjpzZXNzNTYaCWJiOnNlc3M1NxoJYmI6c2VzczU4GgliYjpzZXNzNTkaCGJiOnNlc3M2GgliYjpzZX'
- 'NzNjAaCWJiOnNlc3M2MRoJYmI6c2VzczYyGgliYjpzZXNzNjMaCWJiOnNlc3M2NBoJYmI6c2VzczY1GgliYjpzZXNzNjYaCWJ'
- 'iOnNlc3M2NxoJYmI6c2VzczY4GgliYjpzZXNzNjkaCGJiOnNlc3M3GgliYjpzZXNzNzAaCWJiOnNlc3M3MRoJYmI6c2Vzczcy'
- 'GgliYjpzZXNzNzMaCWJiOnNlc3M3NBoJYmI6c2Vzczc1GgliYjpzZXNzNzYaCWJiOnNlc3M3NxoJYmI6c2Vzczc4GgliYjpzZ'
- 'XNzNzkaCGJiOnNlc3M4GgliYjpzZXNzODAaCWJiOnNlc3M4MRoJYmI6c2VzczgyGgliYjpzZXNzODMaCWJiOnNlc3M4NBoJYm'
- 'I6c2Vzczg1GgliYjpzZXNzODYaCWJiOnNlc3M4NxoJYmI6c2Vzczg4GgliYjpzZXNzODkaCGJiOnNlc3M5GgliYjpzZXNzOTA'
- 'aCWJiOnNlc3M5MRoJYmI6c2VzczkyGgliYjpzZXNzOTMaCWJiOnNlc3M5NBoJYmI6c2Vzczk1GgliYjpzZXNzOTYaCWJiOnNl'
- 'c3M5NxoJYmI6c2Vzczk4GgliYjpzZXNzOTk:JYmABAVLM6y7_T4n1pRcwBfwDfzMV4JJ3cpbEG617zdGgKRZwL7MalsYn5bq1'
- 'F2ibujMrsF9nzZf8l4s_e-Ivjkz_xu4KMzSp-pUh9V7XIF_smj0WHYpv6gOvWNuK8uIvlZTTKwtQX0qZOL9m-MEeZiHoQPKZG'
- 'CfJ_qxMUp-J8I'
-)
-VALID_SERVICE_TICKET_3 = (
- '3:serv:CBAQ__________9_IgUI5QEQHA:Sd6tmA1CNy2Nf7XevC3x7zr2DrGNRmcl-TxUsDtDW2xI3YXyCxBltWeg0-KtDlq'
- 'yYuPOP5Jd_-XXNA12KlOPnNzrz3jm-5z8uQl6CjCcrVHUHJ75pGC8r9UOlS8cOgeXQB5dYP-fOWyo5CNadlozx1S2meCIxncb'
- 'QRV1kCBi4KU'
-)
-VALID_SERVICE_TICKET_ISSUER = (
- '3:serv:CBAQ__________9_IgsI5QEQHCDr1MT4Ag:Gu66XJT_nKnIRJjFy1561wFhIqkJItcSTGftLo7Yvi7i5wIdV-QuKT_'
- '-IMPpgjxnnGbt1Dy3Ys2TEoeJAb0TdaCYG1uy3vpoLONmTx9AenN5dx1HHf46cypLK5D3OdiTjxvqI9uGmSIKrSdRxU8gprpu'
- '5QiBDPZqVCWhM60FVSY'
-)
-
-
-def test_context():
- service_context = ServiceContext(OUR_ID, SECRET, tp2u.TVMKNIFE_PUBLIC_KEYS)
- service_context.reset_keys(tp2u.TVMKNIFE_PUBLIC_KEYS)
-
-
-def test_context_exceptions():
- with pytest.raises(MalformedTvmSecretException):
- ServiceContext(OUR_ID, MALFORMED_TVM_SECRET, tp2u.TVMKNIFE_PUBLIC_KEYS)
- with pytest.raises(MalformedTvmKeysException):
- ServiceContext(OUR_ID, SECRET, MALFORMED_TVM_KEYS)
- with pytest.raises(EmptyTvmKeysException):
- ServiceContext(OUR_ID, SECRET, EMPTY_TVM_KEYS)
-
- service_context = ServiceContext(OUR_ID, None, tp2u.TVMKNIFE_PUBLIC_KEYS)
- with pytest.raises(MalformedTvmSecretException):
- service_context.sign(1490000001, 13)
-
- service_context = ServiceContext(OUR_ID, SECRET, None)
- with pytest.raises(EmptyTvmKeysException):
- service_context.check('abcde')
-
- with pytest.raises(ContextException):
- service_context = ServiceContext(OUR_ID, None, None)
-
-
-def test_context_sign():
- service_context = ServiceContext(OUR_ID, SECRET, tp2u.TVMKNIFE_PUBLIC_KEYS)
- assert '6H8RjdP4cCrTpMEd3XArBTrKFMQbgXLHbB2FJgQ-yO0' == service_context.sign('1490000001', '13,19', 'bb:sess1')
- assert 'HAes0pEg8wb9M9YmKWPjwxm91mDp-GMTruOb6bzmuRE' == service_context.sign(
- 1490000001, [13, 19], ['bb:sess1', 'bb:sess2']
- )
- assert 'JU5tIwr3qS1K4dse2KafQzRXX_TGtlS3jE1inK7QyRM' == service_context.sign(1490000001, 13, [])
- assert 'JU5tIwr3qS1K4dse2KafQzRXX_TGtlS3jE1inK7QyRM' == service_context.sign(1490000001, 13)
-
-
-def test_ticket1():
- service_context = ServiceContext(OUR_ID, SECRET, tp2u.TVMKNIFE_PUBLIC_KEYS)
- ticket = service_context.check(VALID_SERVICE_TICKET_1)
- assert ticket.src == SRC_ID
- assert ticket.scopes == ['bb:sess1', 'bb:sess2']
- assert ticket.has_scope('bb:sess1')
- assert ticket.has_scope('bb:sess2')
- assert not ticket.has_scope('bb:sess3')
- assert (
- ticket.debug_info()
- == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;scope=bb:sess1;scope=bb:sess2;'
- )
- assert VALID_SERVICE_TICKET_SIGNLESS_1 == ServiceTicket.remove_signature(VALID_SERVICE_TICKET_1)
- assert ticket.issuer_uid is None
- assert (
- repr(ticket)
- == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;scope=bb:sess1;scope=bb:sess2;'
- )
- assert (
- str(ticket)
- == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;scope=bb:sess1;scope=bb:sess2;'
- )
-
-
-def test_ticket2():
- service_context = ServiceContext(OUR_ID, SECRET, tp2u.TVMKNIFE_PUBLIC_KEYS)
- ticket = service_context.check(VALID_SERVICE_TICKET_2)
- assert (
- ticket.debug_info()
- == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;scope=bb:sess1;scope=bb:sess10;scope=bb:sess100;scope=bb:sess11;scope=bb:sess12;scope=bb:sess13;scope=bb:sess14;scope=bb:sess15;scope=bb:sess16;scope=bb:sess17;scope=bb:sess18;scope=bb:sess19;scope=bb:sess2;scope=bb:sess20;scope=bb:sess21;scope=bb:sess22;scope=bb:sess23;scope=bb:sess24;scope=bb:sess25;scope=bb:sess26;scope=bb:sess27;scope=bb:sess28;scope=bb:sess29;scope=bb:sess3;scope=bb:sess30;scope=bb:sess31;scope=bb:sess32;scope=bb:sess33;scope=bb:sess34;scope=bb:sess35;scope=bb:sess36;scope=bb:sess37;scope=bb:sess38;scope=bb:sess39;scope=bb:sess4;scope=bb:sess40;scope=bb:sess41;scope=bb:sess42;scope=bb:sess43;scope=bb:sess44;scope=bb:sess45;scope=bb:sess46;scope=bb:sess47;scope=bb:sess48;scope=bb:sess49;scope=bb:sess5;scope=bb:sess50;scope=bb:sess51;scope=bb:sess52;scope=bb:sess53;scope=bb:sess54;scope=bb:sess55;scope=bb:sess56;scope=bb:sess57;scope=bb:sess58;scope=bb:sess59;scope=bb:sess6;scope=bb:sess60;scope=bb:sess61;scope=bb:sess62;scope=bb:sess63;scope=bb:sess64;scope=bb:sess65;scope=bb:sess66;scope=bb:sess67;scope=bb:sess68;scope=bb:sess69;scope=bb:sess7;scope=bb:sess70;scope=bb:sess71;scope=bb:sess72;scope=bb:sess73;scope=bb:sess74;scope=bb:sess75;scope=bb:sess76;scope=bb:sess77;scope=bb:sess78;scope=bb:sess79;scope=bb:sess8;scope=bb:sess80;scope=bb:sess81;scope=bb:sess82;scope=bb:sess83;scope=bb:sess84;scope=bb:sess85;scope=bb:sess86;scope=bb:sess87;scope=bb:sess88;scope=bb:sess89;scope=bb:sess9;scope=bb:sess90;scope=bb:sess91;scope=bb:sess92;scope=bb:sess93;scope=bb:sess94;scope=bb:sess95;scope=bb:sess96;scope=bb:sess97;scope=bb:sess98;scope=bb:sess99;' # noqa
- )
- assert ticket.issuer_uid is None
-
-
-def test_ticket3():
- service_context = ServiceContext(OUR_ID, SECRET, tp2u.TVMKNIFE_PUBLIC_KEYS)
- ticket = service_context.check(VALID_SERVICE_TICKET_3)
- assert ticket.debug_info() == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;'
- assert ticket.issuer_uid is None
-
-
-def test_ticket_issuer():
- service_context = ServiceContext(OUR_ID, SECRET, tp2u.TVMKNIFE_PUBLIC_KEYS)
- ticket = service_context.check(VALID_SERVICE_TICKET_ISSUER)
- assert (
- ticket.debug_info()
- == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;issuer_uid=789654123;'
- )
- assert 789654123 == ticket.issuer_uid
-
-
-def test_ticket_exceptions():
- service_context = ServiceContext(OUR_ID, SECRET, tp2u.TVMKNIFE_PUBLIC_KEYS)
- service_context.reset_keys(tp2u.TVMKNIFE_PUBLIC_KEYS)
- with pytest.raises(TicketParsingException) as ex:
- service_context.check(INVALID_SERVICE_TICKET)
- assert ex.value.status == Status.Malformed
-
- with pytest.raises(TicketParsingException) as ex:
- service_context.check(UNSUPPORTED_VERSION_SERVICE_TICKET)
- assert ex.value.status == Status.UnsupportedVersion
-
-
-def test_create_ticket_for_tests():
- with pytest.raises(TicketParsingException):
- tp2u.create_service_ticket_for_unittest(Status.Expired, 42)
- s = tp2u.create_service_ticket_for_unittest(Status.Ok, 42)
- assert s
- assert s.src == 42
- assert s.issuer_uid is None
- assert s.debug_info() == 'ticket_type=serv;src=42;dst=100500;'
-
- s = tp2u.create_service_ticket_for_unittest(Status.Ok, 42, 100501)
- assert s
- assert s.src == 42
- assert s.issuer_uid == 100501
- assert s.debug_info() == 'ticket_type=serv;src=42;dst=100500;issuer_uid=100501;'
diff --git a/library/python/deprecated/ticket_parser2/src/ut/test_user.py b/library/python/deprecated/ticket_parser2/src/ut/test_user.py
deleted file mode 100644
index 75b62f6e7e..0000000000
--- a/library/python/deprecated/ticket_parser2/src/ut/test_user.py
+++ /dev/null
@@ -1,218 +0,0 @@
-#!/usr/bin/env python
-from __future__ import print_function
-
-import pytest
-from ticket_parser2 import (
- BlackboxEnv,
- Status,
- UserTicket,
-)
-from ticket_parser2.low_level import UserContext
-from ticket_parser2.exceptions import (
- EmptyTvmKeysException,
- MalformedTvmKeysException,
- TicketParsingException,
-)
-import ticket_parser2.unittest as tp2u
-
-
-EMPTY_TVM_KEYS = (
- '1:EpUBCpIBCAYQABqHATCBhAKBgQCoZkFGm9oLTqjeXZAq6j5S6i7K20V0lNdBBLqfmFBIRuTkYxhs4vUYnWjZrKRAd5bp6_p'
- 'y0csmFmpl_5Yh0b-2pdo_E5PNP7LGRzKyKSiFddyykKKzVOazH8YYldDAfE8Z5HoS9e48an5JsPg0jr-TPu34DnJq3yv2a6dq'
- 'iKL9zSCakQY'
-)
-EXPIRED_USER_TICKET = (
- '3:user:CA0QABokCgMIyAMKAgh7EMgDGghiYjpzZXNzMRoIYmI6c2VzczIgEigB:D0CmYVwWg91LDYejjeQ2UP8AeiA_mr1q1'
- 'CUD_lfJ9zQSEYEOYGDTafg4Um2rwOOvQnsD1JHM4zHyMUJ6Jtp9GAm5pmhbXBBZqaCcJpyxLTEC8a81MhJFCCJRvu_G1FiAgR'
- 'gB25gI3HIbkvHFUEqAIC_nANy7NFQnbKk2S-EQPGY'
-)
-MALFORMED_TVM_KEYS = (
- '1:CpgCCpMCCAEQABqIAjCCAQQCggEAcLEXeH67FQESFUn4_7wnX7wN0PUrBoUsm3QQ4W5vC-qz6sXaEjSwnTV8w1o-z6X9KPL'
- 'lhzMQvuS38NCNfK4uvJ4Zvfp3YsXJ25-rYtbnrYJHNvHohD-kPCCw_yZpMp21JdWigzQGuV7CtrxUhF-NNrsnUaJrE5-OpEWN'
- 't4X6nCItKIYeVcSK6XJUbEWbrNCRbvkSc4ak2ymFeMuHYJVjxh4eQbk7_ZPzodP0WvF6eUYrYeb42imVEOR8ofVLQWE5DVnb1'
- 'z_TqZm4i1XkS7jMwZuBxBRw8DGdYei0lT_sAf7KST2jC0590NySB3vsBgWEVs1OdUUWA6r-Dvx9dsOQtSCVkQYQAAqZAgqUAg'
- 'gCEAAaiQIwggEFAoIBAQDhEBM5-6YsPWfogKtbluJoCX1WV2KdzOaQ0-OlRbBzeCzw-eQKu12c8WakHBbeCMd1I1TU64SDkDo'
- 'rWjXGIa_2xT6N3zzNAE50roTbPCcmeQrps26woTYfYIuqDdoxYKZNr0lvNLLW47vBr7EKqo1S4KSj7aXK_XYeEvUgIgf3nVIc'
- 'Nrio7VTnFmGGVQCepaL1Hi1gN4yIXjVZ06PBPZ-DxSRu6xOGbFrfKMJeMPs7KOyE-26Q3xOXdTIa1X-zYIucTd_bxUCL4BVbw'
- 'W2AvbbFsaG7ISmVdGu0XUTmhXs1KrEfUVLRJhE4Dx99hAZXm1_HlYMUeJcMQ_oHOhV94ENFIJaRBhACCpYBCpEBCAMQABqGAT'
- 'CBgwKBgF9t2YJGAJkRRFq6fWhi3m1TFW1UOE0f6ZrfYhHAkpqGlKlh0QVfeTNPpeJhi75xXzCe6oReRUm-0DbqDNhTShC7uGU'
- 'v1INYnRBQWH6E-5Fc5XrbDFSuGQw2EYjNfHy_HefHJXxQKAqPvxBDKMKkHgV58WtM6rC8jRi9sdX_ig2NIJeRBhABCpYBCpEB'
- 'CAQQABqGATCBgwKBgGB4d6eLGUBv-Q6EPLehC4S-yuE2HB-_rJ7WkeYwyp-xIPolPrd-PQme2utHB4ZgpXHIu_OFksDe_0bPg'
- 'ZniNRSVRbl7W49DgS5Ya3kMfrYB4DnF5Fta5tn1oV6EwxYD4JONpFTenOJALPGTPawxXEfon_peiHOSBuQMu3_Vn-l1IJiRBh'
- 'ADCpcBCpIBCAUQABqHATCBhAKBgQCTJMKIfmfeZpaI7Q9rnsc29gdWawK7TnpVKRHws1iY7EUlYROeVcMdAwEqVM6f8BVCKLG'
- 'gzQ7Gar_uuxfUGKwqEQzoppDraw4F75J464-7D5f6_oJQuGIBHZxqbMONtLjBCXRUhQW5szBLmTQ_R3qaJb5vf-h0APZfkYhq'
- '1cTttSCZkQYQBAqWAQqRAQgLEAAahgEwgYMCgYBvvGVH_M2H8qxxv94yaDYUTWbRnJ1uiIYc59KIQlfFimMPhSS7x2tqUa2-h'
- 'I55JiII0Xym6GNkwLhyc1xtWChpVuIdSnbvttbrt4weDMLHqTwNOF6qAsVKGKT1Yh8yf-qb-DSmicgvFc74mBQm_6gAY1iQsf'
- '33YX8578ClhKBWHSCVkQYQAAqXAQqSAQgMEAAahwEwgYQCgYEAkuzFcd5TJu7lYWYe2hQLFfUWIIj91BvQQLa_Thln4YtGCO8'
- 'gG1KJqJm-YlmJOWQG0B7H_5RVhxUxV9KpmFnsDVkzUFKOsCBaYGXc12xPVioawUlAwp5qp3QQtZyx_se97YIoLzuLr46UkLcL'
- 'nkIrp-Jo46QzYi_QHq45WTm8MQ0glpEGEAIKlwEKkgEIDRAAGocBMIGEAoGBAIUzbxOknXf_rNt17_ir8JlWvrtnCWsQd1MAn'
- 'l5mgArvavDtKeBYHzi5_Ak7DHlLzuA6YE8W175FxLFKpN2hkz-l-M7ltUSd8N1BvJRhK4t6WffWfC_1wPyoAbeSN2Yb1jygtZ'
- 'JQ8wGoXHcJQUXiMit3eFNyylwsJFj1gzAR4JCdIJeRBhABCpYBCpEBCA4QABqGATCBgwKBgFMcbEpl9ukVR6AO_R6sMyiU11I'
- '8b8MBSUCEC15iKsrVO8v_m47_TRRjWPYtQ9eZ7o1ocNJHaGUU7qqInFqtFaVnIceP6NmCsXhjs3MLrWPS8IRAy4Zf4FKmGOx3'
- 'N9O2vemjUygZ9vUiSkULdVrecinRaT8JQ5RG4bUMY04XGIwFIJiRBhADCpYBCpEBCA8QABqGATCBgwKBgGpCkW-NR3li8GlRv'
- 'qpq2YZGSIgm_PTyDI2Zwfw69grsBmPpVFW48Vw7xoMN35zcrojEpialB_uQzlpLYOvsMl634CRIuj-n1QE3-gaZTTTE8mg-AR'
- '4mcxnTKThPnRQpbuOlYAnriwiasWiQEMbGjq_HmWioYYxFo9USlklQn4-9IJmRBhAEEpUBCpIBCAYQABqHATCBhAKBgQCoZkF'
- 'Gm9oLTqjeXZAq6j5S6i7K20V0lNdBBLqfmFBIRuTkYxhs4vUYnWjZrKRAd5bp6_py0csmFmpl_5Yh0b-2pdo_E5PNP7LGRzKy'
- 'KSiFddyykKKzVOazH8YYldDAfE8Z5HoS9e48an5JsPg0jr-TPu34DnJq3yv2a6dqiKL9zSCakQYSlQEKkgEIEBAAGocBMIGEA'
- 'oGBALhrihbf3EpjDQS2sCQHazoFgN0nBbE9eesnnFTfzQELXb2gnJU9enmV_aDqaHKjgtLIPpCgn40lHrn5k6mvH5OdedyI6c'
- 'CzE-N-GFp3nAq0NDJyMe0fhtIRD__CbT0ulcvkeow65ubXWfw6dBC2gR_34rdMe_L_TGRLMWjDULbNIJ'
-)
-MALFORMED_USER_TICKET = (
- '3:user:CA0Q__________9_GiQKAwjIAwoCCHsQyAMaCGJiOnNlc3MxcXn9krYk19LCvlFrhMW-R4q8mKfXJXCd-RBVBgUQzC'
- 'OR1Dx2FiOyU-BxUoIsaU0PiwTjbVY5I2onJDilge70Cl5zEPI9pfab2qwklACq_ZBUvD1tzrfNUr88otBGAziHASJWgyVDkhy'
- 'Q3p7YbN38qpb0vGQrYNxlk4e2I'
-)
-SIGN_BROKEN_USER_TICKET = (
- '3:user:CA0Q__________9_GiQKAwjIAwoCCHsQyAMaCGJiOnNlc3MxGghiYjpzZXNzMiASKAE:KJFv5EcXn9krYk19LCvlFr'
- 'hMW-R4q8mKfXJXCd-RBVBgUQzCOR1Dx2FiOyU-BxUoIsaU0PiwI2onJDilge70Cl5zEPI9pfab2qwklACq_ZBUvD1tzrfNUr8'
- '8otBGAziHASJWgyVDkhyQ3p7YbN38qpb0vGQrYNxlk4e2'
-)
-UNSUPPORTED_VERSION_USER_TICKET = (
- '2:user:CA0Q__________9_GiQKAwjIAwoCCHsQyAMaCGJiOnNlc3MxGghiYjpzZXNzMiASKAE:KJFv5EcXn9krYk19LCvlFr'
- 'hMW-R4q8mKfXJXCd-RBVBgUQzCOR1Dx2FiOyU-BxUoIsaU0PiwTjbVY5I2onJDilge70Cl5zEPI9pfab2qwklACq_ZBUvD1tz'
- 'rfNUr88otBGAziHASJWgyVDkhyQ3p7YbN38qpb0vGQrYNxlk4e2I'
-)
-VALID_SERVICE_TICKET = (
- '3:serv:CBAQ__________9_IhkI5QEQHBoIYmI6c2VzczEaCGJiOnNlc3My:WUPx1cTf05fjD1exB35T5j2DCHWH1YaLJon_a'
- '4rN-D7JfXHK1Ai4wM4uSfboHD9xmGQH7extqtlEk1tCTCGm5qbRVloJwWzCZBXo3zKX6i1oBYP_89WcjCNPVe1e8jwGdLsnu6'
- 'PpxL5cn0xCksiStILH5UmDR6xfkJdnmMG94o8'
-)
-VALID_USER_TICKET_1 = (
- '3:user:CA0Q__________9_GiQKAwjIAwoCCHsQyAMaCGJiOnNlc3MxGghiYjpzZXNzMiASKAE:KJFv5EcXn9krYk19LCvlFr'
- 'hMW-R4q8mKfXJXCd-RBVBgUQzCOR1Dx2FiOyU-BxUoIsaU0PiwTjbVY5I2onJDilge70Cl5zEPI9pfab2qwklACq_ZBUvD1tz'
- 'rfNUr88otBGAziHASJWgyVDkhyQ3p7YbN38qpb0vGQrYNxlk4e2I'
-)
-VALID_USER_TICKET_SIGNLESS_1 = '3:user:CA0Q__________9_GiQKAwjIAwoCCHsQyAMaCGJiOnNlc3MxGghiYjpzZXNzMiASKAE:'
-VALID_USER_TICKET_2 = (
- '3:user:CA0Q__________9_GhAKAwjIAwoCCHsQyAMgEigB:KRibGYTJUA2ns0Fn7VYqeMZ1-GdscB1o9pRzELyr7QJrJsfsE'
- '8Y_HoVvB8Npr-oalv6AXOpagSc8HpZjAQz8zKMAVE_tI0tL-9DEsHirpawEbpy7OWV7-k18o1m-RaDaKeTlIB45KHbBul1-9a'
- 'eKkortBfbbXtz_Qy9r_mfFPiQ'
-)
-VALID_USER_TICKET_3 = (
- '3:user:CA0Q__________9_Go8bCgIIAAoCCAEKAggCCgIIAwoCCAQKAggFCgIIBgoCCAcKAggICgIICQoCCAoKAggLCgIIDA'
- 'oCCA0KAggOCgIIDwoCCBAKAggRCgIIEgoCCBMKAggUCgIIFQoCCBYKAggXCgIIGAoCCBkKAggaCgIIGwoCCBwKAggdCgIIHgo'
- 'CCB8KAgggCgIIIQoCCCIKAggjCgIIJAoCCCUKAggmCgIIJwoCCCgKAggpCgIIKgoCCCsKAggsCgIILQoCCC4KAggvCgIIMAoC'
- 'CDEKAggyCgIIMwoCCDQKAgg1CgIINgoCCDcKAgg4CgIIOQoCCDoKAgg7CgIIPAoCCD0KAgg-CgIIPwoCCEAKAghBCgIIQgoCC'
- 'EMKAghECgIIRQoCCEYKAghHCgIISAoCCEkKAghKCgIISwoCCEwKAghNCgIITgoCCE8KAghQCgIIUQoCCFIKAghTCgIIVAoCCF'
- 'UKAghWCgIIVwoCCFgKAghZCgIIWgoCCFsKAghcCgIIXQoCCF4KAghfCgIIYAoCCGEKAghiCgIIYwoCCGQKAghlCgIIZgoCCGc'
- 'KAghoCgIIaQoCCGoKAghrCgIIbAoCCG0KAghuCgIIbwoCCHAKAghxCgIIcgoCCHMKAgh0CgIIdQoCCHYKAgh3CgIIeAoCCHkK'
- 'Agh6CgIIewoCCHwKAgh9CgIIfgoCCH8KAwiAAQoDCIEBCgMIggEKAwiDAQoDCIQBCgMIhQEKAwiGAQoDCIcBCgMIiAEKAwiJA'
- 'QoDCIoBCgMIiwEKAwiMAQoDCI0BCgMIjgEKAwiPAQoDCJABCgMIkQEKAwiSAQoDCJMBCgMIlAEKAwiVAQoDCJYBCgMIlwEKAw'
- 'iYAQoDCJkBCgMImgEKAwibAQoDCJwBCgMInQEKAwieAQoDCJ8BCgMIoAEKAwihAQoDCKIBCgMIowEKAwikAQoDCKUBCgMIpgE'
- 'KAwinAQoDCKgBCgMIqQEKAwiqAQoDCKsBCgMIrAEKAwitAQoDCK4BCgMIrwEKAwiwAQoDCLEBCgMIsgEKAwizAQoDCLQBCgMI'
- 'tQEKAwi2AQoDCLcBCgMIuAEKAwi5AQoDCLoBCgMIuwEKAwi8AQoDCL0BCgMIvgEKAwi_AQoDCMABCgMIwQEKAwjCAQoDCMMBC'
- 'gMIxAEKAwjFAQoDCMYBCgMIxwEKAwjIAQoDCMkBCgMIygEKAwjLAQoDCMwBCgMIzQEKAwjOAQoDCM8BCgMI0AEKAwjRAQoDCN'
- 'IBCgMI0wEKAwjUAQoDCNUBCgMI1gEKAwjXAQoDCNgBCgMI2QEKAwjaAQoDCNsBCgMI3AEKAwjdAQoDCN4BCgMI3wEKAwjgAQo'
- 'DCOEBCgMI4gEKAwjjAQoDCOQBCgMI5QEKAwjmAQoDCOcBCgMI6AEKAwjpAQoDCOoBCgMI6wEKAwjsAQoDCO0BCgMI7gEKAwjv'
- 'AQoDCPABCgMI8QEKAwjyAQoDCPMBCgMI9AEKAwj1AQoDCPYBCgMI9wEKAwj4AQoDCPkBCgMI-gEKAwj7AQoDCPwBCgMI_QEKA'
- 'wj-AQoDCP8BCgMIgAIKAwiBAgoDCIICCgMIgwIKAwiEAgoDCIUCCgMIhgIKAwiHAgoDCIgCCgMIiQIKAwiKAgoDCIsCCgMIjA'
- 'IKAwiNAgoDCI4CCgMIjwIKAwiQAgoDCJECCgMIkgIKAwiTAgoDCJQCCgMIlQIKAwiWAgoDCJcCCgMImAIKAwiZAgoDCJoCCgM'
- 'ImwIKAwicAgoDCJ0CCgMIngIKAwifAgoDCKACCgMIoQIKAwiiAgoDCKMCCgMIpAIKAwilAgoDCKYCCgMIpwIKAwioAgoDCKkC'
- 'CgMIqgIKAwirAgoDCKwCCgMIrQIKAwiuAgoDCK8CCgMIsAIKAwixAgoDCLICCgMIswIKAwi0AgoDCLUCCgMItgIKAwi3AgoDC'
- 'LgCCgMIuQIKAwi6AgoDCLsCCgMIvAIKAwi9AgoDCL4CCgMIvwIKAwjAAgoDCMECCgMIwgIKAwjDAgoDCMQCCgMIxQIKAwjGAg'
- 'oDCMcCCgMIyAIKAwjJAgoDCMoCCgMIywIKAwjMAgoDCM0CCgMIzgIKAwjPAgoDCNACCgMI0QIKAwjSAgoDCNMCCgMI1AIKAwj'
- 'VAgoDCNYCCgMI1wIKAwjYAgoDCNkCCgMI2gIKAwjbAgoDCNwCCgMI3QIKAwjeAgoDCN8CCgMI4AIKAwjhAgoDCOICCgMI4wIK'
- 'AwjkAgoDCOUCCgMI5gIKAwjnAgoDCOgCCgMI6QIKAwjqAgoDCOsCCgMI7AIKAwjtAgoDCO4CCgMI7wIKAwjwAgoDCPECCgMI8'
- 'gIKAwjzAgoDCPQCCgMI9QIKAwj2AgoDCPcCCgMI-AIKAwj5AgoDCPoCCgMI-wIKAwj8AgoDCP0CCgMI_gIKAwj_AgoDCIADCg'
- 'MIgQMKAwiCAwoDCIMDCgMIhAMKAwiFAwoDCIYDCgMIhwMKAwiIAwoDCIkDCgMIigMKAwiLAwoDCIwDCgMIjQMKAwiOAwoDCI8'
- 'DCgMIkAMKAwiRAwoDCJIDCgMIkwMKAwiUAwoDCJUDCgMIlgMKAwiXAwoDCJgDCgMImQMKAwiaAwoDCJsDCgMInAMKAwidAwoD'
- 'CJ4DCgMInwMKAwigAwoDCKEDCgMIogMKAwijAwoDCKQDCgMIpQMKAwimAwoDCKcDCgMIqAMKAwipAwoDCKoDCgMIqwMKAwisA'
- 'woDCK0DCgMIrgMKAwivAwoDCLADCgMIsQMKAwiyAwoDCLMDCgMItAMKAwi1AwoDCLYDCgMItwMKAwi4AwoDCLkDCgMIugMKAw'
- 'i7AwoDCLwDCgMIvQMKAwi-AwoDCL8DCgMIwAMKAwjBAwoDCMIDCgMIwwMKAwjEAwoDCMUDCgMIxgMKAwjHAwoDCMgDCgMIyQM'
- 'KAwjKAwoDCMsDCgMIzAMKAwjNAwoDCM4DCgMIzwMKAwjQAwoDCNEDCgMI0gMKAwjTAwoDCNQDCgMI1QMKAwjWAwoDCNcDCgMI'
- '2AMKAwjZAwoDCNoDCgMI2wMKAwjcAwoDCN0DCgMI3gMKAwjfAwoDCOADCgMI4QMKAwjiAwoDCOMDCgMI5AMKAwjlAwoDCOYDC'
- 'gMI5wMKAwjoAwoDCOkDCgMI6gMKAwjrAwoDCOwDCgMI7QMKAwjuAwoDCO8DCgMI8AMKAwjxAwoDCPIDCgMI8wMQyAMaCGJiOn'
- 'Nlc3MxGgliYjpzZXNzMTAaCmJiOnNlc3MxMDAaCWJiOnNlc3MxMRoJYmI6c2VzczEyGgliYjpzZXNzMTMaCWJiOnNlc3MxNBo'
- 'JYmI6c2VzczE1GgliYjpzZXNzMTYaCWJiOnNlc3MxNxoJYmI6c2VzczE4GgliYjpzZXNzMTkaCGJiOnNlc3MyGgliYjpzZXNz'
- 'MjAaCWJiOnNlc3MyMRoJYmI6c2VzczIyGgliYjpzZXNzMjMaCWJiOnNlc3MyNBoJYmI6c2VzczI1GgliYjpzZXNzMjYaCWJiO'
- 'nNlc3MyNxoJYmI6c2VzczI4GgliYjpzZXNzMjkaCGJiOnNlc3MzGgliYjpzZXNzMzAaCWJiOnNlc3MzMRoJYmI6c2VzczMyGg'
- 'liYjpzZXNzMzMaCWJiOnNlc3MzNBoJYmI6c2VzczM1GgliYjpzZXNzMzYaCWJiOnNlc3MzNxoJYmI6c2VzczM4GgliYjpzZXN'
- 'zMzkaCGJiOnNlc3M0GgliYjpzZXNzNDAaCWJiOnNlc3M0MRoJYmI6c2VzczQyGgliYjpzZXNzNDMaCWJiOnNlc3M0NBoJYmI6'
- 'c2VzczQ1GgliYjpzZXNzNDYaCWJiOnNlc3M0NxoJYmI6c2VzczQ4GgliYjpzZXNzNDkaCGJiOnNlc3M1GgliYjpzZXNzNTAaC'
- 'WJiOnNlc3M1MRoJYmI6c2VzczUyGgliYjpzZXNzNTMaCWJiOnNlc3M1NBoJYmI6c2VzczU1GgliYjpzZXNzNTYaCWJiOnNlc3'
- 'M1NxoJYmI6c2VzczU4GgliYjpzZXNzNTkaCGJiOnNlc3M2GgliYjpzZXNzNjAaCWJiOnNlc3M2MRoJYmI6c2VzczYyGgliYjp'
- 'zZXNzNjMaCWJiOnNlc3M2NBoJYmI6c2VzczY1GgliYjpzZXNzNjYaCWJiOnNlc3M2NxoJYmI6c2VzczY4GgliYjpzZXNzNjka'
- 'CGJiOnNlc3M3GgliYjpzZXNzNzAaCWJiOnNlc3M3MRoJYmI6c2VzczcyGgliYjpzZXNzNzMaCWJiOnNlc3M3NBoJYmI6c2Vzc'
- 'zc1GgliYjpzZXNzNzYaCWJiOnNlc3M3NxoJYmI6c2Vzczc4GgliYjpzZXNzNzkaCGJiOnNlc3M4GgliYjpzZXNzODAaCWJiOn'
- 'Nlc3M4MRoJYmI6c2VzczgyGgliYjpzZXNzODMaCWJiOnNlc3M4NBoJYmI6c2Vzczg1GgliYjpzZXNzODYaCWJiOnNlc3M4Nxo'
- 'JYmI6c2Vzczg4GgliYjpzZXNzODkaCGJiOnNlc3M5GgliYjpzZXNzOTAaCWJiOnNlc3M5MRoJYmI6c2VzczkyGgliYjpzZXNz'
- 'OTMaCWJiOnNlc3M5NBoJYmI6c2Vzczk1GgliYjpzZXNzOTYaCWJiOnNlc3M5NxoJYmI6c2Vzczk4GgliYjpzZXNzOTkgEigB:'
- 'CX8PIOrxJnQqFXl7wAsiHJ_1VGjoI-asNlCXb8SE8jtI2vdh9x6CqbAurSgIlAAEgotVP-nuUR38x_a9YJuXzmG5AvJ458apW'
- 'QtODHIDIX6ZaIwMxjS02R7S5LNqXa0gAuU_R6bCWpZdWe2uLMkdpu5KHbDgW08g-uaP_nceDOk'
-)
-
-
-def test_context():
- user_context = UserContext(BlackboxEnv.Test, tp2u.TVMKNIFE_PUBLIC_KEYS)
- user_context.reset_keys(tp2u.TVMKNIFE_PUBLIC_KEYS)
-
-
-def test_context_exceptions():
- with pytest.raises(MalformedTvmKeysException):
- UserContext(BlackboxEnv.Test, MALFORMED_TVM_KEYS)
- with pytest.raises(EmptyTvmKeysException):
- UserContext(BlackboxEnv.Stress, EMPTY_TVM_KEYS)
-
-
-def test_ticket():
- user_context = UserContext(BlackboxEnv.Test, tp2u.TVMKNIFE_PUBLIC_KEYS)
- ticket = user_context.check(VALID_USER_TICKET_1)
- assert ticket.scopes == ['bb:sess1', 'bb:sess2']
- assert ticket.has_scope('bb:sess1')
- assert ticket.has_scope('bb:sess2')
- assert not ticket.has_scope('bb:sess3')
- assert ticket.uids == [456, 123]
- assert ticket.default_uid == 456
- assert (
- ticket.debug_info()
- == 'ticket_type=user;expiration_time=9223372036854775807;scope=bb:sess1;scope=bb:sess2;default_uid=456;uid=456;uid=123;env=Test;'
- )
- assert VALID_USER_TICKET_SIGNLESS_1 == UserTicket.remove_signature(VALID_USER_TICKET_1)
- assert (
- repr(ticket)
- == 'ticket_type=user;expiration_time=9223372036854775807;scope=bb:sess1;scope=bb:sess2;default_uid=456;uid=456;uid=123;env=Test;'
- )
- assert (
- str(ticket)
- == 'ticket_type=user;expiration_time=9223372036854775807;scope=bb:sess1;scope=bb:sess2;default_uid=456;uid=456;uid=123;env=Test;'
- )
-
-
-def test_ticket_exceptions():
- user_context = UserContext(BlackboxEnv.Test, tp2u.TVMKNIFE_PUBLIC_KEYS)
- with pytest.raises(TicketParsingException) as ex:
- user_context.check(SIGN_BROKEN_USER_TICKET)
- assert ex.value.status == Status.SignBroken
- assert (
- ex.value.debug_info
- == 'ticket_type=user;expiration_time=9223372036854775807;scope=bb:sess1;scope=bb:sess2;default_uid=456;uid=456;uid=123;env=Test;'
- )
-
- with pytest.raises(TicketParsingException) as ex:
- user_context.check(MALFORMED_USER_TICKET)
- assert ex.value.status == Status.Malformed
- assert ex.value.debug_info == 'status=malformed;'
-
- with pytest.raises(TicketParsingException) as ex:
- user_context.check(VALID_SERVICE_TICKET)
- assert ex.value.status == Status.InvalidTicketType
- assert ex.value.debug_info == 'ticket_type=not-user;'
-
- user_context = UserContext(BlackboxEnv.Prod, tp2u.TVMKNIFE_PUBLIC_KEYS)
- with pytest.raises(TicketParsingException) as ex:
- user_context.check(VALID_USER_TICKET_1)
- assert ex.value.status == Status.InvalidBlackboxEnv
-
-
-def test_create_ticket_for_tests():
- with pytest.raises(TicketParsingException):
- tp2u.create_user_ticket_for_unittest(Status.Expired, 42, ['ololo', 'abc'])
- u = tp2u.create_user_ticket_for_unittest(Status.Ok, 42, ['ololo', 'abc'], [23, 56])
- assert u
- assert u.default_uid == 42
- assert u.scopes == ['abc', 'ololo']
- assert u.uids == [23, 42, 56]
- assert u.debug_info() == 'ticket_type=user;scope=abc;scope=ololo;default_uid=42;uid=23;uid=42;uid=56;env=Test;'
-
- with pytest.raises(Exception):
- tp2u.create_user_ticket_for_unittest(Status.Ok, 0)
diff --git a/library/python/deprecated/ticket_parser2/src/utils.h b/library/python/deprecated/ticket_parser2/src/utils.h
deleted file mode 100644
index 3ec03935c4..0000000000
--- a/library/python/deprecated/ticket_parser2/src/utils.h
+++ /dev/null
@@ -1,131 +0,0 @@
-#pragma once
-
-#include <library/cpp/tvmauth/version.h>
-#include <library/cpp/tvmauth/client/facade.h>
-#include <library/cpp/tvmauth/client/misc/utils.h>
-#include <library/cpp/tvmauth/client/misc/api/threaded_updater.h>
-#include <library/cpp/tvmauth/client/misc/tool/settings.h>
-
-#include <util/system/getpid.h>
-
-namespace NTvmAuth {
- class TPidCheckedClient: public TTvmClient {
- public:
- using TTvmClient::TTvmClient;
-
- TString GetServiceTicketFor(const TClientSettings::TAlias& dst) const {
- pid_.check();
- return TTvmClient::GetServiceTicketFor(dst);
- }
-
- TString GetServiceTicketFor(const TTvmId dst) const {
- pid_.check();
- return TTvmClient::GetServiceTicketFor(dst);
- }
-
- TCheckedServiceTicket CheckServiceTicket(TStringBuf ticket) const {
- pid_.check();
- return TTvmClient::CheckServiceTicket(ticket);
- }
-
- TCheckedUserTicket CheckUserTicket(TStringBuf ticket) const {
- pid_.check();
- return TTvmClient::CheckUserTicket(ticket);
- }
-
- TCheckedUserTicket CheckUserTicketWithOveridedEnv(TStringBuf ticket, EBlackboxEnv env) const {
- pid_.check();
- return TTvmClient::CheckUserTicket(ticket, env);
- }
-
- static TStringBuf StatusToString(TClientStatus::ECode s) {
- switch (s) {
- case TClientStatus::Ok:
- return "TvmClient cache is ok";
- case TClientStatus::Warning:
- return "Normal operation of TvmClient is still possible but there are problems with refreshing cache "
- "so it is expiring; "
- "is tvm-api.yandex.net accessible? "
- "have you changed your TVM-secret or your backend (dst) deleted its TVM-client?";
- case TClientStatus::Error:
- return "TvmClient cache is already invalid (expired) or soon will be: "
- "you can't check valid ServiceTicket or be authenticated by your backends (dsts)";
- case TClientStatus::IncompleteTicketsSet:
- return "TvmClient cant fetch some of your tickets, this should not happen. ";
- }
-
- return "impossible case";
- }
-
- private:
- struct TPidCheck {
- TPidCheck()
- : pid_(GetPID())
- {
- }
-
- void check() const {
- const TProcessId pid = GetPID();
- Y_ENSURE_EX(pid == pid_,
- TNonRetriableException()
- << "Creating TvmClient is forbidden before fork. Original pid: " << pid_
- << ". Current pid: " << pid);
- }
-
- private:
- const TProcessId pid_;
- } const pid_;
- };
-
- TString GetServiceTicketForId(const TPidCheckedClient& cl, TTvmId dst) {
- return cl.GetServiceTicketFor(dst);
- }
-
- class TCustomUpdater: public NTvmApi::TThreadedUpdater {
- public:
- TCustomUpdater(const NTvmApi::TClientSettings& settings, TLoggerPtr logger)
- : TThreadedUpdater(settings, logger)
- {
- WorkerAwakingPeriod_ = TDuration::MilliSeconds(100);
- PublicKeysDurations_.RefreshPeriod = TDuration::MilliSeconds(100);
- Init();
- StartWorker();
- }
- };
-
- TPidCheckedClient* CreateTvmApiClient(NTvmApi::TClientSettings& s, TLoggerPtr logger) {
- s.LibVersionPrefix = "py_";
- Y_ENSURE(s.IsIncompleteTicketsSetAnError, "incomplete tickets set is not supported in ticket_parser2");
- return new TPidCheckedClient(s, logger);
- }
-
- class TTvmToolClientSettings: public NTvmTool::TClientSettings {
- public:
- using TClientSettings::TClientSettings;
- };
-
- TPidCheckedClient* CreateTvmToolClient(const TTvmToolClientSettings& s, TLoggerPtr logger) {
- // We need to disable roles logic: client doesn't allow to use it correctly
- NTvmTool::TClientSettings settingsCopy = s;
- settingsCopy.ShouldCheckSrc = false;
- settingsCopy.ShouldCheckDefaultUid = false;
-
- return new TPidCheckedClient(settingsCopy, logger);
- }
-
- TString GetPyVersion() {
- return TString("py_") + LibVersion();
- }
-
- void StartTvmClientStopping(TPidCheckedClient* cl) {
- NInternal::TClientCaningKnife::StartTvmClientStopping(cl);
- }
-
- bool IsTvmClientStopped(TPidCheckedClient* cl) {
- return NInternal::TClientCaningKnife::IsTvmClientStopped(cl);
- }
-
- void DestroyTvmClient(TPidCheckedClient* cl) {
- delete cl;
- }
-}
diff --git a/library/python/deprecated/ticket_parser2/ticket_parser2/__init__.py b/library/python/deprecated/ticket_parser2/ticket_parser2/__init__.py
deleted file mode 100644
index 863b250f0a..0000000000
--- a/library/python/deprecated/ticket_parser2/ticket_parser2/__init__.py
+++ /dev/null
@@ -1,45 +0,0 @@
-try:
- from ticket_parser2_py3.ticket_parser2_pymodule import __version__ as ticket_parser2_pymodule_version
-except ImportError:
- from ticket_parser2.ticket_parser2_pymodule import __version__ as ticket_parser2_pymodule_version
-
-try:
- from ticket_parser2_py3.ticket_parser2_pymodule import ( # noqa
- BlackboxClientId,
- BlackboxEnv,
- ServiceTicket,
- Status,
- UserTicket,
- TvmApiClientSettings,
- TvmToolClientSettings,
- TvmClientStatus,
- TvmClient as __TvmClientImpl,
- )
-except ImportError:
- from ticket_parser2.ticket_parser2_pymodule import ( # noqa
- BlackboxClientId,
- BlackboxEnv,
- ServiceTicket,
- Status,
- UserTicket,
- TvmApiClientSettings,
- TvmToolClientSettings,
- TvmClientStatus,
- TvmClient as __TvmClientImpl,
- )
-
-import warnings
-
-
-class TvmClient(__TvmClientImpl):
- pass
-
-
-__version__ = ticket_parser2_pymodule_version
-
-
-warnings.warn(
- message="ticket_parser2 is deprecated: please use https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth instead. https://clubs.at.yandex-team.ru/passport/3619",
- category=DeprecationWarning,
- stacklevel=2,
-)
diff --git a/library/python/deprecated/ticket_parser2/ticket_parser2/api/__init__.py b/library/python/deprecated/ticket_parser2/ticket_parser2/api/__init__.py
deleted file mode 100644
index 2ae28399f5..0000000000
--- a/library/python/deprecated/ticket_parser2/ticket_parser2/api/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-pass
diff --git a/library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/__init__.py b/library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/__init__.py
deleted file mode 100644
index 344aac31c5..0000000000
--- a/library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/__init__.py
+++ /dev/null
@@ -1,50 +0,0 @@
-try:
- from ticket_parser2_py3 import ( # noqa
- BlackboxClientId,
- BlackboxEnv,
- ServiceTicket,
- Status,
- UserTicket,
- TvmApiClientSettings,
- TvmToolClientSettings,
- TvmClientStatus,
- TvmClient,
- )
-except ImportError:
- from ticket_parser2 import ( # noqa
- BlackboxClientId,
- BlackboxEnv,
- ServiceTicket,
- Status,
- UserTicket,
- TvmApiClientSettings,
- TvmToolClientSettings,
- TvmClientStatus,
- TvmClient,
- )
-
-try:
- from ticket_parser2_py3.low_level import ( # noqa
- ServiceContext,
- UserContext,
- )
-except ImportError:
- from ticket_parser2.low_level import ( # noqa
- ServiceContext,
- UserContext,
- )
-
-
-__all__ = [
- 'BlackboxClientId',
- 'BlackboxEnv',
- 'ServiceContext',
- 'ServiceTicket',
- 'Status',
- 'UserContext',
- 'UserTicket',
- 'TvmApiClientSettings',
- 'TvmToolClientSettings',
- 'TvmClientStatus',
- 'TvmClient',
-]
diff --git a/library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/exceptions.py b/library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/exceptions.py
deleted file mode 100644
index dee69e7d4c..0000000000
--- a/library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/exceptions.py
+++ /dev/null
@@ -1,30 +0,0 @@
-try:
- from ticket_parser2_py3.ticket_parser2_pymodule import ( # noqa
- ContextException,
- EmptyTvmKeysException,
- MalformedTvmKeysException,
- MalformedTvmSecretException,
- TicketParsingException,
- TvmException,
- ClientException,
- BrokenTvmClientSettings,
- RetriableException,
- NonRetriableException,
- MissingServiceTicket,
- PermissionDenied,
- )
-except ImportError:
- from ticket_parser2.ticket_parser2_pymodule import ( # noqa
- ContextException,
- EmptyTvmKeysException,
- MalformedTvmKeysException,
- MalformedTvmSecretException,
- TicketParsingException,
- TvmException,
- ClientException,
- BrokenTvmClientSettings,
- RetriableException,
- NonRetriableException,
- MissingServiceTicket,
- PermissionDenied,
- )
diff --git a/library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/unittest.py b/library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/unittest.py
deleted file mode 100644
index 45affaa1e7..0000000000
--- a/library/python/deprecated/ticket_parser2/ticket_parser2/api/v1/unittest.py
+++ /dev/null
@@ -1,43 +0,0 @@
-try:
- from ticket_parser2_py3.ticket_parser2_pymodule import ( # noqa
- create_service_ticket_for_unittest,
- create_user_ticket_for_unittest,
- )
-except ImportError:
- from ticket_parser2.ticket_parser2_pymodule import ( # noqa
- create_service_ticket_for_unittest,
- create_user_ticket_for_unittest,
- )
-
-
-TVMKNIFE_PUBLIC_KEYS = (
- "1:CpgCCpMCCAEQABqIAjCCAQQCggEAcLEXeH67FQESFUn4_7wnX7wN0PUrBoUsm3QQ4W5vC-qz6sXaEjSwnTV8w1o-z6X9KPL"
- "lhzMQvuS38NCNfK4uvJ4Zvfp3YsXJ25-rYtbnrYJHNvHohD-kPCCw_yZpMp21JdWigzQGuV7CtrxUhF-NNrsnUaJrE5-OpEWN"
- "t4X6nCItKIYeVcSK6XJUbEWbrNCRbvkSc4ak2ymFeMuHYJVjxh4eQbk7_ZPzodP0WvF6eUYrYeb42imVEOR8ofVLQWE5DVnb1"
- "z_TqZm4i1XkS7jMwZuBxBRw8DGdYei0lT_sAf7KST2jC0590NySB3vsBgWEVs1OdUUWA6r-Dvx9dsOQtSCVkQYQAAqZAgqUAg"
- "gCEAAaiQIwggEFAoIBAQDhEBM5-6YsPWfogKtbluJoCX1WV2KdzOaQ0-OlRbBzeCzw-eQKu12c8WakHBbeCMd1I1TU64SDkDo"
- "rWjXGIa_2xT6N3zzNAE50roTbPCcmeQrps26woTYfYIuqDdoxYKZNr0lvNLLW47vBr7EKqo1S4KSj7aXK_XYeEvUgIgf3nVIc"
- "Nrio7VTnFmGGVQCepaL1Hi1gN4yIXjVZ06PBPZ-DxSRu6xOGbFrfKMJeMPs7KOyE-26Q3xOXdTIa1X-zYIucTd_bxUCL4BVbw"
- "W2AvbbFsaG7ISmVdGu0XUTmhXs1KrEfUVLRJhE4Dx99hAZXm1_HlYMUeJcMQ_oHOhV94ENFIJaRBhACCpYBCpEBCAMQABqGAT"
- "CBgwKBgF9t2YJGAJkRRFq6fWhi3m1TFW1UOE0f6ZrfYhHAkpqGlKlh0QVfeTNPpeJhi75xXzCe6oReRUm-0DbqDNhTShC7uGU"
- "v1INYnRBQWH6E-5Fc5XrbDFSuGQw2EYjNfHy_HefHJXxQKAqPvxBDKMKkHgV58WtM6rC8jRi9sdX_ig2NIJeRBhABCpYBCpEB"
- "CAQQABqGATCBgwKBgGB4d6eLGUBv-Q6EPLehC4S-yuE2HB-_rJ7WkeYwyp-xIPolPrd-PQme2utHB4ZgpXHIu_OFksDe_0bPg"
- "ZniNRSVRbl7W49DgS5Ya3kMfrYB4DnF5Fta5tn1oV6EwxYD4JONpFTenOJALPGTPawxXEfon_peiHOSBuQMu3_Vn-l1IJiRBh"
- "ADCpcBCpIBCAUQABqHATCBhAKBgQCTJMKIfmfeZpaI7Q9rnsc29gdWawK7TnpVKRHws1iY7EUlYROeVcMdAwEqVM6f8BVCKLG"
- "gzQ7Gar_uuxfUGKwqEQzoppDraw4F75J464-7D5f6_oJQuGIBHZxqbMONtLjBCXRUhQW5szBLmTQ_R3qaJb5vf-h0APZfkYhq"
- "1cTttSCZkQYQBAqWAQqRAQgLEAAahgEwgYMCgYBvvGVH_M2H8qxxv94yaDYUTWbRnJ1uiIYc59KIQlfFimMPhSS7x2tqUa2-h"
- "I55JiII0Xym6GNkwLhyc1xtWChpVuIdSnbvttbrt4weDMLHqTwNOF6qAsVKGKT1Yh8yf-qb-DSmicgvFc74mBQm_6gAY1iQsf"
- "33YX8578ClhKBWHSCVkQYQAAqXAQqSAQgMEAAahwEwgYQCgYEAkuzFcd5TJu7lYWYe2hQLFfUWIIj91BvQQLa_Thln4YtGCO8"
- "gG1KJqJm-YlmJOWQG0B7H_5RVhxUxV9KpmFnsDVkzUFKOsCBaYGXc12xPVioawUlAwp5qp3QQtZyx_se97YIoLzuLr46UkLcL"
- "nkIrp-Jo46QzYi_QHq45WTm8MQ0glpEGEAIKlwEKkgEIDRAAGocBMIGEAoGBAIUzbxOknXf_rNt17_ir8JlWvrtnCWsQd1MAn"
- "l5mgArvavDtKeBYHzi5_Ak7DHlLzuA6YE8W175FxLFKpN2hkz-l-M7ltUSd8N1BvJRhK4t6WffWfC_1wPyoAbeSN2Yb1jygtZ"
- "JQ8wGoXHcJQUXiMit3eFNyylwsJFj1gzAR4JCdIJeRBhABCpYBCpEBCA4QABqGATCBgwKBgFMcbEpl9ukVR6AO_R6sMyiU11I"
- "8b8MBSUCEC15iKsrVO8v_m47_TRRjWPYtQ9eZ7o1ocNJHaGUU7qqInFqtFaVnIceP6NmCsXhjs3MLrWPS8IRAy4Zf4FKmGOx3"
- "N9O2vemjUygZ9vUiSkULdVrecinRaT8JQ5RG4bUMY04XGIwFIJiRBhADCpYBCpEBCA8QABqGATCBgwKBgGpCkW-NR3li8GlRv"
- "qpq2YZGSIgm_PTyDI2Zwfw69grsBmPpVFW48Vw7xoMN35zcrojEpialB_uQzlpLYOvsMl634CRIuj-n1QE3-gaZTTTE8mg-AR"
- "4mcxnTKThPnRQpbuOlYAnriwiasWiQEMbGjq_HmWioYYxFo9USlklQn4-9IJmRBhAEEpUBCpIBCAYQABqHATCBhAKBgQCoZkF"
- "Gm9oLTqjeXZAq6j5S6i7K20V0lNdBBLqfmFBIRuTkYxhs4vUYnWjZrKRAd5bp6_py0csmFmpl_5Yh0b-2pdo_E5PNP7LGRzKy"
- "KSiFddyykKKzVOazH8YYldDAfE8Z5HoS9e48an5JsPg0jr-TPu34DnJq3yv2a6dqiKL9zSCakQYSlQEKkgEIEBAAGocBMIGEA"
- "oGBALhrihbf3EpjDQS2sCQHazoFgN0nBbE9eesnnFTfzQELXb2gnJU9enmV_aDqaHKjgtLIPpCgn40lHrn5k6mvH5OdedyI6c"
- "CzE-N-GFp3nAq0NDJyMe0fhtIRD__CbT0ulcvkeow65ubXWfw6dBC2gR_34rdMe_L_TGRLMWjDULbNIJqRBg"
-)
diff --git a/library/python/deprecated/ticket_parser2/ticket_parser2/exceptions.py b/library/python/deprecated/ticket_parser2/ticket_parser2/exceptions.py
deleted file mode 100644
index dee69e7d4c..0000000000
--- a/library/python/deprecated/ticket_parser2/ticket_parser2/exceptions.py
+++ /dev/null
@@ -1,30 +0,0 @@
-try:
- from ticket_parser2_py3.ticket_parser2_pymodule import ( # noqa
- ContextException,
- EmptyTvmKeysException,
- MalformedTvmKeysException,
- MalformedTvmSecretException,
- TicketParsingException,
- TvmException,
- ClientException,
- BrokenTvmClientSettings,
- RetriableException,
- NonRetriableException,
- MissingServiceTicket,
- PermissionDenied,
- )
-except ImportError:
- from ticket_parser2.ticket_parser2_pymodule import ( # noqa
- ContextException,
- EmptyTvmKeysException,
- MalformedTvmKeysException,
- MalformedTvmSecretException,
- TicketParsingException,
- TvmException,
- ClientException,
- BrokenTvmClientSettings,
- RetriableException,
- NonRetriableException,
- MissingServiceTicket,
- PermissionDenied,
- )
diff --git a/library/python/deprecated/ticket_parser2/ticket_parser2/low_level.py b/library/python/deprecated/ticket_parser2/ticket_parser2/low_level.py
deleted file mode 100644
index 58d9f933e8..0000000000
--- a/library/python/deprecated/ticket_parser2/ticket_parser2/low_level.py
+++ /dev/null
@@ -1,10 +0,0 @@
-try:
- from ticket_parser2_py3.ticket_parser2_pymodule import ( # noqa
- ServiceContext,
- UserContext,
- )
-except ImportError:
- from ticket_parser2.ticket_parser2_pymodule import ( # noqa
- ServiceContext,
- UserContext,
- )
diff --git a/library/python/deprecated/ticket_parser2/ticket_parser2/mock.py b/library/python/deprecated/ticket_parser2/ticket_parser2/mock.py
deleted file mode 100644
index 201f2045bf..0000000000
--- a/library/python/deprecated/ticket_parser2/ticket_parser2/mock.py
+++ /dev/null
@@ -1,141 +0,0 @@
-from __future__ import absolute_import
-
-try:
- import mock # noqa
-except ImportError:
- import unittest.mock # noqa
-
-try:
- import ticket_parser2_py3 as tp2 # noqa
- import ticket_parser2_py3.low_level as tp2l # noqa
- import ticket_parser2_py3.exceptions as tp2e # noqa
- import ticket_parser2_py3.unittest as tp2u # noqa
-except ImportError:
- import ticket_parser2 as tp2 # noqa
- import ticket_parser2.low_level as tp2l # noqa
- import ticket_parser2.exceptions as tp2e # noqa
- import ticket_parser2.unittest as tp2u # noqa
-
-
-__doc__ = """
-Use TvmClientPatcher to replace TvmClient with MockedTvmClient.
-MockedTvmClient can check ServiceTickets and UserTickets from `tvmknife unittest`
-Read more: https://wiki.yandex-team.ru/passport/tvm2/debug/#tvmknife
-Examples are in docstring for TvmClientPatcher.
-"""
-
-
-PUBLIC_KEYS = tp2u.TVMKNIFE_PUBLIC_KEYS
-
-
-class MockedTvmClient(object):
- def __init__(self, status=tp2.TvmClientStatus.Ok, self_client_id=100500, bb_env=tp2.BlackboxEnv.Test):
- self._status = status
- self._serv_ctx = tp2l.ServiceContext(self_client_id, None, PUBLIC_KEYS)
- self._user_ctx = tp2l.UserContext(bb_env, PUBLIC_KEYS)
- self._stopped = False
-
- def __check(self):
- if self._stopped:
- raise tp2e.NonRetriableException("TvmClient is already stopped")
-
- def stop(self):
- self._stopped = True
-
- @property
- def status(self):
- self.__check()
- return self._status
-
- @staticmethod
- def status_to_string(status):
- return tp2.TvmClient.status_to_string(status)
-
- def get_service_ticket_for(self, alias=None, client_id=None):
- """
- You can generate any ticket you want with `tvmknife unittest` and override this function with your ticket
- https://wiki.yandex-team.ru/passport/tvm2/debug/
- """
- self.__check()
- if alias is None and client_id is None:
- raise tp2e.TvmException("One of args is required: 'alias' or 'client_id'")
- return "Some service ticket"
-
- def check_service_ticket(self, ticket):
- self.__check()
- return self._serv_ctx.check(ticket)
-
- def check_user_ticket(self, ticket):
- self.__check()
- return self._user_ctx.check(ticket)
-
-
-class TvmClientPatcher(object):
- """
- Example:
- with TvmClientPatcher():
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- assert 123 == c.check_service_ticket(SRV_TICKET).src
- assert 123 == c.check_user_ticket(USER_TICKET_TEST).default_uid
- assert 'Some service ticket' == c.get_service_ticket_for("foo")
-
- Example:
- with TvmClientPatcher(MockedTvmClient(self_client_id=100501)):
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(SRV_TICKET)
- assert 123 == c.check_user_ticket(TEST_TICKET).default_uid
- assert 'Some service ticket' == c.get_service_ticket_for("foo")
-
- Example:
- with TvmClientPatcher(MockedTvmClient()) as p:
- p.get_mocked_tvm_client().check_service_ticket = mock.Mock(
- side_effect=TicketParsingException("Unsupported version", Status.UnsupportedVersion, "2:err"),
- )
-
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(SRV_TICKET)
-
- Example:
- m = MockedTvmClient()
- m.get_service_ticket_for = mock.Mock(side_effect=[
- 'SERVICE_TICKET_FOR_MY_FIRST_CALL',
- 'SERVICE_TICKET_FOR_MY_SECOND_CALL'],
- )
- with TvmClientPatcher(m):
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- assert 'SERVICE_TICKET_FOR_MY_FIRST_CALL' == c.get_service_ticket_for()
- assert 'SERVICE_TICKET_FOR_MY_SECOND_CALL' == c.get_service_ticket_for()
- """
-
- def __init__(self, mocked_tvm_client=None):
- if mocked_tvm_client is None:
- mocked_tvm_client = MockedTvmClient()
- self._mocked_tvm_client = mocked_tvm_client
- self._patch = mock.patch.object(
- tp2.TvmClient,
- '__new__',
- mock.Mock(return_value=mocked_tvm_client),
- )
-
- def start(self):
- self._patch.start()
- return self
-
- def stop(self):
- self._patch.stop()
-
- def __enter__(self):
- self.start()
- return self
-
- def __exit__(self, exc_type, exc_val, exc_tb):
- self.stop()
-
- def get_mocked_tvm_client(self):
- return self._mocked_tvm_client
diff --git a/library/python/deprecated/ticket_parser2/ticket_parser2/ticket_parser2_pymodule.pyx b/library/python/deprecated/ticket_parser2/ticket_parser2/ticket_parser2_pymodule.pyx
deleted file mode 100644
index daeed81cf4..0000000000
--- a/library/python/deprecated/ticket_parser2/ticket_parser2/ticket_parser2_pymodule.pyx
+++ /dev/null
@@ -1,878 +0,0 @@
-# coding: utf-8
-import datetime
-import logging
-import time
-from cpython cimport PyObject
-from libcpp cimport bool as bool_t
-from libcpp.map cimport map as cmap
-from libcpp.pair cimport pair
-from libc.stdint cimport uint32_t, uint64_t
-from libc.time cimport time_t
-from cython.operator cimport dereference
-cimport cpython.ref as cpy_ref
-
-from enum import (
- Enum,
- IntEnum,
-)
-
-from util.datetime.base cimport TInstant
-from util.generic.hash cimport THashMap
-from util.generic.maybe cimport TMaybe
-from util.generic.ptr cimport THolder
-from util.generic.string cimport TString, TStringBuf
-from util.generic.vector cimport TVector
-
-
-cdef extern from "Python.h":
- cdef void PyEval_InitThreads()
-
-class TvmException(Exception):
- pass
-
-class ContextException(TvmException):
- pass
-
-class EmptyTvmKeysException(ContextException):
- pass
-
-class MalformedTvmKeysException(ContextException):
- pass
-
-class MalformedTvmSecretException(ContextException):
- pass
-
-class NotAllowedException(TvmException):
- pass
-
-class ClientException(TvmException):
- pass
-
-class RetriableException(ClientException):
- pass
-
-class NonRetriableException(ClientException):
- pass
-
-class BrokenTvmClientSettings(NonRetriableException):
- pass
-
-class MissingServiceTicket(NonRetriableException):
- pass
-
-class PermissionDenied(NonRetriableException):
- pass
-
-class TicketParsingException(TvmException):
- def __init__(self, message, status, debug_info):
- self.message = message
- self.status = status
- self.debug_info = debug_info
-
-cdef public PyObject* pyEmptyTvmKeysException = <PyObject*>EmptyTvmKeysException
-cdef public PyObject* pyMalformedTvmKeysException = <PyObject*>MalformedTvmKeysException
-cdef public PyObject* pyMalformedTvmSecretException = <PyObject*>MalformedTvmSecretException
-cdef public PyObject* pyNotAllowedException = <PyObject*>NotAllowedException
-cdef public PyObject* pyTicketParsingException = <PyObject*>TicketParsingException
-cdef public PyObject* pyClientException = <PyObject*>ClientException
-cdef public PyObject* pyBrokenTvmClientSettings = <PyObject*>BrokenTvmClientSettings
-cdef public PyObject* pyRetriableException = <PyObject*>RetriableException
-cdef public PyObject* pyNonRetriableException = <PyObject*>NonRetriableException
-cdef public PyObject* pyMissingServiceTicket = <PyObject*>MissingServiceTicket
-cdef public PyObject* pyPermissionDenied = <PyObject*>PermissionDenied
-
-
-cdef extern from "library/cpp/containers/stack_vector/stack_vec.h" nogil:
- cdef cppclass TSmallVec[T](TVector):
- pass
-
-cdef extern from "library/python/deprecated/ticket_parser2/src/exception.h":
- cdef void raise_py_error()
-
-cdef extern from "library/cpp/tvmauth/ticket_status.h" namespace "NTvmAuth" nogil:
- cdef cppclass EStatus "NTvmAuth::ETicketStatus":
- pass
- TStringBuf StatusToString(EStatus status);
-
-cdef extern from "library/cpp/tvmauth/ticket_status.h" namespace "NTvmAuth::ETicketStatus" nogil:
- cdef EStatus cOk "NTvmAuth::ETicketStatus::Ok"
- cdef EStatus cExpired "NTvmAuth::ETicketStatus::Expired"
- cdef EStatus cInvalidBlackboxEnv "NTvmAuth::ETicketStatus::InvalidBlackboxEnv"
- cdef EStatus cInvalidDst "NTvmAuth::ETicketStatus::InvalidDst"
- cdef EStatus cInvalidTicketType "NTvmAuth::ETicketStatus::InvalidTicketType"
- cdef EStatus cMalformed "NTvmAuth::ETicketStatus::Malformed"
- cdef EStatus cMissingKey "NTvmAuth::ETicketStatus::MissingKey"
- cdef EStatus cSignBroken "NTvmAuth::ETicketStatus::SignBroken"
- cdef EStatus cUnsupportedVersion "NTvmAuth::ETicketStatus::UnsupportedVersion"
-
-class Status(IntEnum):
- """
- Status mean result of ticket check
- """
- Ok = <int>cOk
- Expired = <int>cExpired
- InvalidBlackboxEnv = <int>cInvalidBlackboxEnv
- InvalidDst = <int>cInvalidDst
- InvalidTicketType = <int>cInvalidTicketType
- Malformed = <int>cMalformed
- MissingKey = <int>cMissingKey
- SignBroken = <int>cSignBroken
- UnsupportedVersion = <int>cUnsupportedVersion
-
-cdef extern from "library/cpp/tvmauth/checked_user_ticket.h" namespace "NTvmAuth" nogil:
- cdef cppclass EBlackboxEnv "NTvmAuth::EBlackboxEnv":
- pass
-
-cdef extern from "library/cpp/tvmauth/checked_user_ticket.h" namespace "NTvmAuth::EBlackboxEnv" nogil:
- cdef EBlackboxEnv cProd "NTvmAuth::EBlackboxEnv::Prod"
- cdef EBlackboxEnv cTest "NTvmAuth::EBlackboxEnv::Test"
- cdef EBlackboxEnv cProdYateam "NTvmAuth::EBlackboxEnv::ProdYateam"
- cdef EBlackboxEnv cTestYateam "NTvmAuth::EBlackboxEnv::TestYateam"
- cdef EBlackboxEnv cStress "NTvmAuth::EBlackboxEnv::Stress"
-
-class BlackboxEnv(IntEnum):
- """
- BlackboxEnv describes environment of Passport:
- https://wiki.yandex-team.ru/passport/tvm2/user-ticket/#0-opredeljaemsjasokruzhenijami
- """
- Prod = <int>cProd
- Test = <int>cTest
- ProdYateam = <int>cProdYateam
- TestYateam = <int>cTestYateam
- Stress = <int>cStress
-
-class BlackboxClientId(Enum):
- Prod = '222'
- Test = '224'
- ProdYateam = '223'
- TestYateam = '225'
- Stress = '226'
- Mimino = '239'
-
-cdef extern from "library/cpp/tvmauth/type.h" namespace "NTvmAuth" nogil:
- ctypedef uint32_t TTvmId
- ctypedef uint64_t TUid
-
- cdef cppclass TScopes(TSmallVec[TStringBuf]):
- pass
-
- cdef cppclass TUids(TSmallVec[TUid]):
- pass
-
-cdef extern from "library/cpp/tvmauth/src/service_impl.h" namespace "NTvmAuth" nogil:
- cdef cppclass TCheckedServiceTicket:
- cppclass TImpl:
- TImpl() except +raise_py_error
- bool_t operator bool() except +raise_py_error
- TString DebugInfo() except +raise_py_error
- bool_t HasScope(TStringBuf scopeName) except +raise_py_error
- time_t GetExpirationTime() except +raise_py_error
- const TScopes& GetScopes() except +raise_py_error
- TTvmId GetSrc() except +raise_py_error
- EStatus GetStatus() except +raise_py_error
- TMaybe[TUid] GetIssuerUid() except +raise_py_error
-
- @staticmethod
- THolder[TCheckedServiceTicket.TImpl] CreateTicketForTests(EStatus, TTvmId, TMaybe[TUid]) except +raise_py_error
-
- cdef cppclass TServiceContext:
- cppclass TImpl:
- TImpl(TStringBuf secretBase64, int clientId, TStringBuf tvmKeysResponse) except +raise_py_error
- TImpl(int clientId, TStringBuf tvmKeysResponse) except +raise_py_error
- TImpl(TStringBuf secretBase64) except +raise_py_error
- THolder[TCheckedServiceTicket.TImpl] Check(TStringBuf ticketBody) except +raise_py_error
- void ResetKeys(TStringBuf tvmKeysResponse) except +raise_py_error
- TString SignCgiParamsForTvm(TStringBuf ts, TStringBuf dst, TStringBuf scopes) except +raise_py_error const
-
-cdef extern from "library/cpp/tvmauth/src/user_impl.h" namespace "NTvmAuth" nogil:
- cdef cppclass TCheckedUserTicket:
- cppclass TImpl:
- TImpl() except +raise_py_error
- bool_t operator bool() except +raise_py_error
- bool_t HasScope(TStringBuf scopeName) except +raise_py_error
- TString DebugInfo() except +raise_py_error
- TUid GetDefaultUid() except +raise_py_error
- time_t GetExpirationTime() except +raise_py_error
- const TScopes& GetScopes() except +raise_py_error
- EStatus GetStatus() except +raise_py_error
- const TUids& GetUids() except +raise_py_error
-
- @staticmethod
- THolder[TCheckedUserTicket.TImpl] CreateTicketForTests(EStatus, TUid, TScopes, TUids) except +raise_py_error
-
- cdef cppclass TUserContext:
- cppclass TImpl:
- TImpl(EBlackboxEnv env, TStringBuf tvmKeysResponse) except +raise_py_error
- THolder[TCheckedUserTicket.TImpl] Check(TStringBuf ticketBody) except +raise_py_error
- void ResetKeys(TStringBuf tvmKeysResponse) except +raise_py_error
-
-cdef extern from "library/cpp/tvmauth/utils.h" namespace "NTvmAuth::NUtils" nogil:
- TStringBuf RemoveTicketSignature(TStringBuf ticketBody) except +raise_py_error
-
-cdef extern from "library/cpp/tvmauth/client/misc/api/settings.h" namespace "NTvmAuth::NTvmApi" nogil:
- cdef cppclass TClientSettings:
- cppclass TDst:
- TDst(TTvmId) except +raise_py_error
-
- ctypedef THashMap[TString, TDst] TDstMap
- ctypedef TVector[TDst] TDstVector
-
- TClientSettings() except +raise_py_error
- void CheckValid() except +raise_py_error
-
- TString DiskCacheDir
- TTvmId SelfTvmId
- TString Secret # Actual type is NSecretString::TSecretString, but for operator=() it is enough
-
- TDstVector FetchServiceTicketsForDsts
- TDstMap FetchServiceTicketsForDstsWithAliases
- bool_t CheckServiceTickets
- TMaybe[EBlackboxEnv] CheckUserTicketsWithBbEnv
-
- TString TvmHost
- int TvmPort
-
-
-cdef extern from "library/cpp/tvmauth/client/client_status.h" namespace "NTvmAuth" nogil:
- cdef cppclass TClientStatus:
- cppclass ECode "ECode":
- pass
- ECode GetCode()
- TClientStatus.ECode cCsOk "NTvmAuth::TClientStatus::Ok"
- TClientStatus.ECode cCsWarning "NTvmAuth::TClientStatus::Warning"
- TClientStatus.ECode cCsError "NTvmAuth::TClientStatus::Error"
-
-
-class TvmClientStatus(IntEnum):
- """
- Description:
- https://a.yandex-team.ru/arc/trunk/arcadia/library/python/deprecated/ticket_parser2/README.md#high-level-interface
- """
- Ok = <int>cCsOk
- ExpiringCache = <int>cCsWarning
- InvalidCache = <int>cCsError
- IncompleteListOfServiceTickets = <int>3
-
-cdef extern from "library/cpp/tvmauth/src/utils.h" namespace "NTvmAuth::NInternal" nogil:
- cdef cppclass TCanningKnife:
- @staticmethod
- TCheckedServiceTicket.TImpl* GetS(TCheckedServiceTicket& t)
- @staticmethod
- TCheckedUserTicket.TImpl* GetU(TCheckedUserTicket& t)
-
-cdef extern from "library/python/deprecated/ticket_parser2/src/logger.h" namespace "NTvmAuth" nogil:
- cdef cppclass IPyLogger:
- IPyLogger(cpy_ref.PyObject *obj)
- void Log(int lvl, const TString& msg)
-
-cdef extern from "library/python/deprecated/ticket_parser2/src/utils.h" namespace "NTvmAuth" nogil:
- cdef cppclass TPidCheckedClient:
- TPidCheckedClient(TCustomUpdater*) except +raise_py_error
- TClientStatus GetStatus() except +raise_py_error
- TStringBuf GetStatusString() except +raise_py_error
- TInstant GetUpdateTimeOfPublicKeys() except +raise_py_error
- TInstant GetUpdateTimeOfServiceTickets() except +raise_py_error
- TString GetServiceTicketFor(const TString& dst) except +raise_py_error
- TCheckedServiceTicket CheckServiceTicket(TStringBuf ticket) except +raise_py_error
- TCheckedUserTicket CheckUserTicket(TStringBuf ticket) except +raise_py_error
- TCheckedUserTicket CheckUserTicketWithOveridedEnv(TStringBuf ticket, EBlackboxEnv env) except +raise_py_error
- @staticmethod
- TStringBuf StatusToString(TClientStatus.ECode status) except +raise_py_error
-
- cdef TString GetServiceTicketForId(const TPidCheckedClient&, TTvmId) except +raise_py_error
- cdef TPidCheckedClient* CreateTvmApiClient(TClientSettings& settings, IPyLogger*) except +raise_py_error
- cdef TPidCheckedClient* CreateTvmToolClient(const TTvmToolClientSettings&, IPyLogger*) except +raise_py_error
- cdef TString GetPyVersion() except +raise_py_error
- cdef void StartTvmClientStopping(TPidCheckedClient*)
- cdef bool_t IsTvmClientStopped(TPidCheckedClient*)
- cdef void DestroyTvmClient(TPidCheckedClient*)
-
- cdef cppclass TCustomUpdater:
- TCustomUpdater(const TClientSettings&, IPyLogger*) except +raise_py_error
-
- cdef cppclass TTvmToolClientSettings:
- TTvmToolClientSettings(TString) except +raise_py_error
- TTvmToolClientSettings& SetPort(int)
- TTvmToolClientSettings& SetHostname(const TString&) except +raise_py_error
- TTvmToolClientSettings& SetAuthToken(const TString&) except +raise_py_error
- TTvmToolClientSettings& OverrideBlackboxEnv(EBlackboxEnv env) except +raise_py_error
-
-__version__ = GetPyVersion().decode('utf-8')
-
-cdef class ServiceContext:
- """
- WARNING: it is low level API: first of all try use TvmClient. It is not deprecated but don't use it.
- Long lived object for keeping client's credentials for TVM
- """
- cdef TServiceContext.TImpl* baseptr
- def __cinit__(self, int client_id, secret, tvm_keys):
- if tvm_keys is None and secret is None:
- raise ContextException("secret and tvm_keys both can't be None")
- if secret is None:
- self.baseptr = new TServiceContext.TImpl(client_id, <TString>tvm_keys.encode('utf-8'))
- elif tvm_keys is None:
- self.baseptr = new TServiceContext.TImpl(<TString>secret.encode('utf-8'))
- else:
- self.baseptr = new TServiceContext.TImpl(<TString>secret.encode('utf-8'), client_id, <TString>tvm_keys.encode('utf-8'))
-
- def __dealloc__(self):
- del self.baseptr
-
- cdef __sign(self, TString timestamp, TString dst, TString scopes):
- return self.baseptr.SignCgiParamsForTvm(timestamp, dst, scopes).decode('utf-8')
-
- @staticmethod
- cdef __check(TCheckedServiceTicket.TImpl* ticket):
- tick = ServiceTicket()
- tick.baseptr = ticket
- raw_status = tick.baseptr.GetStatus()
- status = Status(<int>raw_status)
- if status != Status.Ok:
- raise TicketParsingException(StatusToString(raw_status).decode('utf-8'), status, tick.debug_info())
- return tick
-
- def check(self, ticket_body):
- return ServiceContext.__check(self.baseptr.Check(<TString>ticket_body.encode('utf-8')).Release())
-
- def reset_keys(self, tvm_keys):
- self.baseptr.ResetKeys(<TString>tvm_keys.encode('utf-8'))
-
- def sign(self, timestamp, dst, scopes=None):
- if isinstance(timestamp, int):
- timestamp = str(timestamp)
- if isinstance(dst, list):
- dst = ','.join(map(lambda x: x if isinstance(x, str) else str(x), dst))
- elif isinstance(dst, int):
- dst = str(dst)
- if isinstance(scopes, list):
- scopes = ','.join(map(lambda x: x if isinstance(x, str) else str(x), scopes))
- elif scopes is None:
- scopes = ''
- return self.__sign(timestamp.encode('utf-8'), dst.encode('utf-8'), scopes.encode('utf-8'))
-
-cdef class ServiceTicket:
- cdef TCheckedServiceTicket.TImpl* baseptr
- def __dealloc__(self):
- del self.baseptr
-
- def __nonzero__(self):
- return <bool_t>(dereference(self.baseptr))
-
- def __str__(self):
- return self.debug_info()
-
- def __repr__(self):
- return str(self)
-
- def debug_info(self):
- """
- :return: Human readable data for debug purposes
- """
- return self.baseptr.DebugInfo().decode('utf8')
-
- def has_scope(self, scope_name):
- return self.baseptr.HasScope(<TString>scope_name.encode('utf-8'))
-
- @staticmethod
- def remove_signature(ticket_body):
- """
- :param ticket_body: Full ticket body
- :return: Safe for logging part of ticket - it can be parsed later with `tvmknife parse_ticket -t ...`
- """
- return RemoveTicketSignature(<TString>ticket_body.encode('utf-8')).decode('utf-8')
-
- @property
- def scopes(self):
- rlist = []
- scopes = self.baseptr.GetScopes()
- for i in range(scopes.size()):
- rlist.append(scopes[i].decode('utf-8'))
- return rlist
-
- @property
- def src(self):
- """
- You should check SrcID by yourself with your ACL.
-
- :return: ID of request source service
- """
- return self.baseptr.GetSrc()
-
- @property
- def issuer_uid(self):
- """
- IssuerUID is UID of developer who is debuging something, so he(she) issued ServiceTicket with his(her) ssh-sign:
- it is grant_type=sshkey in tvm-api
- https://wiki.yandex-team.ru/passport/tvm2/debug/#sxoditvapizakrytoeserviceticketami.
-
- :return: UID or `None`
- """
- u = self.baseptr.GetIssuerUid()
-
- if u.Defined():
- return u.GetRef()
-
-
-def create_service_ticket_for_unittest(status, int src, issuer_uid=None):
- cdef TMaybe[TUid] uid
- if issuer_uid is not None:
- uid = <int>issuer_uid
- return ServiceContext.__check(TCheckedServiceTicket.TImpl.CreateTicketForTests(
- <EStatus><int>status, src, uid).Release())
-
-
-cdef class UserContext:
- """
- WARNING: it is low level API: first of all try use TvmClient. It is not deprecated but don't use it.
- Long lived object for keeping client's credentials for TVM
- """
- cdef TUserContext.TImpl* baseptr
- def __cinit__(self, int env, tvm_keys):
- self.baseptr = new TUserContext.TImpl(<EBlackboxEnv>env, <TString>tvm_keys.encode('utf-8'))
-
- def __dealloc__(self):
- del self.baseptr
-
- @staticmethod
- cdef __check(TCheckedUserTicket.TImpl* ticket):
- tick = UserTicket()
- tick.baseptr = ticket
- raw_status = tick.baseptr.GetStatus()
- status = Status(<int>raw_status)
- if status != Status.Ok:
- raise TicketParsingException(StatusToString(raw_status).decode('utf-8'), status, tick.debug_info())
- return tick
-
- def check(self, ticket_body):
- return UserContext.__check(self.baseptr.Check(<TString>ticket_body.encode('utf-8')).Release())
-
- def reset_keys(self, tvm_keys):
- self.baseptr.ResetKeys(<TString>tvm_keys.encode('utf-8'))
-
-cdef class UserTicket:
- """
- UserTicket contains only valid users.
- Details: https://wiki.yandex-team.ru/passport/tvm2/user-ticket/#chtoestvusertickete
- """
- cdef TCheckedUserTicket.TImpl* baseptr
- def __dealloc__(self):
- del self.baseptr
-
- def __str__(self):
- return self.debug_info()
-
- def __repr__(self):
- return str(self)
-
- def debug_info(self):
- """
- :return: Human readable data for debug purposes
- """
- return self.baseptr.DebugInfo().decode('utf8')
-
- @property
- def default_uid(self):
- """
- Default UID maybe 0
-
- :return: default user
- """
- return self.baseptr.GetDefaultUid()
-
- def has_scope(self, scope_name):
- return self.baseptr.HasScope(<TString>scope_name.encode('utf-8'))
-
- @staticmethod
- def remove_signature(ticket_body):
- """
- :param ticket_body: Full ticket body
- :return: Safe for logging part of ticket - it can be parsed later with `tvmknife parse_ticket -t ...`
- """
- return RemoveTicketSignature(<TString>ticket_body.encode('utf-8')).decode('utf-8')
-
- @property
- def scopes(self):
- """
- Scopes is array of scopes inherited from credential - never empty
-
- :return: Array of scopes
- """
- rlist = []
- scopes = self.baseptr.GetScopes()
- for i in range(scopes.size()):
- rlist.append(scopes[i].decode('utf-8'))
- return rlist
-
- @property
- def uids(self):
- """
- UIDs is array of valid users - never empty
-
- :return: Array of valid users
- """
- rlist = []
- uids = self.baseptr.GetUids()
- for i in range(uids.size()):
- rlist.append(uids[i])
- return rlist
-
- def __nonzero__(self):
- return <bool_t>(dereference(self.baseptr))
-
-
-def create_user_ticket_for_unittest(status, int default_uid, scopes=[], uids=[]):
- cdef TScopes sc
- cdef TVector[TString] sc_tmp
- cdef TUids ui
-
- for v in scopes:
- sc_tmp.push_back(v.encode('utf-8'))
- sc.push_back(sc_tmp.back())
- for v in uids:
- ui.push_back(<int>v)
-
- return UserContext.__check(TCheckedUserTicket.TImpl.CreateTicketForTests(
- <EStatus><int>status, default_uid, sc, ui).Release())
-
-
-cdef class TvmApiClientSettings:
- """
- Settings for TVM client. Uses https://tvm-api.yandex.net to get state.
- """
- cdef TClientSettings* baseptr
-
- def __init__(self,
- self_client_id=None,
- enable_service_ticket_checking=False,
- enable_user_ticket_checking=None,
- self_secret=None,
- dsts=None,
- ):
- """
- Examples:
- - Checking of ServiceTickets:
- TvmApiClientSettings(self_client_id=100500, enable_service_ticket_checking=True)
- - Checking of UserTickets:
- TvmApiClientSettings(enable_user_ticket_checking=BlackboxEnv.Test)
- - Fetching of ServiceTickets (with aliases):
- # init
- s = TvmApiClientSettings(
- self_client_id=100500,
- self_secret='my_secret',
- dsts={'my backend': int(config.get_back_client_id())},
- )
- ...
- # per request
- service_ticket_for_backend = c.get_service_ticket_for('my_backend')
-
- # Key in dict is internal ALIAS of destination in your code.
- # It allowes not to bring destination's client_id to each calling point.
- - Fetching of ServiceTickets (with client_id):
- # init
- s = TvmApiClientSettings(
- self_client_id=100500,
- self_secret='my_secret',
- dsts=[42],
- )
- ...
- # per request
- service_ticket_for_backend = c.get_service_ticket_for(42)
-
- :param self_client_id: int - TVM-client_id of your service
- :param enable_service_ticket_checking: boolean - flag for SeviceTicket checking
- :param enable_user_ticket_checking: enum EBlackboxEnv - blackbox enviroment enables UserTicket checking with env
- :param self_secret: string - TVM-secret of your service
- :param dsts: dict (string -> int) - map of alias to client_id of your destination
- or list (int) - client_id of your destination
-
- :raises `~BrokenTvmClientSettings`: Raised in case of settings validation fails.
- """
- pass
-
- def __cinit__(self,
- self_client_id=None,
- enable_service_ticket_checking=False,
- enable_user_ticket_checking=None,
- self_secret=None,
- dsts=None,
- ):
- self.baseptr = new TClientSettings()
-
- if self_client_id is not None:
- self.baseptr.SelfTvmId = <int>self_client_id
-
- if enable_service_ticket_checking:
- self.baseptr.CheckServiceTickets = True
-
- if enable_user_ticket_checking is not None: # check for None because enum has valid value == 0
- self.baseptr.CheckUserTicketsWithBbEnv = <EBlackboxEnv><int>enable_user_ticket_checking
-
- if self_secret:
- self.baseptr.Secret = <TString>self_secret.encode('utf-8')
-
- if isinstance(dsts, dict):
- for k, v in dsts.items():
- self.baseptr.FetchServiceTicketsForDstsWithAliases.insert(pair[TString, TClientSettings.TDst](k.encode('utf-8'), TClientSettings.TDst(<int>v)))
- elif isinstance(dsts, list):
- for v in dsts:
- self.baseptr.FetchServiceTicketsForDsts.push_back(TClientSettings.TDst(<int>v))
- elif dsts is not None:
- raise TvmException("dsts must be dict or list")
-
- self.baseptr.CheckValid()
-
- def __dealloc__(self):
- del self.baseptr
-
- def set_disk_cache_dir(self, dir):
- """
- Set path to directory for disk cache
- Requires read/write permissions. Checks permissions
- WARNING: The same directory can be used only:
- - for TVM clients with the same settings
- OR
- - for new client replacing previous - with another config.
- System user must be the same for processes with these clients inside.
- Implementation doesn't provide other scenarios.
-
- :param dir: directory should exist
- """
- self.baseptr.DiskCacheDir = <TString>dir.encode('utf-8')
-
- cdef TString __host
- cdef int __port
-
- def __set_localhost(self, port):
- self.__host = TString('localhost')
- self.__port = <int>port
- self.baseptr.TvmHost = self.__host
- self.baseptr.TvmPort = self.__port
-
-
-cdef class TvmToolClientSettings:
- """
- Uses local http-interface to get state: http://localhost/tvm/.
- This interface can be provided with tvmtool (local daemon) or Qloud/YP (local http api in container).
- See more: https://wiki.yandex-team.ru/passport/tvm2/qloud/.
- """
- cdef TTvmToolClientSettings* baseptr
-
- def __init__(self,
- self_alias,
- auth_token=None,
- port=None,
- hostname="localhost",
- override_bb_env=None,
- ):
- """
- Examples:
- - Ctor for Qloud:
- TvmToolClientSettings("me") # 'me' was specified as alias for your tvm client_id in Qloud interface
- - Ctor for local tvmtool:
- TvmToolClientSettings("me", auth_token="AAAAAAAAAAAAAAAAAAAAAA", port=18080)
- - Ctor for remote tvmtool - in dev-environment (if you need this):
- TvmToolClientSettings("me", auth_token="AAAAAAAAAAAAAAAAAAAAAA", port=18080, hostname="front.dev.yandex.net")
- - Get ticket from client:
- c = TvmClient(TvmToolClientSettings("me")) # 'me' was specified as alias for your tvm client in Qloud interface
- t = c.get_service_ticket_for("push-client") # 'push-client' was specified as alias for dst in Qloud interface
- t = c.get_service_ticket_for(100500) # 100500 was specified as dst in Qloud interface
- - Check user ticket for another bb_env:
- TvmToolClientSettings("me", override_bb_env=BlackboxEnv.ProdYateam) # BlackboxEnv.Prod was specified for tvmtool
-
- :param self_alias: string - alias for your TVM-client_id - needs to be specified in settings of tvmtool/Qloud/YP
- :param auth_token: string - default value == env['TVMTOOL_LOCAL_AUTHTOKEN'] (provided with Yandex.Deploy) or env['QLOUD_TVM_TOKEN'] (provided with Qloud)
- :param port: int - autodetected for Qloud/YP. TCP port for HTTP-interface provided with tvmtool/Qloud/YP
- :param hostname: string - hostname for tvmtool
- :param override_bb_env: enum EBlackboxEnv - blackbox enviroment overrides env from tvmtool. Allowed only:
- - Prod/ProdYateam -> Prod/ProdYateam
- - Test/TestYateam -> Test/TestYateam
- - Stress -> Stress
- You can contact tvm-dev@yandex-team.ru if limitations are too strict
- """
- pass
-
- def __cinit__(self,
- self_alias,
- auth_token=None,
- port=None,
- hostname="localhost",
- override_bb_env=None,
- ):
- self.baseptr = new TTvmToolClientSettings(<TString>self_alias.encode('utf-8'))
-
- if auth_token is not None:
- self.baseptr.SetAuthToken(<TString>auth_token.encode('utf-8'))
-
- if port is not None:
- self.baseptr.SetPort(<int>port)
-
- if hostname is not None:
- self.baseptr.SetHostname(<TString>hostname.encode('utf-8'))
-
- if override_bb_env is not None:
- self.baseptr.OverrideBlackboxEnv(<EBlackboxEnv><int>override_bb_env)
-
- def __dealloc__(self):
- del self.baseptr
-
-
-cdef public api void cy_call_func(object self, char* method, int lvl, const char* data, size_t length) with gil:
- cdef object message = data[:length]
-
- try:
- func = getattr(self, method.decode("utf-8"));
- except AttributeError as e:
- return
-
- func(lvl, message.rstrip())
-
-
-cdef class TvmClient:
- """
- Long lived thread-safe object for interacting with TVM.
- Each client starts system thread. !!SO DO NOT FORK YOUR PROCESS AFTER CREATING TvmClient!!
- In 99% cases TvmClient shoud be created at service startup and live for the whole process lifetime.
- If your case in this 1% and you need to RESTART client, you should to use method 'stop()' for old client.
-
- You can get logs from 'TVM':
- log = logging.getLogger('TVM')
- """
- cdef TPidCheckedClient* baseptr
-
- __logger = logging.getLogger('TVM')
- __loghandles = {
- 0: __logger.error,
- 1: __logger.error,
- 2: __logger.error,
- 3: __logger.error,
- 4: __logger.warning,
- 5: __logger.info,
- 6: __logger.info,
- 7: __logger.debug,
- }
-
- def __init__(self, settings):
- """
- :param settings: TvmApiClientSettings or TvmToolClientSettings - settings for client
-
- :raises `NonRetriableException`: Raised in case of settings validation fails.
- :raises `RetriableException`: Raised if network unavailable.
- """
- pass
-
- def __cinit__(self, settings):
- if isinstance(settings, TvmToolClientSettings):
- self.baseptr = CreateTvmToolClient(dereference((<TvmToolClientSettings>settings).baseptr),\
- new IPyLogger(<cpy_ref.PyObject*>self))
- elif isinstance(settings, TvmApiClientSettings):
- if (<TvmApiClientSettings>settings).__host.empty():
- self.baseptr = CreateTvmApiClient(dereference((<TvmApiClientSettings>settings).baseptr),\
- new IPyLogger(<cpy_ref.PyObject*>self))
- else:
- self.baseptr = new TPidCheckedClient(new TCustomUpdater( \
- dereference((<TvmApiClientSettings>settings).baseptr), \
- new IPyLogger(<cpy_ref.PyObject*>self)))
- else:
- raise BrokenTvmClientSettings("'settings' must be instance of TvmApiClientSettings or TvmToolClientSettings")
-
- def stop(self):
- """
- First call will delete object. Next calls will be no-op.
- """
- # stop() (and delete inside of it) probably will be called from main thread.
- # There is TThread::Join() inside which waites worker thread.
- # Worker thread can reach state when it is waiting for main thread: it needs to acquire lock in logging,
- # but it can be released only by main thread.
- # We can't delete TvmClient with one step because of deadlock (PASSP-21494).
- # It is C++ function which is not interruptible:
- # so we are interrupting C++ function by handes to allow main Python thread to release lock
- StartTvmClientStopping(self.baseptr)
- while not IsTvmClientStopped(self.baseptr):
- time.sleep(0.1)
- DestroyTvmClient(self.baseptr)
- self.baseptr = NULL
-
- def __dealloc__(self):
- self.stop()
-
- def __log(self, int lvl, msg):
- self.__loghandles[lvl](msg.decode("utf-8"))
-
- @property
- def status(self):
- """
- :return: Current status of client - :class:`~TvmClientStatus`
- """
- self.__check()
- return TvmClientStatus(<int>self.baseptr.GetStatus().GetCode())
-
- @staticmethod
- def status_to_string(status):
- """
- :return: Status of client as string
- """
- return TPidCheckedClient.StatusToString(<TClientStatus.ECode><int>status).decode('utf-8')
-
-# @property
-# def last_update_time_of_public_keys(self):
-# self.__check()
-# return datetime.datetime.fromtimestamp(self.baseptr.GetUpdateTimeOfPublicKeys().Seconds())
-
-# @property
-# def last_update_time_of_service_tickets(self):
-# self.__check()
-# return datetime.datetime.fromtimestamp(self.baseptr.GetUpdateTimeOfServiceTickets().Seconds())
-
- def get_service_ticket_for(self, alias=None, client_id=None):
- """
- Fetching must be enabled in TvmApiClientSettings
-
- :param alias: string - see docstring for TvmApiClientSettings.__init__
- :param client_id: int - any destination you specified in TvmApiClientSettings
-
- :raises `BrokenTvmClientSettings`: Raised in case of unconfigured using.
-
- :returns: string - ServiceTicket
- """
- self.__check()
- if alias is not None:
- return self.baseptr.GetServiceTicketFor(<TString>alias.encode('utf-8')).decode('utf-8')
- if client_id is not None:
- return GetServiceTicketForId(dereference(self.baseptr), int(client_id)).decode('utf-8')
- raise TvmException("One of args is required: 'alias' or 'client_id'")
-
- def check_service_ticket(self, ticket):
- """
- :param ticket: string - ticket body
-
- :raises `BrokenTvmClientSettings`: Raised in case of unconfigured using.
- :raises `TicketParsingException`: Raised in case of invalid ticket.
-
- :return: Valid ticket structure
- """
- self.__check()
- return ServiceContext.__check(TCanningKnife.GetS(self.baseptr.CheckServiceTicket(<TString>ticket.encode('utf-8'))))
-
- def check_user_ticket(self, ticket, overrided_bb_env=None):
- """
- :param ticket: string - ticket body
- :param overrided_bb_env: enum EBlackboxEnv
-
- :raises `BrokenTvmClientSettings`: Raised in case of unconfigured using.
- :raises `TicketParsingException`: Raised in case of invalid ticket.
-
- :return: Valid ticket structure
- """
- self.__check()
- if overrided_bb_env is None:
- return UserContext.__check(TCanningKnife.GetU(
- self.baseptr.CheckUserTicket(<TString>ticket.encode('utf-8'))))
- else:
- return UserContext.__check(TCanningKnife.GetU(
- self.baseptr.CheckUserTicketWithOveridedEnv(<TString>ticket.encode('utf-8'), <EBlackboxEnv><int>overrided_bb_env)))
-
- def __check(self):
- if NULL == self.baseptr:
- raise NonRetriableException("TvmClient is already stopped")
-
-PyEval_InitThreads()
diff --git a/library/python/deprecated/ticket_parser2/ticket_parser2/unittest.py b/library/python/deprecated/ticket_parser2/ticket_parser2/unittest.py
deleted file mode 100644
index 45affaa1e7..0000000000
--- a/library/python/deprecated/ticket_parser2/ticket_parser2/unittest.py
+++ /dev/null
@@ -1,43 +0,0 @@
-try:
- from ticket_parser2_py3.ticket_parser2_pymodule import ( # noqa
- create_service_ticket_for_unittest,
- create_user_ticket_for_unittest,
- )
-except ImportError:
- from ticket_parser2.ticket_parser2_pymodule import ( # noqa
- create_service_ticket_for_unittest,
- create_user_ticket_for_unittest,
- )
-
-
-TVMKNIFE_PUBLIC_KEYS = (
- "1:CpgCCpMCCAEQABqIAjCCAQQCggEAcLEXeH67FQESFUn4_7wnX7wN0PUrBoUsm3QQ4W5vC-qz6sXaEjSwnTV8w1o-z6X9KPL"
- "lhzMQvuS38NCNfK4uvJ4Zvfp3YsXJ25-rYtbnrYJHNvHohD-kPCCw_yZpMp21JdWigzQGuV7CtrxUhF-NNrsnUaJrE5-OpEWN"
- "t4X6nCItKIYeVcSK6XJUbEWbrNCRbvkSc4ak2ymFeMuHYJVjxh4eQbk7_ZPzodP0WvF6eUYrYeb42imVEOR8ofVLQWE5DVnb1"
- "z_TqZm4i1XkS7jMwZuBxBRw8DGdYei0lT_sAf7KST2jC0590NySB3vsBgWEVs1OdUUWA6r-Dvx9dsOQtSCVkQYQAAqZAgqUAg"
- "gCEAAaiQIwggEFAoIBAQDhEBM5-6YsPWfogKtbluJoCX1WV2KdzOaQ0-OlRbBzeCzw-eQKu12c8WakHBbeCMd1I1TU64SDkDo"
- "rWjXGIa_2xT6N3zzNAE50roTbPCcmeQrps26woTYfYIuqDdoxYKZNr0lvNLLW47vBr7EKqo1S4KSj7aXK_XYeEvUgIgf3nVIc"
- "Nrio7VTnFmGGVQCepaL1Hi1gN4yIXjVZ06PBPZ-DxSRu6xOGbFrfKMJeMPs7KOyE-26Q3xOXdTIa1X-zYIucTd_bxUCL4BVbw"
- "W2AvbbFsaG7ISmVdGu0XUTmhXs1KrEfUVLRJhE4Dx99hAZXm1_HlYMUeJcMQ_oHOhV94ENFIJaRBhACCpYBCpEBCAMQABqGAT"
- "CBgwKBgF9t2YJGAJkRRFq6fWhi3m1TFW1UOE0f6ZrfYhHAkpqGlKlh0QVfeTNPpeJhi75xXzCe6oReRUm-0DbqDNhTShC7uGU"
- "v1INYnRBQWH6E-5Fc5XrbDFSuGQw2EYjNfHy_HefHJXxQKAqPvxBDKMKkHgV58WtM6rC8jRi9sdX_ig2NIJeRBhABCpYBCpEB"
- "CAQQABqGATCBgwKBgGB4d6eLGUBv-Q6EPLehC4S-yuE2HB-_rJ7WkeYwyp-xIPolPrd-PQme2utHB4ZgpXHIu_OFksDe_0bPg"
- "ZniNRSVRbl7W49DgS5Ya3kMfrYB4DnF5Fta5tn1oV6EwxYD4JONpFTenOJALPGTPawxXEfon_peiHOSBuQMu3_Vn-l1IJiRBh"
- "ADCpcBCpIBCAUQABqHATCBhAKBgQCTJMKIfmfeZpaI7Q9rnsc29gdWawK7TnpVKRHws1iY7EUlYROeVcMdAwEqVM6f8BVCKLG"
- "gzQ7Gar_uuxfUGKwqEQzoppDraw4F75J464-7D5f6_oJQuGIBHZxqbMONtLjBCXRUhQW5szBLmTQ_R3qaJb5vf-h0APZfkYhq"
- "1cTttSCZkQYQBAqWAQqRAQgLEAAahgEwgYMCgYBvvGVH_M2H8qxxv94yaDYUTWbRnJ1uiIYc59KIQlfFimMPhSS7x2tqUa2-h"
- "I55JiII0Xym6GNkwLhyc1xtWChpVuIdSnbvttbrt4weDMLHqTwNOF6qAsVKGKT1Yh8yf-qb-DSmicgvFc74mBQm_6gAY1iQsf"
- "33YX8578ClhKBWHSCVkQYQAAqXAQqSAQgMEAAahwEwgYQCgYEAkuzFcd5TJu7lYWYe2hQLFfUWIIj91BvQQLa_Thln4YtGCO8"
- "gG1KJqJm-YlmJOWQG0B7H_5RVhxUxV9KpmFnsDVkzUFKOsCBaYGXc12xPVioawUlAwp5qp3QQtZyx_se97YIoLzuLr46UkLcL"
- "nkIrp-Jo46QzYi_QHq45WTm8MQ0glpEGEAIKlwEKkgEIDRAAGocBMIGEAoGBAIUzbxOknXf_rNt17_ir8JlWvrtnCWsQd1MAn"
- "l5mgArvavDtKeBYHzi5_Ak7DHlLzuA6YE8W175FxLFKpN2hkz-l-M7ltUSd8N1BvJRhK4t6WffWfC_1wPyoAbeSN2Yb1jygtZ"
- "JQ8wGoXHcJQUXiMit3eFNyylwsJFj1gzAR4JCdIJeRBhABCpYBCpEBCA4QABqGATCBgwKBgFMcbEpl9ukVR6AO_R6sMyiU11I"
- "8b8MBSUCEC15iKsrVO8v_m47_TRRjWPYtQ9eZ7o1ocNJHaGUU7qqInFqtFaVnIceP6NmCsXhjs3MLrWPS8IRAy4Zf4FKmGOx3"
- "N9O2vemjUygZ9vUiSkULdVrecinRaT8JQ5RG4bUMY04XGIwFIJiRBhADCpYBCpEBCA8QABqGATCBgwKBgGpCkW-NR3li8GlRv"
- "qpq2YZGSIgm_PTyDI2Zwfw69grsBmPpVFW48Vw7xoMN35zcrojEpialB_uQzlpLYOvsMl634CRIuj-n1QE3-gaZTTTE8mg-AR"
- "4mcxnTKThPnRQpbuOlYAnriwiasWiQEMbGjq_HmWioYYxFo9USlklQn4-9IJmRBhAEEpUBCpIBCAYQABqHATCBhAKBgQCoZkF"
- "Gm9oLTqjeXZAq6j5S6i7K20V0lNdBBLqfmFBIRuTkYxhs4vUYnWjZrKRAd5bp6_py0csmFmpl_5Yh0b-2pdo_E5PNP7LGRzKy"
- "KSiFddyykKKzVOazH8YYldDAfE8Z5HoS9e48an5JsPg0jr-TPu34DnJq3yv2a6dqiKL9zSCakQYSlQEKkgEIEBAAGocBMIGEA"
- "oGBALhrihbf3EpjDQS2sCQHazoFgN0nBbE9eesnnFTfzQELXb2gnJU9enmV_aDqaHKjgtLIPpCgn40lHrn5k6mvH5OdedyI6c"
- "CzE-N-GFp3nAq0NDJyMe0fhtIRD__CbT0ulcvkeow65ubXWfw6dBC2gR_34rdMe_L_TGRLMWjDULbNIJqRBg"
-)
diff --git a/library/python/prctl/prctl.pyx b/library/python/prctl/prctl.pyx
deleted file mode 100644
index 707a79c22f..0000000000
--- a/library/python/prctl/prctl.pyx
+++ /dev/null
@@ -1,14 +0,0 @@
-cdef extern from "<sys/prctl.h>":
- int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);
-
-
-PR_SET_PDEATHSIG = 1
-PR_SET_CHILD_SUBREAPER = 36
-
-
-def set_pdeathsig(signum):
- return prctl(PR_SET_PDEATHSIG, signum, 0, 0, 0)
-
-
-def set_child_subreaper(val):
- return prctl(PR_SET_CHILD_SUBREAPER, val, 0, 0, 0)
diff --git a/library/python/tvmauth/README.md b/library/python/tvmauth/README.md
deleted file mode 100644
index f62b80888c..0000000000
--- a/library/python/tvmauth/README.md
+++ /dev/null
@@ -1,101 +0,0 @@
-Overview
-===
-This library is binding for C++ library with Cython.
-It provides ability to operate with TVM. Library is fast enough to get or check tickets for every request without burning CPU.
-___
-[Home page of project](https://wiki.yandex-team.ru/passport/tvm2/)
-
-You can find:
-* common part of lib [here](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/tvmauth/__init__.py).
-* examples in [examples dir](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/examples).
-* mocks for tests [here](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/tvmauth/mock.py) - check docstrings to figure out way to use them.
-* some utils [here](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/tvmauth/utils.py).
-* some utils for unittests [here](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/tvmauth/unittest.py).
-
-You can ask questions: [PASSPORTDUTY](https://st.yandex-team.ru/createTicket?queue=PASSPORTDUTY&_form=77618)
-
-__
-WARNING!
-Do not import anything from `tvmauth.tvmauth_pymodule`. This is internal part of library - so it is not the public API of library.
-It could be changed without changing of major version.
-
-
-TvmClient
-===
-Don't forget to collect logs from client.
-
-If you don't need an instance of client anymore but your process would keep running, please `stop()` this instance.
-___
-`TvmClient` allowes:
-1. `get_service_ticket_for()` - to fetch ServiceTicket for outgoing request
-2. `check_service_ticket()` - to check ServiceTicket from incoming request
-3. `check_user_ticket()` - to check UserTicket from incoming request
-4. `get_roles()` - to get roles from IDM
-
-All methods are thread-safe.
-
-Status of `CheckedServiceTicket` or `CheckedUserTicket` can be only 'Ok': otherwise exception will be thrown.
-___
-You should check status of client with property `status`:
-* `OK` - nothing to do here
-* `Warn` - **you should trigger your monitoring alert**
-
- Normal operation of TvmClient is still possible but there are problems with refreshing cache, so it is expiring.
- Is tvm-api.yandex.net accessible?
- Have you changed your TVM-secret or your backend (dst) deleted its TVM-client?
-
-* `Error` - **you should trigger your monitoring alert and close this instance for user-traffic**
-
- TvmClient's cache is already invalid (expired) or soon will be: you can't check valid ServiceTicket or be authenticated by your backends (dsts)
-
-___
-Constructor creates system thread for refreshing cache - so do not fork your proccess after creating `TvmClient` instance. Constructor leads to network I/O. Other methods always use memory.
-
-Exceptions maybe thrown from constructor:
-* `RetriableException` - maybe some network trouble: you can try to create client one more time.
-* `NonRetriableException` - settings are bad: fix them.
-
-Other methods can throw exception only if you try to use unconfigured abilities (for example, you try to get fetched ServiceTicket for some dst but you didn't configured it in settings).
-___
-You can choose way for fetching data for your service operation:
-* http://localhost:{port}/tvm - recomended way
-* https://tvm-api.yandex.net
-
-TvmTool
-------------
-`TvmClient` uses local http-interface (tvmtool) to get state. This interface can be provided with tvmtool (local daemon) or Qloud/YP (local http api in container).
-See more: https://wiki.yandex-team.ru/passport/tvm2/tvm-daemon/.
-
-`TvmClient` fetches configuration from tvmtool, so you need only to tell client how to connect to it and tell which alias of tvm id should be used for this `TvmClient` instance.
-
-TvmApi
-------------
-`TvmClient` uses https://tvm-api.yandex.net to get state.
-First of all: please use `disk_cache_dir` - it provides reliability for your service and for tvm-api.
-Please check restrictions of this method.
-
-Roles
-===
-[Example](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/examples/create_with_tvmapi/__init__.py?rev=r9238823#L108)
-
-You need to configure roles fetching
-------------
-1. Enable disk cache: [disk_cache_dir](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/tvmauth/__init__.py?rev=r9238823#L316)
-
-2. Enable ServiceTicket fetching:
- [self_tvm_id](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/tvmauth/__init__.py?rev=r9238823#L311) + [self_secret](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/tvmauth/__init__.py?rev=r9238823#L314)
-3. Enable roles fetching from tirole:
- [fetch_roles_for_idm_system_slug](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/tvmauth/__init__.py?rev=r9238823#L321)
-
-You need to use roles for request check
-------------
-1. Check ServiceTicket and/or UserTicket - as usual:
- [check_service_ticket()](https://a.yandex-team.ru/arc/trunk/arcadia/library/cpp/tvmauth/client/facade.h?rev=r7890770#L91)/[check_user_ticket()](https://a.yandex-team.ru/arc/trunk/arcadia/library/cpp/tvmauth/client/facade.h?rev=r7890770#L99)
-
-2. Get actual roles from `TvmClient`: [get_roles()](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/tvmauth/__init__.py?rev=r9238823#L178)
-
-3. Use roles:
- [check_service_role()](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/tvmauth/__init__.py?rev=r9238823#L561)/[check_user_role()](https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/tvmauth/__init__.py?rev=r9238823#L572)
-
-4. If consumer (service or user) has required role, you can perform request.
- If consumer doesn't have required role, you should show error message with useful message.
diff --git a/library/python/tvmauth/examples/create_with_tvmapi/__init__.py b/library/python/tvmauth/examples/create_with_tvmapi/__init__.py
deleted file mode 100644
index 768d326aef..0000000000
--- a/library/python/tvmauth/examples/create_with_tvmapi/__init__.py
+++ /dev/null
@@ -1,115 +0,0 @@
-import tvmauth
-
-
-def get_client_for_checking_all_tickets_and_fetching_service_tickets():
- c = tvmauth.TvmClient(
- tvmauth.TvmApiClientSettings(
- self_tvm_id=11,
- enable_service_ticket_checking=True,
- enable_user_ticket_checking=tvmauth.BlackboxEnv.Test,
- self_secret="AAAAAAAAAAAAAAAAAAAAAA",
- dsts={"bb": 224, "datasync": 2000060},
- disk_cache_dir='/var/lib/foo/tvm_cache/',
- )
- )
-
- # c.check_service_ticket("some service ticket")
- # c.check_user_ticket("some user ticket")
- # c.get_service_ticket_for("bb")
- # c.get_service_ticket_for(tvm_id=224)
-
- return c
-
-
-def get_client_for_checking_all_tickets():
- c = tvmauth.TvmClient(
- tvmauth.TvmApiClientSettings(
- self_tvm_id=11,
- enable_service_ticket_checking=True,
- enable_user_ticket_checking=tvmauth.BlackboxEnv.Test,
- disk_cache_dir='/var/lib/foo/tvm_cache/',
- )
- )
-
- # c.check_service_ticket("some service ticket")
- # c.check_user_ticket("some user ticket")
-
- return c
-
-
-def get_client_for_fetching_service_tickets():
- c = tvmauth.TvmClient(
- tvmauth.TvmApiClientSettings(
- self_tvm_id=11,
- self_secret="AAAAAAAAAAAAAAAAAAAAAA",
- dsts={"bb": 224, "datasync": 2000060},
- disk_cache_dir='/var/lib/foo/tvm_cache/',
- )
- )
-
- # c.get_service_ticket_for("bb")
- # c.get_service_ticket_for(tvm_id=224)
-
- return c
-
-
-def get_client_for_checking_service_tickets():
- c = tvmauth.TvmClient(
- tvmauth.TvmApiClientSettings(
- self_tvm_id=11,
- enable_service_ticket_checking=True,
- disk_cache_dir='/var/lib/foo/tvm_cache/',
- )
- )
-
- # c.check_service_ticket("some service ticket")
-
- return c
-
-
-def get_client_for_checking_user_tickets():
- c = tvmauth.TvmClient(
- tvmauth.TvmApiClientSettings(
- enable_user_ticket_checking=tvmauth.BlackboxEnv.Test,
- disk_cache_dir='/var/lib/foo/tvm_cache/',
- )
- )
-
- # c.check_user_ticket("some user ticket")
-
- return c
-
-
-def get_client_for_checking_all_tickets_with_roles():
- c = tvmauth.TvmClient(
- tvmauth.TvmApiClientSettings(
- self_tvm_id=11,
- enable_service_ticket_checking=True,
- enable_user_ticket_checking=tvmauth.BlackboxEnv.ProdYateam,
- self_secret="AAAAAAAAAAAAAAAAAAAAAA",
- disk_cache_dir='/var/lib/foo/tvm_cache/',
- fetch_roles_for_idm_system_slug='passporttestservice',
- )
- )
-
- # t = c.check_user_ticket("some user ticket")
- # c.get_roles().check_user_role(t, "some role")
-
- return c
-
-
-def get_client_for_checking_service_tickets_with_roles():
- c = tvmauth.TvmClient(
- tvmauth.TvmApiClientSettings(
- self_tvm_id=11,
- enable_service_ticket_checking=True,
- self_secret="AAAAAAAAAAAAAAAAAAAAAA",
- disk_cache_dir='/var/lib/foo/tvm_cache/',
- fetch_roles_for_idm_system_slug='passporttestservice',
- )
- )
-
- # t = c.check_service_ticket("some service ticket")
- # c.get_roles().check_service_role(t, "some role")
-
- return c
diff --git a/library/python/tvmauth/examples/create_with_tvmtool/__init__.py b/library/python/tvmauth/examples/create_with_tvmtool/__init__.py
deleted file mode 100644
index 618c6621c3..0000000000
--- a/library/python/tvmauth/examples/create_with_tvmtool/__init__.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import tvmauth
-
-
-# Possibility of using functions depends on config of tvmtool
-# check_service_ticket
-# check_user_ticket
-# get_service_ticket_for
-
-
-def get_client_for_dev():
- c = tvmauth.TvmClient(
- tvmauth.TvmToolClientSettings(
- self_alias="me",
- auth_token="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- port=18080,
- )
- )
-
- return c
-
-
-def get_client_in_qloud_or_yandexdeploy():
- c = tvmauth.TvmClient(
- tvmauth.TvmToolClientSettings(
- self_alias="me",
- )
- )
-
- return c
diff --git a/library/python/tvmauth/examples/service_using_tvm_client/__init__.py b/library/python/tvmauth/examples/service_using_tvm_client/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
--- a/library/python/tvmauth/examples/service_using_tvm_client/__init__.py
+++ /dev/null
diff --git a/library/python/tvmauth/examples/service_using_tvm_client/serv.py b/library/python/tvmauth/examples/service_using_tvm_client/serv.py
deleted file mode 100644
index 4295e55799..0000000000
--- a/library/python/tvmauth/examples/service_using_tvm_client/serv.py
+++ /dev/null
@@ -1,40 +0,0 @@
-import requests
-import tvmauth
-import tvmauth.exceptions
-
-
-class SomeService:
- def __init__(self, **kwargs):
- self._client = tvmauth.TvmClient(
- tvmauth.TvmApiClientSettings(
- self_tvm_id=11,
- enable_service_ticket_checking=True,
- enable_user_ticket_checking=tvmauth.BlackboxEnv.Test,
- self_secret="AAAAAAAAAAAAAAAAAAAAAA",
- dsts={"bb": 224, "datasync": 2000060},
- )
- )
-
- self._allowed_consumers = kwargs['acl'] # array
-
- def stop(self):
- self._client.stop()
-
- # Processing of request is here
- def handle_request(self, **kwargs):
- try:
- st = self._client.check_service_ticket(kwargs['X-Ya-Service-Ticket'])
- ut = self._client.check_user_ticket(kwargs['X-Ya-User-Ticket'])
-
- if st.src not in self._allowed_consumers:
- raise Exception("Access denied (service)")
-
- if 'allow_to_get_secret_data' not in ut.scopes:
- raise Exception("Access denied (user)")
-
- return requests.get(
- 'my_backend_request',
- headers={'X-Ya-Service-Ticket': self._client.get_service_ticket_for("datasync")},
- ).content
- except tvmauth.exceptions.TvmException:
- raise Exception("Error")
diff --git a/library/python/tvmauth/so/tvmauth_pymodule.exports b/library/python/tvmauth/so/tvmauth_pymodule.exports
deleted file mode 100644
index d66ea35932..0000000000
--- a/library/python/tvmauth/so/tvmauth_pymodule.exports
+++ /dev/null
@@ -1 +0,0 @@
-C inittvmauth_pymodule
diff --git a/library/python/tvmauth/src/exception.h b/library/python/tvmauth/src/exception.h
deleted file mode 100644
index c47ac3a483..0000000000
--- a/library/python/tvmauth/src/exception.h
+++ /dev/null
@@ -1,79 +0,0 @@
-#pragma once
-
-#include <library/cpp/tvmauth/exception.h>
-#include <library/cpp/tvmauth/client/exception.h>
-
-#include <exception>
-#include <ios>
-#include <new>
-#include <stdexcept>
-#include <typeinfo>
-
-#include <Python.h>
-
-extern "C" DL_EXPORT(PyObject*) TA_pyEmptyTvmKeysException;
-extern "C" DL_EXPORT(PyObject*) TA_pyMalformedTvmKeysException;
-extern "C" DL_EXPORT(PyObject*) TA_pyMalformedTvmSecretException;
-extern "C" DL_EXPORT(PyObject*) TA_pyNotAllowedException;
-extern "C" DL_EXPORT(PyObject*) TA_pyClientException;
-extern "C" DL_EXPORT(PyObject*) TA_pyBrokenTvmClientSettings;
-extern "C" DL_EXPORT(PyObject*) TA_pyRetriableException;
-extern "C" DL_EXPORT(PyObject*) TA_pyNonRetriableException;
-extern "C" DL_EXPORT(PyObject*) TA_pyPermissionDenied;
-extern "C" DL_EXPORT(PyObject*) TA_pyMissingServiceTicket;
-
-static void TA_raise_py_error() {
- // Catch a handful of different errors here and turn them into the
- // equivalent Python errors.
- try {
- if (PyErr_Occurred())
- ; // let the latest Python exn pass through and ignore the current one
- else
- throw;
- } catch (const NTvmAuth::TEmptyTvmKeysException& ex) {
- PyErr_SetString(TA_pyEmptyTvmKeysException, ex.what());
- } catch (const NTvmAuth::TMalformedTvmKeysException& ex) {
- PyErr_SetString(TA_pyMalformedTvmKeysException, ex.what());
- } catch (const NTvmAuth::TMalformedTvmSecretException& ex) {
- PyErr_SetString(TA_pyMalformedTvmSecretException, ex.what());
- } catch (const NTvmAuth::TNotAllowedException& ex) {
- PyErr_SetString(TA_pyNotAllowedException, ex.what());
- } catch (const NTvmAuth::TBrokenTvmClientSettings& ex) {
- PyErr_SetString(TA_pyBrokenTvmClientSettings, ex.what());
- } catch (const NTvmAuth::TPermissionDenied& ex) {
- PyErr_SetString(TA_pyPermissionDenied, ex.what());
- } catch (const NTvmAuth::TMissingServiceTicket& ex) {
- PyErr_SetString(TA_pyMissingServiceTicket, ex.what());
- } catch (const NTvmAuth::TNonRetriableException& ex) {
- PyErr_SetString(TA_pyNonRetriableException, ex.what());
- } catch (const NTvmAuth::TRetriableException& ex) {
- PyErr_SetString(TA_pyRetriableException, ex.what());
- } catch (const NTvmAuth::TClientException& ex) {
- PyErr_SetString(TA_pyClientException, ex.what());
- } catch (const std::bad_alloc& ex) {
- PyErr_SetString(PyExc_MemoryError, ex.what());
- } catch (const std::bad_cast& ex) {
- PyErr_SetString(PyExc_TypeError, ex.what());
- } catch (const std::domain_error& ex) {
- PyErr_SetString(PyExc_ValueError, ex.what());
- } catch (const std::invalid_argument& ex) {
- PyErr_SetString(PyExc_ValueError, ex.what());
- } catch (const std::ios_base::failure& ex) {
- // Unfortunately, in standard C++ we have no way of distinguishing EOF
- // from other errors here; be careful with the exception mask
- PyErr_SetString(PyExc_IOError, ex.what());
- } catch (const std::out_of_range& ex) {
- // Change out_of_range to IndexError
- PyErr_SetString(PyExc_IndexError, ex.what());
- } catch (const std::overflow_error& ex) {
- PyErr_SetString(PyExc_OverflowError, ex.what());
- } catch (const std::range_error& ex) {
- PyErr_SetString(PyExc_ArithmeticError, ex.what());
- } catch (const std::underflow_error& ex) {
- PyErr_SetString(PyExc_ArithmeticError, ex.what());
- } catch (const std::exception& ex) {
- PyErr_SetString(PyExc_RuntimeError, ex.what());
- } catch (...) {
- PyErr_SetString(PyExc_RuntimeError, "Unknown exception");
- }
-}
diff --git a/library/python/tvmauth/src/logger.h b/library/python/tvmauth/src/logger.h
deleted file mode 100644
index 116025d087..0000000000
--- a/library/python/tvmauth/src/logger.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#pragma once
-
-#include <library/cpp/tvmauth/client/logger.h>
-
-#include <util/generic/vector.h>
-#include <util/thread/lfqueue.h>
-
-namespace NTvmAuthPy {
- class TPyLogger: public NTvmAuth::ILogger {
- public:
- using TMessage = std::pair<int, TString>;
- using TPyLoggerPtr = TIntrusivePtr<TPyLogger>;
-
- static TPyLoggerPtr Create() {
- return MakeIntrusive<TPyLogger>();
- }
-
- void Log(int lvl, const TString& msg) override {
- queue_.Enqueue(TMessage{lvl, msg});
- }
-
- static TVector<TMessage> FetchMessages(TPyLoggerPtr ptr) {
- TVector<TMessage> res;
- ptr->queue_.DequeueAll(&res);
- return res;
- }
-
- private:
- TLockFreeQueue<TMessage> queue_;
- };
-}
diff --git a/library/python/tvmauth/src/ut/test_client.py b/library/python/tvmauth/src/ut/test_client.py
deleted file mode 100644
index 3e59d9defe..0000000000
--- a/library/python/tvmauth/src/ut/test_client.py
+++ /dev/null
@@ -1,897 +0,0 @@
-#!/usr/bin/env python
-from __future__ import print_function
-
-import datetime
-import logging
-from multiprocessing import Process
-import os
-import shutil
-import socket
-import sys
-import time
-
-import mock
-import pytest
-from six import StringIO
-from six.moves import (
- BaseHTTPServer,
- socketserver as SocketServer,
-)
-import tvmauth
-import tvmauth.deprecated
-from tvmauth.exceptions import (
- BrokenTvmClientSettings,
- NonRetriableException,
- PermissionDenied,
- RetriableException,
- TicketParsingException,
- TvmException,
-)
-from tvmauth.mock import (
- MockedTvmClient,
- TvmClientPatcher,
-)
-import tvmauth.unittest as tp2u
-import yatest.common as yc
-from yatest.common import network
-
-
-SRV_TICKET = (
- "3:serv:CBAQ__________9_IgYIexCUkQY:GioCM49Ob6_f80y6FY0XBVN4hLXuMlFeyMvIMiDuQnZkbkLpRp"
- "QOuQo5YjWoBjM0Vf-XqOm8B7xtrvxSYHDD7Q4OatN2l-Iwg7i71lE3scUeD36x47st3nd0OThvtjrFx_D8mw_"
- "c0GT5KcniZlqq1SjhLyAk1b_zJsx8viRAhCU"
-)
-PROD_TICKET = (
- "3:user:CAsQ__________9_Gg4KAgh7EHsg0oXYzAQoAA:N8PvrDNLh-5JywinxJntLeQGDEHBUxfzjuvB8-_B"
- "EUv1x9CALU7do8irDlDYVeVVDr4AIpR087YPZVzWPAqmnBuRJS0tJXekmDDvrivLnbRrzY4IUXZ_fImB0fJhTy"
- "VetKv6RD11bGqnAJeDpIukBwPTbJc_EMvKDt8V490CJFw"
-)
-TEST_TICKET = (
- "3:user:CA0Q__________9_Gg4KAgh7EHsg0oXYzAQoAQ:FSADps3wNGm92Vyb1E9IVq5M6ZygdGdt1vafWWEh"
- "fDDeCLoVA-sJesxMl2pGW4OxJ8J1r_MfpG3ZoBk8rLVMHUFrPa6HheTbeXFAWl8quEniauXvKQe4VyrpA1SPgt"
- "RoFqi5upSDIJzEAe1YRJjq1EClQ_slMt8R0kA_JjKUX54"
-)
-PROD_YATEAM_TICKET = (
- "3:user:CAwQ__________9_Gg4KAgh7EHsg0oXYzAQoAg:JBYQYr71TnozlBiJhGVyCKdAhlDtrEda1ofe4mCz"
- "0OkxWi4J1EtB3CeYUkxSO4iTSAqJVq8bFdneyS7YCVOt4u69E-SClzRgZ6v7A36l4Z25XNovqC-0o1h-IwFTgy"
- "CZfoPJVfkEOmAYXV4YINBca6L2lZ7ux6q0s5Q5_kUnkAk"
-)
-TEST_YATEAM_TICKET = (
- "3:user:CA4Q__________9_GhIKBAjAxAcQwMQHINKF2MwEKAM:CpRDQBbh5icA3NCuKuSZUIO0gNyWXej1XfI"
- "nEiSvhs6wcrDHCeQbxzYOfeq2wM801DkaebSmnDBgoWjC7C9hMj4xpmOF_QhRfhFibXbm0O-7lbczO8zLL080m"
- "s59rpaEU3SOKLJ-HaaXrjPCIGSTAIJRvWnck-QXJXPpqmPETr8"
-)
-
-TVM_RESP = '{"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}}'.encode('utf-8')
-
-log_stream = StringIO()
-logger = logging.getLogger('TVM')
-handler = logging.StreamHandler(stream=log_stream)
-handler.setLevel(logging.DEBUG)
-logger.addHandler(handler)
-
-
-def get_log_stream_value():
- return log_stream.getvalue().lstrip('\x00')
-
-
-def test_settings():
- with pytest.raises(BrokenTvmClientSettings):
- tvmauth.TvmApiClientSettings(self_tvm_id=0)
-
- with pytest.raises(BrokenTvmClientSettings):
- tvmauth.TvmApiClientSettings(enable_service_ticket_checking=True)
- tvmauth.TvmApiClientSettings(enable_service_ticket_checking=True, self_tvm_id=123)
-
- tvmauth.TvmApiClientSettings(enable_user_ticket_checking=tvmauth.BlackboxEnv.Test)
-
- with pytest.raises(BrokenTvmClientSettings):
- tvmauth.TvmApiClientSettings()
- with pytest.raises(BrokenTvmClientSettings):
- tvmauth.TvmApiClientSettings(self_secret='asd', dsts={'qwe': 1})
- with pytest.raises(BrokenTvmClientSettings):
- tvmauth.TvmApiClientSettings(self_secret='', dsts={'qwe': 1})
- with pytest.raises(BrokenTvmClientSettings):
- tvmauth.TvmApiClientSettings(self_secret='asd', dsts={})
- with pytest.raises(TvmException):
- tvmauth.TvmApiClientSettings(self_secret='asd', dsts='kek', self_tvm_id=123)
- tvmauth.TvmApiClientSettings(self_secret='asd', dsts={'qwe': 1}, self_tvm_id=123)
-
- tvmauth.TvmApiClientSettings(enable_user_ticket_checking=tvmauth.BlackboxEnv.Test)
- with pytest.raises(PermissionDenied):
- tvmauth.TvmApiClientSettings(
- enable_user_ticket_checking=tvmauth.BlackboxEnv.Test,
- disk_cache_dir='/',
- )
- tvmauth.TvmApiClientSettings(
- enable_user_ticket_checking=tvmauth.BlackboxEnv.Test,
- disk_cache_dir='./',
- )
-
- with pytest.raises(BrokenTvmClientSettings):
- tvmauth.TvmClient('kek')
-
-
-def test_full_client():
- path = yc.source_path() + '/library/cpp/tvmauth/client/ut/files/'
- shutil.copyfile(path + 'public_keys', './public_keys')
- shutil.copyfile(path + 'service_tickets', './service_tickets')
-
- c = None
- log_stream.truncate(0)
- try:
- s = tvmauth.TvmApiClientSettings(
- self_tvm_id=100500,
- enable_service_ticket_checking=True,
- enable_user_ticket_checking=tvmauth.BlackboxEnv.Test,
- self_secret='qwerty',
- dsts={'dest': 19},
- disk_cache_dir='./',
- )
- c = tvmauth.TvmClient(s)
- time.sleep(1)
-
- exp = "File './service_tickets' was successfully read\n"
- exp += "Got 1 service ticket(s) from disk\n"
- exp += "Cache was updated with 1 service ticket(s): 2050-01-01T00:00:00.000000Z\n"
- exp += "File './public_keys' was successfully read\n"
- exp += "Cache was updated with public keys: 2050-01-01T00:00:00.000000Z\n"
- exp += "File './retry_settings' does not exist\n"
- exp += "Thread-worker started\n"
- assert exp == get_log_stream_value()
-
- st = c.status
- assert st == tvmauth.TvmClientStatus.Ok
-
- assert '3:serv:CBAQ__________9_IgYIKhCUkQY:CX' == c.get_service_ticket_for('dest')
- assert '3:serv:CBAQ__________9_IgYIKhCUkQY:CX' == c.get_service_ticket_for(alias='dest')
- assert '3:serv:CBAQ__________9_IgYIKhCUkQY:CX' == c.get_service_ticket_for(tvm_id=19)
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for('dest2')
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for(tvm_id=20)
- with pytest.raises(TvmException):
- c.get_service_ticket_for()
-
- assert c.check_service_ticket(SRV_TICKET)
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(PROD_TICKET)
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(TEST_TICKET)
-
- assert c.check_user_ticket(TEST_TICKET)
- with pytest.raises(TicketParsingException):
- c.check_user_ticket(PROD_TICKET)
- with pytest.raises(TicketParsingException):
- c.check_user_ticket(SRV_TICKET)
-
- with pytest.raises(TicketParsingException):
- assert c.check_user_ticket(TEST_TICKET, overrided_bb_env=tvmauth.BlackboxEnv.Prod)
- c.check_user_ticket(PROD_TICKET, overrided_bb_env=tvmauth.BlackboxEnv.Prod)
-
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- print('==test_full_client: 1')
- if c is not None:
- c.stop()
- print('==test_full_client: 2')
-
-
-def test_client_with_roles():
- os.environ['TZ'] = 'Europe/Moscow'
- time.tzset()
-
- path = yc.source_path() + '/library/cpp/tvmauth/client/ut/files/'
- shutil.copyfile(path + 'service_tickets', './service_tickets')
- shutil.copyfile(path + 'roles', './roles')
-
- c = None
- log_stream.truncate(0)
- try:
- s = tvmauth.TvmApiClientSettings(
- self_tvm_id=100500,
- self_secret='qwerty',
- dsts={'dest': 19},
- disk_cache_dir='./',
- tirole_host='localhost',
- tirole_port=1,
- tirole_tvmid=19,
- fetch_roles_for_idm_system_slug='femida',
- )
- c = tvmauth.TvmClient(s)
- time.sleep(1)
-
- exp = "File './service_tickets' was successfully read\n"
- exp += "Got 1 service ticket(s) from disk\n"
- exp += "Cache was updated with 1 service ticket(s): 2050-01-01T00:00:00.000000Z\n"
- exp += "File './retry_settings' does not exist\n"
- exp += "File './roles' was successfully read\n"
- exp += "Succeed to read roles with revision 100501 from ./roles\n"
- exp += "Thread-worker started\n"
- assert exp == get_log_stream_value()
-
- st = c.status
- assert st == tvmauth.TvmClientStatus.Ok
-
- roles = c.get_roles()
- applied = roles.meta['applied']
- assert roles.meta == {
- 'applied': applied,
- 'born_time': datetime.datetime(1970, 1, 1, 3, 0, 42),
- 'revision': '100501',
- }
-
- assert roles.get_service_roles(tp2u.create_service_ticket_for_unittest(tvmauth.TicketStatus.Ok, 100501)) == {
- "role#1": [{"attr#1": "val#1"}],
- "role#2": [{"attr#1": "val#2"}],
- }
-
- assert roles.get_service_roles(tp2u.create_service_ticket_for_unittest(tvmauth.TicketStatus.Ok, 100502)) == {}
-
- assert roles.get_user_roles(
- tp2u.create_user_ticket_for_unittest(tvmauth.TicketStatus.Ok, 10005001, env=tvmauth.BlackboxEnv.ProdYateam),
- ) == {
- "role#3": [{"attr#3": "val#3"}],
- "role#4": [{"attr#3": "val#4"}],
- "role#5": [{"attr#3": "val#4", "attr#5": "val#5"}],
- }
-
- assert (
- roles.get_user_roles(
- tp2u.create_user_ticket_for_unittest(
- tvmauth.TicketStatus.Ok, 10005002, env=tvmauth.BlackboxEnv.ProdYateam
- ),
- )
- == {}
- )
-
- with pytest.raises(AttributeError):
- roles.check_service_role(
- tp2u.create_service_ticket_for_unittest(tvmauth.TicketStatus.Ok, 100501),
- 'role#1',
- {"attr#1": 42},
- )
-
- assert roles.check_service_role(
- tp2u.create_service_ticket_for_unittest(tvmauth.TicketStatus.Ok, 100501),
- 'role#1',
- )
- assert not roles.check_service_role(
- tp2u.create_service_ticket_for_unittest(tvmauth.TicketStatus.Ok, 100502),
- 'role#1',
- )
- assert not roles.check_service_role(
- tp2u.create_service_ticket_for_unittest(tvmauth.TicketStatus.Ok, 100501),
- 'role#42',
- )
-
- assert roles.check_service_role(
- tp2u.create_service_ticket_for_unittest(tvmauth.TicketStatus.Ok, 100501),
- 'role#1',
- {"attr#1": "val#1"},
- )
- assert roles.check_service_role(
- tp2u.create_service_ticket_for_unittest(tvmauth.TicketStatus.Ok, 100501),
- 'role#2',
- {"attr#1": "val#2"},
- )
- assert not roles.check_service_role(
- tp2u.create_service_ticket_for_unittest(tvmauth.TicketStatus.Ok, 100501),
- 'role#1',
- {"attr#1": "val#2"},
- )
- assert not roles.check_service_role(
- tp2u.create_service_ticket_for_unittest(tvmauth.TicketStatus.Ok, 100501),
- 'role#2',
- {"attr#1": "val#1"},
- )
-
- assert roles.check_user_role(
- tp2u.create_user_ticket_for_unittest(tvmauth.TicketStatus.Ok, 10005001, env=tvmauth.BlackboxEnv.ProdYateam),
- 'role#3',
- )
- assert roles.check_user_role(
- tp2u.create_user_ticket_for_unittest(
- tvmauth.TicketStatus.Ok,
- 10005000,
- uids=[10005000, 10005001, 10005002],
- env=tvmauth.BlackboxEnv.ProdYateam,
- ),
- 'role#3',
- 10005001,
- )
- assert not roles.check_user_role(
- tp2u.create_user_ticket_for_unittest(tvmauth.TicketStatus.Ok, 10005002, env=tvmauth.BlackboxEnv.ProdYateam),
- 'role#1',
- )
- assert not roles.check_user_role(
- tp2u.create_user_ticket_for_unittest(tvmauth.TicketStatus.Ok, 10005001, env=tvmauth.BlackboxEnv.ProdYateam),
- 'role#42',
- )
- assert not roles.check_user_role(
- tp2u.create_user_ticket_for_unittest(
- tvmauth.TicketStatus.Ok,
- 10005000,
- uids=[10005000, 10005001, 10005002],
- env=tvmauth.BlackboxEnv.ProdYateam,
- ),
- 'role#3',
- 10005002,
- )
-
- assert roles.check_user_role(
- tp2u.create_user_ticket_for_unittest(tvmauth.TicketStatus.Ok, 10005001, env=tvmauth.BlackboxEnv.ProdYateam),
- 'role#3',
- exact_entity={"attr#3": "val#3"},
- )
- assert not roles.check_user_role(
- tp2u.create_user_ticket_for_unittest(tvmauth.TicketStatus.Ok, 10005001, env=tvmauth.BlackboxEnv.ProdYateam),
- 'role#3',
- exact_entity={"attr#3": "val#4"},
- )
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- if c is not None:
- c.stop()
-
-
-def test_getting_client_without_aliases():
- path = yc.source_path() + '/library/cpp/tvmauth/client/ut/files/'
- shutil.copyfile(path + 'public_keys', './public_keys')
- shutil.copyfile(path + 'service_tickets', './service_tickets')
-
- c = None
- log_stream.truncate(0)
- try:
- s = tvmauth.TvmApiClientSettings(
- self_tvm_id=100500,
- enable_service_ticket_checking=True,
- enable_user_ticket_checking=tvmauth.BlackboxEnv.Test,
- self_secret='qwerty',
- dsts=[19],
- disk_cache_dir='./',
- )
-
- c = tvmauth.TvmClient(s)
- time.sleep(1)
-
- exp = "File './service_tickets' was successfully read\n"
- exp += "Got 1 service ticket(s) from disk\n"
- exp += "Cache was updated with 1 service ticket(s): 2050-01-01T00:00:00.000000Z\n"
- exp += "File './public_keys' was successfully read\n"
- exp += "Cache was updated with public keys: 2050-01-01T00:00:00.000000Z\n"
- exp += "File './retry_settings' does not exist\n"
- exp += "Thread-worker started\n"
- assert exp == get_log_stream_value()
-
- st = c.status
- assert st == tvmauth.TvmClientStatus.Ok
-
- assert '3:serv:CBAQ__________9_IgYIKhCUkQY:CX' == c.get_service_ticket_for(tvm_id=19)
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for(tvm_id=20)
-
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for('dest')
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for(alias='dest')
- with pytest.raises(BrokenTvmClientSettings):
- c.get_service_ticket_for('dest2')
-
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- print('==test_getting_client_without_aliases: 1')
- if c is not None:
- c.stop()
- print('==test_getting_client_without_aliases: 2')
-
-
-def test_checking_client():
- path = yc.source_path() + '/library/cpp/tvmauth/client/ut/files/'
- shutil.copyfile(path + 'public_keys', './public_keys')
-
- c = None
- log_stream.truncate(0)
- try:
- s = tvmauth.TvmApiClientSettings(
- enable_user_ticket_checking=tvmauth.BlackboxEnv.Test,
- disk_cache_dir='./',
- )
- c = tvmauth.TvmClient(s)
- assert c.status == tvmauth.TvmClientStatus.Ok
-
- with pytest.raises(BrokenTvmClientSettings):
- c.check_service_ticket(SRV_TICKET)
- assert c.check_user_ticket(TEST_TICKET)
-
- print('==test_checking_client: 1')
- c.stop()
- print('==test_checking_client: 2')
-
- s = tvmauth.TvmApiClientSettings(
- self_tvm_id=100500,
- enable_service_ticket_checking=True,
- disk_cache_dir='./',
- )
- c = tvmauth.TvmClient(s)
- assert c.status == tvmauth.TvmClientStatus.Ok
-
- with pytest.raises(BrokenTvmClientSettings):
- c.check_user_ticket(TEST_TICKET)
- assert c.check_service_ticket(SRV_TICKET)
-
- print('==test_checking_client: 3')
- c.stop()
- print('==test_checking_client: 4')
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- print('==test_checking_client: 5')
- if c is not None:
- c.stop()
- print('==test_checking_client: 6')
-
-
-class myHTTPServer(SocketServer.ForkingMixIn, BaseHTTPServer.HTTPServer):
- address_family = socket.AF_INET6
- pass
-
-
-class myHandler(BaseHTTPServer.BaseHTTPRequestHandler):
- def log_message(self, format, *args):
- sys.stdout.write("%s - - [%s] %s\n" % (self.address_string(), self.log_date_time_string(), format % args))
-
-
-def test_user_bad_api():
- myHandler.log_message
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), myHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- log_stream.truncate(0)
- try:
- s = tvmauth.TvmApiClientSettings(
- enable_user_ticket_checking=tvmauth.BlackboxEnv.Test,
- localhost_port=port,
- )
-
- with pytest.raises(RetriableException):
- tvmauth.TvmClient(s)
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
-
-
-def test_service_bad_api():
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), myHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- log_stream.truncate(0)
- try:
- s = tvmauth.TvmApiClientSettings(
- self_tvm_id=100500,
- enable_service_ticket_checking=True,
- localhost_port=port,
- )
-
- with pytest.raises(RetriableException):
- tvmauth.TvmClient(s)
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
-
-
-def test_tickets_bad_api():
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), myHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- log_stream.truncate(0)
- try:
- s = tvmauth.TvmApiClientSettings(
- self_tvm_id=100500,
- self_secret='qwerty',
- dsts={'dest': 19},
- localhost_port=port,
- )
-
- with pytest.raises(RetriableException):
- tvmauth.TvmClient(s)
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
-
-
-class myGoodHandler(myHandler):
- def do_GET(self):
- if self.path.startswith("/2/keys"):
- self.send_response(200)
- self.send_header('Content-type', 'text/plain')
- self.send_header('Content-Length', len(tp2u.TVMKNIFE_PUBLIC_KEYS))
- self.end_headers()
- self.wfile.write(tp2u.TVMKNIFE_PUBLIC_KEYS.encode('utf-8'))
- return
-
- self.send_error(404, 'Not Found: %s' % self.path)
-
- def do_POST(self):
- if self.path.startswith("/2/ticket"):
-
- self.send_response(200)
- self.send_header('Content-type', 'application/json')
- self.send_header('Content-Length', len(TVM_RESP))
- self.end_headers()
- self.wfile.write(TVM_RESP)
- return
-
- self.send_error(404, 'Not Found: %s' % self.path)
-
-
-def test_ok_api():
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), myGoodHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- c = None
- log_stream.truncate(0)
- try:
- s = tvmauth.TvmApiClientSettings(
- self_tvm_id=100500,
- enable_service_ticket_checking=True,
- self_secret='qwerty',
- dsts={'dest': 19},
- localhost_port=port,
- )
-
- c = tvmauth.TvmClient(s)
-
- time.sleep(1)
- assert c.status == tvmauth.TvmClientStatus.Ok
-
- slept = 0.0
- while get_log_stream_value().count('Thread-worker started') != 1 and slept < 10:
- slept += 0.1
- time.sleep(0.1)
- assert get_log_stream_value().count('Thread-worker started') == 1
-
- print('==test_ok_api: 1')
- c.stop()
- print('==test_ok_api: 2')
-
- with pytest.raises(NonRetriableException):
- c.status
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
- if c is not None:
- c.stop()
-
-
-AUTH_TOKEN = 'some string'
-META = """{
-"bb_env" : "ProdYaTeam",
-"tenants" : [
- {
- "self": {
- "alias" : "me",
- "client_id": 100500
- },
- "dsts" : [
- {
- "alias" : "bbox",
- "client_id": 242
- },
- {
- "alias" : "pass_likers",
- "client_id": 11
- }
- ]
- },
- {
- "self": {
- "alias" : "push-client",
- "client_id": 100501
- },
- "dsts" : [
- {
- "alias" : "pass_likers",
- "client_id": 100502
- }
- ]
- },
- {
- "self": {
- "alias" : "something_else",
- "client_id": 100503
- },
- "dsts" : [
- ]
- }
-]
-}""".encode(
- 'utf-8'
-)
-TICKETS_ME = """{
- "pass_likers": {
- "ticket": "3:serv:CBAQ__________9_IgYIKhCUkQY:CX",
- "tvm_id": 11
- },
- "bbox": {
- "ticket": "3:serv:CBAQ__________9_IgcIlJEGEPIB:N7luw0_rVmBosTTI130jwDbQd0-cMmqJeEl0ma4ZlIo_mHXjBzpOuMQ3A9YagbmOBOt8TZ_gzGvVSegWZkEeB24gM22acw0w-RcHaQKrzSOA5Zq8WLNIC8QUa4_WGTlAsb7R7eC4KTAGgouIquNAgMBdTuGOuZHnMLvZyLnOMKc",
- "tvm_id": 242
- }
-}""".encode( # noqa
- 'utf-8'
-)
-BIRTH_TIME = 14380887840
-
-
-class tvmtoolGoodHandler(myHandler):
- def do_GET(self):
- if self.path.startswith("/tvm/ping"):
- self.send_response(200)
- self.end_headers()
- self.wfile.write("OK".encode('utf-8'))
- return
-
- if self.headers.get('Authorization', '') != AUTH_TOKEN:
- self.send_error(401, 'Unauthorized')
- return
-
- if self.path.startswith("/tvm/keys"):
- self.send_response(200)
- self.send_header('Content-type', 'text/plain')
- self.send_header('Content-Length', len(tp2u.TVMKNIFE_PUBLIC_KEYS))
- self.send_header('X-Ya-Tvmtool-Data-Birthtime', BIRTH_TIME)
- self.end_headers()
- self.wfile.write(tp2u.TVMKNIFE_PUBLIC_KEYS.encode('utf-8'))
- return
-
- if self.path.startswith("/tvm/tickets"):
- self.send_response(200)
- self.send_header('Content-type', 'application/json')
- self.send_header('Content-Length', len(TICKETS_ME))
- self.send_header('X-Ya-Tvmtool-Data-Birthtime', BIRTH_TIME)
- self.end_headers()
- self.wfile.write(TICKETS_ME)
- return
-
- if self.path.startswith("/tvm/private_api/__meta__"):
- self.send_response(200)
- self.send_header('Content-type', 'application/json')
- self.send_header('Content-Length', len(META))
- self.end_headers()
- self.wfile.write(META)
- return
-
- self.send_error(404, 'Not Found: %s' % self.path)
-
-
-def test_bad_tool():
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), tvmtoolGoodHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- log_stream.truncate(0)
- try:
- s = tvmauth.TvmToolClientSettings(
- self_alias='no one',
- auth_token=AUTH_TOKEN,
- port=port,
- )
-
- print("=====test_bad_tool 01")
- with pytest.raises(NonRetriableException):
- tvmauth.TvmClient(s)
- print("=====test_bad_tool 02")
-
- exp = "Meta info fetched from localhost:%d\n" % port
- assert get_log_stream_value() == exp
- log_stream.truncate(0)
-
- s = tvmauth.TvmToolClientSettings(
- self_alias='me',
- auth_token=AUTH_TOKEN,
- port=0,
- )
-
- with pytest.raises(NonRetriableException):
- tvmauth.TvmClient(s)
-
- s = tvmauth.TvmToolClientSettings(
- self_alias='me',
- auth_token=AUTH_TOKEN,
- hostname='::1',
- port=port,
- override_bb_env=tvmauth.BlackboxEnv.Stress,
- )
-
- assert get_log_stream_value() == ''
-
- with pytest.raises(BrokenTvmClientSettings):
- tvmauth.TvmClient(s)
-
- exp = "Meta info fetched from ::1:%d\n" % port
- exp += "Meta: self_tvm_id=100500, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:11)(bbox:242)]\n"
- assert get_log_stream_value() == exp
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
-
-
-def test_ok_tool():
- pm = network.PortManager()
- port = pm.get_tcp_port(8080)
- server = myHTTPServer(('', port), tvmtoolGoodHandler)
- thread = Process(target=server.serve_forever)
- thread.start()
-
- log_stream.truncate(0)
- c = None
- try:
- s = tvmauth.TvmToolClientSettings(
- self_alias='me',
- auth_token=AUTH_TOKEN,
- port=port,
- )
-
- c = tvmauth.TvmClient(s)
-
- assert c.check_service_ticket(SRV_TICKET)
- assert c.check_user_ticket(PROD_YATEAM_TICKET)
- with pytest.raises(TvmException):
- c.check_user_ticket(TEST_YATEAM_TICKET)
-
- assert c.status == tvmauth.TvmClientStatus.Ok
- assert c.status.code == tvmauth.TvmClientStatus.Ok
- assert c.status.last_error == 'OK'
-
- assert (
- '3:serv:CBAQ__________9_IgcIlJEGEPIB:N7luw0_rVmBosTTI130jwDbQd0-cMmqJeEl0ma4ZlIo_mHXjBzpOuMQ3A9YagbmOBOt8TZ_gzGvVSegWZkEeB24gM22acw0w-RcHaQKrzSOA5Zq8WLNIC8QUa4_WGTlAsb7R7eC4KTAGgouIquNAgMBdTuGOuZHnMLvZyLnOMKc' # noqa
- == c.get_service_ticket_for('bbox')
- )
- assert '3:serv:CBAQ__________9_IgYIKhCUkQY:CX' == c.get_service_ticket_for(tvm_id=11)
-
- c.stop()
- c.stop()
-
- exp = "Meta info fetched from localhost:%d\n" % port
- exp += "Meta: self_tvm_id=100500, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:11)(bbox:242)]\n"
- exp += "Tickets fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- exp += "Public keys fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- exp += "Thread-worker started\n"
- exp += "Thread-worker stopped\n"
- assert get_log_stream_value() == exp
-
- s = tvmauth.TvmToolClientSettings(
- self_alias='me',
- auth_token=AUTH_TOKEN,
- port=port,
- override_bb_env=tvmauth.BlackboxEnv.Prod,
- )
-
- c = tvmauth.TvmClient(s)
-
- assert c.check_service_ticket(SRV_TICKET)
- assert c.check_user_ticket(PROD_TICKET)
- with pytest.raises(TvmException):
- c.check_user_ticket(TEST_TICKET)
-
- c.stop()
- except Exception:
- print(get_log_stream_value())
- raise
- finally:
- thread.terminate()
- print('==test_ok_tool: 1')
- if c is not None:
- c.stop()
- print('==test_ok_tool: 2')
-
-
-def test_fake_mock():
- fake_tvm_client = mock.Mock()
- with TvmClientPatcher(fake_tvm_client):
- fake_tvm_client.get_service_ticket_for.return_value = 'ololo'
- assert 'ololo' == tvmauth.TvmClient().get_service_ticket_for()
- fake_tvm_client.check_service_ticket.return_value = tvmauth.deprecated.ServiceContext(
- 100500, 'qwerty', tp2u.TVMKNIFE_PUBLIC_KEYS
- ).check(SRV_TICKET)
- assert 123 == tvmauth.TvmClient().check_service_ticket('').src
-
- with TvmClientPatcher(MockedTvmClient()) as p:
- p.get_mocked_tvm_client().check_service_ticket = mock.Mock(
- side_effect=TicketParsingException("Unsupported version", tvmauth.TicketStatus.UnsupportedVersion, "2:err"),
- )
-
- c = tvmauth.TvmClient()
- assert tvmauth.TvmClientStatus.Ok == c.status
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(SRV_TICKET)
-
- m = MockedTvmClient()
- m.get_service_ticket_for = mock.Mock(
- side_effect=['SERVICE_TICKET_FOR_MY_FIRST_CALL', 'SERVICE_TICKET_FOR_MY_SECOND_CALL'],
- )
- with TvmClientPatcher(m):
- c = tvmauth.TvmClient()
- assert tvmauth.TvmClientStatus.Ok == c.status
- assert 'SERVICE_TICKET_FOR_MY_FIRST_CALL' == c.get_service_ticket_for()
- assert 'SERVICE_TICKET_FOR_MY_SECOND_CALL' == c.get_service_ticket_for()
-
-
-def test_default_mock():
- with TvmClientPatcher():
- c = tvmauth.TvmClient()
- assert tvmauth.TvmClientStatus.Ok == c.status
- assert 123 == c.check_service_ticket(SRV_TICKET).src
- assert 123 == c.check_user_ticket(TEST_TICKET).default_uid
- assert 'Some service ticket' == c.get_service_ticket_for("foo")
-
- c.stop()
- with pytest.raises(NonRetriableException):
- c.status
- with pytest.raises(NonRetriableException):
- c.check_service_ticket(SRV_TICKET)
- with pytest.raises(NonRetriableException):
- c.check_user_ticket(TEST_TICKET)
- with pytest.raises(NonRetriableException):
- c.get_service_ticket_for("foo")
-
-
-def test_mock():
- with TvmClientPatcher(MockedTvmClient(self_tvm_id=100501)):
- c = tvmauth.TvmClient()
- assert tvmauth.TvmClientStatus.Ok == c.status
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(SRV_TICKET)
- assert 123 == c.check_user_ticket(TEST_TICKET).default_uid
- assert 'Some service ticket' == c.get_service_ticket_for("foo")
-
-
-def test_client_status():
- assert tvmauth.TvmClientStatus.Ok == tvmauth.TvmClientStatusExt(tvmauth.TvmClientStatus.Ok, "kek")
- assert tvmauth.TvmClientStatus.Ok == tvmauth.TvmClientStatusExt(tvmauth.TvmClientStatus.Ok, "kek").code
- assert "kek" == tvmauth.TvmClientStatusExt(tvmauth.TvmClientStatus.Ok, "kek").last_error
- assert tvmauth.TvmClientStatus.Ok != tvmauth.TvmClientStatusExt(tvmauth.TvmClientStatus.Warn, "kek")
-
- assert tvmauth.TvmClientStatusExt(tvmauth.TvmClientStatus.Warn, "kek") != tvmauth.TvmClientStatusExt(
- tvmauth.TvmClientStatus.Ok, "kek"
- )
- assert tvmauth.TvmClientStatusExt(tvmauth.TvmClientStatus.Ok, "kek1") != tvmauth.TvmClientStatusExt(
- tvmauth.TvmClientStatus.Ok, "kek2"
- )
- assert tvmauth.TvmClientStatusExt(tvmauth.TvmClientStatus.Ok, "kek") == tvmauth.TvmClientStatusExt(
- tvmauth.TvmClientStatus.Ok, "kek"
- )
-
- with pytest.raises(TypeError):
- tvmauth.TvmClientStatusExt(tvmauth.TvmClientStatus.Ok, "kek") == 42
diff --git a/library/python/tvmauth/src/ut/test_common.py b/library/python/tvmauth/src/ut/test_common.py
deleted file mode 100644
index cad40f4532..0000000000
--- a/library/python/tvmauth/src/ut/test_common.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-from __future__ import print_function
-
-import tvmauth
-from tvmauth import BlackboxTvmId
-from tvmauth.exceptions import TicketParsingException
-
-
-def test_version():
- assert tvmauth.__version__[:-5] == 'py_'
-
-
-def test_blackbox_tvm_id():
- assert BlackboxTvmId.Prod.value == '222'
- assert BlackboxTvmId.Test.value == '224'
- assert BlackboxTvmId.ProdYateam.value == '223'
- assert BlackboxTvmId.TestYateam.value == '225'
- assert BlackboxTvmId.Stress.value == '226'
- assert BlackboxTvmId.Mimino.value == '239'
-
-
-def test_exceptions():
- e = TicketParsingException('aaa', 'bbb', 'ccc')
- assert str(e) == 'aaa: ccc'
diff --git a/library/python/tvmauth/src/ut/test_service.py b/library/python/tvmauth/src/ut/test_service.py
deleted file mode 100644
index eed7322178..0000000000
--- a/library/python/tvmauth/src/ut/test_service.py
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-from __future__ import print_function
-
-import pytest
-import six
-from tvmauth import (
- CheckedServiceTicket,
- TicketStatus,
-)
-from tvmauth.deprecated import ServiceContext
-from tvmauth.exceptions import (
- ContextException,
- EmptyTvmKeysException,
- MalformedTvmKeysException,
- MalformedTvmSecretException,
- TicketParsingException,
-)
-import tvmauth.unittest as tau
-import tvmauth.utils
-
-
-EMPTY_TVM_KEYS = (
- '1:CpgCCpMCCAEQABqIAjCCAQQCggEAcLEXeH67FQESFUn4_7wnX7wN0PUrBoUsm3QQ4W5vC-qz6sXaEjSwnTV8w1o-z6X9KPL'
- 'lhzMQvuS38NCNfK4uvJ4Zvfp3YsXJ25-rYtbnrYJHNvHohD-kPCCw_yZpMp21JdWigzQGuV7CtrxUhF-NNrsnUaJrE5-OpEWN'
- 't4X6nCItKIYeVcSK6XJUbEWbrNCRbvkSc4ak2ymFeMuHYJVjxh4eQbk7_ZPzodP0WvF6eUYrYeb42imVEOR8ofVLQWE5DVnb1'
- 'z_TqZm4i1XkS7jMwZuBxBRw8DGdYei0lT_sAf7KST2jC0590NySB3vsBgWEVs1OdUUWA6r-Dvx9dsOQtSCVkQYQAAqZAgqUAg'
- 'gCEAAaiQIwggEFAoIBAQDhEBM5-6YsPWfogKtbluJoCX1WV2KdzOaQ0-OlRbBzeCzw-eQKu12c8WakHBbeCMd1I1TU64SDkDo'
- 'rWjXGIa_2xT6N3zzNAE50roTbPCcmeQrps26woTYfYIuqDdoxYKZNr0lvNLLW47vBr7EKqo1S4KSj7aXK_XYeEvUgIgf3nVIc'
- 'Nrio7VTnFmGGVQCepaL1Hi1gN4yIXjVZ06PBPZ-DxSRu6xOGbFrfKMJeMPs7KOyE-26Q3xOXdTIa1X-zYIucTd_bxUCL4BVbw'
- 'W2AvbbFsaG7ISmVdGu0XUTmhXs1KrEfUVLRJhE4Dx99hAZXm1_HlYMUeJcMQ_oHOhV94ENFIJaRBhACCpYBCpEBCAMQABqGAT'
- 'CBgwKBgF9t2YJGAJkRRFq6fWhi3m1TFW1UOE0f6ZrfYhHAkpqGlKlh0QVfeTNPpeJhi75xXzCe6oReRUm-0DbqDNhTShC7uGU'
- 'v1INYnRBQWH6E-5Fc5XrbDFSuGQw2EYjNfHy_HefHJXxQKAqPvxBDKMKkHgV58WtM6rC8jRi9sdX_ig2NIJeRBhABCpYBCpEB'
- 'CAQQABqGATCBgwKBgGB4d6eLGUBv-Q6EPLehC4S-yuE2HB-_rJ7WkeYwyp-xIPolPrd-PQme2utHB4ZgpXHIu_OFksDe_0bPg'
- 'ZniNRSVRbl7W49DgS5Ya3kMfrYB4DnF5Fta5tn1oV6EwxYD4JONpFTenOJALPGTPawxXEfon_peiHOSBuQMu3_Vn-l1IJiRBh'
- 'ADCpcBCpIBCAUQABqHATCBhAKBgQCTJMKIfmfeZpaI7Q9rnsc29gdWawK7TnpVKRHws1iY7EUlYROeVcMdAwEqVM6f8BVCKLG'
- 'gzQ7Gar_uuxfUGKwqEQzoppDraw4F75J464-7D5f6_oJQuGIBHZxqbMONtLjBCXRUhQW5szBLmTQ_R3qaJb5vf-h0APZfkYhq'
- '1cTttSCZkQYQBAqWAQqRAQgLEAAahgEwgYMCgYBvvGVH_M2H8qxxv94yaDYUTWbRnJ1uiIYc59KIQlfFimMPhSS7x2tqUa2-h'
- 'I55JiII0Xym6GNkwLhyc1xtWChpVuIdSnbvttbrt4weDMLHqTwNOF6qAsVKGKT1Yh8yf-qb-DSmicgvFc74mBQm_6gAY1iQsf'
- '33YX8578ClhKBWHSCVkQYQAAqXAQqSAQgMEAAahwEwgYQCgYEAkuzFcd5TJu7lYWYe2hQLFfUWIIj91BvQQLa_Thln4YtGCO8'
- 'gG1KJqJm-YlmJOWQG0B7H_5RVhxUxV9KpmFnsDVkzUFKOsCBaYGXc12xPVioawUlAwp5qp3QQtZyx_se97YIoLzuLr46UkLcL'
- 'nkIrp-Jo46QzYi_QHq45WTm8MQ0glpEGEAIKlwEKkgEIDRAAGocBMIGEAoGBAIUzbxOknXf_rNt17_ir8JlWvrtnCWsQd1MAn'
- 'l5mgArvavDtKeBYHzi5_Ak7DHlLzuA6YE8W175FxLFKpN2hkz-l-M7ltUSd8N1BvJRhK4t6WffWfC_1wPyoAbeSN2Yb1jygtZ'
- 'JQ8wGoXHcJQUXiMit3eFNyylwsJFj1gzAR4JCdIJeRBhABCpYBCpEBCA4QABqGATCBgwKBgFMcbEpl9ukVR6AO_R6sMyiU11I'
- '8b8MBSUCEC15iKsrVO8v_m47_TRRjWPYtQ9eZ7o1ocNJHaGUU7qqInFqtFaVnIceP6NmCsXhjs3MLrWPS8IRAy4Zf4FKmGOx3'
- 'N9O2vemjUygZ9vUiSkULdVrecinRaT8JQ5RG4bUMY04XGIwFIJiRBhADCpYBCpEBCA8QABqGATCBgwKBgGpCkW-NR3li8GlRv'
- 'qpq2YZGSIgm_PTyDI2Zwfw69grsBmPpVFW48Vw7xoMN35zcrojEpialB_uQzlpLYOvsMl634CRIuj-n1QE3-gaZTTTE8mg-AR'
- '4mcxnTKThPnRQpbuOlYAnriwiasWiQEMbGjq_HmWioYYxFo9USlklQn4-9IJmRBhAE'
-)
-INVALID_SERVICE_TICKET = (
- '3:serv:CBAQ__________9_czEaCGJiOnNlc3My:WUPx1cTf05fjD1exB35T5j2DCHWH1YaLJon_a4rN-D7JfXHK1Ai4wM4uS'
- 'fboHD9xmGQH7extqtlEk1tCTCGm5qbRVloJwWzCZBXo3zKX6i1oBYP_89WcjCNPVe1e8jwGdLsnu6PpxL5cn0xCksiStILH5U'
- 'mDR6xfkJdnmMG94o8'
-)
-MALFORMED_TVM_KEYS = (
- '1:CpgCCpMCCAEQABqIAjCCAQQCggEAcLEXeH67FQESFUn4_7wnX7wN0PUrBoUsm3QQ4W5vC-qz6sXaEjSwnTV8w1o-z6X9KPL'
- 'lhzMQvuS38NCNfK4uvJ4Zvfp3YsXJ25-rYtbnrYJHNvHohD-kPCCw_yZpMp21JdWigzQGuV7CtrxUhF-NNrsnUaJrE5-OpEWN'
- 't4X6nCItKIYeVcSK6XJUbEWbrNCRbvkSc4ak2ymFeMuHYJVjxh4eQbk7_ZPzodP0WvF6eUYrYeb42imVEOR8ofVLQWE5DVnb1'
- 'z_TqZm4i1XkS7jMwZuBxBRw8DGdYei0lT_sAf7KST2jC0590NySB3vsBgWEVs1OdUUWA6r-Dvx9dsOQtSCVkQYQAAqZAgqUAg'
- 'gCEAAaiQIwggEFAoIBAQDhEBM5-6YsPWfogKtbluJoCX1WV2KdzOaQ0-OlRbBzeCzw-eQKu12c8WakHBbeCMd1I1TU64SDkDo'
- 'rWjXGIa_2xT6N3zzNAE50roTbPCcmeQrps26woTYfYIuqDdoxYKZNr0lvNLLW47vBr7EKqo1S4KSj7aXK_XYeEvUgIgf3nVIc'
- 'Nrio7VTnFmGGVQCepaL1Hi1gN4yIXjVZ06PBPZ-DxSRu6xOGbFrfKMJeMPs7KOyE-26Q3xOXdTIa1X-zYIucTd_bxUCL4BVbw'
- 'W2AvbbFsaG7ISmVdGu0XUTmhXs1KrEfUVLRJhE4Dx99hAZXm1_HlYMUeJcMQ_oHOhV94ENFIJaRBhACCpYBCpEBCAMQABqGAT'
- 'CBgwKBgF9t2YJGAJkRRFq6fWhi3m1TFW1UOE0f6ZrfYhHAkpqGlKlh0QVfeTNPpeJhi75xXzCe6oReRUm-0DbqDNhTShC7uGU'
- 'v1INYnRBQWH6E-5Fc5XrbDFSuGQw2EYjNfHy_HefHJXxQKAqPvxBDKMKkHgV58WtM6rC8jRi9sdX_ig2NIJeRBhABCpYBCpEB'
- 'CAQQABqGATCBgwKBgGB4d6eLGUBv-Q6EPLehC4S-yuE2HB-_rJ7WkeYwyp-xIPolPrd-PQme2utHB4ZgpXHIu_OFksDe_0bPg'
- 'ZniNRSVRbl7W49DgS5Ya3kMfrYB4DnF5Fta5tn1oV6EwxYD4JONpFTenOJALPGTPawxXEfon_peiHOSBuQMu3_Vn-l1IJiRBh'
- 'ADCpcBCpIBCAUQABqHATCBhAKBgQCTJMKIfmfeZpaI7Q9rnsc29gdWawK7TnpVKRHws1iY7EUlYROeVcMdAwEqVM6f8BVCKLG'
- 'gzQ7Gar_uuxfUGKwqEQzoppDraw4F75J464-7D5f6_oJQuGIBHZxqbMONtLjBCXRUhQW5szBLmTQ_R3qaJb5vf-h0APZfkYhq'
- '1cTttSCZkQYQBAqWAQqRAQgLEAAahgEwgYMCgYBvvGVH_M2H8qxxv94yaDYUTWbRnJ1uiIYc59KIQlfFimMPhSS7x2tqUa2-h'
- 'I55JiII0Xym6GNkwLhyc1xtWChpVuIdSnbvttbrt4weDMLHqTwNOF6qAsVKGKT1Yh8yf-qb-DSmicgvFc74mBQm_6gAY1iQsf'
- '33YX8578ClhKBWHSCVkQYQAAqXAQqSAQgMEAAahwEwgYQCgYEAkuzFcd5TJu7lYWYe2hQLFfUWIIj91BvQQLa_Thln4YtGCO8'
- 'gG1KJqJm-YlmJOWQG0B7H_5RVhxUxV9KpmFnsDVkzUFKOsCBaYGXc12xPVioawUlAwp5qp3QQtZyx_se97YIoLzuLr46UkLcL'
- 'nkIrp-Jo46QzYi_QHq45WTm8MQ0glpEGEAIKlwEKkgEIDRAAGocBMIGEAoGBAIUzbxOknXf_rNt17_ir8JlWvrtnCWsQd1MAn'
- 'l5mgArvavDtKeBYHzi5_Ak7DHlLzuA6YE8W175FxLFKpN2hkz-l-M7ltUSd8N1BvJRhK4t6WffWfC_1wPyoAbeSN2Yb1jygtZ'
- 'JQ8wGoXHcJQUXiMit3eFNyylwsJFj1gzAR4JCdIJeRBhABCpYBCpEBCA4QABqGATCBgwKBgFMcbEpl9ukVR6AO_R6sMyiU11I'
- '8b8MBSUCEC15iKsrVO8v_m47_TRRjWPYtQ9eZ7o1ocNJHaGUU7qqInFqtFaVnIceP6NmCsXhjs3MLrWPS8IRAy4Zf4FKmGOx3'
- 'N9O2vemjUygZ9vUiSkULdVrecinRaT8JQ5RG4bUMY04XGIwFIJiRBhADCpYBCpEBCA8QABqGATCBgwKBgGpCkW-NR3li8GlRv'
- 'qpq2YZGSIgm_PTyDI2Zwfw69grsBmPpVFW48Vw7xoMN35zcrojEpialB_uQzlpLYOvsMl634CRIuj-n1QE3-gaZTTTE8mg-AR'
- '4mcxnTKThPnRQpbuOlYAnriwiasWiQEMbGjq_HmWioYYxFo9USlklQn4-9IJmRBhAEEpUBCpIBCAYQABqHATCBhAKBgQCoZkF'
- 'Gm9oLTqjeXZAq6j5S6i7K20V0lNdBBLqfmFBIRuTkYxhs4vUYnWjZrKRAd5bp6_py0csmFmpl_5Yh0b-2pdo_E5PNP7LGRzKy'
- 'KSiFddyykKKzVOazH8YYldDAfE8Z5HoS9e48an5JsPg0jr-TPu34DnJq3yv2a6dqiKL9zSCakQYSlQEKkgEIEBAAGocBMIGEA'
- 'oGBALhrihbf3EpjDQS2sCQHazoFgN0nBbE9eesnnFTfzQELXb2gnJU9enmV_aDqaHKjgtLIPpCgn40lHrn5k6mvH5OdedyI6c'
- 'CzE-N-GFp3nAq0NDJyMe0fhtIRD__CbT0ulcvkeow65ubXWfw6dBC2gR_34rdMe_L_TGRLMWjDULbNIJ'
-)
-MALFORMED_TVM_SECRET = 'adcvxcv./-+'
-OUR_ID = 28
-SECRET = 'GRMJrKnj4fOVnvOqe-WyD1'
-SRC_ID = 229
-
-UNSUPPORTED_VERSION_SERVICE_TICKET = (
- '2:serv:CBAQ__________9_IhkI5QEQHBoIYmI6c2VzczEaCGJiOnNlc3My:WUPx1cTf05fjD1exB35T5j2DCHWH1YaLJon_a'
- '4rN-D7JfXHK1Ai4wM4uSfboHD9xmGQH7extqtlEk1tCTCGm5qbRVloJwWzCZBXo3zKX6i1oBYP_89WcjCNPVe1e8jwGdLsnu6'
- 'PpxL5cn0xCksiStILH5UmDR6xfkJdnmMG94o8'
-)
-VALID_SERVICE_TICKET_1 = (
- '3:serv:CBAQ__________9_IhkI5QEQHBoIYmI6c2VzczEaCGJiOnNlc3My:WUPx1cTf05fjD1exB35T5j2DCHWH1YaLJon_a'
- '4rN-D7JfXHK1Ai4wM4uSfboHD9xmGQH7extqtlEk1tCTCGm5qbRVloJwWzCZBXo3zKX6i1oBYP_89WcjCNPVe1e8jwGdLsnu6'
- 'PpxL5cn0xCksiStILH5UmDR6xfkJdnmMG94o8'
-)
-VALID_SERVICE_TICKET_SIGNLESS_1 = '3:serv:CBAQ__________9_IhkI5QEQHBoIYmI6c2VzczEaCGJiOnNlc3My:'
-VALID_SERVICE_TICKET_2 = (
- '3:serv:CBAQ__________9_IskICOUBEBwaCGJiOnNlc3MxGgliYjpzZXNzMTAaCmJiOnNlc3MxMDAaCWJiOnNlc3MxMRoJYm'
- 'I6c2VzczEyGgliYjpzZXNzMTMaCWJiOnNlc3MxNBoJYmI6c2VzczE1GgliYjpzZXNzMTYaCWJiOnNlc3MxNxoJYmI6c2VzczE'
- '4GgliYjpzZXNzMTkaCGJiOnNlc3MyGgliYjpzZXNzMjAaCWJiOnNlc3MyMRoJYmI6c2VzczIyGgliYjpzZXNzMjMaCWJiOnNl'
- 'c3MyNBoJYmI6c2VzczI1GgliYjpzZXNzMjYaCWJiOnNlc3MyNxoJYmI6c2VzczI4GgliYjpzZXNzMjkaCGJiOnNlc3MzGgliY'
- 'jpzZXNzMzAaCWJiOnNlc3MzMRoJYmI6c2VzczMyGgliYjpzZXNzMzMaCWJiOnNlc3MzNBoJYmI6c2VzczM1GgliYjpzZXNzMz'
- 'YaCWJiOnNlc3MzNxoJYmI6c2VzczM4GgliYjpzZXNzMzkaCGJiOnNlc3M0GgliYjpzZXNzNDAaCWJiOnNlc3M0MRoJYmI6c2V'
- 'zczQyGgliYjpzZXNzNDMaCWJiOnNlc3M0NBoJYmI6c2VzczQ1GgliYjpzZXNzNDYaCWJiOnNlc3M0NxoJYmI6c2VzczQ4Ggli'
- 'YjpzZXNzNDkaCGJiOnNlc3M1GgliYjpzZXNzNTAaCWJiOnNlc3M1MRoJYmI6c2VzczUyGgliYjpzZXNzNTMaCWJiOnNlc3M1N'
- 'BoJYmI6c2VzczU1GgliYjpzZXNzNTYaCWJiOnNlc3M1NxoJYmI6c2VzczU4GgliYjpzZXNzNTkaCGJiOnNlc3M2GgliYjpzZX'
- 'NzNjAaCWJiOnNlc3M2MRoJYmI6c2VzczYyGgliYjpzZXNzNjMaCWJiOnNlc3M2NBoJYmI6c2VzczY1GgliYjpzZXNzNjYaCWJ'
- 'iOnNlc3M2NxoJYmI6c2VzczY4GgliYjpzZXNzNjkaCGJiOnNlc3M3GgliYjpzZXNzNzAaCWJiOnNlc3M3MRoJYmI6c2Vzczcy'
- 'GgliYjpzZXNzNzMaCWJiOnNlc3M3NBoJYmI6c2Vzczc1GgliYjpzZXNzNzYaCWJiOnNlc3M3NxoJYmI6c2Vzczc4GgliYjpzZ'
- 'XNzNzkaCGJiOnNlc3M4GgliYjpzZXNzODAaCWJiOnNlc3M4MRoJYmI6c2VzczgyGgliYjpzZXNzODMaCWJiOnNlc3M4NBoJYm'
- 'I6c2Vzczg1GgliYjpzZXNzODYaCWJiOnNlc3M4NxoJYmI6c2Vzczg4GgliYjpzZXNzODkaCGJiOnNlc3M5GgliYjpzZXNzOTA'
- 'aCWJiOnNlc3M5MRoJYmI6c2VzczkyGgliYjpzZXNzOTMaCWJiOnNlc3M5NBoJYmI6c2Vzczk1GgliYjpzZXNzOTYaCWJiOnNl'
- 'c3M5NxoJYmI6c2Vzczk4GgliYjpzZXNzOTk:JYmABAVLM6y7_T4n1pRcwBfwDfzMV4JJ3cpbEG617zdGgKRZwL7MalsYn5bq1'
- 'F2ibujMrsF9nzZf8l4s_e-Ivjkz_xu4KMzSp-pUh9V7XIF_smj0WHYpv6gOvWNuK8uIvlZTTKwtQX0qZOL9m-MEeZiHoQPKZG'
- 'CfJ_qxMUp-J8I'
-)
-VALID_SERVICE_TICKET_3 = (
- '3:serv:CBAQ__________9_IgUI5QEQHA:Sd6tmA1CNy2Nf7XevC3x7zr2DrGNRmcl-TxUsDtDW2xI3YXyCxBltWeg0-KtDlq'
- 'yYuPOP5Jd_-XXNA12KlOPnNzrz3jm-5z8uQl6CjCcrVHUHJ75pGC8r9UOlS8cOgeXQB5dYP-fOWyo5CNadlozx1S2meCIxncb'
- 'QRV1kCBi4KU'
-)
-VALID_SERVICE_TICKET_ISSUER = (
- '3:serv:CBAQ__________9_IgsI5QEQHCDr1MT4Ag:Gu66XJT_nKnIRJjFy1561wFhIqkJItcSTGftLo7Yvi7i5wIdV-QuKT_'
- '-IMPpgjxnnGbt1Dy3Ys2TEoeJAb0TdaCYG1uy3vpoLONmTx9AenN5dx1HHf46cypLK5D3OdiTjxvqI9uGmSIKrSdRxU8gprpu'
- '5QiBDPZqVCWhM60FVSY'
-)
-
-
-def test_context():
- ServiceContext(OUR_ID, SECRET, tau.TVMKNIFE_PUBLIC_KEYS)
-
-
-def test_context_exceptions():
- with pytest.raises(MalformedTvmSecretException):
- ServiceContext(OUR_ID, MALFORMED_TVM_SECRET, tau.TVMKNIFE_PUBLIC_KEYS)
- with pytest.raises(MalformedTvmKeysException):
- ServiceContext(OUR_ID, SECRET, MALFORMED_TVM_KEYS)
- with pytest.raises(EmptyTvmKeysException):
- ServiceContext(OUR_ID, SECRET, EMPTY_TVM_KEYS)
-
- service_context = ServiceContext(OUR_ID, None, tau.TVMKNIFE_PUBLIC_KEYS)
- with pytest.raises(MalformedTvmSecretException):
- service_context.sign(1490000001, 13)
-
- service_context = ServiceContext(OUR_ID, SECRET, None)
- with pytest.raises(EmptyTvmKeysException):
- service_context.check('abcde')
-
- with pytest.raises(ContextException):
- service_context = ServiceContext(OUR_ID, None, None)
-
-
-def test_context_sign():
- service_context = ServiceContext(OUR_ID, SECRET, tau.TVMKNIFE_PUBLIC_KEYS)
- assert '6H8RjdP4cCrTpMEd3XArBTrKFMQbgXLHbB2FJgQ-yO0' == service_context.sign('1490000001', '13,19', 'bb:sess1')
- assert 'HAes0pEg8wb9M9YmKWPjwxm91mDp-GMTruOb6bzmuRE' == service_context.sign(
- 1490000001, [13, 19], ['bb:sess1', 'bb:sess2']
- )
- assert 'JU5tIwr3qS1K4dse2KafQzRXX_TGtlS3jE1inK7QyRM' == service_context.sign(1490000001, 13, [])
- assert 'JU5tIwr3qS1K4dse2KafQzRXX_TGtlS3jE1inK7QyRM' == service_context.sign(1490000001, 13)
-
-
-def test_ticket1():
- service_context = ServiceContext(OUR_ID, SECRET, tau.TVMKNIFE_PUBLIC_KEYS)
- ticket = service_context.check(VALID_SERVICE_TICKET_1)
- assert ticket.src == SRC_ID
- assert (
- ticket.debug_info
- == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;scope=bb:sess1;scope=bb:sess2;'
- )
- assert VALID_SERVICE_TICKET_SIGNLESS_1 == tvmauth.utils.remove_ticket_signature(VALID_SERVICE_TICKET_1)
- assert ticket.issuer_uid is None
- assert (
- repr(ticket)
- == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;scope=bb:sess1;scope=bb:sess2;'
- )
- assert (
- str(ticket)
- == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;scope=bb:sess1;scope=bb:sess2;'
- )
-
-
-def test_ticket2():
- service_context = ServiceContext(OUR_ID, SECRET, tau.TVMKNIFE_PUBLIC_KEYS)
- ticket = service_context.check(VALID_SERVICE_TICKET_2)
- assert (
- ticket.debug_info
- == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;scope=bb:sess1;scope=bb:sess10;scope=bb:sess100;scope=bb:sess11;scope=bb:sess12;scope=bb:sess13;scope=bb:sess14;scope=bb:sess15;scope=bb:sess16;scope=bb:sess17;scope=bb:sess18;scope=bb:sess19;scope=bb:sess2;scope=bb:sess20;scope=bb:sess21;scope=bb:sess22;scope=bb:sess23;scope=bb:sess24;scope=bb:sess25;scope=bb:sess26;scope=bb:sess27;scope=bb:sess28;scope=bb:sess29;scope=bb:sess3;scope=bb:sess30;scope=bb:sess31;scope=bb:sess32;scope=bb:sess33;scope=bb:sess34;scope=bb:sess35;scope=bb:sess36;scope=bb:sess37;scope=bb:sess38;scope=bb:sess39;scope=bb:sess4;scope=bb:sess40;scope=bb:sess41;scope=bb:sess42;scope=bb:sess43;scope=bb:sess44;scope=bb:sess45;scope=bb:sess46;scope=bb:sess47;scope=bb:sess48;scope=bb:sess49;scope=bb:sess5;scope=bb:sess50;scope=bb:sess51;scope=bb:sess52;scope=bb:sess53;scope=bb:sess54;scope=bb:sess55;scope=bb:sess56;scope=bb:sess57;scope=bb:sess58;scope=bb:sess59;scope=bb:sess6;scope=bb:sess60;scope=bb:sess61;scope=bb:sess62;scope=bb:sess63;scope=bb:sess64;scope=bb:sess65;scope=bb:sess66;scope=bb:sess67;scope=bb:sess68;scope=bb:sess69;scope=bb:sess7;scope=bb:sess70;scope=bb:sess71;scope=bb:sess72;scope=bb:sess73;scope=bb:sess74;scope=bb:sess75;scope=bb:sess76;scope=bb:sess77;scope=bb:sess78;scope=bb:sess79;scope=bb:sess8;scope=bb:sess80;scope=bb:sess81;scope=bb:sess82;scope=bb:sess83;scope=bb:sess84;scope=bb:sess85;scope=bb:sess86;scope=bb:sess87;scope=bb:sess88;scope=bb:sess89;scope=bb:sess9;scope=bb:sess90;scope=bb:sess91;scope=bb:sess92;scope=bb:sess93;scope=bb:sess94;scope=bb:sess95;scope=bb:sess96;scope=bb:sess97;scope=bb:sess98;scope=bb:sess99;' # noqa
- )
- assert ticket.issuer_uid is None
-
-
-def test_ticket3():
- service_context = ServiceContext(OUR_ID, SECRET, tau.TVMKNIFE_PUBLIC_KEYS)
- ticket = service_context.check(VALID_SERVICE_TICKET_3)
- assert ticket.debug_info == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;'
- assert ticket.issuer_uid is None
-
-
-def test_ticket_issuer():
- service_context = ServiceContext(OUR_ID, SECRET, tau.TVMKNIFE_PUBLIC_KEYS)
- ticket = service_context.check(VALID_SERVICE_TICKET_ISSUER)
- assert (
- ticket.debug_info == 'ticket_type=serv;expiration_time=9223372036854775807;src=229;dst=28;issuer_uid=789654123;'
- )
- assert 789654123 == ticket.issuer_uid
-
-
-def test_ticket_exceptions():
- service_context = ServiceContext(OUR_ID, SECRET, tau.TVMKNIFE_PUBLIC_KEYS)
- with pytest.raises(TicketParsingException) as ex:
- service_context.check(INVALID_SERVICE_TICKET)
- assert ex.value.status == TicketStatus.Malformed
-
- with pytest.raises(TicketParsingException) as ex:
- service_context.check(UNSUPPORTED_VERSION_SERVICE_TICKET)
- assert ex.value.status == TicketStatus.UnsupportedVersion
-
-
-def test_create_ticket_for_tests():
- with pytest.raises(TicketParsingException):
- tau.create_service_ticket_for_unittest(TicketStatus.Expired, 42)
- s = tau.create_service_ticket_for_unittest(TicketStatus.Ok, 42)
- assert s
- assert s.src == 42
- assert s.issuer_uid is None
- assert s.debug_info == 'ticket_type=serv;src=42;dst=100500;'
-
- s = tau.create_service_ticket_for_unittest(TicketStatus.Ok, 42, 100501)
- assert s
- assert s.src == 42
- assert s.issuer_uid == 100501
- assert s.debug_info == 'ticket_type=serv;src=42;dst=100500;issuer_uid=100501;'
-
-
-def test_non_ascii():
- class _Ins(object):
- def debug_info(self):
- return u'Люблю яблоки'
-
- u = CheckedServiceTicket(_Ins())
- assert str(u) == 'Люблю яблоки'
- if six.PY2:
- assert unicode(u) == u'Люблю яблоки' # noqa
diff --git a/library/python/tvmauth/src/ut/test_user.py b/library/python/tvmauth/src/ut/test_user.py
deleted file mode 100644
index 76371c718b..0000000000
--- a/library/python/tvmauth/src/ut/test_user.py
+++ /dev/null
@@ -1,231 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-from __future__ import print_function
-
-import pytest
-import six
-from tvmauth import (
- BlackboxEnv,
- CheckedUserTicket,
- TicketStatus,
-)
-from tvmauth.deprecated import UserContext
-from tvmauth.exceptions import (
- EmptyTvmKeysException,
- MalformedTvmKeysException,
- TicketParsingException,
-)
-import tvmauth.unittest as tau
-import tvmauth.utils
-
-
-EMPTY_TVM_KEYS = (
- '1:EpUBCpIBCAYQABqHATCBhAKBgQCoZkFGm9oLTqjeXZAq6j5S6i7K20V0lNdBBLqfmFBIRuTkYxhs4vUYnWjZrKRAd5bp6_p'
- 'y0csmFmpl_5Yh0b-2pdo_E5PNP7LGRzKyKSiFddyykKKzVOazH8YYldDAfE8Z5HoS9e48an5JsPg0jr-TPu34DnJq3yv2a6dq'
- 'iKL9zSCakQY'
-)
-EXPIRED_USER_TICKET = (
- '3:user:CA0QABokCgMIyAMKAgh7EMgDGghiYjpzZXNzMRoIYmI6c2VzczIgEigB:D0CmYVwWg91LDYejjeQ2UP8AeiA_mr1q1'
- 'CUD_lfJ9zQSEYEOYGDTafg4Um2rwOOvQnsD1JHM4zHyMUJ6Jtp9GAm5pmhbXBBZqaCcJpyxLTEC8a81MhJFCCJRvu_G1FiAgR'
- 'gB25gI3HIbkvHFUEqAIC_nANy7NFQnbKk2S-EQPGY'
-)
-MALFORMED_TVM_KEYS = (
- '1:CpgCCpMCCAEQABqIAjCCAQQCggEAcLEXeH67FQESFUn4_7wnX7wN0PUrBoUsm3QQ4W5vC-qz6sXaEjSwnTV8w1o-z6X9KPL'
- 'lhzMQvuS38NCNfK4uvJ4Zvfp3YsXJ25-rYtbnrYJHNvHohD-kPCCw_yZpMp21JdWigzQGuV7CtrxUhF-NNrsnUaJrE5-OpEWN'
- 't4X6nCItKIYeVcSK6XJUbEWbrNCRbvkSc4ak2ymFeMuHYJVjxh4eQbk7_ZPzodP0WvF6eUYrYeb42imVEOR8ofVLQWE5DVnb1'
- 'z_TqZm4i1XkS7jMwZuBxBRw8DGdYei0lT_sAf7KST2jC0590NySB3vsBgWEVs1OdUUWA6r-Dvx9dsOQtSCVkQYQAAqZAgqUAg'
- 'gCEAAaiQIwggEFAoIBAQDhEBM5-6YsPWfogKtbluJoCX1WV2KdzOaQ0-OlRbBzeCzw-eQKu12c8WakHBbeCMd1I1TU64SDkDo'
- 'rWjXGIa_2xT6N3zzNAE50roTbPCcmeQrps26woTYfYIuqDdoxYKZNr0lvNLLW47vBr7EKqo1S4KSj7aXK_XYeEvUgIgf3nVIc'
- 'Nrio7VTnFmGGVQCepaL1Hi1gN4yIXjVZ06PBPZ-DxSRu6xOGbFrfKMJeMPs7KOyE-26Q3xOXdTIa1X-zYIucTd_bxUCL4BVbw'
- 'W2AvbbFsaG7ISmVdGu0XUTmhXs1KrEfUVLRJhE4Dx99hAZXm1_HlYMUeJcMQ_oHOhV94ENFIJaRBhACCpYBCpEBCAMQABqGAT'
- 'CBgwKBgF9t2YJGAJkRRFq6fWhi3m1TFW1UOE0f6ZrfYhHAkpqGlKlh0QVfeTNPpeJhi75xXzCe6oReRUm-0DbqDNhTShC7uGU'
- 'v1INYnRBQWH6E-5Fc5XrbDFSuGQw2EYjNfHy_HefHJXxQKAqPvxBDKMKkHgV58WtM6rC8jRi9sdX_ig2NIJeRBhABCpYBCpEB'
- 'CAQQABqGATCBgwKBgGB4d6eLGUBv-Q6EPLehC4S-yuE2HB-_rJ7WkeYwyp-xIPolPrd-PQme2utHB4ZgpXHIu_OFksDe_0bPg'
- 'ZniNRSVRbl7W49DgS5Ya3kMfrYB4DnF5Fta5tn1oV6EwxYD4JONpFTenOJALPGTPawxXEfon_peiHOSBuQMu3_Vn-l1IJiRBh'
- 'ADCpcBCpIBCAUQABqHATCBhAKBgQCTJMKIfmfeZpaI7Q9rnsc29gdWawK7TnpVKRHws1iY7EUlYROeVcMdAwEqVM6f8BVCKLG'
- 'gzQ7Gar_uuxfUGKwqEQzoppDraw4F75J464-7D5f6_oJQuGIBHZxqbMONtLjBCXRUhQW5szBLmTQ_R3qaJb5vf-h0APZfkYhq'
- '1cTttSCZkQYQBAqWAQqRAQgLEAAahgEwgYMCgYBvvGVH_M2H8qxxv94yaDYUTWbRnJ1uiIYc59KIQlfFimMPhSS7x2tqUa2-h'
- 'I55JiII0Xym6GNkwLhyc1xtWChpVuIdSnbvttbrt4weDMLHqTwNOF6qAsVKGKT1Yh8yf-qb-DSmicgvFc74mBQm_6gAY1iQsf'
- '33YX8578ClhKBWHSCVkQYQAAqXAQqSAQgMEAAahwEwgYQCgYEAkuzFcd5TJu7lYWYe2hQLFfUWIIj91BvQQLa_Thln4YtGCO8'
- 'gG1KJqJm-YlmJOWQG0B7H_5RVhxUxV9KpmFnsDVkzUFKOsCBaYGXc12xPVioawUlAwp5qp3QQtZyx_se97YIoLzuLr46UkLcL'
- 'nkIrp-Jo46QzYi_QHq45WTm8MQ0glpEGEAIKlwEKkgEIDRAAGocBMIGEAoGBAIUzbxOknXf_rNt17_ir8JlWvrtnCWsQd1MAn'
- 'l5mgArvavDtKeBYHzi5_Ak7DHlLzuA6YE8W175FxLFKpN2hkz-l-M7ltUSd8N1BvJRhK4t6WffWfC_1wPyoAbeSN2Yb1jygtZ'
- 'JQ8wGoXHcJQUXiMit3eFNyylwsJFj1gzAR4JCdIJeRBhABCpYBCpEBCA4QABqGATCBgwKBgFMcbEpl9ukVR6AO_R6sMyiU11I'
- '8b8MBSUCEC15iKsrVO8v_m47_TRRjWPYtQ9eZ7o1ocNJHaGUU7qqInFqtFaVnIceP6NmCsXhjs3MLrWPS8IRAy4Zf4FKmGOx3'
- 'N9O2vemjUygZ9vUiSkULdVrecinRaT8JQ5RG4bUMY04XGIwFIJiRBhADCpYBCpEBCA8QABqGATCBgwKBgGpCkW-NR3li8GlRv'
- 'qpq2YZGSIgm_PTyDI2Zwfw69grsBmPpVFW48Vw7xoMN35zcrojEpialB_uQzlpLYOvsMl634CRIuj-n1QE3-gaZTTTE8mg-AR'
- '4mcxnTKThPnRQpbuOlYAnriwiasWiQEMbGjq_HmWioYYxFo9USlklQn4-9IJmRBhAEEpUBCpIBCAYQABqHATCBhAKBgQCoZkF'
- 'Gm9oLTqjeXZAq6j5S6i7K20V0lNdBBLqfmFBIRuTkYxhs4vUYnWjZrKRAd5bp6_py0csmFmpl_5Yh0b-2pdo_E5PNP7LGRzKy'
- 'KSiFddyykKKzVOazH8YYldDAfE8Z5HoS9e48an5JsPg0jr-TPu34DnJq3yv2a6dqiKL9zSCakQYSlQEKkgEIEBAAGocBMIGEA'
- 'oGBALhrihbf3EpjDQS2sCQHazoFgN0nBbE9eesnnFTfzQELXb2gnJU9enmV_aDqaHKjgtLIPpCgn40lHrn5k6mvH5OdedyI6c'
- 'CzE-N-GFp3nAq0NDJyMe0fhtIRD__CbT0ulcvkeow65ubXWfw6dBC2gR_34rdMe_L_TGRLMWjDULbNIJ'
-)
-MALFORMED_USER_TICKET = (
- '3:user:CA0Q__________9_GiQKAwjIAwoCCHsQyAMaCGJiOnNlc3MxcXn9krYk19LCvlFrhMW-R4q8mKfXJXCd-RBVBgUQzC'
- 'OR1Dx2FiOyU-BxUoIsaU0PiwTjbVY5I2onJDilge70Cl5zEPI9pfab2qwklACq_ZBUvD1tzrfNUr88otBGAziHASJWgyVDkhy'
- 'Q3p7YbN38qpb0vGQrYNxlk4e2I'
-)
-SIGN_BROKEN_USER_TICKET = (
- '3:user:CA0Q__________9_GiQKAwjIAwoCCHsQyAMaCGJiOnNlc3MxGghiYjpzZXNzMiASKAE:KJFv5EcXn9krYk19LCvlFr'
- 'hMW-R4q8mKfXJXCd-RBVBgUQzCOR1Dx2FiOyU-BxUoIsaU0PiwI2onJDilge70Cl5zEPI9pfab2qwklACq_ZBUvD1tzrfNUr8'
- '8otBGAziHASJWgyVDkhyQ3p7YbN38qpb0vGQrYNxlk4e2'
-)
-UNSUPPORTED_VERSION_USER_TICKET = (
- '2:user:CA0Q__________9_GiQKAwjIAwoCCHsQyAMaCGJiOnNlc3MxGghiYjpzZXNzMiASKAE:KJFv5EcXn9krYk19LCvlFr'
- 'hMW-R4q8mKfXJXCd-RBVBgUQzCOR1Dx2FiOyU-BxUoIsaU0PiwTjbVY5I2onJDilge70Cl5zEPI9pfab2qwklACq_ZBUvD1tz'
- 'rfNUr88otBGAziHASJWgyVDkhyQ3p7YbN38qpb0vGQrYNxlk4e2I'
-)
-VALID_SERVICE_TICKET = (
- '3:serv:CBAQ__________9_IhkI5QEQHBoIYmI6c2VzczEaCGJiOnNlc3My:WUPx1cTf05fjD1exB35T5j2DCHWH1YaLJon_a'
- '4rN-D7JfXHK1Ai4wM4uSfboHD9xmGQH7extqtlEk1tCTCGm5qbRVloJwWzCZBXo3zKX6i1oBYP_89WcjCNPVe1e8jwGdLsnu6'
- 'PpxL5cn0xCksiStILH5UmDR6xfkJdnmMG94o8'
-)
-VALID_USER_TICKET_1 = (
- '3:user:CA0Q__________9_GiQKAwjIAwoCCHsQyAMaCGJiOnNlc3MxGghiYjpzZXNzMiASKAE:KJFv5EcXn9krYk19LCvlFr'
- 'hMW-R4q8mKfXJXCd-RBVBgUQzCOR1Dx2FiOyU-BxUoIsaU0PiwTjbVY5I2onJDilge70Cl5zEPI9pfab2qwklACq_ZBUvD1tz'
- 'rfNUr88otBGAziHASJWgyVDkhyQ3p7YbN38qpb0vGQrYNxlk4e2I'
-)
-VALID_USER_TICKET_SIGNLESS_1 = '3:user:CA0Q__________9_GiQKAwjIAwoCCHsQyAMaCGJiOnNlc3MxGghiYjpzZXNzMiASKAE:'
-VALID_USER_TICKET_2 = (
- '3:user:CA0Q__________9_GhAKAwjIAwoCCHsQyAMgEigB:KRibGYTJUA2ns0Fn7VYqeMZ1-GdscB1o9pRzELyr7QJrJsfsE'
- '8Y_HoVvB8Npr-oalv6AXOpagSc8HpZjAQz8zKMAVE_tI0tL-9DEsHirpawEbpy7OWV7-k18o1m-RaDaKeTlIB45KHbBul1-9a'
- 'eKkortBfbbXtz_Qy9r_mfFPiQ'
-)
-VALID_USER_TICKET_3 = (
- '3:user:CA0Q__________9_Go8bCgIIAAoCCAEKAggCCgIIAwoCCAQKAggFCgIIBgoCCAcKAggICgIICQoCCAoKAggLCgIIDA'
- 'oCCA0KAggOCgIIDwoCCBAKAggRCgIIEgoCCBMKAggUCgIIFQoCCBYKAggXCgIIGAoCCBkKAggaCgIIGwoCCBwKAggdCgIIHgo'
- 'CCB8KAgggCgIIIQoCCCIKAggjCgIIJAoCCCUKAggmCgIIJwoCCCgKAggpCgIIKgoCCCsKAggsCgIILQoCCC4KAggvCgIIMAoC'
- 'CDEKAggyCgIIMwoCCDQKAgg1CgIINgoCCDcKAgg4CgIIOQoCCDoKAgg7CgIIPAoCCD0KAgg-CgIIPwoCCEAKAghBCgIIQgoCC'
- 'EMKAghECgIIRQoCCEYKAghHCgIISAoCCEkKAghKCgIISwoCCEwKAghNCgIITgoCCE8KAghQCgIIUQoCCFIKAghTCgIIVAoCCF'
- 'UKAghWCgIIVwoCCFgKAghZCgIIWgoCCFsKAghcCgIIXQoCCF4KAghfCgIIYAoCCGEKAghiCgIIYwoCCGQKAghlCgIIZgoCCGc'
- 'KAghoCgIIaQoCCGoKAghrCgIIbAoCCG0KAghuCgIIbwoCCHAKAghxCgIIcgoCCHMKAgh0CgIIdQoCCHYKAgh3CgIIeAoCCHkK'
- 'Agh6CgIIewoCCHwKAgh9CgIIfgoCCH8KAwiAAQoDCIEBCgMIggEKAwiDAQoDCIQBCgMIhQEKAwiGAQoDCIcBCgMIiAEKAwiJA'
- 'QoDCIoBCgMIiwEKAwiMAQoDCI0BCgMIjgEKAwiPAQoDCJABCgMIkQEKAwiSAQoDCJMBCgMIlAEKAwiVAQoDCJYBCgMIlwEKAw'
- 'iYAQoDCJkBCgMImgEKAwibAQoDCJwBCgMInQEKAwieAQoDCJ8BCgMIoAEKAwihAQoDCKIBCgMIowEKAwikAQoDCKUBCgMIpgE'
- 'KAwinAQoDCKgBCgMIqQEKAwiqAQoDCKsBCgMIrAEKAwitAQoDCK4BCgMIrwEKAwiwAQoDCLEBCgMIsgEKAwizAQoDCLQBCgMI'
- 'tQEKAwi2AQoDCLcBCgMIuAEKAwi5AQoDCLoBCgMIuwEKAwi8AQoDCL0BCgMIvgEKAwi_AQoDCMABCgMIwQEKAwjCAQoDCMMBC'
- 'gMIxAEKAwjFAQoDCMYBCgMIxwEKAwjIAQoDCMkBCgMIygEKAwjLAQoDCMwBCgMIzQEKAwjOAQoDCM8BCgMI0AEKAwjRAQoDCN'
- 'IBCgMI0wEKAwjUAQoDCNUBCgMI1gEKAwjXAQoDCNgBCgMI2QEKAwjaAQoDCNsBCgMI3AEKAwjdAQoDCN4BCgMI3wEKAwjgAQo'
- 'DCOEBCgMI4gEKAwjjAQoDCOQBCgMI5QEKAwjmAQoDCOcBCgMI6AEKAwjpAQoDCOoBCgMI6wEKAwjsAQoDCO0BCgMI7gEKAwjv'
- 'AQoDCPABCgMI8QEKAwjyAQoDCPMBCgMI9AEKAwj1AQoDCPYBCgMI9wEKAwj4AQoDCPkBCgMI-gEKAwj7AQoDCPwBCgMI_QEKA'
- 'wj-AQoDCP8BCgMIgAIKAwiBAgoDCIICCgMIgwIKAwiEAgoDCIUCCgMIhgIKAwiHAgoDCIgCCgMIiQIKAwiKAgoDCIsCCgMIjA'
- 'IKAwiNAgoDCI4CCgMIjwIKAwiQAgoDCJECCgMIkgIKAwiTAgoDCJQCCgMIlQIKAwiWAgoDCJcCCgMImAIKAwiZAgoDCJoCCgM'
- 'ImwIKAwicAgoDCJ0CCgMIngIKAwifAgoDCKACCgMIoQIKAwiiAgoDCKMCCgMIpAIKAwilAgoDCKYCCgMIpwIKAwioAgoDCKkC'
- 'CgMIqgIKAwirAgoDCKwCCgMIrQIKAwiuAgoDCK8CCgMIsAIKAwixAgoDCLICCgMIswIKAwi0AgoDCLUCCgMItgIKAwi3AgoDC'
- 'LgCCgMIuQIKAwi6AgoDCLsCCgMIvAIKAwi9AgoDCL4CCgMIvwIKAwjAAgoDCMECCgMIwgIKAwjDAgoDCMQCCgMIxQIKAwjGAg'
- 'oDCMcCCgMIyAIKAwjJAgoDCMoCCgMIywIKAwjMAgoDCM0CCgMIzgIKAwjPAgoDCNACCgMI0QIKAwjSAgoDCNMCCgMI1AIKAwj'
- 'VAgoDCNYCCgMI1wIKAwjYAgoDCNkCCgMI2gIKAwjbAgoDCNwCCgMI3QIKAwjeAgoDCN8CCgMI4AIKAwjhAgoDCOICCgMI4wIK'
- 'AwjkAgoDCOUCCgMI5gIKAwjnAgoDCOgCCgMI6QIKAwjqAgoDCOsCCgMI7AIKAwjtAgoDCO4CCgMI7wIKAwjwAgoDCPECCgMI8'
- 'gIKAwjzAgoDCPQCCgMI9QIKAwj2AgoDCPcCCgMI-AIKAwj5AgoDCPoCCgMI-wIKAwj8AgoDCP0CCgMI_gIKAwj_AgoDCIADCg'
- 'MIgQMKAwiCAwoDCIMDCgMIhAMKAwiFAwoDCIYDCgMIhwMKAwiIAwoDCIkDCgMIigMKAwiLAwoDCIwDCgMIjQMKAwiOAwoDCI8'
- 'DCgMIkAMKAwiRAwoDCJIDCgMIkwMKAwiUAwoDCJUDCgMIlgMKAwiXAwoDCJgDCgMImQMKAwiaAwoDCJsDCgMInAMKAwidAwoD'
- 'CJ4DCgMInwMKAwigAwoDCKEDCgMIogMKAwijAwoDCKQDCgMIpQMKAwimAwoDCKcDCgMIqAMKAwipAwoDCKoDCgMIqwMKAwisA'
- 'woDCK0DCgMIrgMKAwivAwoDCLADCgMIsQMKAwiyAwoDCLMDCgMItAMKAwi1AwoDCLYDCgMItwMKAwi4AwoDCLkDCgMIugMKAw'
- 'i7AwoDCLwDCgMIvQMKAwi-AwoDCL8DCgMIwAMKAwjBAwoDCMIDCgMIwwMKAwjEAwoDCMUDCgMIxgMKAwjHAwoDCMgDCgMIyQM'
- 'KAwjKAwoDCMsDCgMIzAMKAwjNAwoDCM4DCgMIzwMKAwjQAwoDCNEDCgMI0gMKAwjTAwoDCNQDCgMI1QMKAwjWAwoDCNcDCgMI'
- '2AMKAwjZAwoDCNoDCgMI2wMKAwjcAwoDCN0DCgMI3gMKAwjfAwoDCOADCgMI4QMKAwjiAwoDCOMDCgMI5AMKAwjlAwoDCOYDC'
- 'gMI5wMKAwjoAwoDCOkDCgMI6gMKAwjrAwoDCOwDCgMI7QMKAwjuAwoDCO8DCgMI8AMKAwjxAwoDCPIDCgMI8wMQyAMaCGJiOn'
- 'Nlc3MxGgliYjpzZXNzMTAaCmJiOnNlc3MxMDAaCWJiOnNlc3MxMRoJYmI6c2VzczEyGgliYjpzZXNzMTMaCWJiOnNlc3MxNBo'
- 'JYmI6c2VzczE1GgliYjpzZXNzMTYaCWJiOnNlc3MxNxoJYmI6c2VzczE4GgliYjpzZXNzMTkaCGJiOnNlc3MyGgliYjpzZXNz'
- 'MjAaCWJiOnNlc3MyMRoJYmI6c2VzczIyGgliYjpzZXNzMjMaCWJiOnNlc3MyNBoJYmI6c2VzczI1GgliYjpzZXNzMjYaCWJiO'
- 'nNlc3MyNxoJYmI6c2VzczI4GgliYjpzZXNzMjkaCGJiOnNlc3MzGgliYjpzZXNzMzAaCWJiOnNlc3MzMRoJYmI6c2VzczMyGg'
- 'liYjpzZXNzMzMaCWJiOnNlc3MzNBoJYmI6c2VzczM1GgliYjpzZXNzMzYaCWJiOnNlc3MzNxoJYmI6c2VzczM4GgliYjpzZXN'
- 'zMzkaCGJiOnNlc3M0GgliYjpzZXNzNDAaCWJiOnNlc3M0MRoJYmI6c2VzczQyGgliYjpzZXNzNDMaCWJiOnNlc3M0NBoJYmI6'
- 'c2VzczQ1GgliYjpzZXNzNDYaCWJiOnNlc3M0NxoJYmI6c2VzczQ4GgliYjpzZXNzNDkaCGJiOnNlc3M1GgliYjpzZXNzNTAaC'
- 'WJiOnNlc3M1MRoJYmI6c2VzczUyGgliYjpzZXNzNTMaCWJiOnNlc3M1NBoJYmI6c2VzczU1GgliYjpzZXNzNTYaCWJiOnNlc3'
- 'M1NxoJYmI6c2VzczU4GgliYjpzZXNzNTkaCGJiOnNlc3M2GgliYjpzZXNzNjAaCWJiOnNlc3M2MRoJYmI6c2VzczYyGgliYjp'
- 'zZXNzNjMaCWJiOnNlc3M2NBoJYmI6c2VzczY1GgliYjpzZXNzNjYaCWJiOnNlc3M2NxoJYmI6c2VzczY4GgliYjpzZXNzNjka'
- 'CGJiOnNlc3M3GgliYjpzZXNzNzAaCWJiOnNlc3M3MRoJYmI6c2VzczcyGgliYjpzZXNzNzMaCWJiOnNlc3M3NBoJYmI6c2Vzc'
- 'zc1GgliYjpzZXNzNzYaCWJiOnNlc3M3NxoJYmI6c2Vzczc4GgliYjpzZXNzNzkaCGJiOnNlc3M4GgliYjpzZXNzODAaCWJiOn'
- 'Nlc3M4MRoJYmI6c2VzczgyGgliYjpzZXNzODMaCWJiOnNlc3M4NBoJYmI6c2Vzczg1GgliYjpzZXNzODYaCWJiOnNlc3M4Nxo'
- 'JYmI6c2Vzczg4GgliYjpzZXNzODkaCGJiOnNlc3M5GgliYjpzZXNzOTAaCWJiOnNlc3M5MRoJYmI6c2VzczkyGgliYjpzZXNz'
- 'OTMaCWJiOnNlc3M5NBoJYmI6c2Vzczk1GgliYjpzZXNzOTYaCWJiOnNlc3M5NxoJYmI6c2Vzczk4GgliYjpzZXNzOTkgEigB:'
- 'CX8PIOrxJnQqFXl7wAsiHJ_1VGjoI-asNlCXb8SE8jtI2vdh9x6CqbAurSgIlAAEgotVP-nuUR38x_a9YJuXzmG5AvJ458apW'
- 'QtODHIDIX6ZaIwMxjS02R7S5LNqXa0gAuU_R6bCWpZdWe2uLMkdpu5KHbDgW08g-uaP_nceDOk'
-)
-
-
-def test_context():
- UserContext(BlackboxEnv.Test, tau.TVMKNIFE_PUBLIC_KEYS)
-
-
-def test_context_exceptions():
- with pytest.raises(MalformedTvmKeysException):
- UserContext(BlackboxEnv.Test, MALFORMED_TVM_KEYS)
- with pytest.raises(EmptyTvmKeysException):
- UserContext(BlackboxEnv.Stress, EMPTY_TVM_KEYS)
-
-
-def test_ticket():
- user_context = UserContext(BlackboxEnv.Test, tau.TVMKNIFE_PUBLIC_KEYS)
- ticket = user_context.check(VALID_USER_TICKET_1)
- assert ticket.scopes == ['bb:sess1', 'bb:sess2']
- assert ticket.has_scope('bb:sess1')
- assert ticket.has_scope('bb:sess2')
- assert not ticket.has_scope('bb:sess3')
- assert ticket.uids == [456, 123]
- assert ticket.default_uid == 456
- assert (
- ticket.debug_info
- == 'ticket_type=user;expiration_time=9223372036854775807;scope=bb:sess1;scope=bb:sess2;default_uid=456;uid=456;uid=123;env=Test;'
- )
- assert VALID_USER_TICKET_SIGNLESS_1 == tvmauth.utils.remove_ticket_signature(VALID_USER_TICKET_1)
- assert (
- repr(ticket)
- == 'ticket_type=user;expiration_time=9223372036854775807;scope=bb:sess1;scope=bb:sess2;default_uid=456;uid=456;uid=123;env=Test;'
- )
- assert (
- str(ticket)
- == 'ticket_type=user;expiration_time=9223372036854775807;scope=bb:sess1;scope=bb:sess2;default_uid=456;uid=456;uid=123;env=Test;'
- )
-
-
-def test_ticket_exceptions():
- user_context = UserContext(BlackboxEnv.Test, tau.TVMKNIFE_PUBLIC_KEYS)
- with pytest.raises(TicketParsingException) as ex:
- user_context.check(SIGN_BROKEN_USER_TICKET)
- assert ex.value.status == TicketStatus.SignBroken
- assert (
- ex.value.debug_info
- == 'ticket_type=user;expiration_time=9223372036854775807;scope=bb:sess1;scope=bb:sess2;default_uid=456;uid=456;uid=123;env=Test;'
- )
-
- with pytest.raises(TicketParsingException) as ex:
- user_context.check(MALFORMED_USER_TICKET)
- assert ex.value.status == TicketStatus.Malformed
- assert ex.value.debug_info == 'status=malformed;'
-
- with pytest.raises(TicketParsingException) as ex:
- user_context.check(VALID_SERVICE_TICKET)
- assert ex.value.status == TicketStatus.InvalidTicketType
- assert ex.value.debug_info == 'ticket_type=not-user;'
-
- user_context = UserContext(BlackboxEnv.Prod, tau.TVMKNIFE_PUBLIC_KEYS)
- with pytest.raises(TicketParsingException) as ex:
- user_context.check(VALID_USER_TICKET_1)
- assert ex.value.status == TicketStatus.InvalidBlackboxEnv
-
-
-def test_create_ticket_for_tests():
- with pytest.raises(TicketParsingException):
- tau.create_user_ticket_for_unittest(TicketStatus.Expired, 42, ['ololo', 'abc'])
- u = tau.create_user_ticket_for_unittest(TicketStatus.Ok, 42, ['ololo', 'abc'], [23, 56])
- assert u
- assert u.default_uid == 42
- assert u.scopes == ['abc', 'ololo']
- assert u.uids == [23, 42, 56]
- assert u.debug_info == 'ticket_type=user;scope=abc;scope=ololo;default_uid=42;uid=23;uid=42;uid=56;env=Test;'
-
- with pytest.raises(Exception):
- tau.create_user_ticket_for_unittest(TicketStatus.Ok, 0)
-
-
-def test_non_ascii():
- class _Ins(object):
- def debug_info(self):
- return u'Люблю яблоки'
-
- u = CheckedUserTicket(_Ins())
- assert str(u) == 'Люблю яблоки'
- if six.PY2:
- assert unicode(u) == u'Люблю яблоки' # noqa
diff --git a/library/python/tvmauth/src/ut_without_sanitizer/roles/mapping.yaml b/library/python/tvmauth/src/ut_without_sanitizer/roles/mapping.yaml
deleted file mode 100644
index d2fcaead59..0000000000
--- a/library/python/tvmauth/src/ut_without_sanitizer/roles/mapping.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-slugs:
- some_slug_2:
- tvmid:
- - 1000502
- - 1000503
diff --git a/library/python/tvmauth/src/ut_without_sanitizer/roles/some_slug_2.json b/library/python/tvmauth/src/ut_without_sanitizer/roles/some_slug_2.json
deleted file mode 100644
index 84d85fae19..0000000000
--- a/library/python/tvmauth/src/ut_without_sanitizer/roles/some_slug_2.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "revision": "some_revision_2",
- "born_date": 1642160002,
- "tvm": {
- "1000000001": {
- "/role/service/read/": [{}],
- "/role/service/write/": [{
- "foo": "bar",
- "kek": "lol"
- }]
- }
- },
- "user": {
- "1120000000000001": {
- "/role/user/write/": [{}],
- "/role/user/read/": [{
- "foo": "bar",
- "kek": "lol"
- }]
- }
- }
-}
diff --git a/library/python/tvmauth/src/ut_without_sanitizer/test_roles.py b/library/python/tvmauth/src/ut_without_sanitizer/test_roles.py
deleted file mode 100644
index c3bf83c770..0000000000
--- a/library/python/tvmauth/src/ut_without_sanitizer/test_roles.py
+++ /dev/null
@@ -1,332 +0,0 @@
-from __future__ import print_function
-
-import os
-
-import tvmauth
-import tvmauth.unittest
-
-from tvmauth.exceptions import TicketParsingException
-
-import pytest
-
-
-def _get_port(filename):
- assert os.path.isfile(filename)
-
- with open(filename) as f:
- return int(f.read())
-
-
-def get_tvmtool_params():
- return _get_port("tvmtool.port"), open("tvmtool.authtoken").read()
-
-
-def get_tvmapi_port():
- return _get_port("tvmapi.port")
-
-
-def get_tirole_port():
- return _get_port("tirole.port")
-
-
-def create_client_with_tirole(check_src_by_default=None, check_default_uid_by_default=None):
- args = {
- "self_tvm_id": 1000502,
- "self_secret": "e5kL0vM3nP-nPf-388Hi6Q",
- "disk_cache_dir": "./",
- "fetch_roles_for_idm_system_slug": "some_slug_2",
- "enable_service_ticket_checking": True,
- "enable_user_ticket_checking": tvmauth.BlackboxEnv.ProdYateam,
- "localhost_port": get_tvmapi_port(),
- "tirole_host": "http://localhost",
- "tirole_port": get_tirole_port(),
- "tirole_tvmid": 1000001,
- }
-
- if check_src_by_default is not None:
- args["check_src_by_default"] = check_src_by_default
- if check_default_uid_by_default is not None:
- args["check_default_uid_by_default"] = check_default_uid_by_default
-
- return tvmauth.TvmClient(tvmauth.TvmApiClientSettings(**args))
-
-
-def create_client_with_tvmtool(check_src_by_default=None, check_default_uid_by_default=None):
- port, authtoken = get_tvmtool_params()
-
- args = {
- "self_alias": "me",
- "auth_token": authtoken,
- "port": port,
- }
-
- if check_src_by_default is not None:
- args["check_src_by_default"] = check_src_by_default
- if check_default_uid_by_default is not None:
- args["check_default_uid_by_default"] = check_default_uid_by_default
-
- return tvmauth.TvmClient(tvmauth.TvmToolClientSettings(**args))
-
-
-def check_service_no_roles(clients_with_autocheck=[], clients_without_autocheck=[]):
- # src=1000000000: tvmknife unittest service -s 1000000000 -d 1000502
- st_without_roles = (
- "3:serv:CBAQ__________9_IgoIgJTr3AMQtog9:"
- "Sv3SKuDQ4p-2419PKqc1vo9EC128K6Iv7LKck5SyliJZn5gTAqMDAwb9aYWHhf49HTR-Qmsjw4i_Lh-sNhge-JHWi5PTGFJm03CZHOCJG9Y0_G1pcgTfodtAsvDykMxLhiXGB4N84cGhVVqn1pFWz6SPmMeKUPulTt7qH1ifVtQ"
- )
-
- for cl in clients_with_autocheck:
- with pytest.raises(TicketParsingException):
- cl.check_service_ticket(st_without_roles)
-
- for cl in clients_without_autocheck:
- checked = cl.check_service_ticket(st_without_roles)
- assert {} == cl.get_roles().get_service_roles(checked)
-
-
-def check_service_has_roles(clients_with_autocheck=[], clients_without_autocheck=[]):
- # src=1000000001: tvmknife unittest service -s 1000000001 -d 1000502
- st_with_roles = (
- "3:serv:CBAQ__________9_IgoIgZTr3AMQtog9:"
- "EyPympmoLBM6jyiQLcK8ummNmL5IUAdTvKM1do8ppuEgY6yHfto3s_WAKmP9Pf9EiNqPBe18HR7yKmVS7gvdFJY4gP4Ut51ejS-iBPlsbsApJOYTgodQPhkmjHVKIT0ub0pT3fWHQtapb8uimKpGcO6jCfopFQSVG04Ehj7a0jw"
- )
-
- def check(cl):
- checked = cl.check_service_ticket(st_with_roles)
-
- client_roles = cl.get_roles()
- roles = client_roles.get_service_roles(checked)
- assert roles == {
- '/role/service/read/': [{}],
- '/role/service/write/': [
- {
- 'foo': 'bar',
- 'kek': 'lol',
- },
- ],
- }
- assert client_roles.check_service_role(
- checked_ticket=checked,
- role='/role/service/read/',
- )
- assert client_roles.check_service_role(
- checked_ticket=checked,
- role='/role/service/write/',
- )
- assert not client_roles.check_service_role(checked_ticket=checked, role='/role/foo/')
-
- assert not client_roles.check_service_role(
- checked_ticket=checked,
- role='/role/service/read/',
- exact_entity={'foo': 'bar', 'kek': 'lol'},
- )
- assert not client_roles.check_service_role(
- checked_ticket=checked,
- role='/role/service/write/',
- exact_entity={'kek': 'lol'},
- )
- assert client_roles.check_service_role(
- checked_ticket=checked,
- role='/role/service/write/',
- exact_entity={'foo': 'bar', 'kek': 'lol'},
- )
-
- with pytest.raises(AttributeError):
- client_roles.check_service_role(
- checked_ticket=checked,
- role='/role/service/read/',
- exact_entity={'foo': 45},
- )
-
- for cl in clients_with_autocheck:
- check(cl)
- for cl in clients_without_autocheck:
- check(cl)
-
-
-def check_user_no_roles(clients_with_autocheck=[], clients_without_autocheck=[]):
- # default_uid=1000000000: tvmknife unittest user -d 1000000000 --env prod_yateam
- ut = (
- "3:user:CAwQ__________9_GhYKBgiAlOvcAxCAlOvcAyDShdjMBCgC:"
- "LloRDlCZ4vd0IUTOj6MD1mxBPgGhS6EevnnWvHgyXmxc--2CVVkAtNKNZJqCJ6GtDY4nknEnYmWvEu6-MInibD-Uk6saI1DN-2Y3C1Wdsz2SJCq2OYgaqQsrM5PagdyP9PLrftkuV_ZluS_FUYebMXPzjJb0L0ALKByMPkCVWuk"
- )
-
- for cl in clients_with_autocheck:
- with pytest.raises(TicketParsingException):
- cl.check_user_ticket(ut)
-
- for cl in clients_without_autocheck:
- checked = cl.check_user_ticket(ut)
- assert {} == cl.get_roles().get_user_roles(checked)
-
-
-def check_user_has_roles(clients_with_autocheck=[], clients_without_autocheck=[]):
- # default_uid=1120000000000001: tvmknife unittest user -d 1120000000000001 --env prod_yateam
- ut_with_roles = (
- "3:user:CAwQ__________9_GhwKCQiBgJiRpdT-ARCBgJiRpdT-ASDShdjMBCgC:"
- "SQV7Z9hDpZ_F62XGkSF6yr8PoZHezRp0ZxCINf_iAbT2rlEiO6j4UfLjzwn3EnRXkAOJxuAtTDCnHlrzdh3JgSKK7gciwPstdRT5GGTixBoUU9kI_UlxEbfGBX1DfuDsw_GFQ2eCLu4Svq6jC3ynuqQ41D2RKopYL8Bx8PDZKQc"
- )
-
- def check(cl):
- checked = cl.check_user_ticket(ut_with_roles)
-
- client_roles = cl.get_roles()
- roles = client_roles.get_user_roles(checked)
- assert roles == {
- '/role/user/write/': [{}],
- '/role/user/read/': [
- {
- 'foo': 'bar',
- 'kek': 'lol',
- },
- ],
- }
- assert client_roles.check_user_role(
- checked_ticket=checked,
- role='/role/user/write/',
- )
- assert client_roles.check_user_role(
- checked_ticket=checked,
- role='/role/user/read/',
- )
- assert not client_roles.check_user_role(checked_ticket=checked, role='/role/foo/')
-
- assert not client_roles.check_user_role(
- checked_ticket=checked,
- role='/role/user/write/',
- exact_entity={'foo': 'bar', 'kek': 'lol'},
- )
- assert not client_roles.check_user_role(
- checked_ticket=checked,
- role='/role/user/read/',
- exact_entity={'kek': 'lol'},
- )
- assert client_roles.check_user_role(
- checked_ticket=checked,
- role='/role/user/read/',
- exact_entity={'foo': 'bar', 'kek': 'lol'},
- )
-
- with pytest.raises(AttributeError):
- client_roles.check_user_role(
- checked_ticket=checked,
- role='/role/user/read/',
- exact_entity={'foo': 45},
- )
-
- for cl in clients_with_autocheck:
- check(cl)
- for cl in clients_without_autocheck:
- check(cl)
-
-
-def test_roles_from_tirole_check_src__no_roles():
- client_with_autocheck1 = create_client_with_tirole(check_src_by_default=None)
- client_with_autocheck2 = create_client_with_tirole(check_src_by_default=True)
- client_without_autocheck = create_client_with_tirole(check_src_by_default=False)
-
- check_service_no_roles(
- clients_with_autocheck=[client_with_autocheck1, client_with_autocheck2],
- clients_without_autocheck=[client_without_autocheck],
- )
-
- client_with_autocheck1.stop()
- client_with_autocheck2.stop()
- client_without_autocheck.stop()
-
-
-def test_roles_from_tirole_check_src__has_roles():
- client_with_autocheck = create_client_with_tirole(check_src_by_default=True)
- client_without_autocheck = create_client_with_tirole(check_src_by_default=False)
-
- check_service_has_roles(
- clients_with_autocheck=[client_with_autocheck],
- clients_without_autocheck=[client_without_autocheck],
- )
-
- client_with_autocheck.stop()
- client_without_autocheck.stop()
-
-
-def test_roles_from_tirole_check_default_uid__no_roles():
- client_with_autocheck1 = create_client_with_tirole(check_default_uid_by_default=None)
- client_with_autocheck2 = create_client_with_tirole(check_default_uid_by_default=True)
- client_without_autocheck = create_client_with_tirole(check_default_uid_by_default=False)
-
- check_user_no_roles(
- clients_with_autocheck=[client_with_autocheck1, client_with_autocheck2],
- clients_without_autocheck=[client_without_autocheck],
- )
-
- client_with_autocheck1.stop()
- client_with_autocheck2.stop()
- client_without_autocheck.stop()
-
-
-def test_roles_from_tirole_check_default_uid__has_roles():
- client_with_autocheck = create_client_with_tirole(check_default_uid_by_default=True)
- client_without_autocheck = create_client_with_tirole(check_default_uid_by_default=False)
-
- check_user_has_roles(
- clients_with_autocheck=[client_with_autocheck],
- clients_without_autocheck=[client_without_autocheck],
- )
-
- client_with_autocheck.stop()
- client_without_autocheck.stop()
-
-
-def test_roles_from_tvmtool_check_src__no_roles():
- client_with_autocheck1 = create_client_with_tvmtool(check_src_by_default=None)
- client_with_autocheck2 = create_client_with_tvmtool(check_src_by_default=True)
- client_without_autocheck = create_client_with_tvmtool(check_src_by_default=False)
-
- check_service_no_roles(
- clients_with_autocheck=[client_with_autocheck1, client_with_autocheck2],
- clients_without_autocheck=[client_without_autocheck],
- )
-
- client_with_autocheck1.stop()
- client_with_autocheck2.stop()
- client_without_autocheck.stop()
-
-
-def test_roles_from_tvmtool_check_src__has_roles():
- client_with_autocheck = create_client_with_tvmtool(check_src_by_default=True)
- client_without_autocheck = create_client_with_tvmtool(check_src_by_default=False)
-
- check_service_has_roles(
- clients_with_autocheck=[client_with_autocheck],
- clients_without_autocheck=[client_without_autocheck],
- )
-
- client_with_autocheck.stop()
- client_without_autocheck.stop()
-
-
-def test_roles_from_tvmtool_check_default_uid__no_roles():
- client_with_autocheck1 = create_client_with_tvmtool(check_default_uid_by_default=None)
- client_with_autocheck2 = create_client_with_tvmtool(check_default_uid_by_default=True)
- client_without_autocheck = create_client_with_tvmtool(check_default_uid_by_default=False)
-
- check_user_no_roles(
- clients_with_autocheck=[client_with_autocheck1, client_with_autocheck2],
- clients_without_autocheck=[client_without_autocheck],
- )
-
- client_with_autocheck1.stop()
- client_with_autocheck2.stop()
- client_without_autocheck.stop()
-
-
-def test_roles_from_tvmtool_check_default_uid__has_roles():
- client_with_autocheck = create_client_with_tvmtool(check_default_uid_by_default=True)
- client_without_autocheck = create_client_with_tvmtool(check_default_uid_by_default=False)
-
- check_user_has_roles(
- clients_with_autocheck=[client_with_autocheck],
- clients_without_autocheck=[client_without_autocheck],
- )
-
- client_with_autocheck.stop()
- client_without_autocheck.stop()
diff --git a/library/python/tvmauth/src/ut_without_sanitizer/tvmtool.cfg b/library/python/tvmauth/src/ut_without_sanitizer/tvmtool.cfg
deleted file mode 100644
index dbb8fcd458..0000000000
--- a/library/python/tvmauth/src/ut_without_sanitizer/tvmtool.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "BbEnvType": 2,
- "clients": {
- "me": {
- "secret": "fake_secret",
- "self_tvm_id": 1000502,
- "roles_for_idm_slug": "some_slug_2"
- }
- }
-}
diff --git a/library/python/tvmauth/src/utils.h b/library/python/tvmauth/src/utils.h
deleted file mode 100644
index 70168eae9b..0000000000
--- a/library/python/tvmauth/src/utils.h
+++ /dev/null
@@ -1,109 +0,0 @@
-#pragma once
-
-#include <library/cpp/tvmauth/version.h>
-#include <library/cpp/tvmauth/client/facade.h>
-#include <library/cpp/tvmauth/client/misc/utils.h>
-#include <library/cpp/tvmauth/client/misc/api/threaded_updater.h>
-#include <library/cpp/tvmauth/client/misc/tool/settings.h>
-
-#include <util/system/getpid.h>
-
-namespace NTvmAuthPy {
- class TPidCheckedClient: public NTvmAuth::TTvmClient {
- public:
- using TTvmClient::TTvmClient;
-
- TString GetServiceTicketFor(const NTvmAuth::TClientSettings::TAlias& dst) const {
- pid_.check();
- return TTvmClient::GetServiceTicketFor(dst);
- }
-
- TString GetServiceTicketFor(const NTvmAuth::TTvmId dst) const {
- pid_.check();
- return TTvmClient::GetServiceTicketFor(dst);
- }
-
- NTvmAuth::TCheckedServiceTicket CheckServiceTicket(TStringBuf ticket) const {
- pid_.check();
- return TTvmClient::CheckServiceTicket(ticket);
- }
-
- NTvmAuth::TCheckedUserTicket CheckUserTicket(TStringBuf ticket) const {
- pid_.check();
- return TTvmClient::CheckUserTicket(ticket);
- }
-
- NTvmAuth::TCheckedUserTicket CheckUserTicketWithOveridedEnv(TStringBuf ticket, NTvmAuth::EBlackboxEnv env) const {
- pid_.check();
- return TTvmClient::CheckUserTicket(ticket, env);
- }
-
- NTvmAuth::NRoles::TRolesPtr GetRoles() const {
- pid_.check();
- return TTvmClient::GetRoles();
- }
-
- private:
- struct TPidCheck {
- TPidCheck()
- : pid_(GetPID())
- {
- }
-
- void check() const {
- const TProcessId pid = GetPID();
- Y_ENSURE_EX(pid == pid_,
- NTvmAuth::TNonRetriableException()
- << "Creating TvmClient is forbidden before fork. Original pid: " << pid_
- << ". Current pid: " << pid);
- }
-
- private:
- const TProcessId pid_;
- } const pid_;
- };
-
- template <typename T>
- T&& Move(T& d) {
- return std::move(d);
- }
-
- template <typename T>
- THolder<T> ToHeap(T& t) {
- return MakeHolder<T>(std::move(t));
- }
-
- THolder<NTvmAuth::TServiceContext> CheckingFactory(NTvmAuth::TTvmId selfTvmId, TStringBuf tvmKeysResponse) {
- return MakeHolder<NTvmAuth::TServiceContext>(
- NTvmAuth::TServiceContext::CheckingFactory(selfTvmId, tvmKeysResponse));
- }
-
- THolder<NTvmAuth::TServiceContext> SigningFactory(TStringBuf secretBase64) {
- return MakeHolder<NTvmAuth::TServiceContext>(
- NTvmAuth::TServiceContext::SigningFactory(secretBase64));
- }
-
- TString GetServiceTicketForId(const TPidCheckedClient& cl, NTvmAuth::TTvmId dst) {
- return cl.GetServiceTicketFor(dst);
- }
-
- TPidCheckedClient* CreateTvmApiClient(NTvmAuth::NTvmApi::TClientSettings& s, NTvmAuth::TLoggerPtr logger) {
- s.LibVersionPrefix = "py_";
- return new TPidCheckedClient(s, logger);
- }
-
- class TTvmToolClientSettings: public NTvmAuth::NTvmTool::TClientSettings {
- public:
- using TClientSettings::TClientSettings;
- };
-
- TPidCheckedClient* CreateTvmToolClient(const TTvmToolClientSettings& s, NTvmAuth::TLoggerPtr logger) {
- return new TPidCheckedClient(s, logger);
- }
-
- TString GetPyVersion() {
- return TString("py_") + NTvmAuth::LibVersion();
- }
-
- using TOptUid = std::optional<NTvmAuth::TUid>;
-}
diff --git a/library/python/tvmauth/tvmauth/__init__.py b/library/python/tvmauth/tvmauth/__init__.py
deleted file mode 100644
index aa37868cf4..0000000000
--- a/library/python/tvmauth/tvmauth/__init__.py
+++ /dev/null
@@ -1,576 +0,0 @@
-from __future__ import print_function
-
-import datetime
-import enum
-import logging
-import threading
-
-import six
-import tvmauth.exceptions
-from tvmauth.tvmauth_pymodule import (
- __Logger as _Logger,
- __TvmClient as _TvmClient,
- __TvmApiClientSettings as _TvmApiClientSettings,
- __TvmToolClientSettings as _TvmToolClientSettings,
-)
-from tvmauth.tvmauth_pymodule import __version__ # noqa
-
-
-__doc__ = 'https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/README.md'
-
-
-TIROLE_TVMID = 2028120
-TIROLE_TVMID_TEST = 2026536
-
-
-class TicketStatus(enum.IntEnum):
- """
- TicketStatus mean result of ticket check
- """
-
- # Must be syncronized with __TicketStatus in .pyx
- Ok = 0
- Expired = 1
- InvalidBlackboxEnv = 2
- InvalidDst = 3
- InvalidTicketType = 4
- Malformed = 5
- MissingKey = 6
- SignBroken = 7
- UnsupportedVersion = 8
- NoRoles = 9
-
-
-class BlackboxEnv(enum.IntEnum):
- """
- BlackboxEnv describes environment of Passport:
- https://wiki.yandex-team.ru/passport/tvm2/user-ticket/#0-opredeljaemsjasokruzhenijami
- """
-
- Prod = 0
- Test = 1
- ProdYateam = 2
- TestYateam = 3
- Stress = 4
-
-
-class BlackboxTvmId(enum.Enum):
- Prod = '222'
- Test = '224'
- ProdYateam = '223'
- TestYateam = '225'
- Stress = '226'
- Mimino = '239'
-
-
-class TvmClientStatus(enum.IntEnum):
- """
- Description:
- https://a.yandex-team.ru/arc/trunk/arcadia/library/python/tvmauth/README.md#high-level-interface
- """
-
- Ok = 0
- Warn = 1
- Error = 2
-
-
-class TvmClientStatusExt:
- def __init__(self, code, last_error):
- self._code = code
- self._last_error = last_error
-
- def __eq__(self, other):
- if isinstance(other, TvmClientStatus):
- return other == self._code
- if isinstance(other, TvmClientStatusExt):
- return other._code == self._code and other._last_error == self._last_error
- raise TypeError('Unsupported type: %s' % type(other))
-
- @property
- def code(self):
- """
- Use only this prop to make decisions about client status
- """
- return self._code
-
- @property
- def last_error(self):
- """
- WARNING: this is a text description of some bad event or not.
- It can be changed in any moment - and it won't be API breaking change.
- """
- return self._last_error
-
-
-class TvmClient(object):
- """
- Long lived thread-safe object for interacting with TVM.
- Each client starts system thread. !!SO DO NOT FORK YOUR PROCESS AFTER CREATING TvmClient!!
- In 99% cases TvmClient shoud be created at service startup and live for the whole process lifetime.
- If your case in this 1% and you need to RESTART client, you should to use method 'stop()' for old client.
-
- You can get logs from 'TVM':
- log = logging.getLogger('TVM')
- """
-
- def __init__(self, settings):
- """
- :param settings: TvmApiClientSettings or TvmToolClientSettings - settings for client
-
- :raises `NonRetriableException`: Raised in case of settings validation fails.
- :raises `RetriableException`: Raised if network unavailable.
- """
- if not isinstance(settings, (TvmToolClientSettings, TvmApiClientSettings)):
- raise tvmauth.exceptions.BrokenTvmClientSettings(
- "'settings' must be instance of TvmApiClientSettings or TvmToolClientSettings"
- )
-
- self.__init_impl(settings)
-
- def __del__(self):
- self.stop()
-
- @property
- def status(self):
- """
- :return: Current status of client - :class:`~TvmClientStatus`
- """
- code, last_error = self._ins.status
- return TvmClientStatusExt(code, last_error)
-
- def get_service_ticket_for(self, alias=None, tvm_id=None):
- """
- Fetching must be enabled in TvmApiClientSettings
-
- :param alias: string - see docstring for TvmApiClientSettings.__init__
- :param tvm_id: int - any destination you specified in TvmApiClientSettings
-
- :raises `BrokenTvmClientSettings`: Raised in case of unconfigured using.
-
- :returns: string - ServiceTicket
- """
- return self._ins.get_service_ticket_for(alias, tvm_id)
-
- def check_service_ticket(self, ticket):
- """
- :param ticket: string - ticket body
-
- :raises `BrokenTvmClientSettings`: Raised in case of unconfigured using.
- :raises `TicketParsingException`: Raised in case of invalid ticket.
-
- :return: Valid ticket structure
- """
- return CheckedServiceTicket(self._ins.check_service_ticket(ticket))
-
- def check_user_ticket(self, ticket, overrided_bb_env=None):
- """
- :param ticket: string - ticket body
- :param overrided_bb_env: enum EBlackboxEnv
-
- :raises `BrokenTvmClientSettings`: Raised in case of unconfigured using.
- :raises `TicketParsingException`: Raised in case of invalid ticket.
-
- :return: Valid ticket structure
- """
- return CheckedUserTicket(self._ins.check_user_ticket(ticket, overrided_bb_env))
-
- def get_roles(self):
- return Roles(self._ins.get_roles())
-
- def stop(self):
- """
- First call will delete object. Next calls will be no-op.
- """
- if hasattr(self, '_task'):
- self._task.terminate()
- if hasattr(self, '_thread'):
- self._thread.join(1.0)
- if self._thread.is_alive():
- logging.getLogger('TVM').warning(
- "TVM client was not able to stop correctly, please call TVMClient.stop explicitly"
- )
- del self._thread
- if hasattr(self, '_ins'):
- self._ins.stop()
- # do not delete _ins:
- # it will throw correct exception if it was stopped and used afterwards
- if hasattr(self, '_task'):
- self._task.do()
- del self._task
-
- def __init_impl(self, settings):
- class __Task:
- def __init__(self, logger):
- self._stop_event = threading.Event()
- self._logger = logger
-
- log = logging.getLogger('TVM')
- self._loghandles = {
- 0: log.error,
- 1: log.error,
- 2: log.error,
- 3: log.error,
- 4: log.warning,
- 5: log.info,
- 6: log.info,
- 7: log.debug,
- }
-
- def terminate(self):
- self._stop_event.set()
-
- def do(self):
- for lvl, msg in self._logger.fetch():
- self._loghandles[lvl](msg)
-
- def run(self):
- while not self._stop_event.wait(0.5):
- self.do()
-
- logger = _Logger()
- self._task = __Task(logger)
-
- try:
- self._ins = _TvmClient(settings._ins, logger)
- except Exception:
- raise
- finally:
- self._task.do()
-
- self._thread = threading.Thread(target=self._task.run)
- self._thread.daemon = True
- self._thread.start()
-
-
-class TvmToolClientSettings(object):
- """
- Uses local http-interface to get state: http://localhost/tvm/.
- This interface can be provided with tvmtool (local daemon) or Qloud/YP (local http api in container).
- See more: https://wiki.yandex-team.ru/passport/tvm2/qloud/.
- """
-
- def __init__(
- self,
- self_alias,
- auth_token=None,
- port=None,
- hostname="localhost",
- override_bb_env=None,
- check_src_by_default=True,
- check_default_uid_by_default=True,
- ):
- """
- Examples:
- - Ctor for Qloud:
- TvmToolClientSettings("me") # 'me' was specified as alias for your tvm tvm_id in Yandex.Deploy interface
- - Ctor for local tvmtool:
- TvmToolClientSettings("me", auth_token="AAAAAAAAAAAAAAAAAAAAAA", port=18080)
- - Ctor for remote tvmtool - in dev-environment (if you need this):
- TvmToolClientSettings("me", auth_token="AAAAAAAAAAAAAAAAAAAAAA", port=18080, hostname="front.dev.yandex.net")
- - Get ticket from client:
- c = TvmClient(TvmToolClientSettings("me")) # 'me' was specified as alias for your tvm client in Yandex.Deploy interface
- t = c.get_service_ticket_for("push-client") # 'push-client' was specified as alias for dst in Yandex.Deploy interface
- t = c.get_service_ticket_for(100500) # 100500 was specified as dst in Yandex.Deploy interface
- - Check user ticket for another bb_env:
- TvmToolClientSettings("me", override_bb_env=BlackboxEnv.ProdYateam) # BlackboxEnv.Prod was specified for tvmtool
-
- :param self_alias: string - alias for your tvm_id.
- Needs to be specified in settings of tvmtool/Yandex.Deploy
- :param auth_token: string - it is protection from SSRF.
- Default value == env['TVMTOOL_LOCAL_AUTHTOKEN'] (provided with Yandex.Deploy)
- or env['QLOUD_TVM_TOKEN'] (provided with Qloud)
- :param port: int - TCP port for HTTP-interface provided with tvmtool/Yandex.Deploy.
- Default value from env['DEPLOY_TVM_TOOL_URL'] (provided with Yandex.Deploy),
- otherwise port == 1 (it is ok for Qloud).
- :param hostname: string - hostname for tvmtool
- :param override_bb_env: enum EBlackboxEnv - blackbox enviroment overrides env from tvmtool. Allowed only:
- - Prod/ProdYateam -> Prod/ProdYateam
- - Test/TestYateam -> Test/TestYateam
- - Stress -> Stress
- You can contact tvm-dev@yandex-team.ru if limitations are too strict
- :param check_src_by_default: boolean - should TvmClient check src in ServiceTickets - it does only binary check:
- CheckedServiceTicket gets status NoRoles, if there is no role for src.
- If you have a non-binary role system you need to check exact role yourself.
- :param check_default_uid_by_default: boolean - should TvmClient check default_uid in UserTickets - it does only binary check:
- CheckedUserTicket gets status NoRoles, if there is no role for default_uid.
- If you have a non-binary role system or you need roles for non-default uids,
- you need to check exact role yourself.
- """
- self._ins = _TvmToolClientSettings(
- self_alias=self_alias,
- auth_token=auth_token,
- port=port,
- hostname=hostname,
- override_bb_env=override_bb_env,
- check_src_by_default=check_src_by_default,
- check_default_uid_by_default=check_default_uid_by_default,
- )
-
-
-class TvmApiClientSettings(object):
- """
- Settings for TVM client. Uses https://tvm-api.yandex.net to get state.
- """
-
- def __init__(
- self,
- self_tvm_id=None,
- enable_service_ticket_checking=False,
- enable_user_ticket_checking=None,
- self_secret=None,
- dsts=None,
- disk_cache_dir=None,
- localhost_port=None,
- tvmapi_url=None,
- tirole_host=None,
- tirole_port=None,
- tirole_tvmid=None,
- fetch_roles_for_idm_system_slug=None,
- check_src_by_default=True,
- check_default_uid_by_default=True,
- ):
- """
- Examples:
- - Checking of ServiceTickets:
- TvmApiClientSettings(self_tvm_id=100500, enable_service_ticket_checking=True)
- - Checking of UserTickets:
- TvmApiClientSettings(enable_user_ticket_checking=BlackboxEnv.Test)
- - Fetching of ServiceTickets (with aliases):
- # init
- s = TvmApiClientSettings(
- self_tvm_id=100500,
- self_secret='my_secret',
- dsts={'my backend': int(config.get_back_tvm_id())},
- )
- ...
- # per request
- service_ticket_for_backend = c.get_service_ticket_for('my_backend')
-
- # Key in dict is internal ALIAS of destination in your code.
- # It allowes not to bring destination's tvm_id to each calling point.
- - Fetching of ServiceTickets (with tvm_id):
- # init
- s = TvmApiClientSettings(
- self_tvm_id=100500,
- self_secret='my_secret',
- dsts=[42],
- )
- ...
- # per request
- service_ticket_for_backend = c.get_service_ticket_for(42)
-
- :param self_tvm_id: int - tvm_id of your service
- :param enable_service_ticket_checking: boolean - flag for SeviceTicket checking
- this option enables fetching of public keys for signature checking
- :param enable_user_ticket_checking: enum EBlackboxEnv - blackbox enviroment enables UserTicket checking with env
- and enables fetching of public keys for signature checking
- :param self_secret: string - TVM-secret of your service
- :param dsts: dict (string -> int) - map of alias to tvm_id of your destination
- or list (int) - tvm_id of your destination
- WARNING: It is not way to provide authorization for incoming ServiceTickets!
- It is way only to send your ServiceTickets to your backend!
- :param disk_cache_dir: string - directory should exist
- Set path to directory for disk cache
- Requires read/write permissions. Checks permissions
- WARNING: The same directory can be used only:
- - for TVM clients with the same settings
- OR
- - for new client replacing previous - with another config.
- System user must be the same for processes with these clients inside.
- Implementation doesn't provide other scenarios.
- :param localhost_port: int - Switch client to use tvm-api on localhost with provided port
- :param tvmapi_url: string - Switch client to use tvm-api with custom url: i.e., for proxy
-
- :param tirole_host: string - source of IDM roles
- :param tirole_port: int - source of IDM roles
- :param tirole_tvmid: int - tvm_id of tirole: look at experimental.py
- :param fetch_roles_for_idm_system_slug: string - unique name of IDM system
- :param check_src_by_default: boolean - should TvmClient check src in ServiceTickets - it does only binary check:
- CheckedServiceTicket gets status NoRoles, if there is no role for src.
- If you have a non-binary role system you need to check exact role yourself.
- :param check_default_uid_by_default: boolean - should TvmClient check default_uid in UserTickets - it does only binary check:
- CheckedUserTicket gets status NoRoles, if there is no role for default_uid.
- If you have a non-binary role system or you need roles for non-default uids,
- you need to check exact role yourself.
-
- Some guide for tirole options:
- https://wiki.yandex-team.ru/passport/tvm2/tirole/#3.a.ispolzovatbibliotekutvmauth
-
- :raises `~BrokenTvmClientSettings`: Raised in case of settings validation fails.
- """
-
- self._ins = _TvmApiClientSettings(
- self_tvm_id,
- enable_service_ticket_checking,
- enable_user_ticket_checking,
- self_secret,
- dsts,
- disk_cache_dir,
- localhost_port,
- tvmapi_url,
- tirole_host,
- tirole_port,
- tirole_tvmid,
- fetch_roles_for_idm_system_slug,
- check_src_by_default,
- check_default_uid_by_default,
- )
-
-
-@six.python_2_unicode_compatible
-class CheckedServiceTicket(object):
- def __init__(self, ins=None):
- self._ins = ins
-
- def __str__(self):
- return self.debug_info
-
- def __repr__(self):
- return str(self)
-
- def __nonzero__(self):
- return self._ins.__nonzero__()
-
- @property
- def src(self):
- """
- You should check SrcID by yourself with your ACL.
-
- :return: ID of request source service
- """
- return self._ins.src
-
- @property
- def debug_info(self):
- """
- :return: Human readable data for debug purposes
- """
- return self._ins.debug_info()
-
- @property
- def issuer_uid(self):
- """
- IssuerUID is UID of developer who is debuging something, so he(she) issued ServiceTicket with his(her) ssh-sign:
- it is grant_type=sshkey in tvm-api
- https://wiki.yandex-team.ru/passport/tvm2/debug/#sxoditvapizakrytoeserviceticketami.
-
- :return: UID or `None`
- """
- return self._ins.issuer_uid
-
-
-@six.python_2_unicode_compatible
-class CheckedUserTicket(object):
- """
- CheckedUserTicket contains only valid users.
- Details: https://wiki.yandex-team.ru/passport/tvm2/user-ticket/#chtoestvusertickete
- """
-
- def __init__(self, ins=None):
- self._ins = ins
-
- def __str__(self):
- return self.debug_info
-
- def __repr__(self):
- return str(self)
-
- def __nonzero__(self):
- return self._ins.__nonzero__()
-
- @property
- def default_uid(self):
- """
- Default UID maybe 0
-
- :return: default user
- """
- return self._ins.default_uid
-
- @property
- def uids(self):
- """
- UIDs is array of valid users - never empty
-
- :return: Array of valid users
- """
- return self._ins.uids
-
- @property
- def scopes(self):
- """
- Scopes is array of scopes inherited from credential - never empty
-
- :return: Array of scopes
- """
- return self._ins.scopes
-
- def has_scope(self, scope_name):
- return self._ins.has_scope(scope_name)
-
- @property
- def debug_info(self):
- """
- :return: Human readable data for debug purposes
- """
- return self._ins.debug_info()
-
-
-class Roles(object):
- def __init__(self, ins=None):
- self._ins = ins
-
- @property
- def meta(self):
- r, b, a = self._ins.meta
- return {
- 'revision': r,
- 'born_time': datetime.datetime.fromtimestamp(b),
- 'applied': datetime.datetime.fromtimestamp(a),
- }
-
- @property
- def raw(self):
- """
- :return: string
- """
- return self._ins.raw
-
- def get_service_roles(self, checked_ticket):
- """
- :param checked_ticket: CheckedServiceTicket - your consumer
-
- :return: dict {str->list [dict {str->str}]} - entities by service roles
- """
- return self._ins.get_service_roles(checked_ticket._ins)
-
- def get_user_roles(self, checked_ticket, selected_uid=None):
- """
- :param checked_ticket: CheckedUserTicket - your consumer, default_uid is used by default
- :param selected_uid: int - uid in CheckedUserTicket (probably not default_uid)
-
- :return: dict {str->list [dict {str->str}]} - entities by user roles
- """
- return self._ins.get_user_roles(checked_ticket._ins, selected_uid)
-
- def check_service_role(self, checked_ticket, role, exact_entity=None):
- """
- :param checked_ticket: CheckedServiceTicket - your consumer
- :param role: str - required role for consumer's action
- :param exact_entity: dict {str->str} - consumer must have role for this entity
-
- :return: bool - has role or not
- :raises `NonRetriableException`: Raised in case of settings validation fails.
- """
- return self._ins.check_service_role(checked_ticket._ins, role, exact_entity)
-
- def check_user_role(self, checked_ticket, role, selected_uid=None, exact_entity=None):
- """
- :param checked_ticket: CheckedUserTicket - your consumer, default_uid is used by default
- :param role: str - required role for consumer's action
- :param selected_uid: int - uid in CheckedUserTicket (probably not default_uid)
- :param exact_entity: dict {str->str} - consumer must have role for this entity
-
- :return: bool - has role or not
- """
- return self._ins.check_user_role(checked_ticket._ins, role, selected_uid, exact_entity)
diff --git a/library/python/tvmauth/tvmauth/deprecated.py b/library/python/tvmauth/tvmauth/deprecated.py
deleted file mode 100644
index 99e2d762dc..0000000000
--- a/library/python/tvmauth/tvmauth/deprecated.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from tvmauth import (
- CheckedServiceTicket,
- CheckedUserTicket,
-)
-from tvmauth.tvmauth_pymodule import (
- __ServiceContext,
- __UserContext,
-)
-
-
-class ServiceContext(__ServiceContext):
- """
- WARNING: it is low level API: first of all try use TvmClient.
- Long lived object for keeping client's credentials for TVM
- """
-
- def __init__(self, *args, **kwargs):
- self.__base_class().__init__(*args, **kwargs)
-
- def check(self, ticket_body):
- return CheckedServiceTicket(self.__base_class().check(ticket_body))
-
- def sign(self, timestamp, dst, scopes=None):
- return self.__base_class().sign(timestamp, dst, scopes)
-
- def __base_class(self):
- return super(ServiceContext, self)
-
-
-class UserContext(__UserContext):
- """
- WARNING: it is low level API: first of all try use TvmClient.
- Long lived object for keeping client's credentials for TVM
- """
-
- def __init__(self, *args, **kwargs):
- self.__base_class().__init__(*args, **kwargs)
-
- def check(self, ticket_body):
- return CheckedUserTicket(self.__base_class().check(ticket_body))
-
- def __base_class(self):
- return super(UserContext, self)
diff --git a/library/python/tvmauth/tvmauth/exceptions.py b/library/python/tvmauth/tvmauth/exceptions.py
deleted file mode 100644
index e3476bd673..0000000000
--- a/library/python/tvmauth/tvmauth/exceptions.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from tvmauth.tvmauth_pymodule import ( # noqa
- __BrokenTvmClientSettings as BrokenTvmClientSettings,
- __ClientException as ClientException,
- __ContextException as ContextException,
- __EmptyTvmKeysException as EmptyTvmKeysException,
- __MalformedTvmKeysException as MalformedTvmKeysException,
- __MalformedTvmSecretException as MalformedTvmSecretException,
- __MissingServiceTicket as MissingServiceTicket,
- __NonRetriableException as NonRetriableException,
- __PermissionDenied as PermissionDenied,
- __RetriableException as RetriableException,
- __TicketParsingException as TicketParsingException,
- __TvmException as TvmException,
-)
diff --git a/library/python/tvmauth/tvmauth/mock.py b/library/python/tvmauth/tvmauth/mock.py
deleted file mode 100644
index a8f7fdd386..0000000000
--- a/library/python/tvmauth/tvmauth/mock.py
+++ /dev/null
@@ -1,134 +0,0 @@
-from __future__ import absolute_import
-
-import tvmauth as ta
-import tvmauth.deprecated as tad
-import tvmauth.exceptions as tae
-import tvmauth.unittest as tau
-
-
-try:
- import mock # noqa
-except ImportError:
- import unittest.mock # noqa
-
-
-__doc__ = """
-Use TvmClientPatcher to replace TvmClient with MockedTvmClient.
-MockedTvmClient can check ServiceTickets and UserTickets from `tvmknife unittest`
-Read more: https://wiki.yandex-team.ru/passport/tvm2/debug/#tvmknife
-Examples are in docstring for TvmClientPatcher.
-"""
-
-
-class MockedTvmClient(object):
- def __init__(
- self,
- status=ta.TvmClientStatusExt(ta.TvmClientStatus.Ok, "OK"),
- self_tvm_id=100500,
- bb_env=ta.BlackboxEnv.Test,
- ):
- self._status = status
- self._serv_ctx = tad.ServiceContext(self_tvm_id, None, tau.TVMKNIFE_PUBLIC_KEYS)
- self._user_ctx = tad.UserContext(bb_env, tau.TVMKNIFE_PUBLIC_KEYS)
- self._stopped = False
-
- def __check(self):
- if self._stopped:
- raise tae.NonRetriableException("TvmClient is already stopped")
-
- def stop(self):
- self._stopped = True
-
- @property
- def status(self):
- self.__check()
- return self._status
-
- def get_service_ticket_for(self, alias=None, tvm_id=None):
- """
- You can generate any ticket you want with `tvmknife unittest` and override this function with your ticket
- https://wiki.yandex-team.ru/passport/tvm2/debug/
- """
- self.__check()
- if alias is None and tvm_id is None:
- raise tae.TvmException("One of args is required: 'alias' or 'tvm_id'")
- return "Some service ticket"
-
- def check_service_ticket(self, ticket):
- self.__check()
- return self._serv_ctx.check(ticket)
-
- def check_user_ticket(self, ticket):
- self.__check()
- return self._user_ctx.check(ticket)
-
-
-class TvmClientPatcher(object):
- """
- Example:
- with TvmClientPatcher():
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- assert 123 == c.check_service_ticket(SRV_TICKET).src
- assert 123 == c.check_user_ticket(USER_TICKET_TEST).default_uid
- assert 'Some service ticket' == c.get_service_ticket_for("foo")
-
- Example:
- with TvmClientPatcher(MockedTvmClient(self_tvm_id=100501)):
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(SRV_TICKET)
- assert 123 == c.check_user_ticket(TEST_TICKET).default_uid
- assert 'Some service ticket' == c.get_service_ticket_for("foo")
-
- Example:
- with TvmClientPatcher(MockedTvmClient()) as p:
- p.get_mocked_tvm_client().check_service_ticket = mock.Mock(
- side_effect=TicketParsingException("Unsupported version", Status.UnsupportedVersion, "2:err"),
- )
-
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- with pytest.raises(TicketParsingException):
- c.check_service_ticket(SRV_TICKET)
-
- Example:
- m = MockedTvmClient()
- m.get_service_ticket_for = mock.Mock(side_effect=[
- 'SERVICE_TICKET_FOR_MY_FIRST_CALL',
- 'SERVICE_TICKET_FOR_MY_SECOND_CALL'],
- )
- with TvmClientPatcher(m):
- c = TvmClient()
- assert TvmClientStatus.Ok == c.status
- assert 'SERVICE_TICKET_FOR_MY_FIRST_CALL' == c.get_service_ticket_for()
- assert 'SERVICE_TICKET_FOR_MY_SECOND_CALL' == c.get_service_ticket_for()
- """
-
- def __init__(self, mocked_tvm_client=None):
- if mocked_tvm_client is None:
- mocked_tvm_client = MockedTvmClient()
- self._mocked_tvm_client = mocked_tvm_client
- self._patch = mock.patch.object(
- ta.TvmClient,
- '__new__',
- mock.Mock(return_value=mocked_tvm_client),
- )
-
- def start(self):
- self._patch.start()
- return self
-
- def stop(self):
- self._patch.stop()
-
- def __enter__(self):
- self.start()
- return self
-
- def __exit__(self, exc_type, exc_val, exc_tb):
- self.stop()
-
- def get_mocked_tvm_client(self):
- return self._mocked_tvm_client
diff --git a/library/python/tvmauth/tvmauth/tvmauth_pymodule.pyx b/library/python/tvmauth/tvmauth/tvmauth_pymodule.pyx
deleted file mode 100644
index 12939407a4..0000000000
--- a/library/python/tvmauth/tvmauth/tvmauth_pymodule.pyx
+++ /dev/null
@@ -1,756 +0,0 @@
-# coding: utf-8
-import datetime
-import logging
-import six
-import time
-from cpython cimport PyObject
-from libcpp cimport bool as bool_t
-from libcpp.map cimport map as cmap
-from libcpp.memory cimport shared_ptr as cshared_ptr
-from libcpp.pair cimport pair
-from libcpp.vector cimport vector
-from libc.stdint cimport uint32_t, uint64_t
-from libc.time cimport time_t
-from cython.operator cimport dereference
-cimport cpython.ref as cpy_ref
-import urllib3.util
-
-from enum import IntEnum
-
-from util.datetime.base cimport TInstant
-from util.generic.hash cimport THashMap
-from util.generic.ptr cimport THolder
-from util.generic.string cimport TString, TStringBuf
-from util.generic.vector cimport TVector
-from util.generic.maybe cimport TMaybe
-
-
-__doc__ = 'WARNING: This is internal part of library - so it is not the public API of library. It could be changed without changing of major version.'
-
-
-cdef extern from "Python.h":
- """
- #if PY_VERSION_HEX < 0x03090000
- #define _TA_InitThreads() PyEval_InitThreads()
- #else
- #define _TA_InitThreads()
- #endif
- """
- void TA_InitThreads "_TA_InitThreads"()
-
-class __TvmException(Exception):
- pass
-
-class __ContextException(__TvmException):
- pass
-
-class __EmptyTvmKeysException(__ContextException):
- pass
-
-class __MalformedTvmKeysException(__ContextException):
- pass
-
-class __MalformedTvmSecretException(__ContextException):
- pass
-
-class NotAllowedException(__TvmException):
- pass
-
-class __ClientException(__TvmException):
- pass
-
-class __RetriableException(__ClientException):
- pass
-
-class __NonRetriableException(__ClientException):
- pass
-
-class __BrokenTvmClientSettings(__NonRetriableException):
- pass
-
-class __MissingServiceTicket(__NonRetriableException):
- pass
-
-class __PermissionDenied(__NonRetriableException):
- pass
-
-@six.python_2_unicode_compatible
-class __TicketParsingException(__TvmException):
- def __init__(self, message, status, debug_info):
- self.message = message
- self.status = status
- self.debug_info = debug_info
-
- def __str__(self):
- return u'%s: %s' % (self.message, self.debug_info)
-
-
-cdef public PyObject* TA_pyEmptyTvmKeysException = <PyObject*>__EmptyTvmKeysException
-cdef public PyObject* TA_pyMalformedTvmKeysException = <PyObject*>__MalformedTvmKeysException
-cdef public PyObject* TA_pyMalformedTvmSecretException = <PyObject*>__MalformedTvmSecretException
-cdef public PyObject* TA_pyNotAllowedException = <PyObject*>NotAllowedException
-cdef public PyObject* TA_pyClientException = <PyObject*>__ClientException
-cdef public PyObject* TA_pyBrokenTvmClientSettings = <PyObject*>__BrokenTvmClientSettings
-cdef public PyObject* TA_pyRetriableException = <PyObject*>__RetriableException
-cdef public PyObject* TA_pyNonRetriableException = <PyObject*>__NonRetriableException
-cdef public PyObject* TA_pyMissingServiceTicket = <PyObject*>__MissingServiceTicket
-cdef public PyObject* TA_pyPermissionDenied = <PyObject*>__PermissionDenied
-
-
-cdef extern from "library/cpp/containers/stack_vector/stack_vec.h" nogil:
- cdef cppclass TSmallVec[T](TVector):
- pass
-
-cdef extern from "library/python/tvmauth/src/exception.h":
- cdef void TA_raise_py_error()
-
-cdef extern from "library/cpp/tvmauth/ticket_status.h" namespace "NTvmAuth" nogil:
- cdef cppclass EStatus "NTvmAuth::ETicketStatus":
- pass
- TStringBuf StatusToString(EStatus status)
-
-cdef extern from "library/cpp/tvmauth/ticket_status.h" namespace "NTvmAuth::ETicketStatus" nogil:
- cdef EStatus cOk "NTvmAuth::ETicketStatus::Ok"
- cdef EStatus cExpired "NTvmAuth::ETicketStatus::Expired"
- cdef EStatus cInvalidBlackboxEnv "NTvmAuth::ETicketStatus::InvalidBlackboxEnv"
- cdef EStatus cInvalidDst "NTvmAuth::ETicketStatus::InvalidDst"
- cdef EStatus cInvalidTicketType "NTvmAuth::ETicketStatus::InvalidTicketType"
- cdef EStatus cMalformed "NTvmAuth::ETicketStatus::Malformed"
- cdef EStatus cMissingKey "NTvmAuth::ETicketStatus::MissingKey"
- cdef EStatus cSignBroken "NTvmAuth::ETicketStatus::SignBroken"
- cdef EStatus cUnsupportedVersion "NTvmAuth::ETicketStatus::UnsupportedVersion"
- cdef EStatus cNoRoles "NTvmAuth::ETicketStatus::NoRoles"
-
-class __TicketStatus(IntEnum):
- """
- __TicketStatus mean result of ticket check
- """
- Ok = <int>cOk
- Expired = <int>cExpired
- InvalidBlackboxEnv = <int>cInvalidBlackboxEnv
- InvalidDst = <int>cInvalidDst
- InvalidTicketType = <int>cInvalidTicketType
- Malformed = <int>cMalformed
- MissingKey = <int>cMissingKey
- SignBroken = <int>cSignBroken
- UnsupportedVersion = <int>cUnsupportedVersion
- NoRoles = <int>cNoRoles
-
-cdef extern from "library/cpp/tvmauth/checked_user_ticket.h" namespace "NTvmAuth" nogil:
- cdef cppclass EBlackboxEnv "NTvmAuth::EBlackboxEnv":
- pass
-
-
-cdef extern from "library/cpp/tvmauth/type.h" namespace "NTvmAuth" nogil:
- ctypedef uint32_t TTvmId
- ctypedef uint64_t TUid
-
- cdef cppclass TScopes(TSmallVec[TStringBuf]):
- pass
-
- cdef cppclass TUids(TSmallVec[TUid]):
- pass
-
-cdef extern from "library/cpp/tvmauth/utils.h" namespace "NTvmAuth::NUtils" nogil:
- TStringBuf RemoveTicketSignature(TStringBuf ticketBody) except +TA_raise_py_error
-
-cdef extern from "library/cpp/tvmauth/src/service_impl.h" namespace "NTvmAuth" nogil:
- cdef cppclass TCheckedServiceTicket:
- bool_t operator bool() except +TA_raise_py_error
- TString DebugInfo() except +TA_raise_py_error
- TTvmId GetSrc() except +TA_raise_py_error
- EStatus GetStatus() except +TA_raise_py_error
- TMaybe[TUid] GetIssuerUid() except +TA_raise_py_error
-
- cdef cppclass TServiceContext:
- TServiceContext(TStringBuf secretBase64, int tvmId, TStringBuf tvmKeysResponse) except +TA_raise_py_error
- TCheckedServiceTicket Check(TStringBuf ticketBody) except +TA_raise_py_error
- TString SignCgiParamsForTvm(TStringBuf ts, TStringBuf dst, TStringBuf scopes) except +TA_raise_py_error const
-
-cdef extern from "library/cpp/tvmauth/unittest.h" namespace "NTvmAuth::NUnittest" nogil:
- TCheckedUserTicket CreateUserTicket(EStatus, TUid, TScopes, TUids, EBlackboxEnv) except +TA_raise_py_error
- TCheckedServiceTicket CreateServiceTicket(EStatus, TTvmId, TMaybe[TUid]) except +TA_raise_py_error
-
-cdef extern from "library/cpp/tvmauth/src/user_impl.h" namespace "NTvmAuth" nogil:
- cdef cppclass TCheckedUserTicket:
- bool_t operator bool() except +TA_raise_py_error
- bool_t HasScope(TStringBuf scopeName) except +TA_raise_py_error
- TString DebugInfo() except +TA_raise_py_error
- TUid GetDefaultUid() except +TA_raise_py_error
- time_t GetExpirationTime() except +TA_raise_py_error
- const TScopes& GetScopes() except +TA_raise_py_error
- EStatus GetStatus() except +TA_raise_py_error
- const TUids& GetUids() except +TA_raise_py_error
-
- cdef cppclass TUserContext:
- TUserContext(EBlackboxEnv env, TStringBuf tvmKeysResponse) except +TA_raise_py_error
- TCheckedUserTicket Check(TStringBuf ticketBody) except +TA_raise_py_error
-
-
-cdef extern from "library/cpp/tvmauth/client/misc/api/settings.h" namespace "NTvmAuth::NTvmApi" nogil:
- cdef cppclass TClientSettings:
- cppclass TDst:
- TDst(TTvmId) except +TA_raise_py_error
-
- ctypedef THashMap[TString, TDst] TDstMap
- ctypedef TVector[TDst] TDstVector
-
- TClientSettings() except +TA_raise_py_error
- void CheckValid() except +TA_raise_py_error
-
- TString DiskCacheDir
- TTvmId SelfTvmId
- TString Secret # Actual type is NSecretString::TSecretString, but for operator=() it is enough
-
- TDstVector FetchServiceTicketsForDsts
- TDstMap FetchServiceTicketsForDstsWithAliases
- bool_t CheckServiceTickets
- TMaybe[EBlackboxEnv] CheckUserTicketsWithBbEnv
-
- TString FetchRolesForIdmSystemSlug
- bool_t ShouldCheckSrc
- bool_t ShouldCheckDefaultUid
-
- TString TvmHost
- int TvmPort
- TString TiroleHost
- int TirolePort
- TTvmId TiroleTvmId
-
-
-cdef extern from "library/cpp/tvmauth/client/client_status.h" namespace "NTvmAuth" nogil:
- cdef cppclass TClientStatus:
- cppclass ECode "ECode":
- pass
- ECode GetCode()
- const TString& GetLastError()
-
-cdef extern from "library/python/tvmauth/src/utils.h" namespace "NTvmAuthPy" nogil:
- cdef cppclass TOptUid:
- TOptUid()
- TOptUid(TUid)
-
-
-cdef extern from "library/cpp/tvmauth/client/misc/roles/roles.h" namespace "NTvmAuth::NRoles" nogil:
- ctypedef cmap[TString, TString] TEntity
-
- cdef cppclass TEntities:
- bool_t Contains(const TEntity&) except +TA_raise_py_error
- vector[cshared_ptr[TEntity]]& GetEntitiesWithAttrs(const TEntity&) except +TA_raise_py_error
-
- ctypedef THashMap[TString, cshared_ptr[TEntities]] TEntitiesByRoles
-
- cdef cppclass TConsumerRoles:
- bool_t HasRole(TStringBuf) except +TA_raise_py_error
- TEntitiesByRoles& GetRoles() except +TA_raise_py_error
- cshared_ptr[TEntities] GetEntitiesForRole(const TStringBuf) except +TA_raise_py_error
- bool_t CheckRoleForExactEntity(TStringBuf, const TEntity&) except +TA_raise_py_error
-
- cdef cppclass TRoles:
- cppclass TMeta:
- TString Revision
- TInstant BornTime
- TInstant Applied
-
- const TMeta& GetMeta() except +TA_raise_py_error
- const TString& GetRaw() except +TA_raise_py_error
- cshared_ptr[TConsumerRoles] GetRolesForService(const TCheckedServiceTicket&) except +TA_raise_py_error
- cshared_ptr[TConsumerRoles] GetRolesForUser(const TCheckedUserTicket&, TOptUid) except +TA_raise_py_error
- bool_t CheckServiceRole(const TCheckedServiceTicket&, const TStringBuf) except +TA_raise_py_error
- bool_t CheckUserRole(const TCheckedUserTicket&, const TStringBuf, TOptUid) except +TA_raise_py_error
- bool_t CheckServiceRoleForExactEntity(const TCheckedServiceTicket&, const TStringBuf, const TEntity&) except +TA_raise_py_error
- bool_t CheckUserRoleForExactEntity(const TCheckedUserTicket&, const TStringBuf, const TEntity&, TOptUid) except +TA_raise_py_error
-
-
-cdef extern from "library/python/tvmauth/src/logger.h" namespace "NTvmAuthPy" nogil:
- cdef cppclass TPyLogger:
- TPyLogger(cpy_ref.PyObject *obj)
- cppclass TPyLoggerPtr:
- TPyLoggerPtr()
- @staticmethod
- TPyLoggerPtr Create() except +TA_raise_py_error
- @staticmethod
- TVector[pair[int, TString]] FetchMessages(TPyLoggerPtr ptr) except +TA_raise_py_error
-
-
-cdef extern from "library/python/tvmauth/src/utils.h" namespace "NTvmAuthPy" nogil:
- cdef cppclass TPidCheckedClient:
- TClientStatus GetStatus() except +TA_raise_py_error
- TStringBuf GetStatusString() except +TA_raise_py_error
- TInstant GetUpdateTimeOfPublicKeys() except +TA_raise_py_error
- TInstant GetUpdateTimeOfServiceTickets() except +TA_raise_py_error
- TString GetServiceTicketFor(const TString& dst) except +TA_raise_py_error
- TCheckedServiceTicket CheckServiceTicket(TStringBuf ticket) except +TA_raise_py_error
- TCheckedUserTicket CheckUserTicket(TStringBuf ticket) except +TA_raise_py_error
- TCheckedUserTicket CheckUserTicketWithOveridedEnv(TStringBuf ticket, EBlackboxEnv env) except +TA_raise_py_error
- cshared_ptr[TRoles] GetRoles() except +TA_raise_py_error
-
- cdef T&& Move[T](T&)
- cdef THolder[T] ToHeap[T](T&)
-
- @staticmethod
- cdef THolder[TServiceContext] CheckingFactory(int tvmId, TStringBuf tvmKeysResponse) except +TA_raise_py_error
- @staticmethod
- cdef THolder[TServiceContext] SigningFactory(TStringBuf secretBase64) except +TA_raise_py_error
-
- cdef TString GetServiceTicketForId(const TPidCheckedClient&, TTvmId) except +TA_raise_py_error
- cdef TPidCheckedClient* CreateTvmApiClient(TClientSettings& settings, TPyLogger.TPyLoggerPtr) except +TA_raise_py_error
- cdef TPidCheckedClient* CreateTvmToolClient(const TTvmToolClientSettings&, TPyLogger.TPyLoggerPtr) except +TA_raise_py_error
- cdef TString GetPyVersion() except +TA_raise_py_error
-
- cdef cppclass TTvmToolClientSettings:
- TTvmToolClientSettings(TString) except +TA_raise_py_error
- TTvmToolClientSettings& SetPort(int)
- TTvmToolClientSettings& SetHostname(const TString&) except +TA_raise_py_error
- TTvmToolClientSettings& SetAuthToken(const TString&) except +TA_raise_py_error
- TTvmToolClientSettings& OverrideBlackboxEnv(EBlackboxEnv env) except +TA_raise_py_error
-
- bool_t ShouldCheckSrc
- bool_t ShouldCheckDefaultUid
-
-__version__ = GetPyVersion().decode('utf-8')
-
-cdef class __ServiceContext:
- cdef THolder[TServiceContext] baseptr
- def __init__(self, tvm_id, secret, tvm_keys):
- pass
-
- def __cinit__(self, tvm_id, secret, tvm_keys):
- if tvm_keys is None and secret is None:
- raise __ContextException("secret and tvm_keys both can't be None")
- if secret is None:
- self.baseptr = Move(CheckingFactory(<int>tvm_id, <TString>tvm_keys.encode('utf-8')))
- elif tvm_keys is None:
- self.baseptr = Move(SigningFactory(<TString>secret.encode('utf-8')))
- else:
- self.baseptr.Reset(new TServiceContext(<TString>secret.encode('utf-8'), <int>tvm_id, <TString>tvm_keys.encode('utf-8')))
-
- cdef __sign(self, TString timestamp, TString dst, TString scopes):
- return self.baseptr.Get().SignCgiParamsForTvm(timestamp, dst, scopes).decode('utf-8')
-
- @staticmethod
- cdef __check(TCheckedServiceTicket ticket):
- tick = __CheckedServiceTicket()
- tick.baseptr = ToHeap(ticket)
- raw_status = tick.baseptr.Get().GetStatus()
- status = __TicketStatus(<int>raw_status)
- if status != __TicketStatus.Ok:
- raise __TicketParsingException(StatusToString(raw_status).decode('utf-8'), status, tick.debug_info())
- return tick
-
- def check(self, ticket_body):
- return __ServiceContext.__check(Move(self.baseptr.Get().Check(<TString>ticket_body.encode('utf-8'))))
-
- def sign(self, timestamp, dst, scopes=None):
- if isinstance(timestamp, int):
- timestamp = str(timestamp)
- if isinstance(dst, list):
- dst = ','.join(map(lambda x: x if isinstance(x, str) else str(x), dst))
- elif isinstance(dst, int):
- dst = str(dst)
- if isinstance(scopes, list):
- scopes = ','.join(map(lambda x: x if isinstance(x, str) else str(x), scopes))
- elif scopes is None:
- scopes = ''
- return self.__sign(timestamp.encode('utf-8'), dst.encode('utf-8'), scopes.encode('utf-8'))
-
-cdef class __CheckedServiceTicket:
- cdef THolder[TCheckedServiceTicket] baseptr
-
- def __nonzero__(self):
- return <bool_t>(self.baseptr.Get())
-
- def debug_info(self):
- return self.baseptr.Get().DebugInfo().decode('utf8')
-
- @property
- def src(self):
- return self.baseptr.Get().GetSrc()
-
- @property
- def issuer_uid(self):
- u = self.baseptr.Get().GetIssuerUid()
-
- if u.Defined():
- return u.GetRef()
-
-
-def __create_service_ticket_for_unittest(status, int src, issuer_uid=None):
- cdef TMaybe[TUid] uid
- if issuer_uid is not None:
- uid = <int>issuer_uid
- return __ServiceContext.__check(Move(CreateServiceTicket(
- <EStatus><int>status, src, uid)))
-
-
-cdef class __UserContext:
- cdef THolder[TUserContext] baseptr
- def __init__(self, env, tvm_keys):
- pass
-
- def __cinit__(self, int env, tvm_keys):
- self.baseptr.Reset(new TUserContext(<EBlackboxEnv>env, <TString>tvm_keys.encode('utf-8')))
-
- @staticmethod
- cdef __check(TCheckedUserTicket ticket):
- tick = __CheckedUserTicket()
- tick.baseptr = ToHeap(ticket)
- raw_status = tick.baseptr.Get().GetStatus()
- status = __TicketStatus(<int>raw_status)
- if status != __TicketStatus.Ok:
- raise __TicketParsingException(StatusToString(raw_status).decode('utf-8'), status, tick.debug_info())
- return tick
-
- def check(self, ticket_body):
- return __UserContext.__check(Move(self.baseptr.Get().Check(<TString>ticket_body.encode('utf-8'))))
-
-cdef class __CheckedUserTicket:
- cdef THolder[TCheckedUserTicket] baseptr
-
- def debug_info(self):
- return self.baseptr.Get().DebugInfo().decode('utf8')
-
- @property
- def default_uid(self):
- return self.baseptr.Get().GetDefaultUid()
-
- def has_scope(self, scope_name):
- return self.baseptr.Get().HasScope(<TString>scope_name.encode('utf-8'))
-
- @property
- def scopes(self):
- rlist = []
- scopes = self.baseptr.Get().GetScopes()
- for i in range(scopes.size()):
- rlist.append(scopes[i].decode('utf-8'))
- return rlist
-
- @property
- def uids(self):
- rlist = []
- uids = self.baseptr.Get().GetUids()
- for i in range(uids.size()):
- rlist.append(uids[i])
- return rlist
-
- def __nonzero__(self):
- return <bool_t>(self.baseptr.Get())
-
-
-def __create_user_ticket_for_unittest(status, int default_uid, scopes, uids, env):
- cdef TScopes sc
- cdef TVector[TString] sc_tmp
- cdef TUids ui
-
- for v in scopes:
- sc_tmp.push_back(v.encode('utf-8'))
- sc.push_back(sc_tmp.back())
- for v in uids:
- ui.push_back(<int>v)
-
- return __UserContext.__check(Move(CreateUserTicket(
- <EStatus><int>status, default_uid, sc, ui, <EBlackboxEnv><int>env)))
-
-
-def __remove_ticket_signature(ticket_body):
- return RemoveTicketSignature(<TString>ticket_body.encode('utf-8')).decode('utf-8')
-
-
-cdef class __TvmApiClientSettings:
- cdef TClientSettings* baseptr
-
- def __init__(self, *args, **kwargs):
- pass
-
- def __cinit__(self,
- self_tvm_id=None,
- enable_service_ticket_checking=False,
- enable_user_ticket_checking=None,
- self_secret=None,
- dsts=None,
- disk_cache_dir=None,
- localhost_port=None,
- tvmapi_url=None,
- tirole_host=None,
- tirole_port=None,
- tirole_tvmid=None,
- fetch_roles_for_idm_system_slug=None,
- check_src_by_default=True,
- check_default_uid_by_default=True,
- ):
- self.baseptr = new TClientSettings()
-
- if self_tvm_id:
- self.baseptr.SelfTvmId = <int>self_tvm_id
-
- if enable_service_ticket_checking:
- self.baseptr.CheckServiceTickets = True
-
- if enable_user_ticket_checking is not None: # check for None because enum has valid value == 0
- self.baseptr.CheckUserTicketsWithBbEnv = <EBlackboxEnv><int>enable_user_ticket_checking
-
- if not check_src_by_default:
- self.baseptr.ShouldCheckSrc = False
-
- if not check_default_uid_by_default:
- self.baseptr.ShouldCheckDefaultUid = False
-
- if self_secret:
- self.baseptr.Secret = <TString>self_secret.encode('utf-8')
-
- if isinstance(dsts, dict):
- for k, v in dsts.items():
- self.baseptr.FetchServiceTicketsForDstsWithAliases.insert(pair[TString, TClientSettings.TDst](k.encode('utf-8'), TClientSettings.TDst(<int>v)))
- elif isinstance(dsts, list):
- for v in dsts:
- self.baseptr.FetchServiceTicketsForDsts.push_back(TClientSettings.TDst(<int>v))
- elif dsts is not None:
- raise __TvmException("dsts must be dict or list or None")
-
- if disk_cache_dir is not None:
- self.baseptr.DiskCacheDir = <TString>disk_cache_dir.encode('utf-8')
-
- if localhost_port and tvmapi_url:
- raise __BrokenTvmClientSettings('localhost_port and tvmapi_url are both provided')
-
- if localhost_port is not None:
- self.baseptr.TvmHost = <TString>'localhost'.encode('utf-8')
- self.baseptr.TvmPort = <int>localhost_port
- if tvmapi_url:
- # TODO: set tvm-api url in C++ settings
- url = urllib3.util.parse_url(tvmapi_url)
- if not url.scheme:
- raise __BrokenTvmClientSettings('scheme in tvmapi_url cannot be empty: "%s"' % tvmapi_url)
- port = url.port or 443
- host = '{scheme}://{hostname}'.format(scheme=url.scheme, hostname=url.hostname)
- self.baseptr.TvmHost = <TString>host.encode('utf-8')
- self.baseptr.TvmPort = <int>port
-
- if fetch_roles_for_idm_system_slug is not None:
- self.baseptr.FetchRolesForIdmSystemSlug = <TString>fetch_roles_for_idm_system_slug.encode('utf-8')
-
- if tirole_tvmid:
- self.baseptr.TiroleTvmId = <int>tirole_tvmid
- if tirole_host:
- self.baseptr.TiroleHost = <TString>tirole_host.encode('utf-8')
- if tirole_port:
- self.baseptr.TirolePort = <int>tirole_port
-
- self.baseptr.CheckValid()
-
-
- def __dealloc__(self):
- del self.baseptr
-
-
-cdef class __TvmToolClientSettings:
- cdef TTvmToolClientSettings* baseptr
-
- def __init__(self, *args, **kwargs):
- pass
-
- def __cinit__(self,
- self_alias,
- auth_token=None,
- port=None,
- hostname="localhost",
- override_bb_env=None,
- check_src_by_default=True,
- check_default_uid_by_default=True,
- ):
- self.baseptr = new TTvmToolClientSettings(<TString>self_alias.encode('utf-8'))
-
- if auth_token is not None:
- self.baseptr.SetAuthToken(<TString>auth_token.encode('utf-8'))
-
- if port is not None:
- self.baseptr.SetPort(<int>port)
-
- if hostname is not None:
- self.baseptr.SetHostname(<TString>hostname.encode('utf-8'))
-
- if override_bb_env is not None:
- self.baseptr.OverrideBlackboxEnv(<EBlackboxEnv><int>override_bb_env)
-
- if not check_src_by_default:
- self.baseptr.ShouldCheckSrc = False
-
- if not check_default_uid_by_default:
- self.baseptr.ShouldCheckDefaultUid = False
-
- def __dealloc__(self):
- del self.baseptr
-
-
-cdef class __Roles:
- cdef cshared_ptr[TRoles] baseptr
-
- def __init__(self, *args, **kwargs):
- pass
-
- def __cinit__(self):
- pass
-
- @property
- def meta(self):
- cdef TRoles.TMeta m = dereference(self.baseptr).GetMeta()
- return m.Revision.decode('utf-8'), m.BornTime.Seconds(), m.Applied.Seconds()
-
- @property
- def raw(self):
- cdef TString r = dereference(self.baseptr).GetRaw()
- return r.decode('utf-8')
-
- def get_service_roles(self, ticket):
- assert isinstance(ticket, __CheckedServiceTicket)
-
- return self._build_roles(dereference(self.baseptr).GetRolesForService(
- dereference((<__CheckedServiceTicket> ticket).baseptr.Get()),
- ))
-
- def get_user_roles(self, ticket, selected_uid):
- assert isinstance(ticket, __CheckedUserTicket)
-
- cdef TOptUid selectedUid
- if selected_uid is not None:
- selectedUid = TOptUid(<TUid>selected_uid)
-
- return self._build_roles(dereference(self.baseptr).GetRolesForUser(
- dereference((<__CheckedUserTicket>ticket).baseptr.Get()),
- selectedUid,
- ))
-
- cdef _build_roles(self, cshared_ptr[TConsumerRoles] roles):
- if roles == NULL:
- return {}
-
- return {
- pair.first.decode('utf-8'): [
- {
- k.decode("utf-8"): v.decode("utf-8")
- for k, v in dereference(entity)
- }
- for entity in dereference(pair.second).GetEntitiesWithAttrs(self._build_entity({}))
- ]
- for pair in dereference(roles).GetRoles()
- }
-
- def check_service_role(self, ticket, role, exact_entity):
- assert isinstance(ticket, __CheckedServiceTicket)
-
- if exact_entity is not None:
- return dereference(self.baseptr).CheckServiceRoleForExactEntity(
- dereference((<__CheckedServiceTicket>ticket).baseptr.Get()),
- <TString>role.encode('utf-8'),
- self._build_entity(exact_entity),
- )
- else:
- return dereference(self.baseptr).CheckServiceRole(
- dereference((<__CheckedServiceTicket>ticket).baseptr.Get()),
- <TString>role.encode('utf-8'),
- )
-
- def check_user_role(self, ticket, role, selected_uid, exact_entity):
- assert isinstance(ticket, __CheckedUserTicket)
-
- cdef TOptUid selectedUid
- if selected_uid is not None:
- selectedUid = TOptUid(<TUid>selected_uid)
-
- if exact_entity is not None:
- return dereference(self.baseptr).CheckUserRoleForExactEntity(
- dereference((<__CheckedUserTicket>ticket).baseptr.Get()),
- <TString>role.encode('utf-8'),
- self._build_entity(exact_entity),
- selectedUid,
- )
- else:
- return dereference(self.baseptr).CheckUserRole(
- dereference((<__CheckedUserTicket>ticket).baseptr.Get()),
- <TString>role.encode('utf-8'),
- selectedUid,
- )
-
- cdef TEntity _build_entity(self, exact_entity) except *:
- cdef TEntity ent
- for k, v in exact_entity.items():
- ent.insert(pair[TString, TString](k.encode('utf-8'), v.encode('utf-8')))
- return ent
-
-
-cdef class __Logger:
- cdef TPyLogger.TPyLoggerPtr baseptr
-
- def __init__(self, *args, **kwargs):
- pass
-
- def __cinit__(self):
- self.baseptr = TPyLogger.Create()
-
- def fetch(self):
- cdef TVector[pair[int, TString]] msg = TPyLogger.FetchMessages(self.baseptr)
- return [(p.first, p.second.decode("utf-8")) for p in msg]
-
-
-cdef class __TvmClient:
- cdef TPidCheckedClient* baseptr
-
- def __init__(self, *args, **kwargs):
- pass
-
- def __cinit__(self, settings, logger):
- if isinstance(settings, __TvmToolClientSettings):
- self.baseptr = CreateTvmToolClient( \
- dereference((<__TvmToolClientSettings>settings).baseptr),\
- (<__Logger>logger).baseptr)
- else:
- self.baseptr = CreateTvmApiClient( \
- dereference((<__TvmApiClientSettings>settings).baseptr),\
- (<__Logger>logger).baseptr)
-
- def stop(self):
- del self.baseptr
- self.baseptr = NULL
-
- def __dealloc__(self):
- self.stop()
-
- @property
- def status(self):
- self.__check()
- cdef TClientStatus s = self.baseptr.GetStatus()
- return <int>s.GetCode(), s.GetLastError().decode('utf-8')
-
- def get_service_ticket_for(self, alias=None, tvm_id=None):
- self.__check()
- if alias is not None:
- return self.baseptr.GetServiceTicketFor(<TString>alias.encode('utf-8')).decode('utf-8')
- if tvm_id is not None:
- return GetServiceTicketForId(dereference(self.baseptr), int(tvm_id)).decode('utf-8')
- raise __TvmException("One of args is required: 'alias' or 'tvm_id'")
-
- def check_service_ticket(self, ticket):
- self.__check()
- return __ServiceContext.__check(Move(
- self.baseptr.CheckServiceTicket(<TString>ticket.encode('utf-8'))))
-
- def check_user_ticket(self, ticket, overrided_bb_env=None):
- self.__check()
- if overrided_bb_env is None:
- return __UserContext.__check(Move(
- self.baseptr.CheckUserTicket(<TString>ticket.encode('utf-8'))))
- else:
- return __UserContext.__check(Move(
- self.baseptr.CheckUserTicketWithOveridedEnv(<TString>ticket.encode('utf-8'), <EBlackboxEnv><int>overrided_bb_env)))
-
- def get_roles(self):
- self.__check()
- res = __Roles()
- res.baseptr = self.baseptr.GetRoles()
- return res
-
- def __check(self):
- if NULL == self.baseptr:
- raise __NonRetriableException("TvmClient is already stopped")
-
-TA_InitThreads()
diff --git a/library/python/tvmauth/tvmauth/unittest.py b/library/python/tvmauth/tvmauth/unittest.py
deleted file mode 100644
index 7120667764..0000000000
--- a/library/python/tvmauth/tvmauth/unittest.py
+++ /dev/null
@@ -1,50 +0,0 @@
-from tvmauth import (
- BlackboxEnv,
- CheckedServiceTicket,
- CheckedUserTicket,
-)
-from tvmauth.tvmauth_pymodule import ( # noqa
- __create_service_ticket_for_unittest,
- __create_user_ticket_for_unittest,
-)
-
-
-TVMKNIFE_PUBLIC_KEYS = (
- "1:CpgCCpMCCAEQABqIAjCCAQQCggEAcLEXeH67FQESFUn4_7wnX7wN0PUrBoUsm3QQ4W5vC-qz6sXaEjSwnTV8w1o-z6X9KPL"
- "lhzMQvuS38NCNfK4uvJ4Zvfp3YsXJ25-rYtbnrYJHNvHohD-kPCCw_yZpMp21JdWigzQGuV7CtrxUhF-NNrsnUaJrE5-OpEWN"
- "t4X6nCItKIYeVcSK6XJUbEWbrNCRbvkSc4ak2ymFeMuHYJVjxh4eQbk7_ZPzodP0WvF6eUYrYeb42imVEOR8ofVLQWE5DVnb1"
- "z_TqZm4i1XkS7jMwZuBxBRw8DGdYei0lT_sAf7KST2jC0590NySB3vsBgWEVs1OdUUWA6r-Dvx9dsOQtSCVkQYQAAqZAgqUAg"
- "gCEAAaiQIwggEFAoIBAQDhEBM5-6YsPWfogKtbluJoCX1WV2KdzOaQ0-OlRbBzeCzw-eQKu12c8WakHBbeCMd1I1TU64SDkDo"
- "rWjXGIa_2xT6N3zzNAE50roTbPCcmeQrps26woTYfYIuqDdoxYKZNr0lvNLLW47vBr7EKqo1S4KSj7aXK_XYeEvUgIgf3nVIc"
- "Nrio7VTnFmGGVQCepaL1Hi1gN4yIXjVZ06PBPZ-DxSRu6xOGbFrfKMJeMPs7KOyE-26Q3xOXdTIa1X-zYIucTd_bxUCL4BVbw"
- "W2AvbbFsaG7ISmVdGu0XUTmhXs1KrEfUVLRJhE4Dx99hAZXm1_HlYMUeJcMQ_oHOhV94ENFIJaRBhACCpYBCpEBCAMQABqGAT"
- "CBgwKBgF9t2YJGAJkRRFq6fWhi3m1TFW1UOE0f6ZrfYhHAkpqGlKlh0QVfeTNPpeJhi75xXzCe6oReRUm-0DbqDNhTShC7uGU"
- "v1INYnRBQWH6E-5Fc5XrbDFSuGQw2EYjNfHy_HefHJXxQKAqPvxBDKMKkHgV58WtM6rC8jRi9sdX_ig2NIJeRBhABCpYBCpEB"
- "CAQQABqGATCBgwKBgGB4d6eLGUBv-Q6EPLehC4S-yuE2HB-_rJ7WkeYwyp-xIPolPrd-PQme2utHB4ZgpXHIu_OFksDe_0bPg"
- "ZniNRSVRbl7W49DgS5Ya3kMfrYB4DnF5Fta5tn1oV6EwxYD4JONpFTenOJALPGTPawxXEfon_peiHOSBuQMu3_Vn-l1IJiRBh"
- "ADCpcBCpIBCAUQABqHATCBhAKBgQCTJMKIfmfeZpaI7Q9rnsc29gdWawK7TnpVKRHws1iY7EUlYROeVcMdAwEqVM6f8BVCKLG"
- "gzQ7Gar_uuxfUGKwqEQzoppDraw4F75J464-7D5f6_oJQuGIBHZxqbMONtLjBCXRUhQW5szBLmTQ_R3qaJb5vf-h0APZfkYhq"
- "1cTttSCZkQYQBAqWAQqRAQgLEAAahgEwgYMCgYBvvGVH_M2H8qxxv94yaDYUTWbRnJ1uiIYc59KIQlfFimMPhSS7x2tqUa2-h"
- "I55JiII0Xym6GNkwLhyc1xtWChpVuIdSnbvttbrt4weDMLHqTwNOF6qAsVKGKT1Yh8yf-qb-DSmicgvFc74mBQm_6gAY1iQsf"
- "33YX8578ClhKBWHSCVkQYQAAqXAQqSAQgMEAAahwEwgYQCgYEAkuzFcd5TJu7lYWYe2hQLFfUWIIj91BvQQLa_Thln4YtGCO8"
- "gG1KJqJm-YlmJOWQG0B7H_5RVhxUxV9KpmFnsDVkzUFKOsCBaYGXc12xPVioawUlAwp5qp3QQtZyx_se97YIoLzuLr46UkLcL"
- "nkIrp-Jo46QzYi_QHq45WTm8MQ0glpEGEAIKlwEKkgEIDRAAGocBMIGEAoGBAIUzbxOknXf_rNt17_ir8JlWvrtnCWsQd1MAn"
- "l5mgArvavDtKeBYHzi5_Ak7DHlLzuA6YE8W175FxLFKpN2hkz-l-M7ltUSd8N1BvJRhK4t6WffWfC_1wPyoAbeSN2Yb1jygtZ"
- "JQ8wGoXHcJQUXiMit3eFNyylwsJFj1gzAR4JCdIJeRBhABCpYBCpEBCA4QABqGATCBgwKBgFMcbEpl9ukVR6AO_R6sMyiU11I"
- "8b8MBSUCEC15iKsrVO8v_m47_TRRjWPYtQ9eZ7o1ocNJHaGUU7qqInFqtFaVnIceP6NmCsXhjs3MLrWPS8IRAy4Zf4FKmGOx3"
- "N9O2vemjUygZ9vUiSkULdVrecinRaT8JQ5RG4bUMY04XGIwFIJiRBhADCpYBCpEBCA8QABqGATCBgwKBgGpCkW-NR3li8GlRv"
- "qpq2YZGSIgm_PTyDI2Zwfw69grsBmPpVFW48Vw7xoMN35zcrojEpialB_uQzlpLYOvsMl634CRIuj-n1QE3-gaZTTTE8mg-AR"
- "4mcxnTKThPnRQpbuOlYAnriwiasWiQEMbGjq_HmWioYYxFo9USlklQn4-9IJmRBhAEEpUBCpIBCAYQABqHATCBhAKBgQCoZkF"
- "Gm9oLTqjeXZAq6j5S6i7K20V0lNdBBLqfmFBIRuTkYxhs4vUYnWjZrKRAd5bp6_py0csmFmpl_5Yh0b-2pdo_E5PNP7LGRzKy"
- "KSiFddyykKKzVOazH8YYldDAfE8Z5HoS9e48an5JsPg0jr-TPu34DnJq3yv2a6dqiKL9zSCakQYSlQEKkgEIEBAAGocBMIGEA"
- "oGBALhrihbf3EpjDQS2sCQHazoFgN0nBbE9eesnnFTfzQELXb2gnJU9enmV_aDqaHKjgtLIPpCgn40lHrn5k6mvH5OdedyI6c"
- "CzE-N-GFp3nAq0NDJyMe0fhtIRD__CbT0ulcvkeow65ubXWfw6dBC2gR_34rdMe_L_TGRLMWjDULbNIJqRBg"
-)
-
-
-def create_service_ticket_for_unittest(status, src, issuer_uid=None):
- return CheckedServiceTicket(__create_service_ticket_for_unittest(status, src, issuer_uid))
-
-
-def create_user_ticket_for_unittest(status, default_uid, scopes=[], uids=[], env=BlackboxEnv.Test):
- return CheckedUserTicket(__create_user_ticket_for_unittest(status, default_uid, scopes, uids, env))
diff --git a/library/python/tvmauth/tvmauth/utils.py b/library/python/tvmauth/tvmauth/utils.py
deleted file mode 100644
index d35a41cd9d..0000000000
--- a/library/python/tvmauth/tvmauth/utils.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from tvmauth.tvmauth_pymodule import __remove_ticket_signature
-
-
-def remove_ticket_signature(ticket_body):
- """
- :param ticket_body: Full ticket body
- :return: Safe for logging part of ticket - it can be parsed later with `tvmknife parse_ticket ...`
- """
- return __remove_ticket_signature(ticket_body)